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.
Files changed (309) hide show
  1. package/README.md +71 -0
  2. package/dist/bin/cli.d.ts +6 -0
  3. package/dist/bin/cli.d.ts.map +1 -0
  4. package/dist/bin/cli.js +61 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/mcp/index.d.ts +3 -0
  7. package/dist/mcp/index.d.ts.map +1 -0
  8. package/dist/mcp/index.js +8 -0
  9. package/dist/mcp/index.js.map +1 -0
  10. package/dist/src/cli/commands.d.ts +22 -0
  11. package/dist/src/cli/commands.d.ts.map +1 -0
  12. package/dist/src/cli/commands.js +87 -0
  13. package/dist/src/cli/commands.js.map +1 -0
  14. package/dist/src/discovery/find-sysml.d.ts +16 -0
  15. package/dist/src/discovery/find-sysml.d.ts.map +1 -0
  16. package/dist/src/discovery/find-sysml.js +30 -0
  17. package/dist/src/discovery/find-sysml.js.map +1 -0
  18. package/dist/src/discovery/load-order.d.ts +11 -0
  19. package/dist/src/discovery/load-order.d.ts.map +1 -0
  20. package/dist/src/discovery/load-order.js +85 -0
  21. package/dist/src/discovery/load-order.js.map +1 -0
  22. package/dist/src/graph/connection.d.ts +6 -0
  23. package/dist/src/graph/connection.d.ts.map +1 -0
  24. package/dist/src/graph/connection.js +7 -0
  25. package/dist/src/graph/connection.js.map +1 -0
  26. package/dist/src/graph/graph-store.d.ts +37 -0
  27. package/dist/src/graph/graph-store.d.ts.map +1 -0
  28. package/dist/src/graph/graph-store.js +108 -0
  29. package/dist/src/graph/graph-store.js.map +1 -0
  30. package/dist/src/graph/schema.d.ts +13 -0
  31. package/dist/src/graph/schema.d.ts.map +1 -0
  32. package/dist/src/graph/schema.js +21 -0
  33. package/dist/src/graph/schema.js.map +1 -0
  34. package/dist/src/index.d.ts +14 -0
  35. package/dist/src/index.d.ts.map +1 -0
  36. package/dist/src/index.js +14 -0
  37. package/dist/src/index.js.map +1 -0
  38. package/dist/src/indexer/indexer.d.ts +20 -0
  39. package/dist/src/indexer/indexer.d.ts.map +1 -0
  40. package/dist/src/indexer/indexer.js +56 -0
  41. package/dist/src/indexer/indexer.js.map +1 -0
  42. package/dist/src/indexer/pipeline-phases.d.ts +8 -0
  43. package/dist/src/indexer/pipeline-phases.d.ts.map +1 -0
  44. package/dist/src/indexer/pipeline-phases.js +14 -0
  45. package/dist/src/indexer/pipeline-phases.js.map +1 -0
  46. package/dist/src/mcp/resources/context.d.ts +6 -0
  47. package/dist/src/mcp/resources/context.d.ts.map +1 -0
  48. package/dist/src/mcp/resources/context.js +45 -0
  49. package/dist/src/mcp/resources/context.js.map +1 -0
  50. package/dist/src/mcp/resources/schema.d.ts +6 -0
  51. package/dist/src/mcp/resources/schema.d.ts.map +1 -0
  52. package/dist/src/mcp/resources/schema.js +14 -0
  53. package/dist/src/mcp/resources/schema.js.map +1 -0
  54. package/dist/src/mcp/server.d.ts +8 -0
  55. package/dist/src/mcp/server.d.ts.map +1 -0
  56. package/dist/src/mcp/server.js +175 -0
  57. package/dist/src/mcp/server.js.map +1 -0
  58. package/dist/src/mcp/tools/clean-index.d.ts +12 -0
  59. package/dist/src/mcp/tools/clean-index.d.ts.map +1 -0
  60. package/dist/src/mcp/tools/clean-index.js +22 -0
  61. package/dist/src/mcp/tools/clean-index.js.map +1 -0
  62. package/dist/src/mcp/tools/context.d.ts +14 -0
  63. package/dist/src/mcp/tools/context.d.ts.map +1 -0
  64. package/dist/src/mcp/tools/context.js +51 -0
  65. package/dist/src/mcp/tools/context.js.map +1 -0
  66. package/dist/src/mcp/tools/cypher.d.ts +13 -0
  67. package/dist/src/mcp/tools/cypher.d.ts.map +1 -0
  68. package/dist/src/mcp/tools/cypher.js +25 -0
  69. package/dist/src/mcp/tools/cypher.js.map +1 -0
  70. package/dist/src/mcp/tools/generate-map.d.ts +13 -0
  71. package/dist/src/mcp/tools/generate-map.d.ts.map +1 -0
  72. package/dist/src/mcp/tools/generate-map.js +96 -0
  73. package/dist/src/mcp/tools/generate-map.js.map +1 -0
  74. package/dist/src/mcp/tools/impact.d.ts +14 -0
  75. package/dist/src/mcp/tools/impact.d.ts.map +1 -0
  76. package/dist/src/mcp/tools/impact.js +47 -0
  77. package/dist/src/mcp/tools/impact.js.map +1 -0
  78. package/dist/src/mcp/tools/index-db-graph.d.ts +14 -0
  79. package/dist/src/mcp/tools/index-db-graph.d.ts.map +1 -0
  80. package/dist/src/mcp/tools/index-db-graph.js +32 -0
  81. package/dist/src/mcp/tools/index-db-graph.js.map +1 -0
  82. package/dist/src/mcp/tools/list-indexed.d.ts +9 -0
  83. package/dist/src/mcp/tools/list-indexed.d.ts.map +1 -0
  84. package/dist/src/mcp/tools/list-indexed.js +14 -0
  85. package/dist/src/mcp/tools/list-indexed.js.map +1 -0
  86. package/dist/src/mcp/tools/query.d.ts +14 -0
  87. package/dist/src/mcp/tools/query.d.ts.map +1 -0
  88. package/dist/src/mcp/tools/query.js +47 -0
  89. package/dist/src/mcp/tools/query.js.map +1 -0
  90. package/dist/src/mcp/tools/rename.d.ts +19 -0
  91. package/dist/src/mcp/tools/rename.d.ts.map +1 -0
  92. package/dist/src/mcp/tools/rename.js +46 -0
  93. package/dist/src/mcp/tools/rename.js.map +1 -0
  94. package/dist/src/parser/lsp-client.d.ts +52 -0
  95. package/dist/src/parser/lsp-client.d.ts.map +1 -0
  96. package/dist/src/parser/lsp-client.js +230 -0
  97. package/dist/src/parser/lsp-client.js.map +1 -0
  98. package/dist/src/parser/lsp-server-path.d.ts +10 -0
  99. package/dist/src/parser/lsp-server-path.d.ts.map +1 -0
  100. package/dist/src/parser/lsp-server-path.js +29 -0
  101. package/dist/src/parser/lsp-server-path.js.map +1 -0
  102. package/dist/src/parser/symbols.d.ts +13 -0
  103. package/dist/src/parser/symbols.d.ts.map +1 -0
  104. package/dist/src/parser/symbols.js +150 -0
  105. package/dist/src/parser/symbols.js.map +1 -0
  106. package/dist/src/parser/sysml-mcp-client.d.ts +109 -0
  107. package/dist/src/parser/sysml-mcp-client.d.ts.map +1 -0
  108. package/dist/src/parser/sysml-mcp-client.js +185 -0
  109. package/dist/src/parser/sysml-mcp-client.js.map +1 -0
  110. package/dist/src/storage/clean.d.ts +15 -0
  111. package/dist/src/storage/clean.d.ts.map +1 -0
  112. package/dist/src/storage/clean.js +44 -0
  113. package/dist/src/storage/clean.js.map +1 -0
  114. package/dist/src/storage/list.d.ts +9 -0
  115. package/dist/src/storage/list.d.ts.map +1 -0
  116. package/dist/src/storage/list.js +12 -0
  117. package/dist/src/storage/list.js.map +1 -0
  118. package/dist/src/storage/location.d.ts +22 -0
  119. package/dist/src/storage/location.d.ts.map +1 -0
  120. package/dist/src/storage/location.js +36 -0
  121. package/dist/src/storage/location.js.map +1 -0
  122. package/dist/src/storage/registry.d.ts +14 -0
  123. package/dist/src/storage/registry.d.ts.map +1 -0
  124. package/dist/src/storage/registry.js +59 -0
  125. package/dist/src/storage/registry.js.map +1 -0
  126. package/dist/src/symbol-to-graph/mapping.d.ts +17 -0
  127. package/dist/src/symbol-to-graph/mapping.d.ts.map +1 -0
  128. package/dist/src/symbol-to-graph/mapping.js +102 -0
  129. package/dist/src/symbol-to-graph/mapping.js.map +1 -0
  130. package/dist/src/types.d.ts +40 -0
  131. package/dist/src/types.d.ts.map +1 -0
  132. package/dist/src/types.js +35 -0
  133. package/dist/src/types.js.map +1 -0
  134. package/dist/src/worker/client.d.ts +21 -0
  135. package/dist/src/worker/client.d.ts.map +1 -0
  136. package/dist/src/worker/client.js +126 -0
  137. package/dist/src/worker/client.js.map +1 -0
  138. package/dist/src/worker/gateway.d.ts +79 -0
  139. package/dist/src/worker/gateway.d.ts.map +1 -0
  140. package/dist/src/worker/gateway.js +93 -0
  141. package/dist/src/worker/gateway.js.map +1 -0
  142. package/dist/src/worker/graph-worker.d.ts +7 -0
  143. package/dist/src/worker/graph-worker.d.ts.map +1 -0
  144. package/dist/src/worker/graph-worker.js +91 -0
  145. package/dist/src/worker/graph-worker.js.map +1 -0
  146. package/dist/src/worker/protocol.d.ts +21 -0
  147. package/dist/src/worker/protocol.d.ts.map +1 -0
  148. package/dist/src/worker/protocol.js +9 -0
  149. package/dist/src/worker/protocol.js.map +1 -0
  150. package/docs/INSTALL.md +16 -0
  151. package/docs/MCP_CLIENT_TEMPLATE_ANALYSIS.md +196 -0
  152. package/docs/MCP_INTERACTION_GUIDE.md +201 -0
  153. package/docs/MCP_SERVER_FOR_CURSOR.md +124 -0
  154. package/docs/PLAN.md +58 -0
  155. package/docs/PLAN_INDEPENDENT_LSP.md +145 -0
  156. package/docs/SKILL_DESIGN_PATTERNS.md +305 -0
  157. package/docs/TOOLS.md +317 -0
  158. package/lsp/README.md +41 -0
  159. package/lsp/node_modules/.bin/sysml-mcp +12 -0
  160. package/lsp/node_modules/.bin/sysml-mcp.cmd +9 -0
  161. package/lsp/node_modules/.bin/sysml-mcp.ps1 +16 -0
  162. package/lsp/node_modules/.package-lock.json +22 -0
  163. package/lsp/node_modules/sysml-v2-lsp/CHANGELOG.md +188 -0
  164. package/lsp/node_modules/sysml-v2-lsp/LICENSE +21 -0
  165. package/lsp/node_modules/sysml-v2-lsp/README.md +172 -0
  166. package/lsp/node_modules/sysml-v2-lsp/dist/server/mcpServer.js +167 -0
  167. package/lsp/node_modules/sysml-v2-lsp/dist/server/server.js +142 -0
  168. package/lsp/node_modules/sysml-v2-lsp/index.cjs +23 -0
  169. package/lsp/node_modules/sysml-v2-lsp/package.json +131 -0
  170. package/lsp/node_modules/sysml-v2-lsp/sysml.library/.project +17 -0
  171. package/lsp/node_modules/sysml-v2-lsp/sysml.library/.settings/org.eclipse.jdt.core.prefs +11 -0
  172. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/.meta.json +10 -0
  173. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/.project.json +27 -0
  174. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/AnalysisTooling.sysml +34 -0
  175. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/SampledFunctions.sysml +119 -0
  176. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/StateSpaceRepresentation.sysml +143 -0
  177. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/TradeStudies.sysml +171 -0
  178. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/.meta.json +8 -0
  179. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/.project.json +23 -0
  180. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/CausationConnections.sysml +83 -0
  181. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/CauseAndEffect.sysml +81 -0
  182. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/.meta.json +8 -0
  183. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/.project.json +27 -0
  184. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/ShapeItems.sysml +899 -0
  185. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/SpatialItems.sysml +168 -0
  186. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/.meta.json +10 -0
  187. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/.project.json +19 -0
  188. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ImageMetadata.sysml +78 -0
  189. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ModelingMetadata.sysml +143 -0
  190. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ParametersOfInterestMetadata.sysml +39 -0
  191. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/RiskMetadata.sysml +100 -0
  192. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/.meta.json +29 -0
  193. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/.project.json +23 -0
  194. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQ.sysml +42 -0
  195. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQAcoustics.sysml +439 -0
  196. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQAtomicNuclear.sysml +2726 -0
  197. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQBase.sysml +206 -0
  198. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQCharacteristicNumbers.sysml +1991 -0
  199. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQChemistryMolecular.sysml +1353 -0
  200. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQCondensedMatter.sysml +1223 -0
  201. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQElectromagnetism.sysml +2333 -0
  202. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQInformation.sysml +958 -0
  203. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQLight.sysml +1537 -0
  204. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQMechanics.sysml +1564 -0
  205. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQSpaceTime.sysml +1169 -0
  206. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQThermodynamics.sysml +1256 -0
  207. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/MeasurementRefCalculations.sysml +30 -0
  208. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/MeasurementReferences.sysml +526 -0
  209. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/Quantities.sysml +107 -0
  210. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/QuantityCalculations.sysml +70 -0
  211. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/SI.sysml +378 -0
  212. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/SIPrefixes.sysml +48 -0
  213. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/TensorCalculations.sysml +50 -0
  214. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/Time.sysml +274 -0
  215. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/USCustomaryUnits.sysml +260 -0
  216. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/VectorCalculations.sysml +62 -0
  217. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/.meta.json +8 -0
  218. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/.project.json +19 -0
  219. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/DerivationConnections.sysml +63 -0
  220. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/RequirementDerivation.sysml +39 -0
  221. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/.meta.json +9 -0
  222. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/.project.json +11 -0
  223. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/Collections.kerml +147 -0
  224. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/ScalarValues.kerml +23 -0
  225. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/VectorValues.kerml +64 -0
  226. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/.meta.json +23 -0
  227. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/.project.json +15 -0
  228. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/BaseFunctions.kerml +80 -0
  229. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/BooleanFunctions.kerml +22 -0
  230. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/CollectionFunctions.kerml +68 -0
  231. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ComplexFunctions.kerml +47 -0
  232. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ControlFunctions.kerml +117 -0
  233. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/DataFunctions.kerml +43 -0
  234. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/IntegerFunctions.kerml +43 -0
  235. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/NaturalFunctions.kerml +27 -0
  236. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/NumericalFunctions.kerml +43 -0
  237. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/OccurrenceFunctions.kerml +154 -0
  238. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/RationalFunctions.kerml +49 -0
  239. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/RealFunctions.kerml +56 -0
  240. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ScalarFunctions.kerml +33 -0
  241. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/SequenceFunctions.kerml +111 -0
  242. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/StringFunctions.kerml +25 -0
  243. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/TrigFunctions.kerml +35 -0
  244. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/VectorFunctions.kerml +273 -0
  245. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/.meta.json +22 -0
  246. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/.project.json +15 -0
  247. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Base.kerml +95 -0
  248. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Clocks.kerml +156 -0
  249. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/ControlPerformances.kerml +135 -0
  250. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/FeatureReferencingPerformances.kerml +190 -0
  251. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml +483 -0
  252. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Links.kerml +67 -0
  253. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Metaobjects.kerml +58 -0
  254. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Objects.kerml +212 -0
  255. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Observation.kerml +161 -0
  256. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Occurrences.kerml +992 -0
  257. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Performances.kerml +293 -0
  258. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/SpatialFrames.kerml +197 -0
  259. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/StatePerformances.kerml +145 -0
  260. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Transfers.kerml +281 -0
  261. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/TransitionPerformances.kerml +66 -0
  262. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Triggers.kerml +188 -0
  263. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/.meta.json +27 -0
  264. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/.project.json +19 -0
  265. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Actions.sysml +552 -0
  266. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Allocations.sysml +29 -0
  267. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/AnalysisCases.sysml +38 -0
  268. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Attributes.sysml +25 -0
  269. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Calculations.sysml +37 -0
  270. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Cases.sysml +71 -0
  271. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Connections.sysml +60 -0
  272. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Constraints.sysml +44 -0
  273. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Flows.sysml +126 -0
  274. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Interfaces.sysml +89 -0
  275. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Items.sysml +153 -0
  276. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Metadata.sysml +32 -0
  277. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Parts.sysml +81 -0
  278. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Ports.sysml +54 -0
  279. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Requirements.sysml +194 -0
  280. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/StandardViewDefinitions.sysml +123 -0
  281. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/States.sysml +103 -0
  282. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/SysML.sysml +539 -0
  283. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/UseCases.sysml +57 -0
  284. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/VerificationCases.sysml +103 -0
  285. package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Views.sysml +164 -0
  286. package/lsp/package-lock.json +30 -0
  287. package/lsp/package.json +15 -0
  288. package/lsp/test-server.mjs +120 -0
  289. package/package.json +61 -0
  290. package/scripts/access-sysml-mcp.mjs +45 -0
  291. package/scripts/check-sysml-v2-lsp-version.mjs +39 -0
  292. package/scripts/clean.mjs +14 -0
  293. package/scripts/compare-mcp-vs-lsp-symbols.mjs +76 -0
  294. package/scripts/debug-index.mjs +23 -0
  295. package/scripts/debug-lsp-symbols.mjs +62 -0
  296. package/scripts/deploy-skills.mjs +43 -0
  297. package/scripts/example-sysml-mcp.mjs +27 -0
  298. package/scripts/export-graph.mjs +80 -0
  299. package/scripts/generate-map.mjs +110 -0
  300. package/scripts/index-and-map.mjs +43 -0
  301. package/scripts/index-and-query.mjs +39 -0
  302. package/scripts/query-one.mjs +34 -0
  303. package/scripts/setup-lsp.mjs +36 -0
  304. package/scripts/test-lsp.mjs +55 -0
  305. package/scripts/test-mcp-debug.mjs +32 -0
  306. package/scripts/test-mcp-sysml.mjs +75 -0
  307. package/scripts/test-mcp-tools.mjs +185 -0
  308. package/scripts/test-sysml-mcp-from-node_modules.mjs +56 -0
  309. package/scripts/validate-sysml-file.mjs +69 -0
