jvmind-ce 0.1.6__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 (216) hide show
  1. jvmind_ce-0.1.6/LICENSE +21 -0
  2. jvmind_ce-0.1.6/MANIFEST.in +34 -0
  3. jvmind_ce-0.1.6/PKG-INFO +274 -0
  4. jvmind_ce-0.1.6/README.md +226 -0
  5. jvmind_ce-0.1.6/README.zh-CN.md +228 -0
  6. jvmind_ce-0.1.6/app/__init__.py +0 -0
  7. jvmind_ce-0.1.6/app/cli.py +24 -0
  8. jvmind_ce-0.1.6/app/core/__init__.py +0 -0
  9. jvmind_ce-0.1.6/app/core/helpers.py +466 -0
  10. jvmind_ce-0.1.6/app/core/state.py +95 -0
  11. jvmind_ce-0.1.6/app/frontend/dist/assets/jstack-analysis-BMBYvcHf.js +668 -0
  12. jvmind_ce-0.1.6/app/frontend/dist/assets/main-BUxMFiy_.js +52 -0
  13. jvmind_ce-0.1.6/app/frontend/dist/assets/report-Cdm0x36f.js +1 -0
  14. jvmind_ce-0.1.6/app/frontend/dist/image/chat_window.png +0 -0
  15. jvmind_ce-0.1.6/app/frontend/dist/image/favicon-96x96.png +0 -0
  16. jvmind_ce-0.1.6/app/frontend/dist/image/favicon.ico +0 -0
  17. jvmind_ce-0.1.6/app/frontend/dist/image/gc_report.png +0 -0
  18. jvmind_ce-0.1.6/app/frontend/dist/image/jstack_report.png +0 -0
  19. jvmind_ce-0.1.6/app/frontend/dist/image/jvmind.png +0 -0
  20. jvmind_ce-0.1.6/app/frontend/dist/image/llm_config.png +0 -0
  21. jvmind_ce-0.1.6/app/frontend/dist/index.html +512 -0
  22. jvmind_ce-0.1.6/app/frontend/dist/lib/dompurify.min.js +3 -0
  23. jvmind_ce-0.1.6/app/frontend/dist/lib/echarts.min.js +45 -0
  24. jvmind_ce-0.1.6/app/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-bold.woff2 +0 -0
  25. jvmind_ce-0.1.6/app/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-regular.woff2 +0 -0
  26. jvmind_ce-0.1.6/app/frontend/dist/lib/marked.min.js +69 -0
  27. jvmind_ce-0.1.6/app/frontend/dist/report.html +52 -0
  28. jvmind_ce-0.1.6/app/frontend/dist/robots.txt +4 -0
  29. jvmind_ce-0.1.6/app/frontend/dist/sitemap.xml +39 -0
  30. jvmind_ce-0.1.6/app/frontend/dist/src/css/base.css +149 -0
  31. jvmind_ce-0.1.6/app/frontend/dist/src/css/flamegraph.css +53 -0
  32. jvmind_ce-0.1.6/app/frontend/dist/src/css/gc-panel.css +906 -0
  33. jvmind_ce-0.1.6/app/frontend/dist/src/css/heapdump.css +465 -0
  34. jvmind_ce-0.1.6/app/frontend/dist/src/css/input.css +146 -0
  35. jvmind_ce-0.1.6/app/frontend/dist/src/css/messages.css +390 -0
  36. jvmind_ce-0.1.6/app/frontend/dist/src/css/modals.css +245 -0
  37. jvmind_ce-0.1.6/app/frontend/dist/src/css/reports.css +296 -0
  38. jvmind_ce-0.1.6/app/frontend/dist/src/css/sidebar.css +236 -0
  39. jvmind_ce-0.1.6/app/frontend/dist/src/css/topbar.css +81 -0
  40. jvmind_ce-0.1.6/app/frontend/dist/src/style.css +10 -0
  41. jvmind_ce-0.1.6/app/frontend.py +85 -0
  42. jvmind_ce-0.1.6/app/routes/__init__.py +0 -0
  43. jvmind_ce-0.1.6/app/routes/auth.py +35 -0
  44. jvmind_ce-0.1.6/app/routes/chat.py +246 -0
  45. jvmind_ce-0.1.6/app/routes/config.py +131 -0
  46. jvmind_ce-0.1.6/app/routes/feedback.py +162 -0
  47. jvmind_ce-0.1.6/app/routes/gc_reports.py +209 -0
  48. jvmind_ce-0.1.6/app/routes/health.py +19 -0
  49. jvmind_ce-0.1.6/app/routes/heapdump_proxy.py +643 -0
  50. jvmind_ce-0.1.6/app/routes/heapdump_reports.py +256 -0
  51. jvmind_ce-0.1.6/app/routes/heapdump_upload.py +324 -0
  52. jvmind_ce-0.1.6/app/routes/jstack_reports.py +169 -0
  53. jvmind_ce-0.1.6/app/routes/plans.py +28 -0
  54. jvmind_ce-0.1.6/app/routes/sessions.py +133 -0
  55. jvmind_ce-0.1.6/app/routes/settings.py +51 -0
  56. jvmind_ce-0.1.6/app/routes/skills.py +131 -0
  57. jvmind_ce-0.1.6/app/schemas.py +64 -0
  58. jvmind_ce-0.1.6/app/services/__init__.py +0 -0
  59. jvmind_ce-0.1.6/app/services/analysis_prompts.py +245 -0
  60. jvmind_ce-0.1.6/app/services/audit.py +84 -0
  61. jvmind_ce-0.1.6/frontend/dist/assets/jstack-analysis-BMBYvcHf.js +668 -0
  62. jvmind_ce-0.1.6/frontend/dist/assets/main-BUxMFiy_.js +52 -0
  63. jvmind_ce-0.1.6/frontend/dist/assets/report-Cdm0x36f.js +1 -0
  64. jvmind_ce-0.1.6/frontend/dist/image/chat_window.png +0 -0
  65. jvmind_ce-0.1.6/frontend/dist/image/favicon-96x96.png +0 -0
  66. jvmind_ce-0.1.6/frontend/dist/image/favicon.ico +0 -0
  67. jvmind_ce-0.1.6/frontend/dist/image/gc_report.png +0 -0
  68. jvmind_ce-0.1.6/frontend/dist/image/jstack_report.png +0 -0
  69. jvmind_ce-0.1.6/frontend/dist/image/jvmind.png +0 -0
  70. jvmind_ce-0.1.6/frontend/dist/image/llm_config.png +0 -0
  71. jvmind_ce-0.1.6/frontend/dist/index.html +512 -0
  72. jvmind_ce-0.1.6/frontend/dist/lib/dompurify.min.js +3 -0
  73. jvmind_ce-0.1.6/frontend/dist/lib/echarts.min.js +45 -0
  74. jvmind_ce-0.1.6/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-bold.woff2 +0 -0
  75. jvmind_ce-0.1.6/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-regular.woff2 +0 -0
  76. jvmind_ce-0.1.6/frontend/dist/lib/marked.min.js +69 -0
  77. jvmind_ce-0.1.6/frontend/dist/report.html +52 -0
  78. jvmind_ce-0.1.6/frontend/dist/robots.txt +4 -0
  79. jvmind_ce-0.1.6/frontend/dist/sitemap.xml +39 -0
  80. jvmind_ce-0.1.6/frontend/i18n/en.json +968 -0
  81. jvmind_ce-0.1.6/frontend/i18n/zh.json +963 -0
  82. jvmind_ce-0.1.6/frontend/index.html +511 -0
  83. jvmind_ce-0.1.6/frontend/report.html +51 -0
  84. jvmind_ce-0.1.6/frontend/src/api.js +29 -0
  85. jvmind_ce-0.1.6/frontend/src/api.test.js +61 -0
  86. jvmind_ce-0.1.6/frontend/src/app.js +103 -0
  87. jvmind_ce-0.1.6/frontend/src/blog.js +259 -0
  88. jvmind_ce-0.1.6/frontend/src/charts.js +615 -0
  89. jvmind_ce-0.1.6/frontend/src/charts.test.js +160 -0
  90. jvmind_ce-0.1.6/frontend/src/config-dialog.js +124 -0
  91. jvmind_ce-0.1.6/frontend/src/config-dialog.test.js +99 -0
  92. jvmind_ce-0.1.6/frontend/src/css/base.css +149 -0
  93. jvmind_ce-0.1.6/frontend/src/css/flamegraph.css +53 -0
  94. jvmind_ce-0.1.6/frontend/src/css/gc-panel.css +906 -0
  95. jvmind_ce-0.1.6/frontend/src/css/heapdump.css +465 -0
  96. jvmind_ce-0.1.6/frontend/src/css/input.css +146 -0
  97. jvmind_ce-0.1.6/frontend/src/css/messages.css +390 -0
  98. jvmind_ce-0.1.6/frontend/src/css/modals.css +245 -0
  99. jvmind_ce-0.1.6/frontend/src/css/reports.css +296 -0
  100. jvmind_ce-0.1.6/frontend/src/css/sidebar.css +236 -0
  101. jvmind_ce-0.1.6/frontend/src/css/topbar.css +81 -0
  102. jvmind_ce-0.1.6/frontend/src/feedback-widget.js +95 -0
  103. jvmind_ce-0.1.6/frontend/src/feedback-widget.test.js +108 -0
  104. jvmind_ce-0.1.6/frontend/src/gc-analysis/bindings.js +251 -0
  105. jvmind_ce-0.1.6/frontend/src/gc-analysis/context.js +153 -0
  106. jvmind_ce-0.1.6/frontend/src/gc-analysis/history.js +262 -0
  107. jvmind_ce-0.1.6/frontend/src/gc-analysis/index.js +93 -0
  108. jvmind_ce-0.1.6/frontend/src/gc-analysis/panel.js +14 -0
  109. jvmind_ce-0.1.6/frontend/src/gc-analysis/render.js +442 -0
  110. jvmind_ce-0.1.6/frontend/src/gc-analysis/sidebar.js +134 -0
  111. jvmind_ce-0.1.6/frontend/src/gc-analysis/tabs.js +193 -0
  112. jvmind_ce-0.1.6/frontend/src/gc-analysis/upload.js +85 -0
  113. jvmind_ce-0.1.6/frontend/src/gc-analysis.js +4 -0
  114. jvmind_ce-0.1.6/frontend/src/gc-analysis.test.js +141 -0
  115. jvmind_ce-0.1.6/frontend/src/heapdump-analysis/heapdump.js +1533 -0
  116. jvmind_ce-0.1.6/frontend/src/heapdump-analysis/index.js +11 -0
  117. jvmind_ce-0.1.6/frontend/src/heapdump-analysis/task-poller.js +111 -0
  118. jvmind_ce-0.1.6/frontend/src/heapdump-analysis/task-poller.test.js +142 -0
  119. jvmind_ce-0.1.6/frontend/src/icons.js +50 -0
  120. jvmind_ce-0.1.6/frontend/src/jstack-analysis.js +836 -0
  121. jvmind_ce-0.1.6/frontend/src/jstack-diagnosis.test.js +80 -0
  122. jvmind_ce-0.1.6/frontend/src/main.js +322 -0
  123. jvmind_ce-0.1.6/frontend/src/main.test.js +367 -0
  124. jvmind_ce-0.1.6/frontend/src/markdown.js +59 -0
  125. jvmind_ce-0.1.6/frontend/src/markdown.test.js +110 -0
  126. jvmind_ce-0.1.6/frontend/src/marketing-v2.css +771 -0
  127. jvmind_ce-0.1.6/frontend/src/marketing.css +253 -0
  128. jvmind_ce-0.1.6/frontend/src/messages.js +786 -0
  129. jvmind_ce-0.1.6/frontend/src/messages.test.js +332 -0
  130. jvmind_ce-0.1.6/frontend/src/report-tabs.test.js +171 -0
  131. jvmind_ce-0.1.6/frontend/src/report.js +83 -0
  132. jvmind_ce-0.1.6/frontend/src/security.test.js +148 -0
  133. jvmind_ce-0.1.6/frontend/src/sessions.js +425 -0
  134. jvmind_ce-0.1.6/frontend/src/shared.js +376 -0
  135. jvmind_ce-0.1.6/frontend/src/shared.test.js +927 -0
  136. jvmind_ce-0.1.6/frontend/src/state.js +26 -0
  137. jvmind_ce-0.1.6/frontend/src/style.css +10 -0
  138. jvmind_ce-0.1.6/frontend/src/test/gc-attach.test.js +168 -0
  139. jvmind_ce-0.1.6/frontend/src/test/gc-sidebar-batch.test.js +228 -0
  140. jvmind_ce-0.1.6/frontend/src/test/heapdump-attach.test.js +120 -0
  141. jvmind_ce-0.1.6/frontend/src/test/heapdump-history-click.test.js +151 -0
  142. jvmind_ce-0.1.6/frontend/src/test/heapdump-sidebar-batch.test.js +467 -0
  143. jvmind_ce-0.1.6/frontend/src/test/heapdump-sidebar.test.js +151 -0
  144. jvmind_ce-0.1.6/frontend/src/test/jstack-attach.test.js +174 -0
  145. jvmind_ce-0.1.6/frontend/src/test/jstack-history-list.test.js +172 -0
  146. jvmind_ce-0.1.6/frontend/src/test/jstack-sidebar-batch.test.js +224 -0
  147. jvmind_ce-0.1.6/frontend/src/test/session-jump.test.js +163 -0
  148. jvmind_ce-0.1.6/frontend/src/test/tool-cards.test.js +167 -0
  149. jvmind_ce-0.1.6/jvmind_ce.egg-info/PKG-INFO +274 -0
  150. jvmind_ce-0.1.6/jvmind_ce.egg-info/SOURCES.txt +214 -0
  151. jvmind_ce-0.1.6/jvmind_ce.egg-info/dependency_links.txt +1 -0
  152. jvmind_ce-0.1.6/jvmind_ce.egg-info/entry_points.txt +3 -0
  153. jvmind_ce-0.1.6/jvmind_ce.egg-info/requires.txt +24 -0
  154. jvmind_ce-0.1.6/jvmind_ce.egg-info/top_level.txt +3 -0
  155. jvmind_ce-0.1.6/pyproject.toml +81 -0
  156. jvmind_ce-0.1.6/react_agent/__init__.py +5 -0
  157. jvmind_ce-0.1.6/react_agent/config.py +175 -0
  158. jvmind_ce-0.1.6/react_agent/content_filter.py +317 -0
  159. jvmind_ce-0.1.6/react_agent/db.py +298 -0
  160. jvmind_ce-0.1.6/react_agent/gc_analyzer/__init__.py +260 -0
  161. jvmind_ce-0.1.6/react_agent/gc_analyzer/base.py +47 -0
  162. jvmind_ce-0.1.6/react_agent/gc_analyzer/compute_stats.py +515 -0
  163. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/__init__.py +345 -0
  164. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/base_parser.py +186 -0
  165. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/g1.py +59 -0
  166. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/generational.py +34 -0
  167. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/__init__.py +247 -0
  168. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/base_parser.py +168 -0
  169. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/epsilon.py +12 -0
  170. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/g1.py +14 -0
  171. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/parallel.py +8 -0
  172. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/shenandoah.py +53 -0
  173. jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/zgc.py +39 -0
  174. jvmind_ce-0.1.6/react_agent/gc_analyzer.py +31 -0
  175. jvmind_ce-0.1.6/react_agent/gc_analyzer_jdk8.py +11 -0
  176. jvmind_ce-0.1.6/react_agent/graph/__init__.py +0 -0
  177. jvmind_ce-0.1.6/react_agent/graph/facade.py +430 -0
  178. jvmind_ce-0.1.6/react_agent/graph/graph_builder.py +102 -0
  179. jvmind_ce-0.1.6/react_agent/graph/llm.py +84 -0
  180. jvmind_ce-0.1.6/react_agent/graph/llm_compat.py +172 -0
  181. jvmind_ce-0.1.6/react_agent/graph/nodes.py +265 -0
  182. jvmind_ce-0.1.6/react_agent/graph/parsing_compat.py +95 -0
  183. jvmind_ce-0.1.6/react_agent/graph/progress.py +60 -0
  184. jvmind_ce-0.1.6/react_agent/graph/sse_adapter.py +476 -0
  185. jvmind_ce-0.1.6/react_agent/graph/state.py +27 -0
  186. jvmind_ce-0.1.6/react_agent/graph/tools.py +295 -0
  187. jvmind_ce-0.1.6/react_agent/graph/tools_exceptions.py +24 -0
  188. jvmind_ce-0.1.6/react_agent/heapdump_worker/__init__.py +145 -0
  189. jvmind_ce-0.1.6/react_agent/heapdump_worker/__main__.py +80 -0
  190. jvmind_ce-0.1.6/react_agent/heapdump_worker/claim.py +103 -0
  191. jvmind_ce-0.1.6/react_agent/heapdump_worker/heartbeat.py +85 -0
  192. jvmind_ce-0.1.6/react_agent/heapdump_worker/mat_parse_runner.py +257 -0
  193. jvmind_ce-0.1.6/react_agent/heapdump_worker/parse.py +171 -0
  194. jvmind_ce-0.1.6/react_agent/heapdump_worker/stats.py +78 -0
  195. jvmind_ce-0.1.6/react_agent/heapdump_worker/watchdog.py +99 -0
  196. jvmind_ce-0.1.6/react_agent/i18n.py +25 -0
  197. jvmind_ce-0.1.6/react_agent/jstack_analyzer.py +1218 -0
  198. jvmind_ce-0.1.6/react_agent/jvm_flags.py +239 -0
  199. jvmind_ce-0.1.6/react_agent/mat_tools.py +860 -0
  200. jvmind_ce-0.1.6/react_agent/memory/__init__.py +0 -0
  201. jvmind_ce-0.1.6/react_agent/memory/facts.py +91 -0
  202. jvmind_ce-0.1.6/react_agent/memory/token_budget.py +101 -0
  203. jvmind_ce-0.1.6/react_agent/memory/uploads.py +18 -0
  204. jvmind_ce-0.1.6/react_agent/memory_db.py +937 -0
  205. jvmind_ce-0.1.6/react_agent/models.py +246 -0
  206. jvmind_ce-0.1.6/react_agent/prompts.py +144 -0
  207. jvmind_ce-0.1.6/react_agent/skill_manager_db.py +162 -0
  208. jvmind_ce-0.1.6/react_agent/summarizer.py +121 -0
  209. jvmind_ce-0.1.6/react_agent/timeutil.py +56 -0
  210. jvmind_ce-0.1.6/react_agent/tools.py +400 -0
  211. jvmind_ce-0.1.6/react_agent/upload_storage.py +108 -0
  212. jvmind_ce-0.1.6/react_agent/user_manager_db.py +254 -0
  213. jvmind_ce-0.1.6/scripts/install_mat.sh +77 -0
  214. jvmind_ce-0.1.6/server.py +195 -0
  215. jvmind_ce-0.1.6/setup.cfg +4 -0
  216. jvmind_ce-0.1.6/vendor/mat/com.jvmind.mat.query-0.1.0.jar +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 JVMind Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,34 @@
