sysmledgraph 0.7.0
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 +71 -0
- package/dist/bin/cli.d.ts +6 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +61 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/src/cli/commands.d.ts +22 -0
- package/dist/src/cli/commands.d.ts.map +1 -0
- package/dist/src/cli/commands.js +87 -0
- package/dist/src/cli/commands.js.map +1 -0
- package/dist/src/discovery/find-sysml.d.ts +16 -0
- package/dist/src/discovery/find-sysml.d.ts.map +1 -0
- package/dist/src/discovery/find-sysml.js +30 -0
- package/dist/src/discovery/find-sysml.js.map +1 -0
- package/dist/src/discovery/load-order.d.ts +11 -0
- package/dist/src/discovery/load-order.d.ts.map +1 -0
- package/dist/src/discovery/load-order.js +85 -0
- package/dist/src/discovery/load-order.js.map +1 -0
- package/dist/src/graph/connection.d.ts +6 -0
- package/dist/src/graph/connection.d.ts.map +1 -0
- package/dist/src/graph/connection.js +7 -0
- package/dist/src/graph/connection.js.map +1 -0
- package/dist/src/graph/graph-store.d.ts +37 -0
- package/dist/src/graph/graph-store.d.ts.map +1 -0
- package/dist/src/graph/graph-store.js +108 -0
- package/dist/src/graph/graph-store.js.map +1 -0
- package/dist/src/graph/schema.d.ts +13 -0
- package/dist/src/graph/schema.d.ts.map +1 -0
- package/dist/src/graph/schema.js +21 -0
- package/dist/src/graph/schema.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/indexer/indexer.d.ts +20 -0
- package/dist/src/indexer/indexer.d.ts.map +1 -0
- package/dist/src/indexer/indexer.js +56 -0
- package/dist/src/indexer/indexer.js.map +1 -0
- package/dist/src/indexer/pipeline-phases.d.ts +8 -0
- package/dist/src/indexer/pipeline-phases.d.ts.map +1 -0
- package/dist/src/indexer/pipeline-phases.js +14 -0
- package/dist/src/indexer/pipeline-phases.js.map +1 -0
- package/dist/src/mcp/resources/context.d.ts +6 -0
- package/dist/src/mcp/resources/context.d.ts.map +1 -0
- package/dist/src/mcp/resources/context.js +45 -0
- package/dist/src/mcp/resources/context.js.map +1 -0
- package/dist/src/mcp/resources/schema.d.ts +6 -0
- package/dist/src/mcp/resources/schema.d.ts.map +1 -0
- package/dist/src/mcp/resources/schema.js +14 -0
- package/dist/src/mcp/resources/schema.js.map +1 -0
- package/dist/src/mcp/server.d.ts +8 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +175 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/clean-index.d.ts +12 -0
- package/dist/src/mcp/tools/clean-index.d.ts.map +1 -0
- package/dist/src/mcp/tools/clean-index.js +22 -0
- package/dist/src/mcp/tools/clean-index.js.map +1 -0
- package/dist/src/mcp/tools/context.d.ts +14 -0
- package/dist/src/mcp/tools/context.d.ts.map +1 -0
- package/dist/src/mcp/tools/context.js +51 -0
- package/dist/src/mcp/tools/context.js.map +1 -0
- package/dist/src/mcp/tools/cypher.d.ts +13 -0
- package/dist/src/mcp/tools/cypher.d.ts.map +1 -0
- package/dist/src/mcp/tools/cypher.js +25 -0
- package/dist/src/mcp/tools/cypher.js.map +1 -0
- package/dist/src/mcp/tools/generate-map.d.ts +13 -0
- package/dist/src/mcp/tools/generate-map.d.ts.map +1 -0
- package/dist/src/mcp/tools/generate-map.js +96 -0
- package/dist/src/mcp/tools/generate-map.js.map +1 -0
- package/dist/src/mcp/tools/impact.d.ts +14 -0
- package/dist/src/mcp/tools/impact.d.ts.map +1 -0
- package/dist/src/mcp/tools/impact.js +47 -0
- package/dist/src/mcp/tools/impact.js.map +1 -0
- package/dist/src/mcp/tools/index-db-graph.d.ts +14 -0
- package/dist/src/mcp/tools/index-db-graph.d.ts.map +1 -0
- package/dist/src/mcp/tools/index-db-graph.js +32 -0
- package/dist/src/mcp/tools/index-db-graph.js.map +1 -0
- package/dist/src/mcp/tools/list-indexed.d.ts +9 -0
- package/dist/src/mcp/tools/list-indexed.d.ts.map +1 -0
- package/dist/src/mcp/tools/list-indexed.js +14 -0
- package/dist/src/mcp/tools/list-indexed.js.map +1 -0
- package/dist/src/mcp/tools/query.d.ts +14 -0
- package/dist/src/mcp/tools/query.d.ts.map +1 -0
- package/dist/src/mcp/tools/query.js +47 -0
- package/dist/src/mcp/tools/query.js.map +1 -0
- package/dist/src/mcp/tools/rename.d.ts +19 -0
- package/dist/src/mcp/tools/rename.d.ts.map +1 -0
- package/dist/src/mcp/tools/rename.js +46 -0
- package/dist/src/mcp/tools/rename.js.map +1 -0
- package/dist/src/parser/lsp-client.d.ts +52 -0
- package/dist/src/parser/lsp-client.d.ts.map +1 -0
- package/dist/src/parser/lsp-client.js +230 -0
- package/dist/src/parser/lsp-client.js.map +1 -0
- package/dist/src/parser/lsp-server-path.d.ts +10 -0
- package/dist/src/parser/lsp-server-path.d.ts.map +1 -0
- package/dist/src/parser/lsp-server-path.js +29 -0
- package/dist/src/parser/lsp-server-path.js.map +1 -0
- package/dist/src/parser/symbols.d.ts +13 -0
- package/dist/src/parser/symbols.d.ts.map +1 -0
- package/dist/src/parser/symbols.js +150 -0
- package/dist/src/parser/symbols.js.map +1 -0
- package/dist/src/parser/sysml-mcp-client.d.ts +109 -0
- package/dist/src/parser/sysml-mcp-client.d.ts.map +1 -0
- package/dist/src/parser/sysml-mcp-client.js +185 -0
- package/dist/src/parser/sysml-mcp-client.js.map +1 -0
- package/dist/src/storage/clean.d.ts +15 -0
- package/dist/src/storage/clean.d.ts.map +1 -0
- package/dist/src/storage/clean.js +44 -0
- package/dist/src/storage/clean.js.map +1 -0
- package/dist/src/storage/list.d.ts +9 -0
- package/dist/src/storage/list.d.ts.map +1 -0
- package/dist/src/storage/list.js +12 -0
- package/dist/src/storage/list.js.map +1 -0
- package/dist/src/storage/location.d.ts +22 -0
- package/dist/src/storage/location.d.ts.map +1 -0
- package/dist/src/storage/location.js +36 -0
- package/dist/src/storage/location.js.map +1 -0
- package/dist/src/storage/registry.d.ts +14 -0
- package/dist/src/storage/registry.d.ts.map +1 -0
- package/dist/src/storage/registry.js +59 -0
- package/dist/src/storage/registry.js.map +1 -0
- package/dist/src/symbol-to-graph/mapping.d.ts +17 -0
- package/dist/src/symbol-to-graph/mapping.d.ts.map +1 -0
- package/dist/src/symbol-to-graph/mapping.js +102 -0
- package/dist/src/symbol-to-graph/mapping.js.map +1 -0
- package/dist/src/types.d.ts +40 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +35 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/worker/client.d.ts +21 -0
- package/dist/src/worker/client.d.ts.map +1 -0
- package/dist/src/worker/client.js +126 -0
- package/dist/src/worker/client.js.map +1 -0
- package/dist/src/worker/gateway.d.ts +79 -0
- package/dist/src/worker/gateway.d.ts.map +1 -0
- package/dist/src/worker/gateway.js +93 -0
- package/dist/src/worker/gateway.js.map +1 -0
- package/dist/src/worker/graph-worker.d.ts +7 -0
- package/dist/src/worker/graph-worker.d.ts.map +1 -0
- package/dist/src/worker/graph-worker.js +91 -0
- package/dist/src/worker/graph-worker.js.map +1 -0
- package/dist/src/worker/protocol.d.ts +21 -0
- package/dist/src/worker/protocol.d.ts.map +1 -0
- package/dist/src/worker/protocol.js +9 -0
- package/dist/src/worker/protocol.js.map +1 -0
- package/docs/INSTALL.md +16 -0
- package/docs/MCP_CLIENT_TEMPLATE_ANALYSIS.md +196 -0
- package/docs/MCP_INTERACTION_GUIDE.md +201 -0
- package/docs/MCP_SERVER_FOR_CURSOR.md +124 -0
- package/docs/PLAN.md +58 -0
- package/docs/PLAN_INDEPENDENT_LSP.md +145 -0
- package/docs/SKILL_DESIGN_PATTERNS.md +305 -0
- package/docs/TOOLS.md +317 -0
- package/lsp/README.md +41 -0
- package/lsp/node_modules/.bin/sysml-mcp +12 -0
- package/lsp/node_modules/.bin/sysml-mcp.cmd +9 -0
- package/lsp/node_modules/.bin/sysml-mcp.ps1 +16 -0
- package/lsp/node_modules/.package-lock.json +22 -0
- package/lsp/node_modules/sysml-v2-lsp/CHANGELOG.md +188 -0
- package/lsp/node_modules/sysml-v2-lsp/LICENSE +21 -0
- package/lsp/node_modules/sysml-v2-lsp/README.md +172 -0
- package/lsp/node_modules/sysml-v2-lsp/dist/server/mcpServer.js +167 -0
- package/lsp/node_modules/sysml-v2-lsp/dist/server/server.js +142 -0
- package/lsp/node_modules/sysml-v2-lsp/index.cjs +23 -0
- package/lsp/node_modules/sysml-v2-lsp/package.json +131 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/.project +17 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/.settings/org.eclipse.jdt.core.prefs +11 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/.meta.json +10 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/.project.json +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/AnalysisTooling.sysml +34 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/SampledFunctions.sysml +119 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/StateSpaceRepresentation.sysml +143 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/TradeStudies.sysml +171 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/.meta.json +8 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/.project.json +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/CausationConnections.sysml +83 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/CauseAndEffect.sysml +81 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/.meta.json +8 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/.project.json +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/ShapeItems.sysml +899 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/SpatialItems.sysml +168 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/.meta.json +10 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/.project.json +19 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ImageMetadata.sysml +78 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ModelingMetadata.sysml +143 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ParametersOfInterestMetadata.sysml +39 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/RiskMetadata.sysml +100 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/.meta.json +29 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/.project.json +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQ.sysml +42 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQAcoustics.sysml +439 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQAtomicNuclear.sysml +2726 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQBase.sysml +206 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQCharacteristicNumbers.sysml +1991 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQChemistryMolecular.sysml +1353 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQCondensedMatter.sysml +1223 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQElectromagnetism.sysml +2333 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQInformation.sysml +958 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQLight.sysml +1537 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQMechanics.sysml +1564 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQSpaceTime.sysml +1169 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQThermodynamics.sysml +1256 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/MeasurementRefCalculations.sysml +30 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/MeasurementReferences.sysml +526 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/Quantities.sysml +107 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/QuantityCalculations.sysml +70 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/SI.sysml +378 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/SIPrefixes.sysml +48 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/TensorCalculations.sysml +50 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/Time.sysml +274 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/USCustomaryUnits.sysml +260 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/VectorCalculations.sysml +62 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/.meta.json +8 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/.project.json +19 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/DerivationConnections.sysml +63 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/RequirementDerivation.sysml +39 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/.meta.json +9 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/.project.json +11 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/Collections.kerml +147 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/ScalarValues.kerml +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/VectorValues.kerml +64 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/.meta.json +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/.project.json +15 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/BaseFunctions.kerml +80 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/BooleanFunctions.kerml +22 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/CollectionFunctions.kerml +68 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ComplexFunctions.kerml +47 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ControlFunctions.kerml +117 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/DataFunctions.kerml +43 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/IntegerFunctions.kerml +43 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/NaturalFunctions.kerml +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/NumericalFunctions.kerml +43 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/OccurrenceFunctions.kerml +154 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/RationalFunctions.kerml +49 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/RealFunctions.kerml +56 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ScalarFunctions.kerml +33 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/SequenceFunctions.kerml +111 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/StringFunctions.kerml +25 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/TrigFunctions.kerml +35 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/VectorFunctions.kerml +273 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/.meta.json +22 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/.project.json +15 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Base.kerml +95 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Clocks.kerml +156 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/ControlPerformances.kerml +135 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/FeatureReferencingPerformances.kerml +190 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml +483 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Links.kerml +67 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Metaobjects.kerml +58 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Objects.kerml +212 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Observation.kerml +161 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Occurrences.kerml +992 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Performances.kerml +293 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/SpatialFrames.kerml +197 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/StatePerformances.kerml +145 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Transfers.kerml +281 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/TransitionPerformances.kerml +66 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Triggers.kerml +188 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/.meta.json +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/.project.json +19 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Actions.sysml +552 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Allocations.sysml +29 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/AnalysisCases.sysml +38 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Attributes.sysml +25 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Calculations.sysml +37 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Cases.sysml +71 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Connections.sysml +60 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Constraints.sysml +44 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Flows.sysml +126 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Interfaces.sysml +89 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Items.sysml +153 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Metadata.sysml +32 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Parts.sysml +81 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Ports.sysml +54 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Requirements.sysml +194 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/StandardViewDefinitions.sysml +123 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/States.sysml +103 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/SysML.sysml +539 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/UseCases.sysml +57 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/VerificationCases.sysml +103 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Views.sysml +164 -0
- package/lsp/package-lock.json +30 -0
- package/lsp/package.json +15 -0
- package/lsp/test-server.mjs +120 -0
- package/package.json +61 -0
- package/scripts/access-sysml-mcp.mjs +45 -0
- package/scripts/check-sysml-v2-lsp-version.mjs +39 -0
- package/scripts/clean.mjs +14 -0
- package/scripts/compare-mcp-vs-lsp-symbols.mjs +76 -0
- package/scripts/debug-index.mjs +23 -0
- package/scripts/debug-lsp-symbols.mjs +62 -0
- package/scripts/deploy-skills.mjs +43 -0
- package/scripts/example-sysml-mcp.mjs +27 -0
- package/scripts/export-graph.mjs +80 -0
- package/scripts/generate-map.mjs +110 -0
- package/scripts/index-and-map.mjs +43 -0
- package/scripts/index-and-query.mjs +39 -0
- package/scripts/query-one.mjs +34 -0
- package/scripts/setup-lsp.mjs +36 -0
- package/scripts/test-lsp.mjs +55 -0
- package/scripts/test-mcp-debug.mjs +32 -0
- package/scripts/test-mcp-sysml.mjs +75 -0
- package/scripts/test-mcp-tools.mjs +185 -0
- package/scripts/test-sysml-mcp-from-node_modules.mjs +56 -0
- package/scripts/validate-sysml-file.mjs +69 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Debug: what does the LSP return for documentSymbol, and what do we normalize?
|
|
4
|
+
* Run from repo root after build: node scripts/debug-lsp-symbols.mjs [file]
|
|
5
|
+
* Uses SYSMLLSP_SERVER_PATH or default node_modules path.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
|
|
11
|
+
const pathArg = process.argv[2] || 'test/fixtures/sysml/sample.sysml';
|
|
12
|
+
const absPath = resolve(process.cwd(), pathArg);
|
|
13
|
+
if (!existsSync(absPath)) {
|
|
14
|
+
console.error('File not found:', absPath);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!process.env.SYSMLLSP_SERVER_PATH) {
|
|
19
|
+
const lspPath = resolve(process.cwd(), 'lsp/node_modules/sysml-v2-lsp/dist/server/server.js');
|
|
20
|
+
const rootPath = resolve(process.cwd(), 'node_modules/sysml-v2-lsp/dist/server/server.js');
|
|
21
|
+
if (existsSync(lspPath)) process.env.SYSMLLSP_SERVER_PATH = lspPath;
|
|
22
|
+
else if (existsSync(rootPath)) process.env.SYSMLLSP_SERVER_PATH = rootPath;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function main() {
|
|
26
|
+
const content = await readFile(absPath, 'utf-8');
|
|
27
|
+
console.log('File:', absPath);
|
|
28
|
+
console.log('Content length:', content.length, 'bytes\n');
|
|
29
|
+
|
|
30
|
+
const { getDocumentSymbolsFromLsp, closeLspClient } = await import('../dist/src/parser/lsp-client.js');
|
|
31
|
+
const { getSymbolsForFile } = await import('../dist/src/parser/symbols.js');
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
console.log('Calling LSP getDocumentSymbols...');
|
|
35
|
+
const raw = await getDocumentSymbolsFromLsp(absPath, content);
|
|
36
|
+
console.log('--- Raw LSP documentSymbol result ---');
|
|
37
|
+
const rawArr = Array.isArray(raw) ? raw : (raw != null && typeof raw === 'object' ? [raw] : []);
|
|
38
|
+
try {
|
|
39
|
+
console.log(JSON.stringify(rawArr, null, 2));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
console.log('(stringify failed)', String(e));
|
|
42
|
+
}
|
|
43
|
+
console.log('Count:', rawArr.length);
|
|
44
|
+
if (rawArr.length > 0 && rawArr[0]) {
|
|
45
|
+
const first = rawArr[0];
|
|
46
|
+
console.log('First symbol keys:', Object.keys(first));
|
|
47
|
+
console.log('First symbol detail:', first.detail, 'name:', first.name);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
console.log('Calling getSymbolsForFile...');
|
|
51
|
+
const normalized = await getSymbolsForFile(absPath, content);
|
|
52
|
+
console.log('\n--- Normalized symbols (fed to graph) ---');
|
|
53
|
+
console.log(JSON.stringify(normalized, null, 2));
|
|
54
|
+
console.log('Count:', normalized?.length ?? 0);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
console.error('Error:', err);
|
|
57
|
+
throw err;
|
|
58
|
+
} finally {
|
|
59
|
+
closeLspClient();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
main().catch((e) => { console.error(e); process.exit(1); });
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Deploy Agent Skills for Cursor.
|
|
4
|
+
*
|
|
5
|
+
* Default: sync GitNexus skills from .claude/skills/gitnexus/ → .cursor/skills/
|
|
6
|
+
* (source of truth for those skills lives under .claude for Claude Code parity)
|
|
7
|
+
*
|
|
8
|
+
* --user: copy the same GitNexus skills to ~/.cursor/skills/ (all projects)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { cpSync, readdirSync, statSync, mkdirSync, existsSync } from 'fs';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
import os from 'os';
|
|
15
|
+
|
|
16
|
+
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
17
|
+
const srcDir = join(root, '.claude', 'skills', 'gitnexus');
|
|
18
|
+
const userMode = process.argv.includes('--user');
|
|
19
|
+
const dstRoot = userMode ? join(os.homedir(), '.cursor', 'skills') : join(root, '.cursor', 'skills');
|
|
20
|
+
|
|
21
|
+
if (!existsSync(srcDir)) {
|
|
22
|
+
console.error('Missing source:', srcDir);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
mkdirSync(dstRoot, { recursive: true });
|
|
27
|
+
|
|
28
|
+
let count = 0;
|
|
29
|
+
for (const name of readdirSync(srcDir)) {
|
|
30
|
+
const p = join(srcDir, name);
|
|
31
|
+
if (!statSync(p).isDirectory()) continue;
|
|
32
|
+
const dest = join(dstRoot, name);
|
|
33
|
+
cpSync(p, dest, { recursive: true });
|
|
34
|
+
console.log(dest);
|
|
35
|
+
count++;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
console.log(
|
|
39
|
+
`\nDeployed ${count} GitNexus skill(s) to ${userMode ? join(os.homedir(), '.cursor', 'skills') : '.cursor/skills/'}`
|
|
40
|
+
);
|
|
41
|
+
if (!userMode) {
|
|
42
|
+
console.log('Tip: npm run deploy-skills -- --user → copy to personal ~/.cursor/skills/');
|
|
43
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Example: use SysML MCP as a lib from code.
|
|
4
|
+
* Build first: npm run build
|
|
5
|
+
* Run: node scripts/example-sysml-mcp.mjs
|
|
6
|
+
*/
|
|
7
|
+
import { createSysmlMcpClient } from '../dist/src/parser/sysml-mcp-client.js';
|
|
8
|
+
|
|
9
|
+
const code = `package Example {
|
|
10
|
+
requirement ReqOne {
|
|
11
|
+
doc /* requirement one */ "Req one.";
|
|
12
|
+
}
|
|
13
|
+
}`;
|
|
14
|
+
|
|
15
|
+
const client = await createSysmlMcpClient();
|
|
16
|
+
try {
|
|
17
|
+
const parseResult = await client.parse(code, 'file:///example.sysml');
|
|
18
|
+
console.log('parse:', JSON.stringify(parseResult, null, 2));
|
|
19
|
+
|
|
20
|
+
const validateResult = await client.validate(code, 'file:///example.sysml');
|
|
21
|
+
console.log('validate:', JSON.stringify(validateResult, null, 2));
|
|
22
|
+
|
|
23
|
+
const symbolsResult = await client.getSymbols(code, 'file:///example.sysml');
|
|
24
|
+
console.log('getSymbols count:', symbolsResult.count);
|
|
25
|
+
} finally {
|
|
26
|
+
client.close();
|
|
27
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Export the first indexed graph to JSON (nodes + edges) for viewing.
|
|
4
|
+
* Usage: node scripts/export-graph.mjs [output.json]
|
|
5
|
+
* Default output: graph-export.json in current directory.
|
|
6
|
+
* If the registry is empty, uses the first .kuzu file in storage db/ (e.g. after clean or CLI-only use).
|
|
7
|
+
*/
|
|
8
|
+
import { readFile, writeFile, readdir } from 'fs/promises';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { homedir } from 'os';
|
|
12
|
+
import { createRequire } from 'module';
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
const kuzu = require('kuzu');
|
|
15
|
+
const { EDGE_TYPES, NODE_TABLE } = await import('../dist/src/graph/schema.js');
|
|
16
|
+
|
|
17
|
+
const NODE_LIMIT = 1000;
|
|
18
|
+
const EDGE_LIMIT_PER_TYPE = 500;
|
|
19
|
+
|
|
20
|
+
const storageRoot = process.env.SYSMEDGRAPH_STORAGE_ROOT || join(homedir(), '.sysmledgraph');
|
|
21
|
+
const dbDir = join(storageRoot, 'db');
|
|
22
|
+
const registryPath = join(storageRoot, 'registry.json');
|
|
23
|
+
const outPath = process.argv[2] || 'graph-export.json';
|
|
24
|
+
|
|
25
|
+
// One merged graph DB (plan step 8)
|
|
26
|
+
const MERGED_DB_FILENAME = 'graph.kuzu';
|
|
27
|
+
let dbPath = join(dbDir, MERGED_DB_FILENAME);
|
|
28
|
+
if (!existsSync(dbPath)) {
|
|
29
|
+
try {
|
|
30
|
+
const files = await readdir(dbDir);
|
|
31
|
+
const kuzuFile = files.find((f) => f.endsWith('.kuzu') && !f.endsWith('.kuzu.wal'));
|
|
32
|
+
if (kuzuFile) dbPath = join(dbDir, kuzuFile);
|
|
33
|
+
else dbPath = null;
|
|
34
|
+
} catch {
|
|
35
|
+
dbPath = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!dbPath) {
|
|
39
|
+
console.error('No indexed paths and no DB in storage. Run: npx sysmledgraph analyze <path>');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const db = new kuzu.Database(dbPath);
|
|
44
|
+
const conn = new kuzu.Connection(db);
|
|
45
|
+
|
|
46
|
+
const nodeResult = await conn.query(
|
|
47
|
+
`MATCH (n:${NODE_TABLE}) RETURN n.id, n.name, n.path, n.label LIMIT ${NODE_LIMIT}`
|
|
48
|
+
);
|
|
49
|
+
const nodeRows = await nodeResult.getAll();
|
|
50
|
+
const nodes = nodeRows.map((r) => {
|
|
51
|
+
const v = Array.isArray(r) ? r : Object.values(r);
|
|
52
|
+
return { id: String(v[0]), name: String(v[1] ?? ''), path: String(v[2] ?? ''), label: String(v[3] ?? '') };
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const nodeIds = new Set(nodes.map((n) => n.id));
|
|
56
|
+
const edges = [];
|
|
57
|
+
for (const relType of EDGE_TYPES) {
|
|
58
|
+
try {
|
|
59
|
+
const relResult = await conn.query(
|
|
60
|
+
`MATCH (a:${NODE_TABLE})-[:${relType}]->(b:${NODE_TABLE}) RETURN a.id, b.id LIMIT ${EDGE_LIMIT_PER_TYPE}`
|
|
61
|
+
);
|
|
62
|
+
const relRows = await relResult.getAll();
|
|
63
|
+
for (const row of relRows) {
|
|
64
|
+
const v = Array.isArray(row) ? row : Object.values(row);
|
|
65
|
+
const from = String(v[0]);
|
|
66
|
+
const to = String(v[1]);
|
|
67
|
+
if (nodeIds.has(from) && nodeIds.has(to)) edges.push({ from, to, type: relType });
|
|
68
|
+
}
|
|
69
|
+
} catch {
|
|
70
|
+
// rel table may not exist
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
conn.close();
|
|
75
|
+
db.close();
|
|
76
|
+
|
|
77
|
+
const payload = { nodes, edges, meta: { nodeLimit: NODE_LIMIT, edgeCount: edges.length } };
|
|
78
|
+
await writeFile(outPath, JSON.stringify(payload, null, 0), 'utf-8');
|
|
79
|
+
console.log(`Wrote ${nodes.length} nodes, ${edges.length} edges to ${outPath}`);
|
|
80
|
+
console.log('Open viewer/view.html in a browser and load this file to view the graph.');
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate a markdown map from the graph (interconnection view, packages, documents).
|
|
4
|
+
* Plan After v1 / Gap #6. Usage: node scripts/generate-map.mjs [output.md]
|
|
5
|
+
* Default output: graph-map.md in current directory.
|
|
6
|
+
* Uses the same merged DB as export-graph (storage db/graph.kuzu).
|
|
7
|
+
*/
|
|
8
|
+
import { writeFile, readdir } from 'fs/promises';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { homedir } from 'os';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import { createRequire } from 'module';
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
const kuzu = require('kuzu');
|
|
15
|
+
const { NODE_TABLE, EDGE_TYPES } = await import('../dist/src/graph/schema.js');
|
|
16
|
+
|
|
17
|
+
const storageRoot = process.env.SYSMEDGRAPH_STORAGE_ROOT || join(homedir(), '.sysmledgraph');
|
|
18
|
+
const dbDir = join(storageRoot, 'db');
|
|
19
|
+
const MERGED_DB_FILENAME = 'graph.kuzu';
|
|
20
|
+
let dbPath = join(dbDir, MERGED_DB_FILENAME);
|
|
21
|
+
if (!existsSync(dbPath)) {
|
|
22
|
+
try {
|
|
23
|
+
const files = await readdir(dbDir);
|
|
24
|
+
const kuzuFile = files.find((f) => f.endsWith('.kuzu') && !f.endsWith('.kuzu.wal'));
|
|
25
|
+
if (kuzuFile) dbPath = join(dbDir, kuzuFile);
|
|
26
|
+
else dbPath = null;
|
|
27
|
+
} catch {
|
|
28
|
+
dbPath = null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!dbPath) {
|
|
32
|
+
console.error('No graph DB found. Run: npx sysmledgraph analyze <path>');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const outPath = process.argv[2] || 'graph-map.md';
|
|
37
|
+
const db = new kuzu.Database(dbPath);
|
|
38
|
+
const conn = new kuzu.Connection(db);
|
|
39
|
+
|
|
40
|
+
const lines = ['# Graph map (interconnection view)', ''];
|
|
41
|
+
|
|
42
|
+
// Documents
|
|
43
|
+
const docResult = await conn.query(
|
|
44
|
+
`MATCH (n:${NODE_TABLE}) WHERE n.label = 'Document' RETURN n.id, n.path ORDER BY n.path LIMIT 500`
|
|
45
|
+
);
|
|
46
|
+
const docRows = await docResult.getAll();
|
|
47
|
+
lines.push('## Documents');
|
|
48
|
+
if (docRows.length === 0) lines.push('(none)');
|
|
49
|
+
else docRows.forEach((r) => { const v = Array.isArray(r) ? r : Object.values(r); lines.push(`- ${String(v[1] ?? v[0])}`); });
|
|
50
|
+
lines.push('');
|
|
51
|
+
|
|
52
|
+
// Nodes by label (Package, PartDef, RequirementDef, etc.)
|
|
53
|
+
const nodeResult = await conn.query(
|
|
54
|
+
`MATCH (n:${NODE_TABLE}) RETURN n.label, n.id, n.name, n.path ORDER BY n.label, n.name LIMIT 10000`
|
|
55
|
+
);
|
|
56
|
+
const nodeRows = await nodeResult.getAll();
|
|
57
|
+
const byLabel = new Map();
|
|
58
|
+
for (const r of nodeRows) {
|
|
59
|
+
const v = Array.isArray(r) ? r : Object.values(r);
|
|
60
|
+
const label = String(v[0] ?? '');
|
|
61
|
+
const id = String(v[1] ?? '');
|
|
62
|
+
const name = String(v[2] ?? '');
|
|
63
|
+
const path = String(v[3] ?? '');
|
|
64
|
+
if (!byLabel.has(label)) byLabel.set(label, []);
|
|
65
|
+
byLabel.get(label).push({ id, name, path });
|
|
66
|
+
}
|
|
67
|
+
lines.push('## Nodes by label');
|
|
68
|
+
for (const [label, nodes] of [...byLabel.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
69
|
+
lines.push(`### ${label}`);
|
|
70
|
+
lines.push('| name | path | id |');
|
|
71
|
+
lines.push('|------|------|-----|');
|
|
72
|
+
for (const n of nodes) {
|
|
73
|
+
lines.push(`| ${n.name} | ${n.path} | ${n.id} |`);
|
|
74
|
+
}
|
|
75
|
+
lines.push('');
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Edges (Interconnection)
|
|
79
|
+
lines.push('## Interconnection (edges)');
|
|
80
|
+
lines.push('| from | type | to |');
|
|
81
|
+
lines.push('|------|------|-----|');
|
|
82
|
+
let edgeCount = 0;
|
|
83
|
+
const edgeLimit = 500;
|
|
84
|
+
for (const relType of EDGE_TYPES) {
|
|
85
|
+
try {
|
|
86
|
+
const relResult = await conn.query(
|
|
87
|
+
`MATCH (a:${NODE_TABLE})-[:${relType}]->(b:${NODE_TABLE}) RETURN a.id, b.id LIMIT ${Math.ceil(edgeLimit / EDGE_TYPES.length)}`
|
|
88
|
+
);
|
|
89
|
+
const relRows = await relResult.getAll();
|
|
90
|
+
for (const row of relRows) {
|
|
91
|
+
const v = Array.isArray(row) ? row : Object.values(row);
|
|
92
|
+
lines.push(`| ${String(v[0])} | ${relType} | ${String(v[1])} |`);
|
|
93
|
+
edgeCount++;
|
|
94
|
+
}
|
|
95
|
+
} catch {
|
|
96
|
+
// rel table may not exist
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (edgeCount === 0) {
|
|
100
|
+
lines.push('| (none) | | |');
|
|
101
|
+
lines.push('');
|
|
102
|
+
lines.push('_No edges: graph has only Document nodes. Edges appear when the indexer gets LSP symbols (e.g. Package, PartDef) and writes IN_DOCUMENT / IN_PACKAGE relations._');
|
|
103
|
+
lines.push('');
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
conn.close();
|
|
107
|
+
db.close();
|
|
108
|
+
|
|
109
|
+
await writeFile(outPath, lines.join('\n'), 'utf-8');
|
|
110
|
+
console.log(`Wrote ${outPath}`);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Index a path with SysML files, then generate the graph map.
|
|
4
|
+
* Usage: node scripts/index-and-map.mjs [path]
|
|
5
|
+
* Default path: test/fixtures/sysml
|
|
6
|
+
* Output: graph-map.md in project root (or run npm run generate-map for custom path).
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from 'child_process';
|
|
9
|
+
import { resolve } from 'path';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
|
|
12
|
+
const pathArg = process.argv[2] || 'test/fixtures/sysml';
|
|
13
|
+
const absPath = resolve(process.cwd(), pathArg);
|
|
14
|
+
|
|
15
|
+
// Default LSP server: prefer lsp/node_modules (dedicated init) then repo node_modules
|
|
16
|
+
if (!process.env.SYSMLLSP_SERVER_PATH) {
|
|
17
|
+
const lspServer = resolve(process.cwd(), 'lsp/node_modules/sysml-v2-lsp/dist/server/server.js');
|
|
18
|
+
const rootServer = resolve(process.cwd(), 'node_modules/sysml-v2-lsp/dist/server/server.js');
|
|
19
|
+
if (existsSync(lspServer)) process.env.SYSMLLSP_SERVER_PATH = lspServer;
|
|
20
|
+
else if (existsSync(rootServer)) process.env.SYSMLLSP_SERVER_PATH = rootServer;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
console.log('Indexing:', absPath);
|
|
24
|
+
const analyze = spawn('node', ['dist/bin/cli.js', 'analyze', absPath], {
|
|
25
|
+
cwd: process.cwd(),
|
|
26
|
+
stdio: 'inherit',
|
|
27
|
+
env: { ...process.env },
|
|
28
|
+
});
|
|
29
|
+
const code = await new Promise((res) => analyze.on('close', res));
|
|
30
|
+
if (code !== 0) {
|
|
31
|
+
console.error('Analyze failed. Ensure kuzu is built (npm install, no --ignore-scripts).');
|
|
32
|
+
process.exit(code);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
console.log('\nGenerating map...');
|
|
36
|
+
const map = spawn('node', ['scripts/generate-map.mjs', 'graph-map.md'], {
|
|
37
|
+
cwd: process.cwd(),
|
|
38
|
+
stdio: 'inherit',
|
|
39
|
+
});
|
|
40
|
+
const mapCode = await new Promise((res) => map.on('close', res));
|
|
41
|
+
if (mapCode !== 0) process.exit(mapCode);
|
|
42
|
+
|
|
43
|
+
console.log('\nMap written to graph-map.md');
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Index one path then run a count query in the same process (same DB).
|
|
4
|
+
* Usage: set SYSMLLSP_SERVER_PATH then run:
|
|
5
|
+
* node scripts/index-and-query.mjs "c:\Projects\SystemDesign\sysml-v2-models\projects\sysmledgraph"
|
|
6
|
+
*/
|
|
7
|
+
import { homedir } from 'os';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { createRequire } from 'module';
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
|
|
12
|
+
const pathToIndex = process.argv[2];
|
|
13
|
+
if (!pathToIndex) {
|
|
14
|
+
console.error('Usage: node scripts/index-and-query.mjs <path>');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const storageRoot = join(homedir(), '.sysmledgraph');
|
|
19
|
+
const sanitized = pathToIndex.replace(/[:\\/]/g, '_').replace(/_+/g, '_') || 'root';
|
|
20
|
+
const dbPath = join(storageRoot, 'db', sanitized + '.kuzu');
|
|
21
|
+
|
|
22
|
+
// Use compiled indexer and graph
|
|
23
|
+
const { openGraphStore } = await import('../dist/src/graph/graph-store.js');
|
|
24
|
+
const { runIndexer } = await import('../dist/src/indexer/indexer.js');
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
const store = await openGraphStore(dbPath);
|
|
28
|
+
const result = await runIndexer(store, { roots: [pathToIndex] });
|
|
29
|
+
console.log('Index result:', result);
|
|
30
|
+
|
|
31
|
+
const conn = store.getConnection();
|
|
32
|
+
const q = await conn.query('MATCH (n) RETURN count(n) AS count');
|
|
33
|
+
const rows = await q.getAll();
|
|
34
|
+
console.log('Count:', rows);
|
|
35
|
+
process.exit(result.ok ? 0 : 1);
|
|
36
|
+
} catch (err) {
|
|
37
|
+
console.error('Error:', err);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Run one Cypher query against the first indexed DB (for manual testing).
|
|
4
|
+
* Use label Node for our schema, e.g. MATCH (n:Node) RETURN count(n) AS count
|
|
5
|
+
* Usage: node scripts/query-one.mjs "MATCH (n:Node) RETURN count(n) AS count"
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { createRequire } from 'module';
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const kuzu = require('kuzu');
|
|
13
|
+
|
|
14
|
+
const storageRoot = join(homedir(), '.sysmledgraph');
|
|
15
|
+
const registryPath = join(storageRoot, 'registry.json');
|
|
16
|
+
const query = process.argv[2] || 'MATCH (n:Node) RETURN count(n) AS count';
|
|
17
|
+
|
|
18
|
+
const raw = await readFile(registryPath, 'utf-8');
|
|
19
|
+
const { paths } = JSON.parse(raw);
|
|
20
|
+
if (!paths?.length) {
|
|
21
|
+
console.error('No indexed paths in registry');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const indexedPath = paths[0];
|
|
25
|
+
const sanitized = indexedPath.replace(/[:\\/]/g, '_').replace(/_+/g, '_') || 'root';
|
|
26
|
+
const dbPath = join(storageRoot, 'db', sanitized + '.kuzu');
|
|
27
|
+
|
|
28
|
+
const db = new kuzu.Database(dbPath);
|
|
29
|
+
const conn = new kuzu.Connection(db);
|
|
30
|
+
const result = await conn.query(query);
|
|
31
|
+
const rows = await result.getAll();
|
|
32
|
+
console.log(JSON.stringify(rows, null, 2));
|
|
33
|
+
conn.close();
|
|
34
|
+
db.close();
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Install the LSP server in lsp/ (sysml-v2-lsp). Used by sysmledgraph for indexing.
|
|
4
|
+
* Run: npm run setup-lsp or node scripts/setup-lsp.mjs
|
|
5
|
+
* Exit 0 if lsp/node_modules/sysml-v2-lsp/dist/server/server.js already exists or install succeeds.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
import { spawn } from 'child_process';
|
|
10
|
+
|
|
11
|
+
const cwd = resolve(process.cwd(), 'lsp');
|
|
12
|
+
const serverPath = resolve(cwd, 'node_modules/sysml-v2-lsp/dist/server/server.js');
|
|
13
|
+
|
|
14
|
+
if (existsSync(serverPath)) {
|
|
15
|
+
console.log('LSP already installed at', serverPath);
|
|
16
|
+
process.exit(0);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
console.log('Installing LSP in lsp/...');
|
|
20
|
+
const proc = spawn('npm', ['install', '--ignore-scripts'], { cwd, stdio: 'inherit' });
|
|
21
|
+
proc.on('close', (code) => {
|
|
22
|
+
if (code !== 0) {
|
|
23
|
+
console.error('npm install in lsp/ failed with code', code);
|
|
24
|
+
process.exit(code ?? 1);
|
|
25
|
+
}
|
|
26
|
+
if (!existsSync(serverPath)) {
|
|
27
|
+
console.error('LSP server not found at', serverPath, '- install may be incomplete.');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
console.log('LSP installed. Run index-and-map or analyze without SYSMLLSP_SERVER_PATH.');
|
|
31
|
+
process.exit(0);
|
|
32
|
+
});
|
|
33
|
+
proc.on('error', (err) => {
|
|
34
|
+
console.error('Failed to run npm:', err.message);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Test LSP: get document symbols for each modelbase-development .sysml file.
|
|
4
|
+
* Run from repo root: node scripts/test-lsp.mjs
|
|
5
|
+
* Requires SYSMLLSP_SERVER_PATH → path to sysml-v2-lsp dist/server/server.js.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
|
|
10
|
+
const root = resolve(process.cwd(), 'modelbase-development', 'models');
|
|
11
|
+
const allFiles = [
|
|
12
|
+
'requirements-modelbase-development.sysml',
|
|
13
|
+
'deploy-modelbase-development.sysml',
|
|
14
|
+
'behaviour-modelbase-development.sysml',
|
|
15
|
+
'project-modelbase-development.sysml',
|
|
16
|
+
];
|
|
17
|
+
// Run only first N files when SYSMLEDGRAPH_LSP_FILES=N
|
|
18
|
+
const fileLimit = Number(process.env.SYSMLEDGRAPH_LSP_FILES) || allFiles.length;
|
|
19
|
+
const files = allFiles.slice(0, fileLimit);
|
|
20
|
+
|
|
21
|
+
async function main() {
|
|
22
|
+
const { closeLspClient } = await import('../dist/src/parser/lsp-client.js');
|
|
23
|
+
const { getSymbolsForFile } = await import('../dist/src/parser/symbols.js');
|
|
24
|
+
|
|
25
|
+
console.log('Testing LSP (client created on first getSymbolsForFile)...\n');
|
|
26
|
+
|
|
27
|
+
const timeoutMs = Math.min(10000, Math.max(1000, Number(process.env.SYSMLEDGRAPH_LSP_TIMEOUT_MS) || 10000));
|
|
28
|
+
for (let i = 0; i < files.length; i++) {
|
|
29
|
+
const file = files[i];
|
|
30
|
+
const filePath = resolve(root, file);
|
|
31
|
+
console.log(`[${i + 1}/${files.length}] ${file}`);
|
|
32
|
+
const t0 = Date.now();
|
|
33
|
+
try {
|
|
34
|
+
const content = await readFile(filePath, 'utf-8');
|
|
35
|
+
const symbols = await Promise.race([
|
|
36
|
+
getSymbolsForFile(filePath, content),
|
|
37
|
+
new Promise((_, rej) => setTimeout(() => rej(new Error(`getSymbolsForFile timeout ${timeoutMs}ms`)), timeoutMs)),
|
|
38
|
+
]);
|
|
39
|
+
const elapsed = Date.now() - t0;
|
|
40
|
+
console.log(` -> ${symbols.length} symbols in ${elapsed}ms`);
|
|
41
|
+
const labels = [...new Set(symbols.map((s) => s.label))];
|
|
42
|
+
if (labels.length) console.log(` -> labels: ${labels.join(', ')}`);
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error(` -> ERROR (${Date.now() - t0}ms):`, err instanceof Error ? err.message : err);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
closeLspClient();
|
|
49
|
+
console.log('\nDone.');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
main().catch((e) => {
|
|
53
|
+
console.error(e);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Quick debug: spawn MCP server, send initialize, log all stdout/stderr. */
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
|
|
6
|
+
const PROJECT_ROOT = resolve(process.cwd());
|
|
7
|
+
const MCP_PATH = resolve(PROJECT_ROOT, 'node_modules/sysml-v2-lsp/dist/server/mcpServer.js');
|
|
8
|
+
|
|
9
|
+
const child = spawn('node', [MCP_PATH], { cwd: PROJECT_ROOT, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
10
|
+
|
|
11
|
+
child.stdout.on('data', (chunk) => {
|
|
12
|
+
console.log('[stdout]', chunk.length, 'bytes:', chunk.toString('utf-8').slice(0, 200));
|
|
13
|
+
});
|
|
14
|
+
child.stderr.on('data', (chunk) => {
|
|
15
|
+
process.stderr.write('[stderr] ' + chunk.toString('utf-8'));
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Send initialize with Content-Length framing
|
|
19
|
+
const body = JSON.stringify({
|
|
20
|
+
jsonrpc: '2.0',
|
|
21
|
+
id: 1,
|
|
22
|
+
method: 'initialize',
|
|
23
|
+
params: { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'debug', version: '0.1.0' } },
|
|
24
|
+
});
|
|
25
|
+
const bytes = Buffer.from(body, 'utf-8');
|
|
26
|
+
child.stdin.write(`Content-Length: ${bytes.length}\r\n\r\n` + body);
|
|
27
|
+
|
|
28
|
+
setTimeout(() => {
|
|
29
|
+
console.log('\n[timeout - killing]');
|
|
30
|
+
child.kill();
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}, 25000);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test sysml-v2-lsp MCP: spawn server, send initialize + tools/list, print result.
|
|
3
|
+
*/
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
|
|
8
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const projectRoot = path.resolve(__dirname, '..');
|
|
10
|
+
const mcpPath = path.join(projectRoot, 'sysml-v2-lsp', 'dist', 'server', 'mcpServer.js');
|
|
11
|
+
|
|
12
|
+
const child = spawn('node', [mcpPath], {
|
|
13
|
+
cwd: projectRoot,
|
|
14
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
let buffer = '';
|
|
18
|
+
let gotInit = false;
|
|
19
|
+
let gotTools = false;
|
|
20
|
+
|
|
21
|
+
function send(obj) {
|
|
22
|
+
child.stdin.write(JSON.stringify(obj) + '\n');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
child.stdout.setEncoding('utf8');
|
|
26
|
+
child.stdout.on('data', (chunk) => {
|
|
27
|
+
buffer += chunk;
|
|
28
|
+
const lines = buffer.split('\n').filter(Boolean);
|
|
29
|
+
buffer = lines.pop() ?? '';
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
try {
|
|
32
|
+
const res = JSON.parse(line);
|
|
33
|
+
if (res.result?.capabilities != null) {
|
|
34
|
+
gotInit = true;
|
|
35
|
+
console.log('✅ initialize OK — server:', res.result.serverInfo?.name ?? 'sysml-v2');
|
|
36
|
+
}
|
|
37
|
+
if (res.result?.tools != null) {
|
|
38
|
+
gotTools = true;
|
|
39
|
+
const tools = res.result.tools;
|
|
40
|
+
console.log('✅ tools/list OK —', tools.length, 'tools');
|
|
41
|
+
console.log(' Sample:', tools.slice(0, 6).map((t) => t.name).join(', '));
|
|
42
|
+
child.kill();
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
} catch (_) {}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
child.stderr.on('data', (d) => process.stderr.write(d));
|
|
50
|
+
child.on('error', (err) => {
|
|
51
|
+
console.error('❌ spawn error:', err.message);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
send({
|
|
56
|
+
jsonrpc: '2.0',
|
|
57
|
+
id: 1,
|
|
58
|
+
method: 'initialize',
|
|
59
|
+
params: {
|
|
60
|
+
protocolVersion: '2024-11-05',
|
|
61
|
+
capabilities: {},
|
|
62
|
+
clientInfo: { name: 'test-mcp', version: '0.1.0' },
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
// After initialize, client sends initialized notification, then other requests
|
|
66
|
+
send({ jsonrpc: '2.0', method: 'notifications/initialized' });
|
|
67
|
+
send({ jsonrpc: '2.0', id: 2, method: 'tools/list' });
|
|
68
|
+
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
if (!gotTools) {
|
|
71
|
+
console.error('❌ timeout (no tools/list response)');
|
|
72
|
+
child.kill();
|
|
73
|
+
}
|
|
74
|
+
process.exit(gotTools ? 0 : 1);
|
|
75
|
+
}, 8000);
|