@@ -0,0 +1,899 @@
1
+ standard library package ShapeItems {
2
+ doc
3
+ /*
4
+ * This package provides a model of items that represent basic geometric shapes.
5
+ */
6
+
7
+ private import ScalarValues::Boolean;
8
+ private import ScalarValues::Positive;
9
+ private import ISQSpaceTime::*;
10
+ private import ISQBase::*;
11
+ private import SI::m;
12
+ private import Occurrences::MatesWith;
13
+ private import Objects::*;
14
+ private import Items::Item;
15
+ private import SequenceFunctions::equals;
16
+ private import SequenceFunctions::isEmpty;
17
+ private import SequenceFunctions::notEmpty;
18
+ private import SequenceFunctions::size;
19
+ private import SequenceFunctions::includes;
20
+ private import ControlFunctions::'if';
21
+ private import ControlFunctions::forAll;
22
+ private import ControlFunctions::exists;
23
+ private import Quantities::scalarQuantities;
24
+
25
+ item def PlanarCurve :> Curve {
26
+ doc
27
+ /*
28
+ * A PlanarCurve is a Curve with a given length embeddable in a plane.
29
+ */
30
+
31
+ attribute :>> length [1];
32
+
33
+ attribute :>> outerSpaceDimension;
34
+ assert constraint { notEmpty(outerSpaceDimension) & outerSpaceDimension <= 2 }
35
+ }
36
+
37
+ item def PlanarSurface :> Surface {
38
+ doc
39
+ /*
40
+ * A PlanarSurface is a flat Surface with a given area.
41
+ */
42
+
43
+ attribute :>> area [1];
44
+ attribute :>> outerSpaceDimension = 2;
45
+
46
+ item :>> shape : PlanarCurve;
47
+ }
48
+
49
+ item def Line :> PlanarCurve {
50
+ doc
51
+ /*
52
+ * A Line is a Curve that is a straight line of a given length.
53
+ */
54
+
55
+ attribute :>> length [1];
56
+ attribute :>> outerSpaceDimension = 1;
57
+ }
58
+
59
+ abstract item def Path :> StructuredSpaceObject::StructuredCurve {
60
+ doc
61
+ /*
62
+ * Path is the most general structured Curve.
63
+ */
64
+
65
+ item :>> faces [0];
66
+ item :>> edges [1..*] {
67
+ item :>> vertices [0..2];
68
+ }
69
+ item :>> vertices [*] = edges.vertices;
70
+
71
+ assert constraint { isClosed == vertices->forAll{in p1 : Point;
72
+ vertices->exists{p2 : Point; p1 != p2 and
73
+ includes(p1.matingOccurrences, p2) } } }
74
+ }
75
+
76
+ attribute semiMajorAxis : LengthValue [0..*] :> scalarQuantities;
77
+ attribute semiMinorAxis : LengthValue [0..*] :> scalarQuantities;
78
+ attribute xoffset : LengthValue [0..*] :> scalarQuantities default 0 [m];
79
+ attribute yoffset : LengthValue [0..*] :> scalarQuantities default 0 [m];
80
+ attribute baseLength : LengthValue [0..*] :> scalarQuantities;
81
+ attribute baseWidth : LengthValue [0..*] :> scalarQuantities;
82
+
83
+ item def ConicSection :> Path, PlanarCurve {
84
+ doc
85
+ /*
86
+ * A ConicSection is a closed PlanarCurve, possibly disconnected, see Hyperbola.
87
+ */
88
+
89
+
90
+ item :>> edges [1..2];
91
+
92
+ item :>> vertices [0];
93
+ }
94
+
95
+ item def Ellipse :> ConicSection {
96
+ doc
97
+ /*
98
+ * An Ellipse is a ConicSection in the shape of an ellipse of a given semiaxes.
99
+ */
100
+
101
+ attribute :>> semiMajorAxis [1];
102
+ attribute :>> semiMinorAxis [1];
103
+
104
+ item :>> edges [1];
105
+ }
106
+
107
+ item def Circle :> Ellipse {
108
+ doc
109
+ /*
110
+ * A Circle is an Ellipse with semiaxes equal to its radius.
111
+ */
112
+
113
+ attribute :>> radius [1];
114
+ attribute :>> semiMajorAxis [1] = radius;
115
+ attribute :>> semiMinorAxis [1] = radius;
116
+
117
+ item :>> edges {
118
+ attribute length [1] = Circle::radius * TrigFunctions::pi * 2;
119
+ }
120
+ }
121
+
122
+ item def Parabola :> ConicSection {
123
+ doc
124
+ /*
125
+ * A Parabola is a ConicSection in the shape of a parabola of a given focal length.
126
+ */
127
+
128
+ attribute focalDistance : LengthValue [1] :> scalarQuantities;
129
+
130
+ item :>> edges [1];
131
+ }
132
+
133
+ item def Hyperbola :> ConicSection {
134
+ doc
135
+ /*
136
+ * A Hyperbola is a ConicSection in the shape of a hyperbola with given axes.
137
+ */
138
+
139
+ attribute tranverseAxis : LengthValue [1] :> scalarQuantities;
140
+ attribute conjugateAxis : LengthValue [1] :> scalarQuantities;
141
+ }
142
+
143
+ item def Polygon :> Path, PlanarCurve {
144
+ doc
145
+ /*
146
+ * A Polygon is a closed planar Path with straight edges.
147
+ */
148
+
149
+ item :>> edges : Line { item :>> vertices [2]; }
150
+
151
+ attribute :>> isClosed = true;
152
+
153
+ assert constraint { (1..size(edges))->forAll {in i;
154
+ edges#(i).vertices->equals((vertices#((2*i)-1), vertices#(2*i))) and
155
+ includes((edges#(i).vertices#(2) as Item).matingOccurrences,
156
+ edges#(if i==size(edges) ? 1 else i+1).vertices#(1)) } }
157
+ }
158
+
159
+ item def Triangle :> Polygon {
160
+ doc
161
+ /*
162
+ * A Triangle is three-sided Polygon with given length (base), width (perpendicular distance
163
+ * from base to apex), and offset of this perpendicular at the base from the center of the base.
164
+ */
165
+
166
+ attribute :>> length [1];
167
+ attribute :>> width [1];
168
+ attribute :>> xoffset [1];
169
+
170
+ item :>> edges [3] = (base, e2, e3);
171
+ item base [1] { length = Triangle::length; }
172
+ item e2 [1];
173
+ item e3 [1];
174
+
175
+ item :>> vertices [6];
176
+ item v12 [2] ordered = (vertices#(2), vertices#(3));
177
+ item apex [2] ordered = (vertices#(4), vertices#(5));
178
+ item v31 [2] ordered = (vertices#(6), vertices#(1));
179
+ }
180
+
181
+ item def RightTriangle :> Triangle {
182
+ doc
183
+ /*
184
+ * A RightTriangle is a Triangle with sides opposite the hypotenuse at right angles.
185
+ */
186
+
187
+ attribute :>> xoffset = length / 2;
188
+
189
+ item :>> e2 { attribute :>> length = Triangle::width; }
190
+
191
+ item hypotenuse :>> e3 {
192
+ attribute :>> length = ( Triangle::length^2 + Triangle::width^2 );
193
+ }
194
+ }
195
+
196
+ item def Quadrilateral :> Polygon {
197
+ doc
198
+ /*
199
+ * A Quadrilateral is a four-sided Polygon.
200
+ */
201
+
202
+ item :>> edges [4] = (e1, e2, e3, e4);
203
+ item e1 [1];
204
+ item e2 [1];
205
+ item e3 [1];
206
+ item e4 [1];
207
+
208
+ item :>> vertices [8];
209
+ item v12 [2] ordered = (vertices#(2), vertices#(3));
210
+ item v23 [2] ordered = (vertices#(4), vertices#(5));
211
+ item v34 [2] ordered = (vertices#(6), vertices#(7));
212
+ item v41 [2] ordered = (vertices#(6), vertices#(1));
213
+ }
214
+
215
+ item def Rectangle :> Quadrilateral {
216
+ doc
217
+ /*
218
+ * A Rectangle is a Quadrilateral four right angles and given length and width.
219
+ */
220
+
221
+ attribute :>> length [1];
222
+ attribute :>> width [1];
223
+
224
+ item :>> e1 { attribute :>> length = Rectangle::length; }
225
+ item :>> e2 { attribute :>> length = Rectangle::width; }
226
+ item :>> e3 { attribute :>> length = e1.length; }
227
+ item :>> e4 { attribute :>> length = e2.length; }
228
+ }
229
+
230
+ abstract item def Shell :> StructuredSpaceObject::StructuredSurface {
231
+ doc
232
+ /*
233
+ * Shell is the most general structured Surface.
234
+ */
235
+ }
236
+
237
+ item def Disc :> Shell, PlanarSurface {
238
+ doc
239
+ /*
240
+ * A Disc is a Shell bound by an Ellipse.
241
+ */
242
+
243
+ attribute :>> semiMajorAxis [1];
244
+ attribute :>> semiMinorAxis [1];
245
+
246
+ item :>> shape : Ellipse [1] {
247
+ attribute :>> semiMajorAxis = Disc::semiMajorAxis;
248
+ attribute :>> semiMinorAxis = Disc::semiMinorAxis;
249
+ }
250
+
251
+ item :>> faces : PlanarSurface [1] {
252
+ item :>> edges [1];
253
+ }
254
+ item :>> edges : Ellipse [1] = shape {
255
+ attribute :>> Shell::edges::innerSpaceDimension, Ellipse::innerSpaceDimension;
256
+ ref item :>> Shell::edges::vertices, Ellipse::vertices;
257
+ }
258
+ item :>> vertices [0];
259
+ }
260
+
261
+ item def CircularDisc :> Disc {
262
+ doc
263
+ /*
264
+ * A CircularDisc is a Disc bound by a Circle.
265
+ */
266
+
267
+ attribute :>> radius [1];
268
+ attribute :>> semiMajorAxis [1] = radius;
269
+ attribute :>> semiMinorAxis [1] = radius;
270
+
271
+ item :>> shape : Circle {
272
+ attribute :>> Disc::shape::semiMajorAxis, Circle::semiMajorAxis;
273
+ attribute :>> Disc::shape::semiMinorAxis, Circle::semiMinorAxis;
274
+ }
275
+ item :>> edges : Circle;
276
+ }
277
+
278
+ item def ConicSurface :> Shell {
279
+ doc
280
+ /*
281
+ * A ConicSurface is a Surface that has ConicSection cross-sections.
282
+ */
283
+
284
+ item :>> faces [1..2];
285
+ item :>> edges [0];
286
+ item :>> vertices [0];
287
+
288
+ attribute :>> genus = 0;
289
+ }
290
+
291
+ item def Ellipsoid :> ConicSurface {
292
+ doc
293
+ /*
294
+ * An Ellipsoid is a ConicSurface with only elliptical cross-sections.
295
+ */
296
+
297
+ attribute semiAxis1 : LengthValue [1] :> scalarQuantities;
298
+ attribute semiAxis2 : LengthValue [1] :> scalarQuantities;
299
+ attribute semiAxis3 : LengthValue [1] :> scalarQuantities;
300
+
301
+ item :>> faces [1];
302
+ }
303
+
304
+ item def Sphere :> Ellipsoid {
305
+ doc
306
+ /*
307
+ * A Sphere is an Ellipsoid with all the same semiaxes.
308
+ */
309
+
310
+ attribute :>> radius [1];
311
+ attribute :>> semiAxis1 [1] = radius;
312
+ attribute :>> semiAxis2 [1] = radius;
313
+ attribute :>> semiAxis3 [1] = radius;
314
+ }
315
+
316
+ item def Paraboloid :> ConicSurface {
317
+ doc
318
+ /*
319
+ * A Paraboloid is a ConicSurface with only parabolic cross-sections.
320
+ */
321
+
322
+ attribute focalDistance : LengthValue [1] :> scalarQuantities;
323
+
324
+ item :>> faces [1];
325
+ }
326
+
327
+ item def Hyperboloid :> ConicSurface {
328
+ doc
329
+ /*
330
+ * A Hyperboloid is a ConicSurface with only hyperbolic cross-sections.
331
+ */
332
+
333
+ attribute transverseAxis : LengthValue [1] :> scalarQuantities;
334
+ attribute conjugateAxis : LengthValue [1] :> scalarQuantities;
335
+ }
336
+
337
+ item def Toroid :> Shell {
338
+ doc
339
+ /*
340
+ * A Toroid is a surface generated from revolving a planar closed curve about an line coplanar
341
+ * with the curve. It is single sided with one hole.
342
+ */
343
+
344
+ attribute revolutionRadius : LengthValue [1] :> scalarQuantities;
345
+
346
+ item revolvedCurve : PlanarCurve [1] { attribute :>> isClosed = true; }
347
+
348
+ item :>> faces [1];
349
+ item :>> edges [0];
350
+ item :>> vertices [0];
351
+
352
+ attribute :>> genus = 1;
353
+ }
354
+
355
+ item def Torus :> Toroid {
356
+ doc
357
+ /*
358
+ * A Torus is a revolution of a Circle.
359
+ */
360
+
361
+ attribute majorRadius :>> revolutionRadius;
362
+ attribute minorRadius : LengthValue [1] :> scalarQuantities;
363
+
364
+ item :>> revolvedCurve: Circle [1] { attribute :>> radius = minorRadius; }
365
+ }
366
+
367
+
368
+ item def RectangularToroid :> Toroid {
369
+ doc
370
+ /*
371
+ * A RectangularToroid is a revolution of a Rectangle.
372
+ */
373
+
374
+ attribute rectangleLength : LengthValue [1] :> scalarQuantities;
375
+ attribute rectangleWidth : LengthValue [1] :> scalarQuantities;
376
+
377
+ item :>> revolvedCurve: Rectangle [1] {
378
+ attribute :>> length = rectangleLength;
379
+ attribute :>> width = rectangleWidth;
380
+ attribute :>> revolvedCurve::isClosed, Rectangle::isClosed;
381
+ }
382
+ }
383
+
384
+ item def ConeOrCylinder :> Shell {
385
+ doc
386
+ /*
387
+ * A ConeOrCylinder is Shell that a Cone or a Cylinder with a given elliptical base,
388
+ * height, width (perpendicular distance from the base to the center of the top side or vertex),
389
+ * and offsets of this perpendicular at the base from the center of the base.
390
+ */
391
+
392
+ attribute :>> semiMajorAxis [1];
393
+ attribute :>> semiMinorAxis [1];
394
+ attribute :>> height [1];
395
+
396
+ attribute :>> xoffset [1];
397
+ attribute :>> yoffset [1];
398
+
399
+ item :>> faces [2..3];
400
+ item base : Disc [1] :> faces {
401
+ attribute :>> Disc::innerSpaceDimension, faces::innerSpaceDimension;
402
+ ref :>> Disc::edges, ConeOrCylinder::faces::edges {
403
+ attribute :>> Disc::edges::innerSpaceDimension, ConeOrCylinder::faces::edges::innerSpaceDimension;
404
+ }
405
+ ref :>> Disc::vertices, ConeOrCylinder::faces::vertices;
406
+ }
407
+ item af : Disc [0..1] :> faces {
408
+ attribute :>> Disc::innerSpaceDimension, faces::innerSpaceDimension;
409
+ ref :>> Disc::edges, ConeOrCylinder::faces::edges {
410
+ attribute :>> Disc::edges::innerSpaceDimension, ConeOrCylinder::faces::edges::innerSpaceDimension;
411
+ }
412
+ ref :>> Disc::vertices, ConeOrCylinder::faces::vertices;
413
+ }
414
+ item cf : Surface [1] :> faces;
415
+
416
+ item :>> edges [2..4] = faces.edges;
417
+ item be [2] :> edges {
418
+ attribute :>> semiMajorAxis = ConeOrCylinder::semiMajorAxis;
419
+ attribute :>> semiMinorAxis = ConeOrCylinder::semiMinorAxis;
420
+ }
421
+ item ae [0..2] :> edges {
422
+ attribute :>> semiMajorAxis = be.semiMajorAxis;
423
+ attribute :>> semiMinorAxis = be.semiMinorAxis;
424
+ }
425
+ assert constraint { size(ae) == (if isEmpty(af) ? 0 else 2) and
426
+ size(edges) == (if isEmpty(af) ? 2 else 4) }
427
+
428
+ item :>> vertices [0..1] = faces.vertices;
429
+ assert constraint { isEmpty(af) == notEmpty(vertices) }
430
+
431
+ /* Bind face edges to specific edges */
432
+ binding [1] bind [0..*] base.edges = [0..*] be;
433
+ binding [1] bind [0..*] cf.edges = [0..*] be;
434
+
435
+ /* Meeting edges */
436
+ connection :MatesWith connect [1] be to [1] be;
437
+
438
+ attribute :>> genus = 0;
439
+ }
440
+
441
+ item def Cone :> ConeOrCylinder {
442
+ doc
443
+ /*
444
+ * A Cone has one elliptical sides joined to a point by a curved side.
445
+ */
446
+
447
+ item :>> faces [2];
448
+
449
+ item apex :>> vertices;
450
+
451
+ /* Bind face vertices to specific vertices */
452
+ binding [1] bind [0..*] cf.vertices = [0..*] apex;
453
+ }
454
+
455
+ item def EccentricCone :> Cone {
456
+ doc
457
+ /*
458
+ * An EccentricCone is a Cone with least one positive offset.
459
+ */
460
+
461
+ assert constraint { xoffset > 0 or yoffset > 0 }
462
+ }
463
+
464
+ item def CircularCone :> Cone {
465
+ doc
466
+ /*
467
+ * A CircularCone is a Cone with a circular base.
468
+ */
469
+
470
+ attribute :>> radius [1];
471
+ attribute :>> semiMajorAxis [1] = radius;
472
+ attribute :>> semiMinorAxis [1] = radius;
473
+
474
+ item :>> base : CircularDisc {
475
+ ref :>> base::edges, CircularDisc::edges;
476
+ }
477
+ }
478
+
479
+ item def RightCircularCone :> CircularCone {
480
+ doc
481
+ /*
482
+ * A RightCircularCone is a CircularCone with zero offsets.
483
+ */
484
+
485
+ attribute :>> xoffset { attribute :>> num = 0; }
486
+ attribute :>> yoffset { attribute :>> num = 0; }
487
+ }
488
+
489
+ item def Cylinder :> ConeOrCylinder {
490
+ doc
491
+ /*
492
+ * A Cylinder has two elliptical sides joined by a curved side.
493
+ */
494
+
495
+ item :>> af [1];
496
+
497
+ binding [1] bind [0..*] cf.edges = [0..*] ae;
498
+
499
+ connection :MatesWith connect [1] ae to [1] ae {
500
+ doc /* Meeting edges */
501
+ }
502
+ }
503
+
504
+ item def EccentricCylinder :> Cylinder {
505
+ doc
506
+ /*
507
+ * An EccentricCylinder is a Cylinder with least one positive offset.
508
+ */
509
+
510
+ assert constraint { xoffset > 0 or yoffset > 0 }
511
+ }
512
+
513
+ item def CircularCylinder :> Cylinder {
514
+ doc
515
+ /*
516
+ * A CircularCylinder is a Cylinder with two circular sides.
517
+ */
518
+
519
+ attribute :>> radius [1];
520
+ attribute :>> semiMajorAxis [1] = radius;
521
+ attribute :>> semiMinorAxis [1] = radius;
522
+
523
+ item :>> base : CircularDisc {
524
+ ref :>> base::edges, CircularDisc::edges;
525
+ }
526
+ item :>> af : CircularDisc {
527
+ ref :>> af::edges, CircularDisc::edges;
528
+ }
529
+ }
530
+
531
+ item def RightCircularCylinder :> CircularCylinder {
532
+ doc
533
+ /*
534
+ * A RightCircularCylinder is a CircularCylinder with zero offsets.
535
+ */
536
+
537
+ attribute :>> xoffset { attribute :>> num = 0; }
538
+ attribute :>> yoffset { attribute :>> num = 0; }
539
+ }
540
+
541
+ item def Polyhedron :> Shell {
542
+ doc
543
+ /*
544
+ * A Polyhedron is a closed Shell with polygonal sides.
545
+ */
546
+
547
+ attribute :>> isClosed = true;
548
+
549
+ item :>> faces : Polygon [2..*] {
550
+ attribute :>> Polygon::innerSpaceDimension, faces::innerSpaceDimension;
551
+ ref :>> Polygon::edges, ConeOrCylinder::faces::edges;
552
+ ref :>> Polygon::vertices, ConeOrCylinder::faces::vertices;
553
+ }
554
+
555
+ item :>> edges = faces.edges;
556
+
557
+ attribute :>> outerSpaceDimension = if size(faces) > 2 ? 3 else 2;
558
+
559
+ attribute :>> genus = 0;
560
+ }
561
+
562
+ item def CuboidOrTriangularPrism :> Polyhedron {
563
+ doc
564
+ /*
565
+ * A CuboidOrTriangularPrism is a Polyhedron that is either a Cuboid or TriangularPrism.
566
+ */
567
+
568
+ item :>> faces [5..6];
569
+ item tf : Quadrilateral [1] :> faces {
570
+ ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
571
+ ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
572
+ }
573
+ item bf : Quadrilateral [1] :> faces {
574
+ ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
575
+ ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
576
+ }
577
+ item ff : Polygon [1] :> faces { item :>> Polygon::edges, faces::edges [3..4]; }
578
+ item rf : Polygon [1] :> faces { item :>> Polygon::edges, faces::edges [3..4]; }
579
+ item slf : Quadrilateral [1] :> faces {
580
+ ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
581
+ ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
582
+ }
583
+ item srf : Quadrilateral [0..1] :> faces {
584
+ ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
585
+ ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
586
+ }
587
+
588
+ item :>> edges;
589
+ assert constraint { size(edges) == 18 or size(edges) == 24 }
590
+
591
+ item tfe [2] :> edges;
592
+ item tre [2] :> edges;
593
+ item tsle [2] :> edges;
594
+ item tsre [0..2] :> edges;
595
+ item bfe [2] :> edges;
596
+ item bre [2] :> edges;
597
+ item bsle [2] :> edges;
598
+ item bsre [2] :> edges;
599
+ item ufle [2] :> edges;
600
+ item ufre [0..2] :> edges;
601
+ item urle [2] :> edges;
602
+ item urre [0..2] :> edges;
603
+
604
+ assert constraint { ( isEmpty(srf) implies isEmpty(tsre) ) and
605
+ ( isEmpty(tsre) == isEmpty(ufre) ) and
606
+ ( isEmpty(ufre) == isEmpty(urre) ) }
607
+
608
+ item :>> vertices;
609
+ assert constraint { size(vertices) == size(edges) }
610
+
611
+ item tflv [3] :> vertices;
612
+ item tfrv [0..3] :> vertices;
613
+ item trlv [3] :> vertices;
614
+ item trrv [0..3] :> vertices;
615
+ item bflv [3] :> vertices;
616
+ item bfrv [3] :> vertices;
617
+ item brlv [3] :> vertices;
618
+ item brrv [3] :> vertices;
619
+
620
+ assert constraint { ( isEmpty(tfrv) == isEmpty(trrv) ) }
621
+
622
+ /* Bind face edges to specific edges */
623
+ binding [1] bind [0..1] tf.edges = [0..1] tfe;
624
+ binding [1] bind [0..1] tf.edges = [0..1] tre;
625
+ binding [1] bind [0..1] tf.edges = [0..1] tsle;
626
+ binding [1] bind [0..1] bf.edges = [0..1] bfe;
627
+ binding [1] bind [0..1] bf.edges = [0..1] bre;
628
+ binding [1] bind [0..1] bf.edges = [0..1] bsle;
629
+ binding [1] bind [0..1] bf.edges = [0..1] bsre;
630
+
631
+ binding [1] bind [0..1] ff.edges = [0..1] tfe;
632
+ binding [1] bind [0..1] ff.edges = [0..1] bfe;
633
+ binding [1] bind [0..1] ff.edges = [0..1] ufle;
634
+
635
+ binding [1] bind [0..1] rf.edges = [0..1] tre;
636
+ binding [1] bind [0..1] rf.edges = [0..1] bre;
637
+ binding [1] bind [0..1] rf.edges = [0..1] urle;
638
+
639
+ /* Bind edge vertices to specific vertices */
640
+ binding [1] bind [0..1] tfe.vertices = [0..1] tflv;
641
+ binding [1] bind [0..1] tre.vertices = [0..1] trlv;
642
+ binding [1] bind [0..1] tsle.vertices = [0..1] tflv;
643
+ binding [1] bind [0..1] tsle.vertices = [0..1] trlv;
644
+
645
+ binding [1] bind [0..1] bfe.vertices = [0..1] bflv;
646
+ binding [1] bind [0..1] bfe.vertices = [0..1] bfrv;
647
+ binding [1] bind [0..1] bre.vertices = [0..1] brlv;
648
+ binding [1] bind [0..1] bre.vertices = [0..1] brrv;
649
+ binding [1] bind [0..1] bsle.vertices = [0..1] bflv;
650
+ binding [1] bind [0..1] bsle.vertices = [0..1] brlv;
651
+ binding [1] bind [0..1] bsre.vertices = [0..1] bfrv;
652
+ binding [1] bind [0..1] bsre.vertices = [0..1] brrv;
653
+
654
+ binding [1] bind [0..1] ufle.vertices = [0..1] tflv;
655
+ binding [1] bind [0..1] ufle.vertices = [0..1] bflv;
656
+ binding [1] bind [0..1] urle.vertices = [0..1] trlv;
657
+ binding [1] bind [0..1] urle.vertices = [0..1] brlv;
658
+
659
+ /* Meeting edges */
660
+ connection :MatesWith connect [1] tfe to [1] tfe;
661
+ connection :MatesWith connect [1] tre to [1] tre;
662
+ connection :MatesWith connect [1] tsle to [1] tsle;
663
+ connection :MatesWith connect [1] bfe to [1] bfe;
664
+ connection :MatesWith connect [1] bre to [1] bre;
665
+ connection :MatesWith connect [1] bsle to [1] bsle;
666
+ connection :MatesWith connect [1] bsre to [1] bsre;
667
+ connection :MatesWith connect [1] ufle to [1] ufle;
668
+ connection :MatesWith connect [1] urle to [1] urle;
669
+ connection :MatesWith connect [1] bsre to [1] bsre;
670
+
671
+ /* Meeting vertices */
672
+ connection :MatesWith connect [2] tflv to [2] tflv;
673
+ connection :MatesWith connect [2] trlv to [2] trlv;
674
+ connection :MatesWith connect [2] bflv to [2] bflv;
675
+ connection :MatesWith connect [2] bfrv to [2] bfrv;
676
+ connection :MatesWith connect [2] brlv to [2] brlv;
677
+ connection :MatesWith connect [2] brrv to [2] brrv;
678
+ }
679
+
680
+ item def TriangularPrism :> CuboidOrTriangularPrism {
681
+ doc
682
+ /*
683
+ * A TriangularPrism is a Polyhedron with five sides, two triangular and
684
+ * the others quadrilateral.
685
+ */
686
+
687
+
688
+ item :>> faces [5];
689
+ item :>> ff : Triangle {
690
+ ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
691
+ ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
692
+ }
693
+ item :>> rf : Triangle {
694
+ ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
695
+ ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
696
+ }
697
+
698
+ item :>> edges [18];
699
+
700
+ item :>> vertices;
701
+
702
+ /* Bind face edges to specific edges */
703
+ binding [1] bind [0..1] tf.edges = [0..1] bsre;
704
+
705
+ /* Bind edge vertices to specific vertices */
706
+ binding [1] bind [0..1] tfe.vertices = [0..1] bfrv;
707
+ binding [1] bind [0..1] tre.vertices = [0..1] bfrv;
708
+ }
709
+
710
+ item def RightTriangularPrism :> TriangularPrism {
711
+ doc
712
+ /*
713
+ * A RightTriangularPrism a TriangularPrism with two right triangluar sides,
714
+ * with given length, width, and height.
715
+ */
716
+
717
+ attribute :>> length [1];
718
+ attribute :>> width [1];
719
+ attribute :>> height [1];
720
+
721
+ item :>> tf : Rectangle;
722
+ item :>> bf : Rectangle;
723
+ item :>> ff : RightTriangle {
724
+ attribute :>> length = RightTriangularPrism::length;
725
+ attribute :>> width = RightTriangularPrism::width;
726
+ }
727
+ item :>> rf : RightTriangle {
728
+ attribute :>> length = ff.length;
729
+ attribute :>> width = rf.width;
730
+ }
731
+ item :>> slf : Rectangle;
732
+ item :>> srf : Rectangle;
733
+
734
+ item :>> tfe { attribute :>> length = ff.hypotenuse.length; }
735
+ item :>> tre { attribute :>> length = tfe.length; }
736
+ item :>> tsle { attribute :>> length = height; }
737
+ item :>> bfe { attribute :>> length = RightTriangularPrism::length; }
738
+ item :>> bre { attribute :>> length = RightTriangularPrism::length; }
739
+ item :>> bsle { attribute :>> length = height; }
740
+ item :>> bsre { attribute :>> length = height; }
741
+ item :>> ufle { attribute :>> length = width; }
742
+ item :>> urle { attribute :>> length = width; }
743
+ }
744
+ alias Wedge for RightTriangularPrism;
745
+
746
+ item def Cuboid :> CuboidOrTriangularPrism {
747
+ doc
748
+ /*
749
+ * A Cuboid is a Polyhedron with six sides, all quadrilateral.
750
+ */
751
+
752
+ item :>> faces [6];
753
+ item :>> ff : Quadrilateral {
754
+ ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
755
+ ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
756
+ }
757
+ item :>> rf : Quadrilateral {
758
+ ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
759
+ ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
760
+ }
761
+
762
+ item :>> edges [24];
763
+
764
+ item :>> vertices;
765
+
766
+ /* Bind face edges to specific edges */
767
+ binding [1] bind [0..1] tf.edges = [0..1] tsre;
768
+ binding [1] bind [0..1] ff.edges = [0..1] ufre;
769
+ binding [1] bind [0..1] rf.edges = [0..1] urre;
770
+
771
+ binding [1] bind [0..1] srf.edges = [0..1] tsre;
772
+ binding [1] bind [0..1] srf.edges = [0..1] bsre;
773
+ binding [1] bind [0..1] srf.edges = [0..1] ufre;
774
+ binding [1] bind [0..1] srf.edges = [0..1] urre;
775
+
776
+ /* Bind edge vertices to specific vertices */
777
+ binding [1] bind [0..1] tfe.vertices = [0..1] tfrv;
778
+ binding [1] bind [0..1] tre.vertices = [0..1] trrv;
779
+ binding [1] bind [0..1] tsre.vertices = [0..1] tfrv;
780
+ binding [1] bind [0..1] tsre.vertices = [0..1] trrv;
781
+
782
+ binding [1] bind [0..1] ufre.vertices = [0..1] tfrv;
783
+ binding [1] bind [0..1] ufre.vertices = [0..1] bfrv;
784
+ binding [1] bind [0..1] urre.vertices = [0..1] trrv;
785
+ binding [1] bind [0..1] urre.vertices = [0..1] brrv;
786
+
787
+ /* Meeting edges */
788
+ connection :MatesWith connect [1] tsre to [1] tsre;
789
+ connection :MatesWith connect [1] ufre to [1] ufre;
790
+ connection :MatesWith connect [1] urre to [1] urre;
791
+ connection :MatesWith connect [1] bsre to [1] bsre;
792
+
793
+ /* Meeting vertices */
794
+ connection :MatesWith connect [2] tfrv to [2] tfrv;
795
+ connection :MatesWith connect [2] trrv to [2] trrv;
796
+ }
797
+
798
+ item def RectangularCuboid :> Cuboid {
799
+ doc
800
+ /*
801
+ * A RectangularCuboid is a Cuboid with all Rectangular sides.
802
+ */
803
+
804
+ attribute :>> length [1];
805
+ attribute :>> width [1];
806
+ attribute :>> height [1];
807
+
808
+ item :>> tf : Rectangle { attribute :>> length = RectangularCuboid::length;
809
+ attribute :>> width = RectangularCuboid::height; }
810
+ item :>> bf : Rectangle { attribute :>> length = RectangularCuboid::length;
811
+ attribute :>> width = RectangularCuboid::height; }
812
+ item :>> ff : Rectangle { attribute :>> length = RectangularCuboid::length;
813
+ attribute :>> width = RectangularCuboid::width; }
814
+ item :>> rf : Rectangle { attribute :>> length = RectangularCuboid::length;
815
+ attribute :>> width = RectangularCuboid::width; }
816
+ item :>> slf : Rectangle { attribute :>> length = RectangularCuboid::height;
817
+ attribute :>> width = RectangularCuboid::width; }
818
+ item :>> srf : Rectangle { attribute :>> length = RectangularCuboid::height;
819
+ attribute :>> width = RectangularCuboid::width; }
820
+ }
821
+ alias Box for RectangularCuboid;
822
+
823
+ item def Pyramid :> Polyhedron {
824
+ doc
825
+ /*
826
+ * A Pyramid is a Polyhedron with the sides of a polygon (base) forming the bases of triangles
827
+ * that join at an apex point. Its height is the perpendicular distance from the base to the apex,
828
+ * and its offsets are between this perpendicular at the base and the center of the base.
829
+ */
830
+
831
+ attribute :>> height [1];
832
+ attribute :>> xoffset;
833
+ attribute :>> yoffset;
834
+
835
+ item :>> faces;
836
+ item base [1] :> faces;
837
+ item wall : Triangle :> faces {
838
+ ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
839
+ ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
840
+ }
841
+ attribute wallNumber : Positive = size(wall);
842
+
843
+ assert constraint { size(faces) == wallNumber + 1 }
844
+ assert constraint { size(wall) == size(base.edges) }
845
+
846
+ item :>> edges;
847
+
848
+ assert constraint { size(edges) == wallNumber * 4 }
849
+
850
+ item :>> vertices;
851
+ item apex :> vertices = wall.apex;
852
+
853
+ assert constraint { size(apex) == wallNumber }
854
+
855
+ /* Base to wall and wall to wall edge mating. */
856
+ assert constraint { (1..wallNumber)->forAll {in i;
857
+ includes(wall#(i).base.matingOccurrences,
858
+ Pyramid::base.edges#(i)) and
859
+ includes((wall#(i).edges#(3) as Item).matingOccurrences,
860
+ wall#(if i==wallNumber ? 1 else i+1).edges#(2)) } }
861
+
862
+ /* Meeting apices. */
863
+ connection :MatesWith connect [wallNumber] apex to [wallNumber] apex;
864
+ }
865
+
866
+ item def Tetrahedron :> Pyramid {
867
+ doc
868
+ /*
869
+ * A Tetrahedron is Pyramid with a triangular base.
870
+ */
871
+
872
+ attribute :>> baseLength [1];
873
+ attribute :>> baseWidth [1];
874
+
875
+ item :>> base : Triangle {
876
+ ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
877
+ ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
878
+ attribute :>> length = Tetrahedron::baseLength;
879
+ attribute :>> width = Tetrahedron::baseWidth;
880
+ }
881
+ }
882
+
883
+ item def RectangularPyramid :> Pyramid {
884
+ doc
885
+ /*
886
+ * A RectangularPyramid is Pyramid with a rectangular base.
887
+ */
888
+
889
+ attribute :>> baseLength [1];
890
+ attribute :>> baseWidth [1];
891
+
892
+ item :>> base : Rectangle {
893
+ ref :>> Rectangle::edges, ConeOrCylinder::faces::edges;
894
+ ref :>> Rectangle::vertices, ConeOrCylinder::faces::vertices;
895
+ attribute :>> length = RectangularPyramid::baseLength;
896
+ attribute :>> width = RectangularPyramid::baseWidth;
897
+ }
898
+ }
899
+ }