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.
- jvmind_ce-0.1.6/LICENSE +21 -0
- jvmind_ce-0.1.6/MANIFEST.in +34 -0
- jvmind_ce-0.1.6/PKG-INFO +274 -0
- jvmind_ce-0.1.6/README.md +226 -0
- jvmind_ce-0.1.6/README.zh-CN.md +228 -0
- jvmind_ce-0.1.6/app/__init__.py +0 -0
- jvmind_ce-0.1.6/app/cli.py +24 -0
- jvmind_ce-0.1.6/app/core/__init__.py +0 -0
- jvmind_ce-0.1.6/app/core/helpers.py +466 -0
- jvmind_ce-0.1.6/app/core/state.py +95 -0
- jvmind_ce-0.1.6/app/frontend/dist/assets/jstack-analysis-BMBYvcHf.js +668 -0
- jvmind_ce-0.1.6/app/frontend/dist/assets/main-BUxMFiy_.js +52 -0
- jvmind_ce-0.1.6/app/frontend/dist/assets/report-Cdm0x36f.js +1 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/chat_window.png +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/favicon-96x96.png +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/favicon.ico +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/gc_report.png +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/jstack_report.png +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/jvmind.png +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/image/llm_config.png +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/index.html +512 -0
- jvmind_ce-0.1.6/app/frontend/dist/lib/dompurify.min.js +3 -0
- jvmind_ce-0.1.6/app/frontend/dist/lib/echarts.min.js +45 -0
- jvmind_ce-0.1.6/app/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-bold.woff2 +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-regular.woff2 +0 -0
- jvmind_ce-0.1.6/app/frontend/dist/lib/marked.min.js +69 -0
- jvmind_ce-0.1.6/app/frontend/dist/report.html +52 -0
- jvmind_ce-0.1.6/app/frontend/dist/robots.txt +4 -0
- jvmind_ce-0.1.6/app/frontend/dist/sitemap.xml +39 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/base.css +149 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/flamegraph.css +53 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/gc-panel.css +906 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/heapdump.css +465 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/input.css +146 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/messages.css +390 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/modals.css +245 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/reports.css +296 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/sidebar.css +236 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/css/topbar.css +81 -0
- jvmind_ce-0.1.6/app/frontend/dist/src/style.css +10 -0
- jvmind_ce-0.1.6/app/frontend.py +85 -0
- jvmind_ce-0.1.6/app/routes/__init__.py +0 -0
- jvmind_ce-0.1.6/app/routes/auth.py +35 -0
- jvmind_ce-0.1.6/app/routes/chat.py +246 -0
- jvmind_ce-0.1.6/app/routes/config.py +131 -0
- jvmind_ce-0.1.6/app/routes/feedback.py +162 -0
- jvmind_ce-0.1.6/app/routes/gc_reports.py +209 -0
- jvmind_ce-0.1.6/app/routes/health.py +19 -0
- jvmind_ce-0.1.6/app/routes/heapdump_proxy.py +643 -0
- jvmind_ce-0.1.6/app/routes/heapdump_reports.py +256 -0
- jvmind_ce-0.1.6/app/routes/heapdump_upload.py +324 -0
- jvmind_ce-0.1.6/app/routes/jstack_reports.py +169 -0
- jvmind_ce-0.1.6/app/routes/plans.py +28 -0
- jvmind_ce-0.1.6/app/routes/sessions.py +133 -0
- jvmind_ce-0.1.6/app/routes/settings.py +51 -0
- jvmind_ce-0.1.6/app/routes/skills.py +131 -0
- jvmind_ce-0.1.6/app/schemas.py +64 -0
- jvmind_ce-0.1.6/app/services/__init__.py +0 -0
- jvmind_ce-0.1.6/app/services/analysis_prompts.py +245 -0
- jvmind_ce-0.1.6/app/services/audit.py +84 -0
- jvmind_ce-0.1.6/frontend/dist/assets/jstack-analysis-BMBYvcHf.js +668 -0
- jvmind_ce-0.1.6/frontend/dist/assets/main-BUxMFiy_.js +52 -0
- jvmind_ce-0.1.6/frontend/dist/assets/report-Cdm0x36f.js +1 -0
- jvmind_ce-0.1.6/frontend/dist/image/chat_window.png +0 -0
- jvmind_ce-0.1.6/frontend/dist/image/favicon-96x96.png +0 -0
- jvmind_ce-0.1.6/frontend/dist/image/favicon.ico +0 -0
- jvmind_ce-0.1.6/frontend/dist/image/gc_report.png +0 -0
- jvmind_ce-0.1.6/frontend/dist/image/jstack_report.png +0 -0
- jvmind_ce-0.1.6/frontend/dist/image/jvmind.png +0 -0
- jvmind_ce-0.1.6/frontend/dist/image/llm_config.png +0 -0
- jvmind_ce-0.1.6/frontend/dist/index.html +512 -0
- jvmind_ce-0.1.6/frontend/dist/lib/dompurify.min.js +3 -0
- jvmind_ce-0.1.6/frontend/dist/lib/echarts.min.js +45 -0
- jvmind_ce-0.1.6/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-bold.woff2 +0 -0
- jvmind_ce-0.1.6/frontend/dist/lib/fonts/noto-sans-mono-cjk-sc-regular.woff2 +0 -0
- jvmind_ce-0.1.6/frontend/dist/lib/marked.min.js +69 -0
- jvmind_ce-0.1.6/frontend/dist/report.html +52 -0
- jvmind_ce-0.1.6/frontend/dist/robots.txt +4 -0
- jvmind_ce-0.1.6/frontend/dist/sitemap.xml +39 -0
- jvmind_ce-0.1.6/frontend/i18n/en.json +968 -0
- jvmind_ce-0.1.6/frontend/i18n/zh.json +963 -0
- jvmind_ce-0.1.6/frontend/index.html +511 -0
- jvmind_ce-0.1.6/frontend/report.html +51 -0
- jvmind_ce-0.1.6/frontend/src/api.js +29 -0
- jvmind_ce-0.1.6/frontend/src/api.test.js +61 -0
- jvmind_ce-0.1.6/frontend/src/app.js +103 -0
- jvmind_ce-0.1.6/frontend/src/blog.js +259 -0
- jvmind_ce-0.1.6/frontend/src/charts.js +615 -0
- jvmind_ce-0.1.6/frontend/src/charts.test.js +160 -0
- jvmind_ce-0.1.6/frontend/src/config-dialog.js +124 -0
- jvmind_ce-0.1.6/frontend/src/config-dialog.test.js +99 -0
- jvmind_ce-0.1.6/frontend/src/css/base.css +149 -0
- jvmind_ce-0.1.6/frontend/src/css/flamegraph.css +53 -0
- jvmind_ce-0.1.6/frontend/src/css/gc-panel.css +906 -0
- jvmind_ce-0.1.6/frontend/src/css/heapdump.css +465 -0
- jvmind_ce-0.1.6/frontend/src/css/input.css +146 -0
- jvmind_ce-0.1.6/frontend/src/css/messages.css +390 -0
- jvmind_ce-0.1.6/frontend/src/css/modals.css +245 -0
- jvmind_ce-0.1.6/frontend/src/css/reports.css +296 -0
- jvmind_ce-0.1.6/frontend/src/css/sidebar.css +236 -0
- jvmind_ce-0.1.6/frontend/src/css/topbar.css +81 -0
- jvmind_ce-0.1.6/frontend/src/feedback-widget.js +95 -0
- jvmind_ce-0.1.6/frontend/src/feedback-widget.test.js +108 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/bindings.js +251 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/context.js +153 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/history.js +262 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/index.js +93 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/panel.js +14 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/render.js +442 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/sidebar.js +134 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/tabs.js +193 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis/upload.js +85 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis.js +4 -0
- jvmind_ce-0.1.6/frontend/src/gc-analysis.test.js +141 -0
- jvmind_ce-0.1.6/frontend/src/heapdump-analysis/heapdump.js +1533 -0
- jvmind_ce-0.1.6/frontend/src/heapdump-analysis/index.js +11 -0
- jvmind_ce-0.1.6/frontend/src/heapdump-analysis/task-poller.js +111 -0
- jvmind_ce-0.1.6/frontend/src/heapdump-analysis/task-poller.test.js +142 -0
- jvmind_ce-0.1.6/frontend/src/icons.js +50 -0
- jvmind_ce-0.1.6/frontend/src/jstack-analysis.js +836 -0
- jvmind_ce-0.1.6/frontend/src/jstack-diagnosis.test.js +80 -0
- jvmind_ce-0.1.6/frontend/src/main.js +322 -0
- jvmind_ce-0.1.6/frontend/src/main.test.js +367 -0
- jvmind_ce-0.1.6/frontend/src/markdown.js +59 -0
- jvmind_ce-0.1.6/frontend/src/markdown.test.js +110 -0
- jvmind_ce-0.1.6/frontend/src/marketing-v2.css +771 -0
- jvmind_ce-0.1.6/frontend/src/marketing.css +253 -0
- jvmind_ce-0.1.6/frontend/src/messages.js +786 -0
- jvmind_ce-0.1.6/frontend/src/messages.test.js +332 -0
- jvmind_ce-0.1.6/frontend/src/report-tabs.test.js +171 -0
- jvmind_ce-0.1.6/frontend/src/report.js +83 -0
- jvmind_ce-0.1.6/frontend/src/security.test.js +148 -0
- jvmind_ce-0.1.6/frontend/src/sessions.js +425 -0
- jvmind_ce-0.1.6/frontend/src/shared.js +376 -0
- jvmind_ce-0.1.6/frontend/src/shared.test.js +927 -0
- jvmind_ce-0.1.6/frontend/src/state.js +26 -0
- jvmind_ce-0.1.6/frontend/src/style.css +10 -0
- jvmind_ce-0.1.6/frontend/src/test/gc-attach.test.js +168 -0
- jvmind_ce-0.1.6/frontend/src/test/gc-sidebar-batch.test.js +228 -0
- jvmind_ce-0.1.6/frontend/src/test/heapdump-attach.test.js +120 -0
- jvmind_ce-0.1.6/frontend/src/test/heapdump-history-click.test.js +151 -0
- jvmind_ce-0.1.6/frontend/src/test/heapdump-sidebar-batch.test.js +467 -0
- jvmind_ce-0.1.6/frontend/src/test/heapdump-sidebar.test.js +151 -0
- jvmind_ce-0.1.6/frontend/src/test/jstack-attach.test.js +174 -0
- jvmind_ce-0.1.6/frontend/src/test/jstack-history-list.test.js +172 -0
- jvmind_ce-0.1.6/frontend/src/test/jstack-sidebar-batch.test.js +224 -0
- jvmind_ce-0.1.6/frontend/src/test/session-jump.test.js +163 -0
- jvmind_ce-0.1.6/frontend/src/test/tool-cards.test.js +167 -0
- jvmind_ce-0.1.6/jvmind_ce.egg-info/PKG-INFO +274 -0
- jvmind_ce-0.1.6/jvmind_ce.egg-info/SOURCES.txt +214 -0
- jvmind_ce-0.1.6/jvmind_ce.egg-info/dependency_links.txt +1 -0
- jvmind_ce-0.1.6/jvmind_ce.egg-info/entry_points.txt +3 -0
- jvmind_ce-0.1.6/jvmind_ce.egg-info/requires.txt +24 -0
- jvmind_ce-0.1.6/jvmind_ce.egg-info/top_level.txt +3 -0
- jvmind_ce-0.1.6/pyproject.toml +81 -0
- jvmind_ce-0.1.6/react_agent/__init__.py +5 -0
- jvmind_ce-0.1.6/react_agent/config.py +175 -0
- jvmind_ce-0.1.6/react_agent/content_filter.py +317 -0
- jvmind_ce-0.1.6/react_agent/db.py +298 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/__init__.py +260 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/base.py +47 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/compute_stats.py +515 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/__init__.py +345 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/base_parser.py +186 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/g1.py +59 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk8/generational.py +34 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/__init__.py +247 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/base_parser.py +168 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/epsilon.py +12 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/g1.py +14 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/parallel.py +8 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/shenandoah.py +53 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer/jdk9/zgc.py +39 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer.py +31 -0
- jvmind_ce-0.1.6/react_agent/gc_analyzer_jdk8.py +11 -0
- jvmind_ce-0.1.6/react_agent/graph/__init__.py +0 -0
- jvmind_ce-0.1.6/react_agent/graph/facade.py +430 -0
- jvmind_ce-0.1.6/react_agent/graph/graph_builder.py +102 -0
- jvmind_ce-0.1.6/react_agent/graph/llm.py +84 -0
- jvmind_ce-0.1.6/react_agent/graph/llm_compat.py +172 -0
- jvmind_ce-0.1.6/react_agent/graph/nodes.py +265 -0
- jvmind_ce-0.1.6/react_agent/graph/parsing_compat.py +95 -0
- jvmind_ce-0.1.6/react_agent/graph/progress.py +60 -0
- jvmind_ce-0.1.6/react_agent/graph/sse_adapter.py +476 -0
- jvmind_ce-0.1.6/react_agent/graph/state.py +27 -0
- jvmind_ce-0.1.6/react_agent/graph/tools.py +295 -0
- jvmind_ce-0.1.6/react_agent/graph/tools_exceptions.py +24 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/__init__.py +145 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/__main__.py +80 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/claim.py +103 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/heartbeat.py +85 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/mat_parse_runner.py +257 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/parse.py +171 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/stats.py +78 -0
- jvmind_ce-0.1.6/react_agent/heapdump_worker/watchdog.py +99 -0
- jvmind_ce-0.1.6/react_agent/i18n.py +25 -0
- jvmind_ce-0.1.6/react_agent/jstack_analyzer.py +1218 -0
- jvmind_ce-0.1.6/react_agent/jvm_flags.py +239 -0
- jvmind_ce-0.1.6/react_agent/mat_tools.py +860 -0
- jvmind_ce-0.1.6/react_agent/memory/__init__.py +0 -0
- jvmind_ce-0.1.6/react_agent/memory/facts.py +91 -0
- jvmind_ce-0.1.6/react_agent/memory/token_budget.py +101 -0
- jvmind_ce-0.1.6/react_agent/memory/uploads.py +18 -0
- jvmind_ce-0.1.6/react_agent/memory_db.py +937 -0
- jvmind_ce-0.1.6/react_agent/models.py +246 -0
- jvmind_ce-0.1.6/react_agent/prompts.py +144 -0
- jvmind_ce-0.1.6/react_agent/skill_manager_db.py +162 -0
- jvmind_ce-0.1.6/react_agent/summarizer.py +121 -0
- jvmind_ce-0.1.6/react_agent/timeutil.py +56 -0
- jvmind_ce-0.1.6/react_agent/tools.py +400 -0
- jvmind_ce-0.1.6/react_agent/upload_storage.py +108 -0
- jvmind_ce-0.1.6/react_agent/user_manager_db.py +254 -0
- jvmind_ce-0.1.6/scripts/install_mat.sh +77 -0
- jvmind_ce-0.1.6/server.py +195 -0
- jvmind_ce-0.1.6/setup.cfg +4 -0
- jvmind_ce-0.1.6/vendor/mat/com.jvmind.mat.query-0.1.0.jar +0 -0
jvmind_ce-0.1.6/LICENSE
ADDED
|
@@ -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
|
jvmind_ce-0.1.6/PKG-INFO
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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.
|