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
package/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# sysmledgraph
|
|
2
|
+
|
|
3
|
+
Path-only SysML indexer: builds a knowledge graph from `.sysml` files and exposes it via **MCP** (for Cursor AI) and **CLI**. The LSP used for indexing lives in **`lsp/`** and is used only by this repo.
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
- **Node.js 20+**
|
|
8
|
+
- **Kuzu** (built via `npm install` or `node node_modules/kuzu/install.js` if you use `--ignore-scripts`)
|
|
9
|
+
- **LSP** for indexing: [sysml-v2-lsp](https://www.npmjs.com/package/sysml-v2-lsp), installed in **`lsp/`** (see below)
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install
|
|
15
|
+
npm run build
|
|
16
|
+
npm run setup-lsp
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- **setup-lsp** installs the SysML LSP in **`lsp/`** so the indexer can use it. No need to set `SYSMLLSP_SERVER_PATH` when using this default. See [docs/INSTALL.md](docs/INSTALL.md) and [docs/PLAN_INDEPENDENT_LSP.md](docs/PLAN_INDEPENDENT_LSP.md).
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### CLI
|
|
24
|
+
|
|
25
|
+
| Command | Description |
|
|
26
|
+
|--------|-------------|
|
|
27
|
+
| `npx sysmledgraph analyze <path>` | Index path(s); discover `.sysml`, build graph (uses LSP in `lsp/` by default) |
|
|
28
|
+
| `npx sysmledgraph list` | List indexed root paths |
|
|
29
|
+
| `npx sysmledgraph clean [path]` | Remove index for path or all |
|
|
30
|
+
|
|
31
|
+
**Scripts (from repo root):**
|
|
32
|
+
|
|
33
|
+
- `npm run index-and-map [path]` — Index path (default `test/fixtures/sysml`), then write **graph-map.md**
|
|
34
|
+
- `npm run generate-map [out.md]` — Generate map from existing DB
|
|
35
|
+
- `npm run setup-lsp` — Install LSP in `lsp/` (Option C, see plan)
|
|
36
|
+
|
|
37
|
+
### MCP (Cursor)
|
|
38
|
+
|
|
39
|
+
This repo runs as an **MCP server** so Cursor AI can query the graph (query, context, impact, generate_map, indexDbGraph, cypher, etc.). Add **sysmledgraph** to `.cursor/mcp.json`; see [docs/MCP_SERVER_FOR_CURSOR.md](docs/MCP_SERVER_FOR_CURSOR.md).
|
|
40
|
+
|
|
41
|
+
**Storage:** Default `~/.sysmledgraph`. Override with `SYSMEDGRAPH_STORAGE_ROOT`. Only one process should open the same DB at a time (see [docs/MCP_INTERACTION_GUIDE.md](docs/MCP_INTERACTION_GUIDE.md) §8).
|
|
42
|
+
|
|
43
|
+
## Docs
|
|
44
|
+
|
|
45
|
+
| Doc | Content |
|
|
46
|
+
|-----|--------|
|
|
47
|
+
| [docs/INSTALL.md](docs/INSTALL.md) | Install steps, LSP, Kuzu |
|
|
48
|
+
| [docs/MCP_SERVER_FOR_CURSOR.md](docs/MCP_SERVER_FOR_CURSOR.md) | Enable sysmledgraph MCP in Cursor, tools, checklist |
|
|
49
|
+
| [docs/MCP_INTERACTION_GUIDE.md](docs/MCP_INTERACTION_GUIDE.md) | LSP vs MCP, indexing, troubleshooting |
|
|
50
|
+
| [docs/PLAN_INDEPENDENT_LSP.md](docs/PLAN_INDEPENDENT_LSP.md) | Why LSP is in `lsp/` only for sysmledgraph |
|
|
51
|
+
| [lsp/README.md](lsp/README.md) | LSP folder setup and cwd |
|
|
52
|
+
|
|
53
|
+
## Publishing (npm)
|
|
54
|
+
|
|
55
|
+
You can publish this package to npm so others can install it with `npm install sysmledgraph` or `npx sysmledgraph analyze <path>`.
|
|
56
|
+
|
|
57
|
+
1. **Name:** The package name is **`sysmledgraph`**. If it is already taken, use a scoped name (e.g. `@yourusername/sysmledgraph`) and set it in `package.json` `"name"`.
|
|
58
|
+
2. **Build:** `prepublishOnly` runs `npm run build` before packing, so **dist/** is included in the tarball.
|
|
59
|
+
3. **Included files:** Only **dist**, **scripts**, **lsp**, **README.md**, and **docs** are published (see `package.json` `"files"`). Users run **`npm run setup-lsp`** after install to install the LSP in **lsp/**.
|
|
60
|
+
4. **Publish:** From a clean build, run:
|
|
61
|
+
```bash
|
|
62
|
+
npm login
|
|
63
|
+
npm publish
|
|
64
|
+
```
|
|
65
|
+
For a scoped package (e.g. `@user/sysmledgraph`), use `npm publish --access public` the first time.
|
|
66
|
+
|
|
67
|
+
After publish, users can install with `npm install sysmledgraph`, then run **`npm run setup-lsp`** from the installed package directory (e.g. `cd node_modules/sysmledgraph && npm run setup-lsp`) so the LSP is available. When using **npx sysmledgraph** from another project, the default LSP path is resolved from the **current working directory** (that project’s `lsp/` or `node_modules/sysml-v2-lsp`). So either run setup-lsp inside the sysmledgraph package and set **SYSMLLSP_SERVER_PATH** to that `lsp/node_modules/.../server.js`, or install **sysml-v2-lsp** in the consumer project so the fallback finds it.
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entrypoint: analyze, list, clean.
|
|
4
|
+
*/
|
|
5
|
+
import { program } from 'commander';
|
|
6
|
+
import { configureStorageRoot, cmdAnalyze, cmdList, cmdClean, } from '../src/cli/commands.js';
|
|
7
|
+
program
|
|
8
|
+
.name('sysmledgraph')
|
|
9
|
+
.description('Path-only SysML indexer: knowledge graph, MCP server, CLI')
|
|
10
|
+
.option('--storage <path>', 'Storage root (default: ~/.sysmledgraph)', process.env.SYSMEDGRAPH_STORAGE_ROOT);
|
|
11
|
+
program
|
|
12
|
+
.command('analyze <paths...>', { isDefault: true })
|
|
13
|
+
.description('Index path(s): discover .sysml, build graph')
|
|
14
|
+
.action(async (paths) => {
|
|
15
|
+
const opts = program.opts();
|
|
16
|
+
configureStorageRoot(opts.storage);
|
|
17
|
+
if (paths.length > 0) {
|
|
18
|
+
process.stderr.write(`Indexing ${paths.length} path(s)...\n`);
|
|
19
|
+
}
|
|
20
|
+
const result = await cmdAnalyze(paths);
|
|
21
|
+
if (!result.ok) {
|
|
22
|
+
process.stderr.write((result.error ?? 'Unknown error') + '\n');
|
|
23
|
+
if (result.filesProcessed !== undefined && result.filesProcessed > 0) {
|
|
24
|
+
process.stderr.write(`(Indexed ${result.filesProcessed} file(s) before error.)\n`);
|
|
25
|
+
}
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const n = result.filesProcessed ?? 0;
|
|
29
|
+
process.stderr.write(`Indexed ${n} file(s).\n`);
|
|
30
|
+
process.exit(0);
|
|
31
|
+
});
|
|
32
|
+
program
|
|
33
|
+
.command('list')
|
|
34
|
+
.description('List indexed path(s)')
|
|
35
|
+
.action(async () => {
|
|
36
|
+
configureStorageRoot(program.opts().storage);
|
|
37
|
+
const result = await cmdList();
|
|
38
|
+
if (!result.ok) {
|
|
39
|
+
process.stderr.write((result.error ?? 'Unknown error') + '\n');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
for (const p of result.paths) {
|
|
43
|
+
console.log(p);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
program
|
|
47
|
+
.command('clean [path]')
|
|
48
|
+
.description('Remove index for path or all')
|
|
49
|
+
.action(async (path) => {
|
|
50
|
+
configureStorageRoot(program.opts().storage);
|
|
51
|
+
const result = await cmdClean(path);
|
|
52
|
+
if (!result.ok) {
|
|
53
|
+
process.stderr.write((result.error ?? 'Unknown error') + '\n');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
program.parseAsync().catch((err) => {
|
|
58
|
+
process.stderr.write(String(err) + '\n');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../mcp/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../mcp/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI commands: analyze (index), list, clean. Phase 4 step 15.
|
|
3
|
+
* R8: on failure exit non-zero and write to stderr.
|
|
4
|
+
* When SYSMLEDGRAPH_USE_WORKER=1, all graph ops go through the worker; worker is closed after each command.
|
|
5
|
+
*/
|
|
6
|
+
export declare function configureStorageRoot(root: string | undefined): void;
|
|
7
|
+
export declare function cmdAnalyze(paths: string[]): Promise<{
|
|
8
|
+
ok: boolean;
|
|
9
|
+
filesProcessed?: number;
|
|
10
|
+
error?: string;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function cmdList(): Promise<{
|
|
13
|
+
ok: boolean;
|
|
14
|
+
paths: string[];
|
|
15
|
+
error?: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function cmdClean(path: string | undefined): Promise<{
|
|
18
|
+
ok: boolean;
|
|
19
|
+
error?: string;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function getStorageRootPath(): string;
|
|
22
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEnE;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BnH;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAezF;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAYjG;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI commands: analyze (index), list, clean. Phase 4 step 15.
|
|
3
|
+
* R8: on failure exit non-zero and write to stderr.
|
|
4
|
+
* When SYSMLEDGRAPH_USE_WORKER=1, all graph ops go through the worker; worker is closed after each command.
|
|
5
|
+
*/
|
|
6
|
+
import { resolve } from 'path';
|
|
7
|
+
import { setStorageRoot, getStorageRoot, getDbPathForIndexedPath } from '../storage/location.js';
|
|
8
|
+
import { listIndexedPaths } from '../storage/list.js';
|
|
9
|
+
import { cleanIndex } from '../storage/clean.js';
|
|
10
|
+
import { addToRegistry } from '../storage/registry.js';
|
|
11
|
+
import { openGraphStore } from '../graph/graph-store.js';
|
|
12
|
+
import { runIndexer } from '../indexer/indexer.js';
|
|
13
|
+
import { useWorker, index, listIndexed, clean, closeWorker } from '../worker/gateway.js';
|
|
14
|
+
export function configureStorageRoot(root) {
|
|
15
|
+
if (root)
|
|
16
|
+
setStorageRoot(root);
|
|
17
|
+
}
|
|
18
|
+
export async function cmdAnalyze(paths) {
|
|
19
|
+
if (paths.length === 0) {
|
|
20
|
+
return { ok: false, error: 'At least one path required' };
|
|
21
|
+
}
|
|
22
|
+
const resolved = paths.map((raw) => resolve(raw));
|
|
23
|
+
if (useWorker()) {
|
|
24
|
+
try {
|
|
25
|
+
return await index({ paths: resolved });
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
closeWorker();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const dbPath = getDbPathForIndexedPath(resolved[0]);
|
|
32
|
+
const store = await openGraphStore(dbPath);
|
|
33
|
+
try {
|
|
34
|
+
let totalProcessed = 0;
|
|
35
|
+
for (const p of resolved) {
|
|
36
|
+
if (store.deleteNodesForRoot)
|
|
37
|
+
await store.deleteNodesForRoot(p);
|
|
38
|
+
const result = await runIndexer(store, { roots: [p] });
|
|
39
|
+
if (!result.ok)
|
|
40
|
+
return { ok: false, filesProcessed: totalProcessed, error: result.error };
|
|
41
|
+
totalProcessed += result.filesProcessed;
|
|
42
|
+
await addToRegistry(p, new Date().toISOString());
|
|
43
|
+
}
|
|
44
|
+
return { ok: true, filesProcessed: totalProcessed };
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
if (store.close)
|
|
48
|
+
await store.close();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function cmdList() {
|
|
52
|
+
if (useWorker()) {
|
|
53
|
+
try {
|
|
54
|
+
const r = await listIndexed();
|
|
55
|
+
return r.ok ? { ok: true, paths: r.paths ?? [] } : { ok: false, paths: [], error: r.error };
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
closeWorker();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const paths = await listIndexedPaths();
|
|
63
|
+
return { ok: true, paths };
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return { ok: false, paths: [], error: err instanceof Error ? err.message : String(err) };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export async function cmdClean(path) {
|
|
70
|
+
if (useWorker()) {
|
|
71
|
+
try {
|
|
72
|
+
const result = await clean({ path });
|
|
73
|
+
return result.ok ? { ok: true } : { ok: false, error: result.error };
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
closeWorker();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const result = await cleanIndex(path);
|
|
80
|
+
if (!result.ok)
|
|
81
|
+
return { ok: false, error: result.error };
|
|
82
|
+
return { ok: true };
|
|
83
|
+
}
|
|
84
|
+
export function getStorageRootPath() {
|
|
85
|
+
return getStorageRoot();
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File discovery: find all .sysml (and optionally .kerml) under path(s).
|
|
3
|
+
* Phase 1 step 4. Uses fast-glob.
|
|
4
|
+
*/
|
|
5
|
+
export interface FindSysmlOptions {
|
|
6
|
+
/** Include .kerml files. Default true. */
|
|
7
|
+
includeKerml?: boolean;
|
|
8
|
+
/** Root path(s) to search. */
|
|
9
|
+
roots: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Find all .sysml files under the given roots (and optionally .kerml).
|
|
13
|
+
* Returns absolute paths, deduplicated.
|
|
14
|
+
*/
|
|
15
|
+
export declare function findSysmlFiles(options: FindSysmlOptions): Promise<string[]>;
|
|
16
|
+
//# sourceMappingURL=find-sysml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-sysml.d.ts","sourceRoot":"","sources":["../../../src/discovery/find-sysml.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBjF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File discovery: find all .sysml (and optionally .kerml) under path(s).
|
|
3
|
+
* Phase 1 step 4. Uses fast-glob.
|
|
4
|
+
*/
|
|
5
|
+
import fg from 'fast-glob';
|
|
6
|
+
const SYSML_GLOB = '**/*.sysml';
|
|
7
|
+
const KERML_GLOB = '**/*.kerml';
|
|
8
|
+
/**
|
|
9
|
+
* Find all .sysml files under the given roots (and optionally .kerml).
|
|
10
|
+
* Returns absolute paths, deduplicated.
|
|
11
|
+
*/
|
|
12
|
+
export async function findSysmlFiles(options) {
|
|
13
|
+
const { roots, includeKerml = true } = options;
|
|
14
|
+
const patterns = includeKerml ? [SYSML_GLOB, KERML_GLOB] : [SYSML_GLOB];
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
for (const root of roots) {
|
|
17
|
+
for (const pattern of patterns) {
|
|
18
|
+
const files = await fg(pattern, {
|
|
19
|
+
cwd: root,
|
|
20
|
+
absolute: true,
|
|
21
|
+
onlyFiles: true,
|
|
22
|
+
});
|
|
23
|
+
for (const f of files) {
|
|
24
|
+
seen.add(f);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return [...seen].sort();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=find-sysml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-sysml.js","sourceRoot":"","sources":["../../../src/discovery/find-sysml.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,WAAW,CAAC;AAG3B,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,UAAU,GAAG,YAAY,CAAC;AAShC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAyB;IAC5D,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE;gBAC9B,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load order: when config.yaml exists at path, use model_files; else deterministic (e.g. breadth-first by path).
|
|
3
|
+
* Phase 1 step 4, R7.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Resolve ordered file list for a root path.
|
|
7
|
+
* If config.yaml exists, use model_files (paths relative to model_dir or root).
|
|
8
|
+
* Otherwise return files in deterministic order (sorted by path).
|
|
9
|
+
*/
|
|
10
|
+
export declare function applyLoadOrder(rootPath: string, files: string[]): Promise<string[]>;
|
|
11
|
+
//# sourceMappingURL=load-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-order.d.ts","sourceRoot":"","sources":["../../../src/discovery/load-order.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0CH;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load order: when config.yaml exists at path, use model_files; else deterministic (e.g. breadth-first by path).
|
|
3
|
+
* Phase 1 step 4, R7.
|
|
4
|
+
*/
|
|
5
|
+
import { readFile } from 'fs/promises';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
const CONFIG_FILENAME = 'config.yaml';
|
|
8
|
+
/** Simple YAML parse for model_dir and model_files only (avoid heavy dependency). */
|
|
9
|
+
function parseConfigYaml(raw) {
|
|
10
|
+
const out = {};
|
|
11
|
+
const lines = raw.split(/\r?\n/);
|
|
12
|
+
let inModelFiles = false;
|
|
13
|
+
const modelFiles = [];
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
if (trimmed.startsWith('model_dir:')) {
|
|
17
|
+
out.model_dir = trimmed.slice('model_dir:'.length).trim();
|
|
18
|
+
inModelFiles = false;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (trimmed.startsWith('model_files:')) {
|
|
22
|
+
inModelFiles = true;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (inModelFiles && trimmed.startsWith('-')) {
|
|
26
|
+
const value = trimmed.slice(1).trim();
|
|
27
|
+
if (value)
|
|
28
|
+
modelFiles.push(value);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (trimmed && !trimmed.startsWith('#')) {
|
|
32
|
+
inModelFiles = false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (modelFiles.length > 0) {
|
|
36
|
+
out.model_files = modelFiles;
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve ordered file list for a root path.
|
|
42
|
+
* If config.yaml exists, use model_files (paths relative to model_dir or root).
|
|
43
|
+
* Otherwise return files in deterministic order (sorted by path).
|
|
44
|
+
*/
|
|
45
|
+
export async function applyLoadOrder(rootPath, files) {
|
|
46
|
+
const configPath = join(rootPath, CONFIG_FILENAME);
|
|
47
|
+
let raw;
|
|
48
|
+
try {
|
|
49
|
+
raw = await readFile(configPath, 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return [...files].sort();
|
|
53
|
+
}
|
|
54
|
+
const config = parseConfigYaml(raw);
|
|
55
|
+
if (!config.model_files || config.model_files.length === 0) {
|
|
56
|
+
return [...files].sort();
|
|
57
|
+
}
|
|
58
|
+
const modelDir = config.model_dir ? join(rootPath, config.model_dir) : rootPath;
|
|
59
|
+
const ordered = [];
|
|
60
|
+
const fileSet = new Set(files.map((f) => f.replace(/\\/g, '/')));
|
|
61
|
+
const byBasename = new Map();
|
|
62
|
+
for (const f of files) {
|
|
63
|
+
const base = f.split(/[/\\]/).pop() ?? f;
|
|
64
|
+
byBasename.set(base, f);
|
|
65
|
+
}
|
|
66
|
+
for (const rel of config.model_files) {
|
|
67
|
+
const resolved = join(modelDir, rel).replace(/\\/g, '/');
|
|
68
|
+
if (fileSet.has(resolved)) {
|
|
69
|
+
ordered.push(resolved);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const base = rel.split(/[/\\]/).pop();
|
|
73
|
+
if (base && byBasename.has(base)) {
|
|
74
|
+
ordered.push(byBasename.get(base));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Append any files not in model_files (e.g. extra .sysml in subdirs)
|
|
78
|
+
for (const f of files) {
|
|
79
|
+
if (!ordered.includes(f)) {
|
|
80
|
+
ordered.push(f);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return ordered;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=load-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-order.js","sourceRoot":"","sources":["../../../src/discovery/load-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/graph/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/graph/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphStore: open/create Kuzu DB, addDocument, addSymbol, addEdge, getConnection.
|
|
3
|
+
* Phase 2 step 7.
|
|
4
|
+
* Connection cache: one store per dbPath per process to avoid Kuzu "Could not set lock on file".
|
|
5
|
+
*/
|
|
6
|
+
import * as kuzu from 'kuzu';
|
|
7
|
+
import type { NodeLabel, SymbolProps } from '../types.js';
|
|
8
|
+
export interface GraphStore {
|
|
9
|
+
addDocument(path: string, indexedAt?: string): Promise<void>;
|
|
10
|
+
addSymbol(label: NodeLabel, props: SymbolProps): Promise<void>;
|
|
11
|
+
addEdge(fromId: string, toId: string, type: string): Promise<void>;
|
|
12
|
+
getConnection(): kuzu.Connection;
|
|
13
|
+
/** Delete all nodes whose path equals rootPath or starts with rootPath + sep (for merged graph clean/re-index). */
|
|
14
|
+
deleteNodesForRoot?(rootPath: string): Promise<void>;
|
|
15
|
+
/** Close the connection and database so the DB file can be reopened or deleted. Call before invalidate. */
|
|
16
|
+
close?(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create or open a GraphStore at the given DB path. Initializes schema if new.
|
|
20
|
+
*/
|
|
21
|
+
export declare function openGraphStore(dbPath: string): Promise<GraphStore>;
|
|
22
|
+
/**
|
|
23
|
+
* Return cached GraphStore for dbPath or open once and cache it.
|
|
24
|
+
* Use this in MCP tools so repeated/concurrent requests share one connection per DB (avoids Kuzu lock errors).
|
|
25
|
+
*/
|
|
26
|
+
export declare function getCachedOrOpenGraphStore(dbPath: string): Promise<GraphStore>;
|
|
27
|
+
/**
|
|
28
|
+
* Remove cached store for dbPath. Next getCachedOrOpenGraphStore(dbPath) will open a new connection.
|
|
29
|
+
* Call before re-index or clean so the next access sees the new or removed DB.
|
|
30
|
+
*/
|
|
31
|
+
export declare function invalidateGraphStoreCache(dbPath: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Close the cached store for dbPath and remove it from the cache. Use before clean or when the DB file will be deleted/reopened.
|
|
34
|
+
* Avoids "Could not set lock on file" when the same process reopens or deletes the DB.
|
|
35
|
+
*/
|
|
36
|
+
export declare function closeGraphStoreCache(dbPath: string): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=graph-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-store.d.ts","sourceRoot":"","sources":["../../../src/graph/graph-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS1D,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC;IACjC,mHAAmH;IACnH,kBAAkB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,2GAA2G;IAC3G,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuExE;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAMnF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphStore: open/create Kuzu DB, addDocument, addSymbol, addEdge, getConnection.
|
|
3
|
+
* Phase 2 step 7.
|
|
4
|
+
* Connection cache: one store per dbPath per process to avoid Kuzu "Could not set lock on file".
|
|
5
|
+
*/
|
|
6
|
+
import * as kuzu from 'kuzu';
|
|
7
|
+
import { mkdir } from 'fs/promises';
|
|
8
|
+
import { dirname } from 'path';
|
|
9
|
+
import { getSchemaDdl, NODE_TABLE } from './schema.js';
|
|
10
|
+
const storeCache = new Map();
|
|
11
|
+
function escapeCypherString(s) {
|
|
12
|
+
return s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create or open a GraphStore at the given DB path. Initializes schema if new.
|
|
16
|
+
*/
|
|
17
|
+
export async function openGraphStore(dbPath) {
|
|
18
|
+
await mkdir(dirname(dbPath), { recursive: true });
|
|
19
|
+
const db = new kuzu.Database(dbPath);
|
|
20
|
+
const conn = new kuzu.Connection(db);
|
|
21
|
+
for (const ddl of getSchemaDdl()) {
|
|
22
|
+
try {
|
|
23
|
+
await conn.query(ddl);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
27
|
+
if (!msg.includes('already exists'))
|
|
28
|
+
throw e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function addDocument(path, _indexedAt) {
|
|
32
|
+
const pathEsc = escapeCypherString(path);
|
|
33
|
+
const label = 'Document';
|
|
34
|
+
await conn.query(`MERGE (n:${NODE_TABLE} {id: '${pathEsc}'}) ON CREATE SET n.name = '${pathEsc}', n.path = '${pathEsc}', n.label = '${label}' ON MATCH SET n.name = '${pathEsc}', n.path = '${pathEsc}', n.label = '${label}'`);
|
|
35
|
+
}
|
|
36
|
+
async function addSymbol(label, props) {
|
|
37
|
+
const id = props.qualifiedName ?? `${props.path}:${props.name}`;
|
|
38
|
+
const nameEsc = escapeCypherString(props.name);
|
|
39
|
+
const pathEsc = escapeCypherString(props.path);
|
|
40
|
+
const idEsc = escapeCypherString(id);
|
|
41
|
+
const labelEsc = escapeCypherString(label);
|
|
42
|
+
await conn.query(`MERGE (n:${NODE_TABLE} {id: '${idEsc}'}) ON CREATE SET n.name = '${nameEsc}', n.path = '${pathEsc}', n.label = '${labelEsc}' ON MATCH SET n.name = '${nameEsc}', n.path = '${pathEsc}', n.label = '${labelEsc}'`);
|
|
43
|
+
}
|
|
44
|
+
async function addEdge(fromId, toId, type) {
|
|
45
|
+
const fromEsc = escapeCypherString(fromId);
|
|
46
|
+
const toEsc = escapeCypherString(toId);
|
|
47
|
+
await conn.query(`MATCH (a:${NODE_TABLE} {id: '${fromEsc}'}), (b:${NODE_TABLE} {id: '${toEsc}'}) MERGE (a)-[:${type}]->(b)`);
|
|
48
|
+
}
|
|
49
|
+
/** Delete nodes for one indexed root (path = root or path under root). Used for clean and re-index with merged graph. */
|
|
50
|
+
async function deleteNodesForRoot(rootPath) {
|
|
51
|
+
const rootEsc = escapeCypherString(rootPath);
|
|
52
|
+
const rootPrefixEscFwd = escapeCypherString(rootPath.replace(/\\/g, '/') + '/');
|
|
53
|
+
const rootPrefixEscBk = escapeCypherString(rootPath + (rootPath.endsWith('\\') ? '' : '\\'));
|
|
54
|
+
try {
|
|
55
|
+
await conn.query(`MATCH (n:${NODE_TABLE}) WHERE n.path = '${rootEsc}' OR starts_with(n.path, '${rootPrefixEscFwd}') OR starts_with(n.path, '${rootPrefixEscBk}') DETACH DELETE n`);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
59
|
+
if (msg.includes('starts_with') || msg.includes('DETACH')) {
|
|
60
|
+
await conn.query(`MATCH (n:${NODE_TABLE}) WHERE n.path = '${rootEsc}' DETACH DELETE n`);
|
|
61
|
+
}
|
|
62
|
+
else
|
|
63
|
+
throw e;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function close() {
|
|
67
|
+
await conn.close();
|
|
68
|
+
await db.close();
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
addDocument,
|
|
72
|
+
addSymbol,
|
|
73
|
+
addEdge,
|
|
74
|
+
getConnection: () => conn,
|
|
75
|
+
deleteNodesForRoot,
|
|
76
|
+
close,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Return cached GraphStore for dbPath or open once and cache it.
|
|
81
|
+
* Use this in MCP tools so repeated/concurrent requests share one connection per DB (avoids Kuzu lock errors).
|
|
82
|
+
*/
|
|
83
|
+
export async function getCachedOrOpenGraphStore(dbPath) {
|
|
84
|
+
const cached = storeCache.get(dbPath);
|
|
85
|
+
if (cached)
|
|
86
|
+
return cached;
|
|
87
|
+
const store = await openGraphStore(dbPath);
|
|
88
|
+
storeCache.set(dbPath, store);
|
|
89
|
+
return store;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Remove cached store for dbPath. Next getCachedOrOpenGraphStore(dbPath) will open a new connection.
|
|
93
|
+
* Call before re-index or clean so the next access sees the new or removed DB.
|
|
94
|
+
*/
|
|
95
|
+
export function invalidateGraphStoreCache(dbPath) {
|
|
96
|
+
storeCache.delete(dbPath);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Close the cached store for dbPath and remove it from the cache. Use before clean or when the DB file will be deleted/reopened.
|
|
100
|
+
* Avoids "Could not set lock on file" when the same process reopens or deletes the DB.
|
|
101
|
+
*/
|
|
102
|
+
export async function closeGraphStoreCache(dbPath) {
|
|
103
|
+
const store = storeCache.get(dbPath);
|
|
104
|
+
if (store?.close)
|
|
105
|
+
await store.close();
|
|
106
|
+
storeCache.delete(dbPath);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=graph-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-store.js","sourceRoot":"","sources":["../../../src/graph/graph-store.ts"],"names":[],"mappings":"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"}
|