sdl-mcp 0.12.2 → 0.12.3
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.
- package/README.md +10 -0
- package/config/sdlmcp.config.example.json +53 -8
- package/config/sdlmcp.config.schema.json +530 -106
- package/dist/.tsbuildinfo +1 -1
- package/dist/benchmark/external-manifest.d.ts +162 -0
- package/dist/benchmark/external-manifest.d.ts.map +1 -0
- package/dist/benchmark/external-manifest.js +336 -0
- package/dist/benchmark/external-manifest.js.map +1 -0
- package/dist/benchmark/external-runner.d.ts +100 -0
- package/dist/benchmark/external-runner.d.ts.map +1 -0
- package/dist/benchmark/external-runner.js +1171 -0
- package/dist/benchmark/external-runner.js.map +1 -0
- package/dist/benchmark/output-file.d.ts +3 -0
- package/dist/benchmark/output-file.d.ts.map +1 -0
- package/dist/benchmark/output-file.js +8 -0
- package/dist/benchmark/output-file.js.map +1 -0
- package/dist/cli/argParsing.d.ts.map +1 -1
- package/dist/cli/argParsing.js +6 -0
- package/dist/cli/argParsing.js.map +1 -1
- package/dist/cli/commands/benchmark.d.ts.map +1 -1
- package/dist/cli/commands/benchmark.js +3 -2
- package/dist/cli/commands/benchmark.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +13 -7
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +5 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +73 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +2 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/transport/http.d.ts +1 -35
- package/dist/cli/transport/http.d.ts.map +1 -1
- package/dist/cli/transport/http.js +151 -175
- package/dist/cli/transport/http.js.map +1 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/config/constants.d.ts +30 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +30 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/types.d.ts +53 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +62 -14
- package/dist/config/types.js.map +1 -1
- package/dist/db/ladybug-batching.d.ts +1 -0
- package/dist/db/ladybug-batching.d.ts.map +1 -1
- package/dist/db/ladybug-batching.js +1 -0
- package/dist/db/ladybug-batching.js.map +1 -1
- package/dist/db/ladybug-core.d.ts +3 -0
- package/dist/db/ladybug-core.d.ts.map +1 -1
- package/dist/db/ladybug-core.js +72 -2
- package/dist/db/ladybug-core.js.map +1 -1
- package/dist/db/ladybug-embeddings.d.ts +6 -1
- package/dist/db/ladybug-embeddings.d.ts.map +1 -1
- package/dist/db/ladybug-embeddings.js +6 -1
- package/dist/db/ladybug-embeddings.js.map +1 -1
- package/dist/db/ladybug-file-summaries.d.ts.map +1 -1
- package/dist/db/ladybug-file-summaries.js +23 -0
- package/dist/db/ladybug-file-summaries.js.map +1 -1
- package/dist/db/ladybug-queries.js +1 -1
- package/dist/db/ladybug-queries.js.map +1 -1
- package/dist/db/migrations/index.d.ts.map +1 -1
- package/dist/db/migrations/index.js +2 -0
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts +5 -9
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts.map +1 -1
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.js +24 -126
- package/dist/db/migrations/m007-copy-embeddings-to-symbol.js.map +1 -1
- package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts +5 -0
- package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts.map +1 -0
- package/dist/db/migrations/m021-remediate-symbol-embeddings.js +7 -0
- package/dist/db/migrations/m021-remediate-symbol-embeddings.js.map +1 -0
- package/dist/db/migrations/symbol-embedding-remediation.d.ts +57 -0
- package/dist/db/migrations/symbol-embedding-remediation.d.ts.map +1 -0
- package/dist/db/migrations/symbol-embedding-remediation.js +335 -0
- package/dist/db/migrations/symbol-embedding-remediation.js.map +1 -0
- package/dist/graph/layout/force-layout.d.ts +4 -0
- package/dist/graph/layout/force-layout.d.ts.map +1 -0
- package/dist/graph/layout/force-layout.js +127 -0
- package/dist/graph/layout/force-layout.js.map +1 -0
- package/dist/graph/layout/layout-service.d.ts +37 -0
- package/dist/graph/layout/layout-service.d.ts.map +1 -0
- package/dist/graph/layout/layout-service.js +172 -0
- package/dist/graph/layout/layout-service.js.map +1 -0
- package/dist/graph/layout/native-engine.d.ts +9 -0
- package/dist/graph/layout/native-engine.d.ts.map +1 -0
- package/dist/graph/layout/native-engine.js +59 -0
- package/dist/graph/layout/native-engine.js.map +1 -0
- package/dist/graph/layout/prng.d.ts +3 -0
- package/dist/graph/layout/prng.d.ts.map +1 -0
- package/dist/graph/layout/prng.js +19 -0
- package/dist/graph/layout/prng.js.map +1 -0
- package/dist/graph/layout/serializer.d.ts +3 -0
- package/dist/graph/layout/serializer.d.ts.map +1 -0
- package/dist/graph/layout/serializer.js +20 -0
- package/dist/graph/layout/serializer.js.map +1 -0
- package/dist/graph/layout/types.d.ts +30 -0
- package/dist/graph/layout/types.d.ts.map +1 -0
- package/dist/graph/layout/types.js +2 -0
- package/dist/graph/layout/types.js.map +1 -0
- package/dist/indexer/embeddings.d.ts +7 -0
- package/dist/indexer/embeddings.d.ts.map +1 -1
- package/dist/indexer/embeddings.js +44 -4
- package/dist/indexer/embeddings.js.map +1 -1
- package/dist/indexer/file-summary-embeddings.d.ts +12 -0
- package/dist/indexer/file-summary-embeddings.d.ts.map +1 -1
- package/dist/indexer/file-summary-embeddings.js +83 -21
- package/dist/indexer/file-summary-embeddings.js.map +1 -1
- package/dist/indexer/fileWalker.d.ts.map +1 -1
- package/dist/indexer/fileWalker.js +2 -1
- package/dist/indexer/fileWalker.js.map +1 -1
- package/dist/indexer/metrics-updater.d.ts.map +1 -1
- package/dist/indexer/metrics-updater.js +27 -4
- package/dist/indexer/metrics-updater.js.map +1 -1
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +2 -1
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/mcp/context-response-projection.d.ts.map +1 -1
- package/dist/mcp/context-response-projection.js +49 -13
- package/dist/mcp/context-response-projection.js.map +1 -1
- package/dist/mcp/tools/search-edit/planner.d.ts.map +1 -1
- package/dist/mcp/tools/search-edit/planner.js +10 -3
- package/dist/mcp/tools/search-edit/planner.js.map +1 -1
- package/dist/observability/event-tap.d.ts +2 -1
- package/dist/observability/event-tap.d.ts.map +1 -1
- package/dist/observability/event-tap.js.map +1 -1
- package/dist/observability/service.d.ts +11 -4
- package/dist/observability/service.d.ts.map +1 -1
- package/dist/observability/service.js +83 -13
- package/dist/observability/service.js.map +1 -1
- package/dist/observability/types.d.ts +48 -2
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/ui/.tsbuildinfo +1 -0
- package/dist/ui/vendor/fflate.js +2692 -0
- package/dist/ui/vendor/jsm/controls/ArcballControls.js +3543 -0
- package/dist/ui/vendor/jsm/controls/DragControls.js +452 -0
- package/dist/ui/vendor/jsm/controls/FirstPersonControls.js +488 -0
- package/dist/ui/vendor/jsm/controls/FlyControls.js +384 -0
- package/dist/ui/vendor/jsm/controls/MapControls.js +116 -0
- package/dist/ui/vendor/jsm/controls/OrbitControls.js +1963 -0
- package/dist/ui/vendor/jsm/controls/PointerLockControls.js +264 -0
- package/dist/ui/vendor/jsm/controls/TrackballControls.js +1001 -0
- package/dist/ui/vendor/jsm/controls/TransformControls.js +2003 -0
- package/dist/ui/vendor/jsm/loaders/3DMLoader.js +1836 -0
- package/dist/ui/vendor/jsm/loaders/3MFLoader.js +1621 -0
- package/dist/ui/vendor/jsm/loaders/AMFLoader.js +541 -0
- package/dist/ui/vendor/jsm/loaders/BVHLoader.js +484 -0
- package/dist/ui/vendor/jsm/loaders/ColladaLoader.js +153 -0
- package/dist/ui/vendor/jsm/loaders/DDSLoader.js +385 -0
- package/dist/ui/vendor/jsm/loaders/DRACOLoader.js +772 -0
- package/dist/ui/vendor/jsm/loaders/EXRLoader.js +3395 -0
- package/dist/ui/vendor/jsm/loaders/FBXLoader.js +4580 -0
- package/dist/ui/vendor/jsm/loaders/FontLoader.js +260 -0
- package/dist/ui/vendor/jsm/loaders/GCodeLoader.js +318 -0
- package/dist/ui/vendor/jsm/loaders/GLTFLoader.js +4860 -0
- package/dist/ui/vendor/jsm/loaders/HDRCubeTextureLoader.js +164 -0
- package/dist/ui/vendor/jsm/loaders/HDRLoader.js +463 -0
- package/dist/ui/vendor/jsm/loaders/IESLoader.js +379 -0
- package/dist/ui/vendor/jsm/loaders/KMZLoader.js +163 -0
- package/dist/ui/vendor/jsm/loaders/KTX2Loader.js +1276 -0
- package/dist/ui/vendor/jsm/loaders/KTXLoader.js +197 -0
- package/dist/ui/vendor/jsm/loaders/LDrawLoader.js +2510 -0
- package/dist/ui/vendor/jsm/loaders/LUT3dlLoader.js +205 -0
- package/dist/ui/vendor/jsm/loaders/LUTCubeLoader.js +190 -0
- package/dist/ui/vendor/jsm/loaders/LUTImageLoader.js +190 -0
- package/dist/ui/vendor/jsm/loaders/LWOLoader.js +1051 -0
- package/dist/ui/vendor/jsm/loaders/LottieLoader.js +130 -0
- package/dist/ui/vendor/jsm/loaders/MD2Loader.js +435 -0
- package/dist/ui/vendor/jsm/loaders/MDDLoader.js +147 -0
- package/dist/ui/vendor/jsm/loaders/MTLLoader.js +593 -0
- package/dist/ui/vendor/jsm/loaders/MaterialXLoader.js +1126 -0
- package/dist/ui/vendor/jsm/loaders/NRRDLoader.js +718 -0
- package/dist/ui/vendor/jsm/loaders/OBJLoader.js +955 -0
- package/dist/ui/vendor/jsm/loaders/PCDLoader.js +620 -0
- package/dist/ui/vendor/jsm/loaders/PDBLoader.js +272 -0
- package/dist/ui/vendor/jsm/loaders/PLYLoader.js +968 -0
- package/dist/ui/vendor/jsm/loaders/PVRLoader.js +270 -0
- package/dist/ui/vendor/jsm/loaders/RGBELoader.js +18 -0
- package/dist/ui/vendor/jsm/loaders/STLLoader.js +421 -0
- package/dist/ui/vendor/jsm/loaders/SVGLoader.js +3319 -0
- package/dist/ui/vendor/jsm/loaders/TDSLoader.js +1142 -0
- package/dist/ui/vendor/jsm/loaders/TGALoader.js +538 -0
- package/dist/ui/vendor/jsm/loaders/TIFFLoader.js +59 -0
- package/dist/ui/vendor/jsm/loaders/TTFLoader.js +261 -0
- package/dist/ui/vendor/jsm/loaders/USDLoader.js +303 -0
- package/dist/ui/vendor/jsm/loaders/USDZLoader.js +16 -0
- package/dist/ui/vendor/jsm/loaders/UltraHDRLoader.js +755 -0
- package/dist/ui/vendor/jsm/loaders/VOXLoader.js +919 -0
- package/dist/ui/vendor/jsm/loaders/VRMLLoader.js +3646 -0
- package/dist/ui/vendor/jsm/loaders/VTKLoader.js +1293 -0
- package/dist/ui/vendor/jsm/loaders/XYZLoader.js +143 -0
- package/dist/ui/vendor/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/dist/ui/vendor/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/dist/ui/vendor/jsm/loaders/lwo/IFFParser.js +1217 -0
- package/dist/ui/vendor/jsm/loaders/lwo/LWO2Parser.js +414 -0
- package/dist/ui/vendor/jsm/loaders/lwo/LWO3Parser.js +373 -0
- package/dist/ui/vendor/jsm/loaders/usd/USDAParser.js +901 -0
- package/dist/ui/vendor/jsm/loaders/usd/USDCParser.js +1878 -0
- package/dist/ui/vendor/jsm/loaders/usd/USDComposer.js +4627 -0
- package/dist/ui/vendor/jsm/utils/BufferGeometryUtils.js +1501 -0
- package/dist/ui/vendor/jsm/utils/CameraUtils.js +82 -0
- package/dist/ui/vendor/jsm/utils/ColorUtils.js +76 -0
- package/dist/ui/vendor/jsm/utils/GeometryCompressionUtils.js +547 -0
- package/dist/ui/vendor/jsm/utils/GeometryUtils.js +226 -0
- package/dist/ui/vendor/jsm/utils/LDrawUtils.js +211 -0
- package/dist/ui/vendor/jsm/utils/SceneOptimizer.js +458 -0
- package/dist/ui/vendor/jsm/utils/SceneUtils.js +363 -0
- package/dist/ui/vendor/jsm/utils/ShadowMapViewer.js +244 -0
- package/dist/ui/vendor/jsm/utils/ShadowMapViewerGPU.js +233 -0
- package/dist/ui/vendor/jsm/utils/SkeletonUtils.js +496 -0
- package/dist/ui/vendor/jsm/utils/SortUtils.js +175 -0
- package/dist/ui/vendor/jsm/utils/UVsDebug.js +173 -0
- package/dist/ui/vendor/jsm/utils/WebGLTextureUtils.js +115 -0
- package/dist/ui/vendor/jsm/utils/WebGPUTextureUtils.js +81 -0
- package/dist/ui/vendor/jsm/utils/WorkerPool.js +167 -0
- package/dist/ui/vendor/three.core.min.js +6 -0
- package/dist/ui/vendor/three.module.min.js +6 -0
- package/dist/ui/viewer/ambient.js +39 -0
- package/dist/ui/viewer/api.js +93 -0
- package/dist/ui/viewer/chrome.js +36 -0
- package/dist/ui/viewer/edges.js +33 -0
- package/dist/ui/viewer/index.html +32 -0
- package/dist/ui/viewer/inspector.js +23 -0
- package/dist/ui/viewer/lenses/activity.js +24 -0
- package/dist/ui/viewer/lenses/community.js +5 -0
- package/dist/ui/viewer/lenses/edges.js +4 -0
- package/dist/ui/viewer/lenses/impact.js +6 -0
- package/dist/ui/viewer/lenses/search.js +69 -0
- package/dist/ui/viewer/lod.js +100 -0
- package/dist/ui/viewer/main.js +92 -0
- package/dist/ui/viewer/picking.js +45 -0
- package/dist/ui/viewer/scene.js +85 -0
- package/dist/ui/viewer/skins/default-skin.js +15 -0
- package/dist/ui/viewer/skins/loader.js +44 -0
- package/dist/ui/viewer/skins/manifest-schema.js +30 -0
- package/dist/ui/viewer/state.js +44 -0
- package/dist/ui/viewer/theme.js +23 -0
- package/dist/ui/viewer/universe.js +151 -0
- package/dist/ui/viewer/viewer.css +85 -0
- package/dist/util/safeRegex.d.ts.map +1 -1
- package/dist/util/safeRegex.js +221 -68
- package/dist/util/safeRegex.js.map +1 -1
- package/dist/viewer/legacy-graph.d.ts +40 -0
- package/dist/viewer/legacy-graph.d.ts.map +1 -0
- package/dist/viewer/legacy-graph.js +152 -0
- package/dist/viewer/legacy-graph.js.map +1 -0
- package/dist/viewer/routes.d.ts +10 -0
- package/dist/viewer/routes.d.ts.map +1 -0
- package/dist/viewer/routes.js +221 -0
- package/dist/viewer/routes.js.map +1 -0
- package/dist/viewer/service.d.ts +44 -0
- package/dist/viewer/service.d.ts.map +1 -0
- package/dist/viewer/service.js +160 -0
- package/dist/viewer/service.js.map +1 -0
- package/dist/viewer/types.d.ts +63 -0
- package/dist/viewer/types.d.ts.map +1 -0
- package/dist/viewer/types.js +2 -0
- package/dist/viewer/types.js.map +1 -0
- package/dist/viewer/viewer-config.d.ts +12 -0
- package/dist/viewer/viewer-config.d.ts.map +1 -0
- package/dist/viewer/viewer-config.js +36 -0
- package/dist/viewer/viewer-config.js.map +1 -0
- package/package.json +18 -9
- package/templates/SDL.md +19 -0
- package/templates/claude-code.json +8 -43
- package/dist/ui/graph.css +0 -108
- package/dist/ui/graph.d.ts +0 -2
- package/dist/ui/graph.d.ts.map +0 -1
- package/dist/ui/graph.html +0 -52
- package/dist/ui/graph.js +0 -259
- package/dist/ui/graph.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sdl-mcp",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.3",
|
|
4
4
|
"description": "Symbol Delta Ledger MCP Server - Cards-first code context for polyglot repositories",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"scripts": {
|
|
33
33
|
"postinstall": "node scripts/postinstall.mjs",
|
|
34
34
|
"clean:dist": "node scripts/clean-dist.mjs",
|
|
35
|
-
"build": "tsc -p tsconfig.build.json && node scripts/copy-ui-assets.mjs",
|
|
35
|
+
"build": "tsc -p tsconfig.build.json && tsc -p tsconfig.ui.json && node scripts/copy-ui-assets.mjs && node scripts/copy-vendor-assets.mjs",
|
|
36
36
|
"build:scripts": "tsc -p tsconfig.scripts.json && node scripts/fix-imports.ts",
|
|
37
37
|
"build:runtime": "npm run clean:dist && npm run build",
|
|
38
38
|
"build:all": "npm run clean:dist && npm run build && npm run build:scripts",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"test:unit": "node scripts/run-tests.mjs --group=unit",
|
|
46
46
|
"test:integration": "node scripts/run-tests.mjs --group=integration",
|
|
47
47
|
"test:property": "node scripts/run-tests.mjs --group=property",
|
|
48
|
-
"test:native": "npm run build:all && npm run test:native-parity && npm run test:native-index-smoke && npm run test:parity",
|
|
48
|
+
"test:native": "npm run build:all && npm run test:native-parity && npm run test:layout-parity && npm run test:native-index-smoke && npm run test:parity",
|
|
49
49
|
"test:benchmark": "node scripts/run-tests.mjs --group=benchmark",
|
|
50
50
|
"test:root": "node scripts/run-tests.mjs --group=root",
|
|
51
51
|
"test:golden-files": "node scripts/run-tests.mjs --group=golden",
|
|
@@ -68,6 +68,8 @@
|
|
|
68
68
|
"benchmark:provider-first-fallback": "node scripts/provider-first-fallback-benchmark.ts",
|
|
69
69
|
"benchmark:record-trace": "node scripts/record-trace.ts",
|
|
70
70
|
"benchmark:setup-external": "node scripts/setup-external-benchmark-repos.ts",
|
|
71
|
+
"benchmark:external": "node scripts/external-benchmark-runner.mjs",
|
|
72
|
+
"benchmark:external:verify": "node scripts/verify-external-benchmark-evidence.mjs",
|
|
71
73
|
"benchmark:v067": "node scripts/benchmark/v067-baseline.ts",
|
|
72
74
|
"benchmark:v067:check": "node scripts/benchmark/v067-baseline.ts --check devdocs/benchmarks/v067-baseline.json",
|
|
73
75
|
"benchmark:v067:save": "node scripts/benchmark/v067-baseline.ts --out devdocs/benchmarks/v067-baseline.json",
|
|
@@ -82,7 +84,8 @@
|
|
|
82
84
|
"test:native-parity": "node tests/native/parity-test.ts",
|
|
83
85
|
"test:parity": "node --experimental-strip-types --test-concurrency=1 --test tests/integration/engine-parity.test.ts",
|
|
84
86
|
"check:config-sync": "node scripts/check-config-sync.ts",
|
|
85
|
-
"check:schema-sync": "node scripts/check-schema-sync.mjs",
|
|
87
|
+
"check:schema-sync": "node scripts/check-schema-sync.mjs && node scripts/check-skin-template-sync.mjs",
|
|
88
|
+
"check:skin-template-sync": "node scripts/check-skin-template-sync.mjs",
|
|
86
89
|
"check:provider-first-graph": "node --experimental-strip-types scripts/check-provider-first-graph.ts",
|
|
87
90
|
"docs:language-support:check": "node --experimental-strip-types scripts/check-language-provider-support.ts",
|
|
88
91
|
"docs:tools:generate": "node --experimental-strip-types scripts/generate-tool-inventory.ts",
|
|
@@ -95,7 +98,10 @@
|
|
|
95
98
|
"test:mutation": "stryker run stryker.conf.cjs",
|
|
96
99
|
"test:coverage": "node --experimental-test-coverage scripts/run-tests.mjs",
|
|
97
100
|
"test:native-index-smoke": "node --experimental-strip-types scripts/native-index-smoke.ts",
|
|
98
|
-
"typecheck:scripts": "tsc -p tsconfig.scripts.json --noEmit"
|
|
101
|
+
"typecheck:scripts": "tsc -p tsconfig.scripts.json --noEmit",
|
|
102
|
+
"build:ui": "tsc -p tsconfig.ui.json",
|
|
103
|
+
"typecheck:ui": "tsc -p tsconfig.ui.json --noEmit",
|
|
104
|
+
"test:layout-parity": "node tests/native/layout-parity-test.ts"
|
|
99
105
|
},
|
|
100
106
|
"keywords": [
|
|
101
107
|
"mcp",
|
|
@@ -117,6 +123,8 @@
|
|
|
117
123
|
"@opentelemetry/api": "^1.9.0",
|
|
118
124
|
"@opentelemetry/sdk-trace-base": "^2.8.0",
|
|
119
125
|
"@opentelemetry/sdk-trace-node": "^2.8.0",
|
|
126
|
+
"fflate": "0.8.3",
|
|
127
|
+
"three": "0.185.1",
|
|
120
128
|
"tree-sitter": "npm:@keqingmoe/tree-sitter@0.26.2",
|
|
121
129
|
"tree-sitter-bash": "npm:sdl-mcp-tree-sitter-bash@^1.0.1",
|
|
122
130
|
"tree-sitter-c": "npm:sdl-mcp-tree-sitter-c@^1.0.1",
|
|
@@ -147,10 +155,10 @@
|
|
|
147
155
|
"fb-watchman": "^2.0.2",
|
|
148
156
|
"kuzu": "npm:@ladybugdb/core@0.16.1",
|
|
149
157
|
"onnxruntime-node": "^1.24.3",
|
|
150
|
-
"sdl-mcp-native": "0.12.
|
|
151
|
-
"sdl-mcp-watchman": "0.12.
|
|
152
|
-
"sdl-mcp-watchman-linux-x64": "0.12.
|
|
153
|
-
"sdl-mcp-watchman-win32-x64": "0.12.
|
|
158
|
+
"sdl-mcp-native": "0.12.3",
|
|
159
|
+
"sdl-mcp-watchman": "0.12.3",
|
|
160
|
+
"sdl-mcp-watchman-linux-x64": "0.12.3",
|
|
161
|
+
"sdl-mcp-watchman-win32-x64": "0.12.3",
|
|
154
162
|
"tokenizers": "npm:@anush008/tokenizers@^0.6.0"
|
|
155
163
|
},
|
|
156
164
|
"devDependencies": {
|
|
@@ -160,6 +168,7 @@
|
|
|
160
168
|
"@stryker-mutator/core": "^9.6.0",
|
|
161
169
|
"@types/fb-watchman": "^2.0.6",
|
|
162
170
|
"@types/node": "^24.0.0",
|
|
171
|
+
"@types/three": "0.185.0",
|
|
163
172
|
"eslint": "^10.1.0",
|
|
164
173
|
"eslint-plugin-import-x": "^4.16.2",
|
|
165
174
|
"fast-check": "^4.6.0",
|
package/templates/SDL.md
CHANGED
|
@@ -187,6 +187,8 @@ Use the cheapest rung that answers the task. Static price tags in `sdl.manual` a
|
|
|
187
187
|
- Answer first: for explain/debug, call `sdl.context` with `options.answerFirst: true`; expand with `symbol.getCard` or a normal context call on the returned evidence IDs only if needed.
|
|
188
188
|
- Targeted files: if `file.read` returns the large-read hint, retry with `search` plus `searchContext`, `offset` plus `limit`, `jsonPath`, `maxTokens`, or `maxBytes`.
|
|
189
189
|
|
|
190
|
+
For document-heavy planning, locate the relevant README, ADR, specification, or plan and use targeted `sdl.file` `op: "read"` with `search`, bounded ranges, or `jsonPath`. If broad `sdl.context` returns irrelevant symbol evidence, switch retrieval surfaces instead of widening symbol budgets.
|
|
191
|
+
|
|
190
192
|
---
|
|
191
193
|
|
|
192
194
|
## 3. File And Edit Rules
|
|
@@ -208,6 +210,23 @@ Use SDL file and edit tools instead of native read/write paths.
|
|
|
208
210
|
|
|
209
211
|
### Non-Indexed Reads
|
|
210
212
|
|
|
213
|
+
Use this direct targeted document read when repository prose drives the task:
|
|
214
|
+
|
|
215
|
+
```json
|
|
216
|
+
{
|
|
217
|
+
"op": "read",
|
|
218
|
+
"repoId": "sdl-mcp",
|
|
219
|
+
"filePath": "docs/feature-deep-dives/agent-context.md",
|
|
220
|
+
"search": "## When To Use It",
|
|
221
|
+
"searchContext": 8,
|
|
222
|
+
"limit": 4
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
`searchContext` and `limit` bound the result.
|
|
227
|
+
|
|
228
|
+
Use a multi-file workflow when one task needs several non-indexed files:
|
|
229
|
+
|
|
211
230
|
```json
|
|
212
231
|
{
|
|
213
232
|
"repoId": "<repoId>",
|
|
@@ -1,54 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Claude Code MCP Configuration Template for SDL-MCP",
|
|
3
3
|
"_documentation": {
|
|
4
|
-
"purpose": "Configure SDL-MCP as
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
"npx": "npx works cross-platform. For global install, use 'node' with full path",
|
|
9
|
-
"environment": "SDL_CONFIG_PATH or SDL_CONFIG must be set to point to your sdlmcp.config.json"
|
|
4
|
+
"purpose": "Configure SDL-MCP as a stdio MCP server for Claude Code",
|
|
5
|
+
"destinations": {
|
|
6
|
+
"project": "Save the full mcpServers document as .mcp.json in the repository root.",
|
|
7
|
+
"cli": "For local or user scope, pass only mcpServers.sdl-mcp to claude mcp add-json; use --scope local or --scope user."
|
|
10
8
|
},
|
|
11
|
-
"
|
|
12
|
-
"powerShell": "Single quotes work for paths, double quotes for variable expansion",
|
|
13
|
-
"cmd": "Use double quotes for all paths with spaces"
|
|
14
|
-
},
|
|
15
|
-
"workspaceFolder": {
|
|
16
|
-
"description": "Replaced by Claude Code with the current workspace root",
|
|
17
|
-
"windows": "Resolves to forward-slash path on all platforms"
|
|
18
|
-
}
|
|
9
|
+
"windows": "Use the emitted PowerShell snippet. cmd.exe users should use the project .mcp.json form or run the PowerShell snippet."
|
|
19
10
|
},
|
|
20
11
|
"mcpServers": {
|
|
21
12
|
"sdl-mcp": {
|
|
13
|
+
"type": "stdio",
|
|
22
14
|
"command": "npx",
|
|
23
|
-
"args": ["
|
|
24
|
-
"env": {
|
|
25
|
-
"SDL_CONFIG": "${workspaceFolder}/sdlmcp.config.json",
|
|
26
|
-
"_comment_env": "Alternative: Set SDL_CONFIG_PATH if you prefer environment variable name"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"_alternative_global_install": {
|
|
31
|
-
"description": "If you installed SDL-MCP globally with 'npm install -g sdl-mcp':",
|
|
32
|
-
"mcpServers": {
|
|
33
|
-
"sdl-mcp": {
|
|
34
|
-
"command": "sdl-mcp",
|
|
35
|
-
"args": ["serve", "--stdio"],
|
|
36
|
-
"env": {
|
|
37
|
-
"SDL_CONFIG": "${workspaceFolder}/sdlmcp.config.json"
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"_alternative_windows_direct_node": {
|
|
43
|
-
"description": "Windows alternative using direct Node invocation (if npx is unavailable):",
|
|
44
|
-
"mcpServers": {
|
|
45
|
-
"sdl-mcp": {
|
|
46
|
-
"command": "node",
|
|
47
|
-
"args": ["F:/path/to/sdl-mcp/dist/main.js", "serve", "--stdio"],
|
|
48
|
-
"env": {
|
|
49
|
-
"SDL_CONFIG": "${workspaceFolder}/sdlmcp.config.json"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
15
|
+
"args": ["-y", "sdl-mcp"],
|
|
16
|
+
"env": {}
|
|
52
17
|
}
|
|
53
18
|
}
|
|
54
19
|
}
|
package/dist/ui/graph.css
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--bg: #f5f7fb;
|
|
3
|
-
--panel: #ffffff;
|
|
4
|
-
--text: #1f2937;
|
|
5
|
-
--muted: #6b7280;
|
|
6
|
-
--accent: #0d9488;
|
|
7
|
-
--edge-call: #fb923c;
|
|
8
|
-
--edge-import: #60a5fa;
|
|
9
|
-
--edge-config: #c084fc;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
* {
|
|
13
|
-
box-sizing: border-box;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
body {
|
|
17
|
-
margin: 0;
|
|
18
|
-
font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
|
|
19
|
-
color: var(--text);
|
|
20
|
-
background: radial-gradient(circle at top right, #dbeafe, transparent 45%),
|
|
21
|
-
radial-gradient(circle at top left, #ccfbf1, transparent 40%),
|
|
22
|
-
var(--bg);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
header {
|
|
26
|
-
padding: 14px 16px;
|
|
27
|
-
border-bottom: 1px solid #d1d5db;
|
|
28
|
-
background: rgba(255, 255, 255, 0.9);
|
|
29
|
-
backdrop-filter: blur(4px);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
h1 {
|
|
33
|
-
margin: 0 0 8px 0;
|
|
34
|
-
font-size: 20px;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.controls {
|
|
38
|
-
display: flex;
|
|
39
|
-
gap: 8px;
|
|
40
|
-
flex-wrap: wrap;
|
|
41
|
-
margin-bottom: 8px;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
label {
|
|
45
|
-
display: flex;
|
|
46
|
-
flex-direction: column;
|
|
47
|
-
font-size: 12px;
|
|
48
|
-
color: var(--muted);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
input,
|
|
52
|
-
button {
|
|
53
|
-
font: inherit;
|
|
54
|
-
border: 1px solid #d1d5db;
|
|
55
|
-
border-radius: 8px;
|
|
56
|
-
padding: 6px 10px;
|
|
57
|
-
background: #fff;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
button {
|
|
61
|
-
cursor: pointer;
|
|
62
|
-
color: #0f172a;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
button:hover {
|
|
66
|
-
border-color: var(--accent);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
main {
|
|
70
|
-
display: grid;
|
|
71
|
-
grid-template-columns: minmax(0, 1fr) 320px;
|
|
72
|
-
gap: 10px;
|
|
73
|
-
padding: 10px;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
#graph {
|
|
77
|
-
width: 100%;
|
|
78
|
-
min-height: 70vh;
|
|
79
|
-
border-radius: 12px;
|
|
80
|
-
background: linear-gradient(180deg, #ffffff, #f8fafc);
|
|
81
|
-
border: 1px solid #d1d5db;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
#details {
|
|
85
|
-
background: var(--panel);
|
|
86
|
-
border-radius: 12px;
|
|
87
|
-
border: 1px solid #d1d5db;
|
|
88
|
-
padding: 12px;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
#details h2 {
|
|
92
|
-
margin: 0 0 8px 0;
|
|
93
|
-
font-size: 16px;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
#nodeDetails {
|
|
97
|
-
margin: 0;
|
|
98
|
-
max-height: 70vh;
|
|
99
|
-
overflow: auto;
|
|
100
|
-
white-space: pre-wrap;
|
|
101
|
-
font-size: 12px;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
@media (max-width: 980px) {
|
|
105
|
-
main {
|
|
106
|
-
grid-template-columns: 1fr;
|
|
107
|
-
}
|
|
108
|
-
}
|
package/dist/ui/graph.d.ts
DELETED
package/dist/ui/graph.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/ui/graph.js"],"names":[],"mappings":""}
|
package/dist/ui/graph.html
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>SDL Graph Explorer</title>
|
|
7
|
-
<link rel="stylesheet" href="/ui/graph.css" />
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<header>
|
|
11
|
-
<h1>SDL Graph Explorer</h1>
|
|
12
|
-
<div class="controls">
|
|
13
|
-
<label>
|
|
14
|
-
Repo
|
|
15
|
-
<input id="repoId" value="sdl-mcp" />
|
|
16
|
-
</label>
|
|
17
|
-
<label>
|
|
18
|
-
Symbol
|
|
19
|
-
<input id="symbolId" placeholder="optional symbol id" />
|
|
20
|
-
</label>
|
|
21
|
-
<label>
|
|
22
|
-
Max Nodes
|
|
23
|
-
<input id="maxNodes" type="number" min="20" max="500" value="200" />
|
|
24
|
-
</label>
|
|
25
|
-
<button id="loadBtn">Load</button>
|
|
26
|
-
<button id="exportSvgBtn">Export SVG</button>
|
|
27
|
-
<button id="exportPngBtn">Export PNG</button>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="controls">
|
|
30
|
-
<label>
|
|
31
|
-
From Version
|
|
32
|
-
<input id="fromVersion" placeholder="v123" />
|
|
33
|
-
</label>
|
|
34
|
-
<label>
|
|
35
|
-
To Version
|
|
36
|
-
<input id="toVersion" placeholder="v124" />
|
|
37
|
-
</label>
|
|
38
|
-
<button id="blastBtn">Blast Radius</button>
|
|
39
|
-
<input id="filter" placeholder="Filter nodes" />
|
|
40
|
-
</div>
|
|
41
|
-
</header>
|
|
42
|
-
<main>
|
|
43
|
-
<svg id="graph" width="1200" height="760" aria-label="Graph visualization"></svg>
|
|
44
|
-
<aside id="details">
|
|
45
|
-
<h2>Node</h2>
|
|
46
|
-
<pre id="nodeDetails">Select a node</pre>
|
|
47
|
-
</aside>
|
|
48
|
-
</main>
|
|
49
|
-
<script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js"></script>
|
|
50
|
-
<script type="module" src="/ui/graph.js"></script>
|
|
51
|
-
</body>
|
|
52
|
-
</html>
|
package/dist/ui/graph.js
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
const svg = d3.select("#graph");
|
|
2
|
-
const rootG = svg.append("g");
|
|
3
|
-
const linksG = rootG.append("g");
|
|
4
|
-
const nodesG = rootG.append("g");
|
|
5
|
-
|
|
6
|
-
const state = {
|
|
7
|
-
nodes: [],
|
|
8
|
-
links: [],
|
|
9
|
-
simulation: null,
|
|
10
|
-
maxNodes: 200,
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const colorByKind = {
|
|
14
|
-
function: "#0d9488",
|
|
15
|
-
method: "#0284c7",
|
|
16
|
-
class: "#2563eb",
|
|
17
|
-
interface: "#0891b2",
|
|
18
|
-
type: "#16a34a",
|
|
19
|
-
module: "#64748b",
|
|
20
|
-
constructor: "#f59e0b",
|
|
21
|
-
variable: "#7c3aed",
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const edgeColor = {
|
|
25
|
-
call: "#fb923c",
|
|
26
|
-
import: "#60a5fa",
|
|
27
|
-
config: "#c084fc",
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
function setNodeDetails(node) {
|
|
31
|
-
const details = document.getElementById("nodeDetails");
|
|
32
|
-
details.textContent = node
|
|
33
|
-
? JSON.stringify(node, null, 2)
|
|
34
|
-
: "Select a node";
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function dedupeGraph(nodes, links) {
|
|
38
|
-
const maxNodes = Number(document.getElementById("maxNodes").value || "200");
|
|
39
|
-
const nodeMap = new Map();
|
|
40
|
-
for (const node of nodes) {
|
|
41
|
-
if (!node || !node.id) continue;
|
|
42
|
-
if (!nodeMap.has(node.id)) {
|
|
43
|
-
nodeMap.set(node.id, node);
|
|
44
|
-
}
|
|
45
|
-
if (nodeMap.size >= maxNodes) break;
|
|
46
|
-
}
|
|
47
|
-
const nodeIds = new Set(nodeMap.keys());
|
|
48
|
-
const edgeMap = new Map();
|
|
49
|
-
for (const link of links) {
|
|
50
|
-
const key = `${link.source}->${link.target}:${link.type}`;
|
|
51
|
-
if (edgeMap.has(key)) continue;
|
|
52
|
-
if (!nodeIds.has(link.source) || !nodeIds.has(link.target)) continue;
|
|
53
|
-
edgeMap.set(key, link);
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
nodes: Array.from(nodeMap.values()),
|
|
57
|
-
links: Array.from(edgeMap.values()),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function renderGraph() {
|
|
62
|
-
const graph = dedupeGraph(state.nodes, state.links);
|
|
63
|
-
state.nodes = graph.nodes;
|
|
64
|
-
state.links = graph.links;
|
|
65
|
-
|
|
66
|
-
if (state.simulation) {
|
|
67
|
-
state.simulation.stop();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
linksG.selectAll("*").remove();
|
|
71
|
-
nodesG.selectAll("*").remove();
|
|
72
|
-
|
|
73
|
-
const link = linksG
|
|
74
|
-
.selectAll("line")
|
|
75
|
-
.data(state.links, (d) => `${d.source}:${d.target}:${d.type}`)
|
|
76
|
-
.join("line")
|
|
77
|
-
.attr("stroke", (d) => edgeColor[d.type] || "#94a3b8")
|
|
78
|
-
.attr("stroke-opacity", 0.65)
|
|
79
|
-
.attr("stroke-width", (d) => Math.max(1, Math.min(4, d.weight || 1)));
|
|
80
|
-
|
|
81
|
-
const node = nodesG
|
|
82
|
-
.selectAll("circle")
|
|
83
|
-
.data(state.nodes, (d) => d.id)
|
|
84
|
-
.join("circle")
|
|
85
|
-
.attr("r", (d) => Math.max(5, Math.min(20, d.size || 8)))
|
|
86
|
-
.attr("fill", (d) => colorByKind[d.kind] || "#64748b")
|
|
87
|
-
.attr("stroke", "#ffffff")
|
|
88
|
-
.attr("stroke-width", 1.3)
|
|
89
|
-
.on("click", async (_, d) => {
|
|
90
|
-
setNodeDetails(d);
|
|
91
|
-
await expandNode(d.id);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
node.append("title").text((d) => `${d.label} (${d.kind})`);
|
|
95
|
-
|
|
96
|
-
const label = nodesG
|
|
97
|
-
.selectAll("text")
|
|
98
|
-
.data(state.nodes, (d) => `label:${d.id}`)
|
|
99
|
-
.join("text")
|
|
100
|
-
.text((d) => d.label)
|
|
101
|
-
.attr("font-size", 10)
|
|
102
|
-
.attr("fill", "#334155");
|
|
103
|
-
|
|
104
|
-
const skipAnimation = state.nodes.length > 100;
|
|
105
|
-
state.simulation = d3
|
|
106
|
-
.forceSimulation(state.nodes)
|
|
107
|
-
.force(
|
|
108
|
-
"link",
|
|
109
|
-
d3
|
|
110
|
-
.forceLink(state.links)
|
|
111
|
-
.id((d) => d.id)
|
|
112
|
-
.distance(skipAnimation ? 65 : 95),
|
|
113
|
-
)
|
|
114
|
-
.force("charge", d3.forceManyBody().strength(skipAnimation ? -80 : -140))
|
|
115
|
-
.force(
|
|
116
|
-
"center",
|
|
117
|
-
d3.forceCenter(
|
|
118
|
-
Number(svg.attr("width")) / 2,
|
|
119
|
-
Number(svg.attr("height")) / 2,
|
|
120
|
-
),
|
|
121
|
-
)
|
|
122
|
-
.on("tick", () => {
|
|
123
|
-
link
|
|
124
|
-
.attr("x1", (d) => d.source.x)
|
|
125
|
-
.attr("y1", (d) => d.source.y)
|
|
126
|
-
.attr("x2", (d) => d.target.x)
|
|
127
|
-
.attr("y2", (d) => d.target.y);
|
|
128
|
-
node.attr("cx", (d) => d.x).attr("cy", (d) => d.y);
|
|
129
|
-
label.attr("x", (d) => d.x + 8).attr("y", (d) => d.y + 3);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
if (skipAnimation) {
|
|
133
|
-
for (let i = 0; i < 80; i += 1) {
|
|
134
|
-
state.simulation.tick();
|
|
135
|
-
}
|
|
136
|
-
state.simulation.stop();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
async function requestJson(url) {
|
|
141
|
-
const response = await fetch(url);
|
|
142
|
-
if (!response.ok) {
|
|
143
|
-
throw new Error(await response.text());
|
|
144
|
-
}
|
|
145
|
-
return response.json();
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
async function loadGraph() {
|
|
149
|
-
const repoId = document.getElementById("repoId").value.trim();
|
|
150
|
-
const symbolId = document.getElementById("symbolId").value.trim();
|
|
151
|
-
const maxNodes = document.getElementById("maxNodes").value.trim() || "200";
|
|
152
|
-
state.maxNodes = Number(maxNodes);
|
|
153
|
-
|
|
154
|
-
const endpoint = symbolId
|
|
155
|
-
? `/api/graph/${encodeURIComponent(repoId)}/symbol/${encodeURIComponent(symbolId)}/neighborhood?maxNodes=${encodeURIComponent(maxNodes)}`
|
|
156
|
-
: `/api/graph/${encodeURIComponent(repoId)}/slice/preview?maxNodes=${encodeURIComponent(maxNodes)}`;
|
|
157
|
-
|
|
158
|
-
const data = await requestJson(endpoint);
|
|
159
|
-
state.nodes = data.nodes || [];
|
|
160
|
-
state.links = data.links || [];
|
|
161
|
-
renderGraph();
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
async function loadBlastRadius() {
|
|
165
|
-
const repoId = document.getElementById("repoId").value.trim();
|
|
166
|
-
const fromVersion = document.getElementById("fromVersion").value.trim();
|
|
167
|
-
const toVersion = document.getElementById("toVersion").value.trim();
|
|
168
|
-
const maxNodes = document.getElementById("maxNodes").value.trim() || "200";
|
|
169
|
-
if (!fromVersion || !toVersion) return;
|
|
170
|
-
const data = await requestJson(
|
|
171
|
-
`/api/graph/${encodeURIComponent(repoId)}/blast-radius/${encodeURIComponent(fromVersion)}/${encodeURIComponent(toVersion)}?maxNodes=${encodeURIComponent(maxNodes)}`,
|
|
172
|
-
);
|
|
173
|
-
state.nodes = (data.nodes || []).map((node) => ({
|
|
174
|
-
...node,
|
|
175
|
-
blast: true,
|
|
176
|
-
}));
|
|
177
|
-
state.links = data.links || [];
|
|
178
|
-
renderGraph();
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async function expandNode(symbolId) {
|
|
182
|
-
const repoId = document.getElementById("repoId").value.trim();
|
|
183
|
-
const maxNodes = document.getElementById("maxNodes").value.trim() || "200";
|
|
184
|
-
const data = await requestJson(
|
|
185
|
-
`/api/graph/${encodeURIComponent(repoId)}/symbol/${encodeURIComponent(symbolId)}/neighborhood?maxNodes=${encodeURIComponent(maxNodes)}`,
|
|
186
|
-
);
|
|
187
|
-
state.nodes = state.nodes.concat(data.nodes || []);
|
|
188
|
-
state.links = state.links.concat(data.links || []);
|
|
189
|
-
renderGraph();
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
function applyFilter() {
|
|
193
|
-
const query = document.getElementById("filter").value.trim().toLowerCase();
|
|
194
|
-
nodesG.selectAll("circle").attr("opacity", (d) => {
|
|
195
|
-
if (!query) return 1;
|
|
196
|
-
return d.label.toLowerCase().includes(query) ? 1 : 0.2;
|
|
197
|
-
});
|
|
198
|
-
nodesG.selectAll("text").attr("opacity", (d) => {
|
|
199
|
-
if (!query) return 1;
|
|
200
|
-
return d.label.toLowerCase().includes(query) ? 1 : 0.15;
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
function exportSvg() {
|
|
205
|
-
const serializer = new XMLSerializer();
|
|
206
|
-
const raw = serializer.serializeToString(svg.node());
|
|
207
|
-
const blob = new Blob([raw], { type: "image/svg+xml;charset=utf-8" });
|
|
208
|
-
const url = URL.createObjectURL(blob);
|
|
209
|
-
const a = document.createElement("a");
|
|
210
|
-
a.href = url;
|
|
211
|
-
a.download = "sdl-graph.svg";
|
|
212
|
-
a.click();
|
|
213
|
-
URL.revokeObjectURL(url);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
function exportPng() {
|
|
217
|
-
const serializer = new XMLSerializer();
|
|
218
|
-
const raw = serializer.serializeToString(svg.node());
|
|
219
|
-
const encoded = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(raw)}`;
|
|
220
|
-
const image = new Image();
|
|
221
|
-
image.onload = () => {
|
|
222
|
-
const canvas = document.createElement("canvas");
|
|
223
|
-
canvas.width = Number(svg.attr("width"));
|
|
224
|
-
canvas.height = Number(svg.attr("height"));
|
|
225
|
-
const ctx = canvas.getContext("2d");
|
|
226
|
-
ctx.fillStyle = "#ffffff";
|
|
227
|
-
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
228
|
-
ctx.drawImage(image, 0, 0);
|
|
229
|
-
const a = document.createElement("a");
|
|
230
|
-
a.href = canvas.toDataURL("image/png");
|
|
231
|
-
a.download = "sdl-graph.png";
|
|
232
|
-
a.click();
|
|
233
|
-
};
|
|
234
|
-
image.src = encoded;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
svg.call(
|
|
238
|
-
d3.zoom().scaleExtent([0.2, 4]).on("zoom", (event) => {
|
|
239
|
-
rootG.attr("transform", event.transform);
|
|
240
|
-
}),
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
document.getElementById("loadBtn").addEventListener("click", () => {
|
|
244
|
-
loadGraph().catch((error) => {
|
|
245
|
-
setNodeDetails({ error: String(error) });
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
document.getElementById("blastBtn").addEventListener("click", () => {
|
|
249
|
-
loadBlastRadius().catch((error) => {
|
|
250
|
-
setNodeDetails({ error: String(error) });
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
document.getElementById("filter").addEventListener("input", applyFilter);
|
|
254
|
-
document.getElementById("exportSvgBtn").addEventListener("click", exportSvg);
|
|
255
|
-
document.getElementById("exportPngBtn").addEventListener("click", exportPng);
|
|
256
|
-
|
|
257
|
-
loadGraph().catch((error) => {
|
|
258
|
-
setNodeDetails({ error: String(error) });
|
|
259
|
-
});
|
package/dist/ui/graph.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/ui/graph.js"],"names":[],"mappings":"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"}
|