1
+ # Source distribution manifest for jvmind-ce.
2
+
3
+ # Frontend build artifacts โ€” required by app/frontend.py to serve /,
4
+ # /assets, /lib, /image. Ship pre-built dist/ when releasing.
5
+ include frontend/dist/*
6
+ include frontend/dist/**/*
7
+ recursive-include frontend/dist *
8
+
9
+ # i18n JSON files referenced by frontend at runtime
10
+ include frontend/i18n/*.json
11
+
12
+ # Frontend source โ€” only needed for development (npm run dev), but
13
+ # ship it so the source paths in index.html can still be served as a
14
+ # fallback when no build is present.
15
+ include frontend/index.html
16
+ include frontend/report.html
17
+ include frontend/src/*.js
18
+ include frontend/src/*.css
19
+ include frontend/src/css/*.css
20
+ include frontend/src/test/*.js
21
+ include frontend/src/gc-analysis/*
22
+ include frontend/src/heapdump-analysis/*
23
+ recursive-include frontend/src *
24
+
25
+ # Bundled MAT query-service plugin (used by heapdump_worker)
26
+ include vendor/mat/*.jar
27
+
28
+ # Repository root files
29
+ include LICENSE
30
+ include README.md
31
+ include README.zh-CN.md
32
+
33
+ # Build tool scripts
34
+ include scripts/install_mat.sh
@@ -0,0 +1,274 @@
1
+ Metadata-Version: 2.4
2
+ Name: jvmind-ce
3
+ Version: 0.1.6
4
+ Summary: JVMind Community Edition โ€” JVM diagnostics AI agent (GC logs, jstack, heapdump analysis)
5
+ Author: JVMind Contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/jvmind/jvmind-ce
8
+ Project-URL: Repository, https://github.com/jvmind/jvmind-ce
9
+ Project-URL: Issues, https://github.com/jvmind/jvmind-ce/issues
10
+ Keywords: jvm,gc,jstack,heapdump,diagnostics,ai,react-agent
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Framework :: FastAPI
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: openai>=1.30.0
25
+ Requires-Dist: python-dotenv>=1.0.0
26
+ Requires-Dist: fastapi>=0.110.0
27
+ Requires-Dist: uvicorn[standard]>=0.27.0
28
+ Requires-Dist: sse-starlette>=2.0.0
29
+ Requires-Dist: python-multipart>=0.0.9
30
+ Requires-Dist: sqlalchemy>=2.0
31
+ Requires-Dist: aiosqlite>=0.20
32
+ Requires-Dist: psycopg[binary]>=3.3.4
33
+ Requires-Dist: pydantic>=2.0
34
+ Requires-Dist: starlette>=0.27.0
35
+ Requires-Dist: markdown>=3.0
36
+ Requires-Dist: langgraph<1.0,>=0.2
37
+ Requires-Dist: langchain-core<0.4,>=0.3
38
+ Requires-Dist: langchain-openai<1.0,>=0.3
39
+ Requires-Dist: tiktoken<1.0,>=0.7
40
+ Provides-Extra: dev
41
+ Requires-Dist: pytest>=8.0; extra == "dev"
42
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
43
+ Requires-Dist: anyio>=4.0; extra == "dev"
44
+ Requires-Dist: httpx>=0.27; extra == "dev"
45
+ Requires-Dist: fonttools>=4.0; extra == "dev"
46
+ Requires-Dist: brotli>=1.1; extra == "dev"
47
+ Dynamic: license-file
48
+
49
+ # JVMind Community Edition
50
+
51
+ > An AI-powered JVM diagnostics agent. **Single-user ยท local-first ยท open source.**
52
+ >
53
+ > [ไธญๆ–‡ๆ–‡ๆกฃ (Chinese)](./README.zh-CN.md) ยท [Report a bug](https://github.com/jvmind/jvmind-ce/issues/new?template=bug.md) ยท [Request a feature](https://github.com/jvmind/jvmind-ce/issues/new?template=feature.md)
54
+
55
+ JVMind CE is a JVM performance diagnostics assistant built on OpenAI-compatible LLMs. It runs the agent as a local web service, accepts uploaded logs/dumps, and streams diagnostic conclusions back over SSE.
56
+
57
+ - ๐Ÿง  **LangGraph agent** โ€” Tool orchestration via LangGraph state machines (native OpenAI function-calling).
58
+ - ๐Ÿชต **GC log analysis** โ€” JDK 8 / 11 / 17 / 21 / 25 collectors (G1, Parallel, ZGC, Shenandoah, Serial, CMS). Pure regex parsers, no external runtime deps.
59
+ - ๐Ÿงต **jstack thread analysis** โ€” Deadlock detection, lock-contention hotspots, thread-pool distribution, flame graph, per-thread drill-down.
60
+ - ๐Ÿ’พ **Heapdump analysis (optional)** โ€” Parses GB-sized hprof files via Eclipse MAT (requires JDK 21). Ships with the bundled query-service plugin.
61
+ - ๐Ÿ”Œ **OpenAI-compatible LLM** โ€” DeepSeek, OpenAI, Qwen, Kimi, Ollama (local), and any compatible endpoint. Hot-reloadable UI config.
62
+ - ๐Ÿ  **Ollama local inference** โ€” Run entirely offline with no data leaving your machine. Zero-cost, no API key required.
63
+
64
+ The community edition ships **without** billing, team management, or rate limits. For those, use a commercial offering.
65
+
66
+ ![JVMind CE Screenshot](frontend/public/image/chat_window.png)
67
+
68
+ ---
69
+
70
+ ## Quick Start
71
+
72
+ ### Install from PyPI
73
+
74
+ ```bash
75
+ pip install jvmind-ce
76
+ jvmind
77
+ # open http://127.0.0.1:8000
78
+ ```
79
+
80
+ ### Install from source (developer mode)
81
+
82
+ ```bash
83
+ git clone https://github.com/jvmind/jvmind-ce.git
84
+ cd jvmind-ce
85
+ python -m venv .venv && source .venv/bin/activate
86
+ pip install -e ".[dev]"
87
+ jvmind
88
+ ```
89
+
90
+ ### Configure the LLM
91
+
92
+ The UI prompts for an API key on first launch. Two options:
93
+
94
+ **Option A โ€” Remote LLM provider (DeepSeek, OpenAI, etc.):**
95
+
96
+ ```bash
97
+ cp .env.example .env
98
+ # Edit .env:
99
+ OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
100
+ OPENAI_BASE_URL=https://api.deepseek.com/v1
101
+ OPENAI_MODEL=deepseek-chat
102
+ ```
103
+
104
+ **Option B โ€” Local Ollama (no API key, zero-cost, fully offline):**
105
+
106
+ ```bash
107
+ # 1. Install & start Ollama: https://ollama.com
108
+ # 2. Pull a model:
109
+ ollama pull qwen2.5
110
+ # 3. In the JVMind UI, click "Ollama ยท Local" preset in Settings (โš™๏ธ)
111
+ # or set in .env:
112
+ OPENAI_BASE_URL=http://localhost:11434/v1
113
+ OPENAI_MODEL=qwen2.5
114
+ # Leave OPENAI_API_KEY empty โ€” Ollama doesn't need one.
115
+ ```
116
+
117
+ The agent uses native OpenAI function-calling, so any model supporting `tools` works. DeepSeek's `deepseek-chat` is a sensible default for remote inference; `qwen2.5` or `llama3.1` are good choices for local Ollama.
118
+
119
+ > **Privacy**: When using Ollama with a local model, no data ever leaves your machine โ€” all GC logs, thread dumps, heap dumps, and conversation content stay local.
120
+
121
+ ---
122
+
123
+ ## Features
124
+
125
+ ### GC log analysis
126
+
127
+ Open the **๐Ÿ“Š GC Logs** tab, upload a log file. The pipeline:
128
+
129
+ 1. Stream-upload โ†’ store raw text in DB
130
+ 2. Parser (pure regex) extracts events, computes statistics, builds overview
131
+ 3. Render: 8 status cards + per-collector table + heap chart + pause histogram + top-10 slowest
132
+ 4. Trigger a streamed LLM diagnosis with the structured template (overall health, key issues, parameter tuning, follow-up metrics)
133
+
134
+ Supported collectors: **G1** ยท **Parallel** ยท **Serial** ยท **ZGC** ยท **Shenandoah** ยท **CMS**. JDK 9+ unified log format and JDK 8 PrintGCDetails are both supported.
135
+
136
+ ### jstack thread analysis
137
+
138
+ Open the **๐Ÿงต Thread Dumps** tab, upload a `jstack -l` dump. Features:
139
+
140
+ - Thread state histogram (RUNNABLE / BLOCKED / WAITING / TIMED_WAITING)
141
+ - Deadlock detection with lock chain visualization
142
+ - Lock contention hotspots (holder + waiters list, click-to-drill)
143
+ - Thread pool distribution, flame graph, single-thread drill-down
144
+ - Streamed LLM diagnosis (whole dump or single thread)
145
+
146
+ ### Heapdump analysis (optional โ€” requires Eclipse MAT + JDK 21)
147
+
148
+ The **๐Ÿ” Heap Dumps** tab uploads GB-sized `.hprof` files. The architecture:
149
+
150
+ ```
151
+ Browser โ”€โ–ถ FastAPI (upload routes) โ”€โ–ถ local disk: <dump_dir>/<report_id>/
152
+ โ”‚
153
+ โ–ผ
154
+ worker_loop โ”€โ–ถ ParseHeapDump.sh
155
+ โ”‚
156
+ โ–ผ
157
+ โ”Œโ”€โ”€โ”€โ”€โ”€ query-service (HTTP) โ—€โ”€โ”€โ”€โ”€โ”€โ”
158
+ โ”‚ bundled in vendor/mat/ โ”‚
159
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
160
+ โ”‚
161
+ โ–ผ
162
+ Browser โ—€โ”€โ”€โ”€โ”€โ”€โ”€ SSE progress / JSON query results โ—€โ”€โ”€โ”€โ”€โ”€ FastAPI proxy
163
+ ```
164
+
165
+ **Install MAT and the query-service in one step:**
166
+
167
+ ```bash
168
+ ./scripts/install_mat.sh /opt/mat
169
+ # or: MAT_HOME=/opt/mat ./scripts/install_mat.sh
170
+ ```
171
+
172
+ This downloads Eclipse MAT, extracts it, and copies the bundled `com.jvmind.mat.query-0.1.0.jar` into the MAT plugins directory. **Note: MAT requires JDK 21.** Configure and run:
173
+
174
+ ```bash
175
+ # .env
176
+ MAT_HOME=/opt/mat
177
+ MAT_QUERY_SERVICE_URL=http://127.0.0.1:8090
178
+ ```
179
+
180
+ ```bash
181
+ # Terminal 1: query-service
182
+ /opt/mat/MemoryAnalyzer -consoleLog -nosplash \
183
+ -application com.jvmind.mat.query.QueryServiceApp
184
+
185
+ # Terminal 2: heapdump worker (separate process)
186
+ jvmind-worker
187
+ ```
188
+
189
+ The bundled query-service jar ships inside `vendor/mat/`, so users don't need to compile Java themselves.
190
+
191
+ ### Agent internals
192
+
193
+ The agent is a **LangGraph** state machine in `react_agent/graph/`:
194
+
195
+ - `facade.LangGraphAgent` โ€” public API, matches the legacy agent's interface
196
+ - `graph_builder.build_graph` โ€” wires nodes (Agent โ†’ Tools โ†’ Finalize)
197
+ - `nodes` โ€” tool execution + structured reasoning (cross-domain diagnosis for OOM)
198
+ - `sse_adapter` โ€” yields `user` / `token` / `step` / `fact_added` / `final` / `error` / `done` events
199
+ - `llm_compat` / `parsing_compat` โ€” shared mixins for tool-call error detection
200
+
201
+ Native OpenAI function-calling is the default. If a provider rejects the `tools` parameter, the agent surfaces a clear error rather than silently degrading.
202
+
203
+ ---
204
+
205
+ ## Configuration
206
+
207
+ See [`.env.example`](./.env.example) for the full list. Key knobs:
208
+
209
+ | Variable | Default | Purpose |
210
+ |----------|---------|---------|
211
+ | `HOST` / `PORT` | `127.0.0.1` / `8000` | Bind address |
212
+ | `DATABASE_URL` | `sqlite:///./data/app.db` | SQLAlchemy URL; switch to PostgreSQL for prod |
213
+ | `OPENAI_API_KEY` | โ€” | Required for remote providers; leave empty when using local Ollama |
214
+ | `OPENAI_BASE_URL` | `https://api.deepseek.com/v1` | Any OpenAI-compatible endpoint |
215
+ | `OPENAI_MODEL` | `deepseek-chat` | Model name |
216
+ | `OPENAI_TIMEOUT_SECONDS` | `60` | Per-LLM-call timeout |
217
+ | `CONFIG_ENCRYPTION_KEY` | โ€” | Encrypts persisted API keys at rest |
218
+ | `HEAPDUMP_*` | see `.env.example` | Only relevant if using heapdump analysis |
219
+
220
+ The web UI also has a Settings (โš™๏ธ) dialog for LLM config โ€” changes hot-reload the agent and re-encrypt stored keys.
221
+
222
+ ---
223
+
224
+ ## Development
225
+
226
+ ```bash
227
+ # Run dev server with auto-reload
228
+ uvicorn server:app --reload --port 8000
229
+
230
+ # Run all tests
231
+ python -m pytest _tests --no-cov
232
+
233
+ # Frontend dev (Vite hot-reload)
234
+ cd frontend && npm install && npm run dev
235
+
236
+ # Frontend production build
237
+ cd frontend && npm run build
238
+
239
+ # Heapdump worker (separate process)
240
+ jvmind-worker
241
+ ```
242
+
243
+ Project layout:
244
+
245
+ ```
246
+ jvmind-ce/
247
+ โ”œโ”€โ”€ server.py # FastAPI entry point
248
+ โ”œโ”€โ”€ app/ # routes, middleware, helpers
249
+ โ”œโ”€โ”€ react_agent/
250
+ โ”‚ โ”œโ”€โ”€ graph/ # LangGraph agent (default)
251
+ โ”‚ โ”œโ”€โ”€ gc_analyzer/ # GC log parsers (JDK 8 + JDK 9+)
252
+ โ”‚ โ”œโ”€โ”€ jstack_analyzer.py
253
+ โ”‚ โ”œโ”€โ”€ mat_tools.py # Heapdump tool wrappers
254
+ โ”‚ โ”œโ”€โ”€ heapdump_worker/ # Background MAT parser
255
+ โ”‚ โ”œโ”€โ”€ memory_db.py
256
+ โ”‚ โ”œโ”€โ”€ user_manager_db.py # single-user
257
+ โ”‚ โ””โ”€โ”€ db.py / models.py
258
+ โ”œโ”€โ”€ frontend/ # vanilla JS + Vite
259
+ โ”œโ”€โ”€ vendor/mat/ # bundled query-service jar
260
+ โ”œโ”€โ”€ scripts/install_mat.sh # one-step MAT install
261
+ โ””โ”€โ”€ _tests/ # pytest suite (146 tests)
262
+ ```
263
+
264
+ ## License
265
+
266
+ MIT โ€” see [LICENSE](./LICENSE).
267
+
268
+ ## Contributing
269
+
270
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) and [CONVENTIONS.md](./CONVENTIONS.md).
271
+
272
+ ## Credits
273
+
274
+ JVMind CE is extracted from the commercial JVMind product. The commercial edition includes multi-user auth, team workspaces, Paddle billing, PostHog analytics, and other features that this repository deliberately omits.
@@ -0,0 +1,226 @@
1
+ # JVMind Community Edition
2
+
3
+ > An AI-powered JVM diagnostics agent. **Single-user ยท local-first ยท open source.**
4
+ >
5
+ > [ไธญๆ–‡ๆ–‡ๆกฃ (Chinese)](./README.zh-CN.md) ยท [Report a bug](https://github.com/jvmind/jvmind-ce/issues/new?template=bug.md) ยท [Request a feature](https://github.com/jvmind/jvmind-ce/issues/new?template=feature.md)
6
+
7
+ JVMind CE is a JVM performance diagnostics assistant built on OpenAI-compatible LLMs. It runs the agent as a local web service, accepts uploaded logs/dumps, and streams diagnostic conclusions back over SSE.
8
+
9
+ - ๐Ÿง  **LangGraph agent** โ€” Tool orchestration via LangGraph state machines (native OpenAI function-calling).
10
+ - ๐Ÿชต **GC log analysis** โ€” JDK 8 / 11 / 17 / 21 / 25 collectors (G1, Parallel, ZGC, Shenandoah, Serial, CMS). Pure regex parsers, no external runtime deps.
11
+ - ๐Ÿงต **jstack thread analysis** โ€” Deadlock detection, lock-contention hotspots, thread-pool distribution, flame graph, per-thread drill-down.
12
+ - ๐Ÿ’พ **Heapdump analysis (optional)** โ€” Parses GB-sized hprof files via Eclipse MAT (requires JDK 21). Ships with the bundled query-service plugin.
13
+ - ๐Ÿ”Œ **OpenAI-compatible LLM** โ€” DeepSeek, OpenAI, Qwen, Kimi, Ollama (local), and any compatible endpoint. Hot-reloadable UI config.
14
+ - ๐Ÿ  **Ollama local inference** โ€” Run entirely offline with no data leaving your machine. Zero-cost, no API key required.
15
+
16
+ The community edition ships **without** billing, team management, or rate limits. For those, use a commercial offering.
17
+
18
+ ![JVMind CE Screenshot](frontend/public/image/chat_window.png)
19
+
20
+ ---
21
+
22
+ ## Quick Start
23
+
24
+ ### Install from PyPI
25
+
26
+ ```bash
27
+ pip install jvmind-ce
28
+ jvmind
29
+ # open http://127.0.0.1:8000
30
+ ```
31
+
32
+ ### Install from source (developer mode)
33
+
34
+ ```bash
35
+ git clone https://github.com/jvmind/jvmind-ce.git
36
+ cd jvmind-ce
37
+ python -m venv .venv && source .venv/bin/activate
38
+ pip install -e ".[dev]"
39
+ jvmind
40
+ ```
41
+
42
+ ### Configure the LLM
43
+
44
+ The UI prompts for an API key on first launch. Two options:
45
+
46
+ **Option A โ€” Remote LLM provider (DeepSeek, OpenAI, etc.):**
47
+
48
+ ```bash
49
+ cp .env.example .env
50
+ # Edit .env:
51
+ OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
52
+ OPENAI_BASE_URL=https://api.deepseek.com/v1
53
+ OPENAI_MODEL=deepseek-chat
54
+ ```
55
+
56
+ **Option B โ€” Local Ollama (no API key, zero-cost, fully offline):**
57
+
58
+ ```bash
59
+ # 1. Install & start Ollama: https://ollama.com
60
+ # 2. Pull a model:
61
+ ollama pull qwen2.5
62
+ # 3. In the JVMind UI, click "Ollama ยท Local" preset in Settings (โš™๏ธ)
63
+ # or set in .env:
64
+ OPENAI_BASE_URL=http://localhost:11434/v1
65
+ OPENAI_MODEL=qwen2.5
66
+ # Leave OPENAI_API_KEY empty โ€” Ollama doesn't need one.
67
+ ```
68
+
69
+ The agent uses native OpenAI function-calling, so any model supporting `tools` works. DeepSeek's `deepseek-chat` is a sensible default for remote inference; `qwen2.5` or `llama3.1` are good choices for local Ollama.
70
+
71
+ > **Privacy**: When using Ollama with a local model, no data ever leaves your machine โ€” all GC logs, thread dumps, heap dumps, and conversation content stay local.
72
+
73
+ ---
74
+
75
+ ## Features
76
+
77
+ ### GC log analysis
78
+
79
+ Open the **๐Ÿ“Š GC Logs** tab, upload a log file. The pipeline:
80
+
81
+ 1. Stream-upload โ†’ store raw text in DB
82
+ 2. Parser (pure regex) extracts events, computes statistics, builds overview
83
+ 3. Render: 8 status cards + per-collector table + heap chart + pause histogram + top-10 slowest
84
+ 4. Trigger a streamed LLM diagnosis with the structured template (overall health, key issues, parameter tuning, follow-up metrics)
85
+
86
+ Supported collectors: **G1** ยท **Parallel** ยท **Serial** ยท **ZGC** ยท **Shenandoah** ยท **CMS**. JDK 9+ unified log format and JDK 8 PrintGCDetails are both supported.
87
+
88
+ ### jstack thread analysis
89
+
90
+ Open the **๐Ÿงต Thread Dumps** tab, upload a `jstack -l` dump. Features:
91
+
92
+ - Thread state histogram (RUNNABLE / BLOCKED / WAITING / TIMED_WAITING)
93
+ - Deadlock detection with lock chain visualization
94
+ - Lock contention hotspots (holder + waiters list, click-to-drill)
95
+ - Thread pool distribution, flame graph, single-thread drill-down
96
+ - Streamed LLM diagnosis (whole dump or single thread)
97
+
98
+ ### Heapdump analysis (optional โ€” requires Eclipse MAT + JDK 21)
99
+
100
+ The **๐Ÿ” Heap Dumps** tab uploads GB-sized `.hprof` files. The architecture:
101
+
102
+ ```
103
+ Browser โ”€โ–ถ FastAPI (upload routes) โ”€โ–ถ local disk: <dump_dir>/<report_id>/
104
+ โ”‚
105
+ โ–ผ
106
+ worker_loop โ”€โ–ถ ParseHeapDump.sh
107
+ โ”‚
108
+ โ–ผ
109
+ โ”Œโ”€โ”€โ”€โ”€โ”€ query-service (HTTP) โ—€โ”€โ”€โ”€โ”€โ”€โ”
110
+ โ”‚ bundled in vendor/mat/ โ”‚
111
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
112
+ โ”‚
113
+ โ–ผ
114
+ Browser โ—€โ”€โ”€โ”€โ”€โ”€โ”€ SSE progress / JSON query results โ—€โ”€โ”€โ”€โ”€โ”€ FastAPI proxy
115
+ ```
116
+
117
+ **Install MAT and the query-service in one step:**
118
+
119
+ ```bash
120
+ ./scripts/install_mat.sh /opt/mat
121
+ # or: MAT_HOME=/opt/mat ./scripts/install_mat.sh
122
+ ```
123
+
124
+ This downloads Eclipse MAT, extracts it, and copies the bundled `com.jvmind.mat.query-0.1.0.jar` into the MAT plugins directory. **Note: MAT requires JDK 21.** Configure and run:
125
+
126
+ ```bash
127
+ # .env
128
+ MAT_HOME=/opt/mat
129
+ MAT_QUERY_SERVICE_URL=http://127.0.0.1:8090
130
+ ```
131
+
132
+ ```bash
133
+ # Terminal 1: query-service
134
+ /opt/mat/MemoryAnalyzer -consoleLog -nosplash \
135
+ -application com.jvmind.mat.query.QueryServiceApp
136
+
137
+ # Terminal 2: heapdump worker (separate process)
138
+ jvmind-worker
139
+ ```
140
+
141
+ The bundled query-service jar ships inside `vendor/mat/`, so users don't need to compile Java themselves.
142
+
143
+ ### Agent internals
144
+
145
+ The agent is a **LangGraph** state machine in `react_agent/graph/`:
146
+
147
+ - `facade.LangGraphAgent` โ€” public API, matches the legacy agent's interface
148
+ - `graph_builder.build_graph` โ€” wires nodes (Agent โ†’ Tools โ†’ Finalize)
149
+ - `nodes` โ€” tool execution + structured reasoning (cross-domain diagnosis for OOM)
150
+ - `sse_adapter` โ€” yields `user` / `token` / `step` / `fact_added` / `final` / `error` / `done` events
151
+ - `llm_compat` / `parsing_compat` โ€” shared mixins for tool-call error detection
152
+
153
+ Native OpenAI function-calling is the default. If a provider rejects the `tools` parameter, the agent surfaces a clear error rather than silently degrading.
154
+
155
+ ---
156
+
157
+ ## Configuration
158
+
159
+ See [`.env.example`](./.env.example) for the full list. Key knobs:
160
+
161
+ | Variable | Default | Purpose |
162
+ |----------|---------|---------|
163
+ | `HOST` / `PORT` | `127.0.0.1` / `8000` | Bind address |
164
+ | `DATABASE_URL` | `sqlite:///./data/app.db` | SQLAlchemy URL; switch to PostgreSQL for prod |
165
+ | `OPENAI_API_KEY` | โ€” | Required for remote providers; leave empty when using local Ollama |
166
+ | `OPENAI_BASE_URL` | `https://api.deepseek.com/v1` | Any OpenAI-compatible endpoint |
167
+ | `OPENAI_MODEL` | `deepseek-chat` | Model name |
168
+ | `OPENAI_TIMEOUT_SECONDS` | `60` | Per-LLM-call timeout |
169
+ | `CONFIG_ENCRYPTION_KEY` | โ€” | Encrypts persisted API keys at rest |
170
+ | `HEAPDUMP_*` | see `.env.example` | Only relevant if using heapdump analysis |
171
+
172
+ The web UI also has a Settings (โš™๏ธ) dialog for LLM config โ€” changes hot-reload the agent and re-encrypt stored keys.
173
+
174
+ ---
175
+
176
+ ## Development
177
+
178
+ ```bash
179
+ # Run dev server with auto-reload
180
+ uvicorn server:app --reload --port 8000
181
+
182
+ # Run all tests
183
+ python -m pytest _tests --no-cov
184
+
185
+ # Frontend dev (Vite hot-reload)
186
+ cd frontend && npm install && npm run dev
187
+
188
+ # Frontend production build
189
+ cd frontend && npm run build
190
+
191
+ # Heapdump worker (separate process)
192
+ jvmind-worker
193
+ ```
194
+
195
+ Project layout:
196
+
197
+ ```
198
+ jvmind-ce/
199
+ โ”œโ”€โ”€ server.py # FastAPI entry point
200
+ โ”œโ”€โ”€ app/ # routes, middleware, helpers
201
+ โ”œโ”€โ”€ react_agent/
202
+ โ”‚ โ”œโ”€โ”€ graph/ # LangGraph agent (default)
203
+ โ”‚ โ”œโ”€โ”€ gc_analyzer/ # GC log parsers (JDK 8 + JDK 9+)
204
+ โ”‚ โ”œโ”€โ”€ jstack_analyzer.py
205
+ โ”‚ โ”œโ”€โ”€ mat_tools.py # Heapdump tool wrappers
206
+ โ”‚ โ”œโ”€โ”€ heapdump_worker/ # Background MAT parser
207
+ โ”‚ โ”œโ”€โ”€ memory_db.py
208
+ โ”‚ โ”œโ”€โ”€ user_manager_db.py # single-user
209
+ โ”‚ โ””โ”€โ”€ db.py / models.py
210
+ โ”œโ”€โ”€ frontend/ # vanilla JS + Vite
211
+ โ”œโ”€โ”€ vendor/mat/ # bundled query-service jar
212
+ โ”œโ”€โ”€ scripts/install_mat.sh # one-step MAT install
213
+ โ””โ”€โ”€ _tests/ # pytest suite (146 tests)
214
+ ```
215
+
216
+ ## License
217
+
218
+ MIT โ€” see [LICENSE](./LICENSE).
219
+
220
+ ## Contributing
221
+
222
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) and [CONVENTIONS.md](./CONVENTIONS.md).
223
+
224
+ ## Credits
225
+
226
+ JVMind CE is extracted from the commercial JVMind product. The commercial edition includes multi-user auth, team workspaces, Paddle billing, PostHog analytics, and other features that this repository deliberately omits.