@memoarchitect/tools 0.6.7 → 0.7.2

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 (466) hide show
  1. package/README.md +36 -11
  2. package/package.json +19 -7
  3. package/packages/tools/lib/bin/memo.js +161 -10
  4. package/packages/tools/lib/bin/memo.js.map +1 -1
  5. package/packages/tools/lib/browser/index.d.ts +1 -1
  6. package/packages/tools/lib/browser/index.d.ts.map +1 -1
  7. package/packages/tools/lib/browser/index.js +1 -1
  8. package/packages/tools/lib/browser/index.js.map +1 -1
  9. package/packages/tools/lib/commands/ask.js +1 -1
  10. package/packages/tools/lib/commands/ask.js.map +1 -1
  11. package/packages/tools/lib/commands/check.d.ts.map +1 -1
  12. package/packages/tools/lib/commands/check.js +3 -9
  13. package/packages/tools/lib/commands/check.js.map +1 -1
  14. package/packages/tools/lib/commands/conformance.d.ts +36 -0
  15. package/packages/tools/lib/commands/conformance.d.ts.map +1 -0
  16. package/packages/tools/lib/commands/conformance.js +212 -0
  17. package/packages/tools/lib/commands/conformance.js.map +1 -0
  18. package/packages/tools/lib/commands/convert.d.ts +12 -0
  19. package/packages/tools/lib/commands/convert.d.ts.map +1 -0
  20. package/packages/tools/lib/commands/convert.js +103 -0
  21. package/packages/tools/lib/commands/convert.js.map +1 -0
  22. package/packages/tools/lib/commands/create-package.d.ts +1 -2
  23. package/packages/tools/lib/commands/create-package.d.ts.map +1 -1
  24. package/packages/tools/lib/commands/create-package.js.map +1 -1
  25. package/packages/tools/lib/commands/dev.d.ts +13 -0
  26. package/packages/tools/lib/commands/dev.d.ts.map +1 -1
  27. package/packages/tools/lib/commands/dev.js +208 -74
  28. package/packages/tools/lib/commands/dev.js.map +1 -1
  29. package/packages/tools/lib/commands/dhf-draft.js +1 -1
  30. package/packages/tools/lib/commands/dhf-draft.js.map +1 -1
  31. package/packages/tools/lib/commands/dhf-preview.js +1 -1
  32. package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
  33. package/packages/tools/lib/commands/dhf.js +1 -1
  34. package/packages/tools/lib/commands/dhf.js.map +1 -1
  35. package/packages/tools/lib/commands/element.d.ts +34 -0
  36. package/packages/tools/lib/commands/element.d.ts.map +1 -0
  37. package/packages/tools/lib/commands/element.js +174 -0
  38. package/packages/tools/lib/commands/element.js.map +1 -0
  39. package/packages/tools/lib/commands/export.d.ts.map +1 -1
  40. package/packages/tools/lib/commands/export.js +39 -40
  41. package/packages/tools/lib/commands/export.js.map +1 -1
  42. package/packages/tools/lib/commands/generate.d.ts.map +1 -1
  43. package/packages/tools/lib/commands/generate.js +10 -7
  44. package/packages/tools/lib/commands/generate.js.map +1 -1
  45. package/packages/tools/lib/commands/import.d.ts.map +1 -1
  46. package/packages/tools/lib/commands/import.js +25 -12
  47. package/packages/tools/lib/commands/import.js.map +1 -1
  48. package/packages/tools/lib/commands/init.d.ts.map +1 -1
  49. package/packages/tools/lib/commands/init.js +34 -14
  50. package/packages/tools/lib/commands/init.js.map +1 -1
  51. package/packages/tools/lib/commands/inspect.d.ts +5 -0
  52. package/packages/tools/lib/commands/inspect.d.ts.map +1 -0
  53. package/packages/tools/lib/commands/inspect.js +56 -0
  54. package/packages/tools/lib/commands/inspect.js.map +1 -0
  55. package/packages/tools/lib/commands/lock.d.ts.map +1 -1
  56. package/packages/tools/lib/commands/lock.js +7 -2
  57. package/packages/tools/lib/commands/lock.js.map +1 -1
  58. package/packages/tools/lib/commands/ontology.d.ts.map +1 -1
  59. package/packages/tools/lib/commands/ontology.js +69 -116
  60. package/packages/tools/lib/commands/ontology.js.map +1 -1
  61. package/packages/tools/lib/commands/pack.d.ts +1 -1
  62. package/packages/tools/lib/commands/pack.d.ts.map +1 -1
  63. package/packages/tools/lib/commands/pack.js +20 -78
  64. package/packages/tools/lib/commands/pack.js.map +1 -1
  65. package/packages/tools/lib/commands/package.d.ts +10 -0
  66. package/packages/tools/lib/commands/package.d.ts.map +1 -0
  67. package/packages/tools/lib/commands/package.js +113 -0
  68. package/packages/tools/lib/commands/package.js.map +1 -0
  69. package/packages/tools/lib/commands/plugin.js +1 -1
  70. package/packages/tools/lib/commands/plugin.js.map +1 -1
  71. package/packages/tools/lib/commands/rules.d.ts.map +1 -1
  72. package/packages/tools/lib/commands/rules.js +120 -30
  73. package/packages/tools/lib/commands/rules.js.map +1 -1
  74. package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -1
  75. package/packages/tools/lib/commands/sysand-publish.js +14 -16
  76. package/packages/tools/lib/commands/sysand-publish.js.map +1 -1
  77. package/packages/tools/lib/commands/toolchain.d.ts +8 -0
  78. package/packages/tools/lib/commands/toolchain.d.ts.map +1 -0
  79. package/packages/tools/lib/commands/toolchain.js +64 -0
  80. package/packages/tools/lib/commands/toolchain.js.map +1 -0
  81. package/packages/tools/lib/commands/validate.d.ts +1 -1
  82. package/packages/tools/lib/commands/validate.d.ts.map +1 -1
  83. package/packages/tools/lib/commands/validate.js +183 -56
  84. package/packages/tools/lib/commands/validate.js.map +1 -1
  85. package/packages/tools/lib/completeness/tracker.d.ts +10 -2
  86. package/packages/tools/lib/completeness/tracker.d.ts.map +1 -1
  87. package/packages/tools/lib/completeness/tracker.js +16 -21
  88. package/packages/tools/lib/completeness/tracker.js.map +1 -1
  89. package/packages/tools/lib/conformance/baseline.d.ts +26 -0
  90. package/packages/tools/lib/conformance/baseline.d.ts.map +1 -0
  91. package/packages/tools/lib/conformance/baseline.js +170 -0
  92. package/packages/tools/lib/conformance/baseline.js.map +1 -0
  93. package/packages/tools/lib/conformance/bnf.d.ts +84 -0
  94. package/packages/tools/lib/conformance/bnf.d.ts.map +1 -0
  95. package/packages/tools/lib/conformance/bnf.js +166 -0
  96. package/packages/tools/lib/conformance/bnf.js.map +1 -0
  97. package/packages/tools/lib/conformance/corpus.d.ts +125 -0
  98. package/packages/tools/lib/conformance/corpus.d.ts.map +1 -0
  99. package/packages/tools/lib/conformance/corpus.js +190 -0
  100. package/packages/tools/lib/conformance/corpus.js.map +1 -0
  101. package/packages/tools/lib/conformance/diff-xmi.d.ts +118 -0
  102. package/packages/tools/lib/conformance/diff-xmi.d.ts.map +1 -0
  103. package/packages/tools/lib/conformance/diff-xmi.js +276 -0
  104. package/packages/tools/lib/conformance/diff-xmi.js.map +1 -0
  105. package/packages/tools/lib/conformance/generated/syside-rules.d.ts +10 -0
  106. package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +1 -0
  107. package/packages/tools/lib/conformance/generated/syside-rules.js +1142 -0
  108. package/packages/tools/lib/conformance/generated/syside-rules.js.map +1 -0
  109. package/packages/tools/lib/conformance/index.d.ts +7 -0
  110. package/packages/tools/lib/conformance/index.d.ts.map +1 -0
  111. package/packages/tools/lib/conformance/index.js +19 -0
  112. package/packages/tools/lib/conformance/index.js.map +1 -0
  113. package/packages/tools/lib/conformance/run.d.ts +117 -0
  114. package/packages/tools/lib/conformance/run.d.ts.map +1 -0
  115. package/packages/tools/lib/conformance/run.js +0 -0
  116. package/packages/tools/lib/conformance/run.js.map +1 -0
  117. package/packages/tools/lib/conformance/xmi.d.ts +45 -0
  118. package/packages/tools/lib/conformance/xmi.d.ts.map +1 -0
  119. package/packages/tools/lib/conformance/xmi.js +148 -0
  120. package/packages/tools/lib/conformance/xmi.js.map +1 -0
  121. package/packages/tools/lib/dhf/template-resolver.js +1 -1
  122. package/packages/tools/lib/dhf/template-resolver.js.map +1 -1
  123. package/packages/tools/lib/import/column-mapper.d.ts +2 -2
  124. package/packages/tools/lib/import/column-mapper.d.ts.map +1 -1
  125. package/packages/tools/lib/import/column-mapper.js +3 -3
  126. package/packages/tools/lib/import/column-mapper.js.map +1 -1
  127. package/packages/tools/lib/index.d.ts +20 -3
  128. package/packages/tools/lib/index.d.ts.map +1 -1
  129. package/packages/tools/lib/index.js +19 -2
  130. package/packages/tools/lib/index.js.map +1 -1
  131. package/packages/tools/lib/language/generated/ast.d.ts +196 -51
  132. package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
  133. package/packages/tools/lib/language/generated/ast.js +136 -15
  134. package/packages/tools/lib/language/generated/ast.js.map +1 -1
  135. package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -1
  136. package/packages/tools/lib/language/generated/grammar.js +867 -295
  137. package/packages/tools/lib/language/generated/grammar.js.map +1 -1
  138. package/packages/tools/lib/llm/chat-engine.d.ts +4 -3
  139. package/packages/tools/lib/llm/chat-engine.d.ts.map +1 -1
  140. package/packages/tools/lib/llm/chat-engine.js +15 -12
  141. package/packages/tools/lib/llm/chat-engine.js.map +1 -1
  142. package/packages/tools/lib/llm/generate-engine.d.ts +7 -2
  143. package/packages/tools/lib/llm/generate-engine.d.ts.map +1 -1
  144. package/packages/tools/lib/llm/generate-engine.js +22 -4
  145. package/packages/tools/lib/llm/generate-engine.js.map +1 -1
  146. package/packages/tools/lib/llm/index.d.ts +1 -0
  147. package/packages/tools/lib/llm/index.d.ts.map +1 -1
  148. package/packages/tools/lib/llm/index.js +1 -0
  149. package/packages/tools/lib/llm/index.js.map +1 -1
  150. package/packages/tools/lib/llm/model-context.d.ts +2 -2
  151. package/packages/tools/lib/llm/model-context.d.ts.map +1 -1
  152. package/packages/tools/lib/llm/model-context.js +7 -13
  153. package/packages/tools/lib/llm/model-context.js.map +1 -1
  154. package/packages/tools/lib/llm/sysml-guidance.d.ts +8 -0
  155. package/packages/tools/lib/llm/sysml-guidance.d.ts.map +1 -0
  156. package/packages/tools/lib/llm/sysml-guidance.js +28 -0
  157. package/packages/tools/lib/llm/sysml-guidance.js.map +1 -0
  158. package/packages/tools/lib/lock.d.ts +14 -8
  159. package/packages/tools/lib/lock.d.ts.map +1 -1
  160. package/packages/tools/lib/lock.js +97 -108
  161. package/packages/tools/lib/lock.js.map +1 -1
  162. package/packages/tools/lib/mcp/model-loader.d.ts +3 -0
  163. package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
  164. package/packages/tools/lib/mcp/model-loader.js +9 -5
  165. package/packages/tools/lib/mcp/model-loader.js.map +1 -1
  166. package/packages/tools/lib/mcp/tools.d.ts +3 -0
  167. package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
  168. package/packages/tools/lib/mcp/tools.js +8 -9
  169. package/packages/tools/lib/mcp/tools.js.map +1 -1
  170. package/packages/tools/lib/model/activity-notation.d.ts +54 -0
  171. package/packages/tools/lib/model/activity-notation.d.ts.map +1 -0
  172. package/packages/tools/lib/model/activity-notation.js +208 -0
  173. package/packages/tools/lib/model/activity-notation.js.map +1 -0
  174. package/packages/tools/lib/model/builder.d.ts +3 -0
  175. package/packages/tools/lib/model/builder.d.ts.map +1 -1
  176. package/packages/tools/lib/model/builder.js +231 -19
  177. package/packages/tools/lib/model/builder.js.map +1 -1
  178. package/packages/tools/lib/model/config-loader.d.ts +19 -25
  179. package/packages/tools/lib/model/config-loader.d.ts.map +1 -1
  180. package/packages/tools/lib/model/config-loader.js +51 -233
  181. package/packages/tools/lib/model/config-loader.js.map +1 -1
  182. package/packages/tools/lib/model/config.d.ts +42 -213
  183. package/packages/tools/lib/model/config.d.ts.map +1 -1
  184. package/packages/tools/lib/model/config.js +11 -9
  185. package/packages/tools/lib/model/config.js.map +1 -1
  186. package/packages/tools/lib/model/effective-scope.d.ts +74 -0
  187. package/packages/tools/lib/model/effective-scope.d.ts.map +1 -0
  188. package/packages/tools/lib/model/effective-scope.js +133 -0
  189. package/packages/tools/lib/model/effective-scope.js.map +1 -0
  190. package/packages/tools/lib/model/ir-identity.d.ts +94 -0
  191. package/packages/tools/lib/model/ir-identity.d.ts.map +1 -0
  192. package/packages/tools/lib/model/ir-identity.js +178 -0
  193. package/packages/tools/lib/model/ir-identity.js.map +1 -0
  194. package/packages/tools/lib/model/kind-registry.d.ts +114 -1
  195. package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
  196. package/packages/tools/lib/model/kind-registry.js +148 -4
  197. package/packages/tools/lib/model/kind-registry.js.map +1 -1
  198. package/packages/tools/lib/model/layer-resolver.js +1 -1
  199. package/packages/tools/lib/model/layer-resolver.js.map +1 -1
  200. package/packages/tools/lib/model/methodology-loader.d.ts +19 -24
  201. package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -1
  202. package/packages/tools/lib/model/methodology-loader.js +179 -176
  203. package/packages/tools/lib/model/methodology-loader.js.map +1 -1
  204. package/packages/tools/lib/model/methodology-resolver.d.ts +115 -0
  205. package/packages/tools/lib/model/methodology-resolver.d.ts.map +1 -0
  206. package/packages/tools/lib/model/methodology-resolver.js +317 -0
  207. package/packages/tools/lib/model/methodology-resolver.js.map +1 -0
  208. package/packages/tools/lib/model/native-project.d.ts +130 -0
  209. package/packages/tools/lib/model/native-project.d.ts.map +1 -0
  210. package/packages/tools/lib/model/native-project.js +570 -0
  211. package/packages/tools/lib/model/native-project.js.map +1 -0
  212. package/packages/tools/lib/model/ontology-loader.d.ts +34 -21
  213. package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
  214. package/packages/tools/lib/model/ontology-loader.js +340 -614
  215. package/packages/tools/lib/model/ontology-loader.js.map +1 -1
  216. package/packages/tools/lib/model/package-manifest.d.ts +37 -0
  217. package/packages/tools/lib/model/package-manifest.d.ts.map +1 -0
  218. package/packages/tools/lib/model/package-manifest.js +96 -0
  219. package/packages/tools/lib/model/package-manifest.js.map +1 -0
  220. package/packages/tools/lib/model/parser-utils.d.ts +31 -0
  221. package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
  222. package/packages/tools/lib/model/parser-utils.js +89 -1
  223. package/packages/tools/lib/model/parser-utils.js.map +1 -1
  224. package/packages/tools/lib/model/paths.d.ts +10 -4
  225. package/packages/tools/lib/model/paths.d.ts.map +1 -1
  226. package/packages/tools/lib/model/paths.js +10 -4
  227. package/packages/tools/lib/model/paths.js.map +1 -1
  228. package/packages/tools/lib/model/project-conversion.d.ts +226 -0
  229. package/packages/tools/lib/model/project-conversion.d.ts.map +1 -0
  230. package/packages/tools/lib/model/project-conversion.js +946 -0
  231. package/packages/tools/lib/model/project-conversion.js.map +1 -0
  232. package/packages/tools/lib/model/relationship-legality.d.ts +10 -0
  233. package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -1
  234. package/packages/tools/lib/model/relationship-legality.js.map +1 -1
  235. package/packages/tools/lib/model/relationship-registry.d.ts +16 -1
  236. package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
  237. package/packages/tools/lib/model/relationship-registry.js.map +1 -1
  238. package/packages/tools/lib/model/semantic.d.ts +27 -0
  239. package/packages/tools/lib/model/semantic.d.ts.map +1 -1
  240. package/packages/tools/lib/model/semantic.js +3 -0
  241. package/packages/tools/lib/model/semantic.js.map +1 -1
  242. package/packages/tools/lib/model/settings-boundary.d.ts +19 -0
  243. package/packages/tools/lib/model/settings-boundary.d.ts.map +1 -0
  244. package/packages/tools/lib/model/settings-boundary.js +118 -0
  245. package/packages/tools/lib/model/settings-boundary.js.map +1 -0
  246. package/packages/tools/lib/model/short-id.d.ts.map +1 -1
  247. package/packages/tools/lib/model/short-id.js +2 -0
  248. package/packages/tools/lib/model/short-id.js.map +1 -1
  249. package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
  250. package/packages/tools/lib/model/source-graph.js +5 -1
  251. package/packages/tools/lib/model/source-graph.js.map +1 -1
  252. package/packages/tools/lib/model/source-provenance.d.ts +112 -0
  253. package/packages/tools/lib/model/source-provenance.d.ts.map +1 -0
  254. package/packages/tools/lib/model/source-provenance.js +169 -0
  255. package/packages/tools/lib/model/source-provenance.js.map +1 -0
  256. package/packages/tools/lib/model/sysml-ir.d.ts +9 -0
  257. package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -0
  258. package/packages/tools/lib/model/sysml-ir.js +105 -0
  259. package/packages/tools/lib/model/sysml-ir.js.map +1 -0
  260. package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
  261. package/packages/tools/lib/model/view-deriver.js +36 -6
  262. package/packages/tools/lib/model/view-deriver.js.map +1 -1
  263. package/packages/tools/lib/model/view-kinds.d.ts +2 -0
  264. package/packages/tools/lib/model/view-kinds.d.ts.map +1 -1
  265. package/packages/tools/lib/model/view-kinds.js +11 -0
  266. package/packages/tools/lib/model/view-kinds.js.map +1 -1
  267. package/packages/tools/lib/ontology/owl-exporter.d.ts +2 -2
  268. package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
  269. package/packages/tools/lib/ontology/owl-exporter.js +12 -12
  270. package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
  271. package/packages/tools/lib/operations/ai-authoring.d.ts +24 -0
  272. package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -0
  273. package/packages/tools/lib/operations/ai-authoring.js +77 -0
  274. package/packages/tools/lib/operations/ai-authoring.js.map +1 -0
  275. package/packages/tools/lib/operations/authoring.d.ts +40 -0
  276. package/packages/tools/lib/operations/authoring.d.ts.map +1 -0
  277. package/packages/tools/lib/operations/authoring.js +56 -0
  278. package/packages/tools/lib/operations/authoring.js.map +1 -0
  279. package/packages/tools/lib/operations/index.d.ts +2 -0
  280. package/packages/tools/lib/operations/index.d.ts.map +1 -1
  281. package/packages/tools/lib/operations/index.js +2 -0
  282. package/packages/tools/lib/operations/index.js.map +1 -1
  283. package/packages/tools/lib/operations/project-snapshot.d.ts +28 -3
  284. package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
  285. package/packages/tools/lib/operations/project-snapshot.js +79 -30
  286. package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
  287. package/packages/tools/lib/protocol/messages.d.ts +298 -11
  288. package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
  289. package/packages/tools/lib/serializer/csv-io.d.ts +7 -7
  290. package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
  291. package/packages/tools/lib/serializer/csv-io.js +11 -11
  292. package/packages/tools/lib/serializer/csv-io.js.map +1 -1
  293. package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
  294. package/packages/tools/lib/serializer/sysml-generator.js +34 -2
  295. package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
  296. package/packages/tools/lib/server/config-resolver.d.ts +8 -4
  297. package/packages/tools/lib/server/config-resolver.d.ts.map +1 -1
  298. package/packages/tools/lib/server/config-resolver.js +25 -44
  299. package/packages/tools/lib/server/config-resolver.js.map +1 -1
  300. package/packages/tools/lib/server/conflict-policy.d.ts +44 -0
  301. package/packages/tools/lib/server/conflict-policy.d.ts.map +1 -0
  302. package/packages/tools/lib/server/conflict-policy.js +94 -0
  303. package/packages/tools/lib/server/conflict-policy.js.map +1 -0
  304. package/packages/tools/lib/server/dev-server.d.ts +32 -2
  305. package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
  306. package/packages/tools/lib/server/dev-server.js +721 -53
  307. package/packages/tools/lib/server/dev-server.js.map +1 -1
  308. package/packages/tools/lib/server/element-writer.d.ts +11 -0
  309. package/packages/tools/lib/server/element-writer.d.ts.map +1 -0
  310. package/packages/tools/lib/server/element-writer.js +123 -0
  311. package/packages/tools/lib/server/element-writer.js.map +1 -0
  312. package/packages/tools/lib/server/file-watcher.d.ts +4 -1
  313. package/packages/tools/lib/server/file-watcher.d.ts.map +1 -1
  314. package/packages/tools/lib/server/file-watcher.js +17 -7
  315. package/packages/tools/lib/server/file-watcher.js.map +1 -1
  316. package/packages/tools/lib/server/mutation-domain.d.ts +22 -0
  317. package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -0
  318. package/packages/tools/lib/server/mutation-domain.js +87 -0
  319. package/packages/tools/lib/server/mutation-domain.js.map +1 -0
  320. package/packages/tools/lib/server/persistor.d.ts +63 -8
  321. package/packages/tools/lib/server/persistor.d.ts.map +1 -1
  322. package/packages/tools/lib/server/persistor.js +152 -44
  323. package/packages/tools/lib/server/persistor.js.map +1 -1
  324. package/packages/tools/lib/server/relationship-writer.d.ts +28 -4
  325. package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
  326. package/packages/tools/lib/server/relationship-writer.js +98 -13
  327. package/packages/tools/lib/server/relationship-writer.js.map +1 -1
  328. package/packages/tools/lib/server/rule-policy-writer.d.ts +40 -0
  329. package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -0
  330. package/packages/tools/lib/server/rule-policy-writer.js +124 -0
  331. package/packages/tools/lib/server/rule-policy-writer.js.map +1 -0
  332. package/packages/tools/lib/server/runtime-budget.d.ts +14 -0
  333. package/packages/tools/lib/server/runtime-budget.d.ts.map +1 -0
  334. package/packages/tools/lib/server/runtime-budget.js +15 -0
  335. package/packages/tools/lib/server/runtime-budget.js.map +1 -0
  336. package/packages/tools/lib/server/sysml-notation.d.ts +36 -0
  337. package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -0
  338. package/packages/tools/lib/server/sysml-notation.js +87 -0
  339. package/packages/tools/lib/server/sysml-notation.js.map +1 -0
  340. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts +9 -0
  341. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts.map +1 -0
  342. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js +315 -0
  343. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js.map +1 -0
  344. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts +5206 -0
  345. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts.map +1 -0
  346. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js +1933 -0
  347. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js.map +1 -0
  348. package/packages/tools/lib/sysml-ir/index.d.ts +3 -0
  349. package/packages/tools/lib/sysml-ir/index.d.ts.map +1 -0
  350. package/packages/tools/lib/sysml-ir/index.js +3 -0
  351. package/packages/tools/lib/sysml-ir/index.js.map +1 -0
  352. package/packages/tools/lib/sysml-ir/ir.d.ts +50 -0
  353. package/packages/tools/lib/sysml-ir/ir.d.ts.map +1 -0
  354. package/packages/tools/lib/sysml-ir/ir.js +2 -0
  355. package/packages/tools/lib/sysml-ir/ir.js.map +1 -0
  356. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +3 -0
  357. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +1 -0
  358. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +97 -0
  359. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +1 -0
  360. package/packages/tools/lib/sysmlc/index.d.ts +2 -0
  361. package/packages/tools/lib/sysmlc/index.d.ts.map +1 -0
  362. package/packages/tools/lib/sysmlc/index.js +7 -0
  363. package/packages/tools/lib/sysmlc/index.js.map +1 -0
  364. package/packages/tools/lib/sysmlc/server.d.ts +29 -0
  365. package/packages/tools/lib/sysmlc/server.d.ts.map +1 -0
  366. package/packages/tools/lib/sysmlc/server.js +168 -0
  367. package/packages/tools/lib/sysmlc/server.js.map +1 -0
  368. package/packages/tools/lib/toolchain/default-registry.d.ts +12 -0
  369. package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -0
  370. package/packages/tools/lib/toolchain/default-registry.js +28 -0
  371. package/packages/tools/lib/toolchain/default-registry.js.map +1 -0
  372. package/packages/tools/lib/toolchain/diagnostic.d.ts +57 -0
  373. package/packages/tools/lib/toolchain/diagnostic.d.ts.map +1 -0
  374. package/packages/tools/lib/toolchain/diagnostic.js +69 -0
  375. package/packages/tools/lib/toolchain/diagnostic.js.map +1 -0
  376. package/packages/tools/lib/toolchain/effective.d.ts +36 -0
  377. package/packages/tools/lib/toolchain/effective.d.ts.map +1 -0
  378. package/packages/tools/lib/toolchain/effective.js +91 -0
  379. package/packages/tools/lib/toolchain/effective.js.map +1 -0
  380. package/packages/tools/lib/toolchain/index.d.ts +11 -0
  381. package/packages/tools/lib/toolchain/index.d.ts.map +1 -0
  382. package/packages/tools/lib/toolchain/index.js +21 -0
  383. package/packages/tools/lib/toolchain/index.js.map +1 -0
  384. package/packages/tools/lib/toolchain/lowering.d.ts +63 -0
  385. package/packages/tools/lib/toolchain/lowering.d.ts.map +1 -0
  386. package/packages/tools/lib/toolchain/lowering.js +100 -0
  387. package/packages/tools/lib/toolchain/lowering.js.map +1 -0
  388. package/packages/tools/lib/toolchain/operations.d.ts +87 -0
  389. package/packages/tools/lib/toolchain/operations.d.ts.map +1 -0
  390. package/packages/tools/lib/toolchain/operations.js +111 -0
  391. package/packages/tools/lib/toolchain/operations.js.map +1 -0
  392. package/packages/tools/lib/toolchain/process.d.ts +45 -0
  393. package/packages/tools/lib/toolchain/process.d.ts.map +1 -0
  394. package/packages/tools/lib/toolchain/process.js +125 -0
  395. package/packages/tools/lib/toolchain/process.js.map +1 -0
  396. package/packages/tools/lib/toolchain/protocol.d.ts +122 -0
  397. package/packages/tools/lib/toolchain/protocol.d.ts.map +1 -0
  398. package/packages/tools/lib/toolchain/protocol.js +74 -0
  399. package/packages/tools/lib/toolchain/protocol.js.map +1 -0
  400. package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts +9 -0
  401. package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts.map +1 -0
  402. package/packages/tools/lib/toolchain/providers/internal-kpar.js +84 -0
  403. package/packages/tools/lib/toolchain/providers/internal-kpar.js.map +1 -0
  404. package/packages/tools/lib/toolchain/providers/internal.d.ts +33 -0
  405. package/packages/tools/lib/toolchain/providers/internal.d.ts.map +1 -0
  406. package/packages/tools/lib/toolchain/providers/internal.js +286 -0
  407. package/packages/tools/lib/toolchain/providers/internal.js.map +1 -0
  408. package/packages/tools/lib/toolchain/providers/sysand.d.ts +12 -0
  409. package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -0
  410. package/packages/tools/lib/toolchain/providers/sysand.js +110 -0
  411. package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -0
  412. package/packages/tools/lib/toolchain/providers/syside.d.ts +24 -0
  413. package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -0
  414. package/packages/tools/lib/toolchain/providers/syside.js +208 -0
  415. package/packages/tools/lib/toolchain/providers/syside.js.map +1 -0
  416. package/packages/tools/lib/toolchain/registry.d.ts +192 -0
  417. package/packages/tools/lib/toolchain/registry.d.ts.map +1 -0
  418. package/packages/tools/lib/toolchain/registry.js +130 -0
  419. package/packages/tools/lib/toolchain/registry.js.map +1 -0
  420. package/packages/tools/lib/toolchain/schema.d.ts +30 -0
  421. package/packages/tools/lib/toolchain/schema.d.ts.map +1 -0
  422. package/packages/tools/lib/toolchain/schema.js +112 -0
  423. package/packages/tools/lib/toolchain/schema.js.map +1 -0
  424. package/packages/tools/lib/toolchain/sysmlc-client.d.ts +77 -0
  425. package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +1 -0
  426. package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
  427. package/packages/tools/lib/toolchain/sysmlc-client.js.map +1 -0
  428. package/packages/tools/lib/validator/architecture-validator.d.ts +8 -1
  429. package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
  430. package/packages/tools/lib/validator/architecture-validator.js +25 -1
  431. package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
  432. package/packages/tools/lib/validator/builtin-rules.d.ts +16 -0
  433. package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -0
  434. package/packages/tools/lib/validator/builtin-rules.js +62 -0
  435. package/packages/tools/lib/validator/builtin-rules.js.map +1 -0
  436. package/packages/tools/lib/validator/constraint-eval.d.ts +15 -0
  437. package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
  438. package/packages/tools/lib/validator/constraint-eval.js +62 -7
  439. package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
  440. package/packages/tools/lib/validator/constraint-loader.d.ts +22 -4
  441. package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
  442. package/packages/tools/lib/validator/constraint-loader.js +100 -27
  443. package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
  444. package/packages/tools/lib/validator/rule-engine.d.ts +2 -1
  445. package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
  446. package/packages/tools/lib/validator/rule-engine.js +56 -5
  447. package/packages/tools/lib/validator/rule-engine.js.map +1 -1
  448. package/packages/tools/lib/validator/sysml-constraints.d.ts +64 -0
  449. package/packages/tools/lib/validator/sysml-constraints.d.ts.map +1 -0
  450. package/packages/tools/lib/validator/sysml-constraints.js +251 -0
  451. package/packages/tools/lib/validator/sysml-constraints.js.map +1 -0
  452. package/packages/tools/lib/validator/types.d.ts +33 -0
  453. package/packages/tools/lib/validator/types.d.ts.map +1 -1
  454. package/packages/tools/lib/version.d.ts +2 -0
  455. package/packages/tools/lib/version.d.ts.map +1 -0
  456. package/packages/tools/lib/version.js +26 -0
  457. package/packages/tools/lib/version.js.map +1 -0
  458. package/packages/tools/src/grammar/memo-sysml.langium +104 -18
  459. package/packages/tools/lib/model/dimension-filter.d.ts +0 -33
  460. package/packages/tools/lib/model/dimension-filter.d.ts.map +0 -1
  461. package/packages/tools/lib/model/dimension-filter.js +0 -57
  462. package/packages/tools/lib/model/dimension-filter.js.map +0 -1
  463. package/packages/tools/lib/model/toolchain.d.ts +0 -12
  464. package/packages/tools/lib/model/toolchain.d.ts.map +0 -1
  465. package/packages/tools/lib/model/toolchain.js +0 -92
  466. package/packages/tools/lib/model/toolchain.js.map +0 -1
@@ -0,0 +1,63 @@
1
+ import { type BuilderRegistries } from '../model/builder.js';
2
+ import { type ParseError } from '../model/semantic.js';
3
+ import type { MEMOConfig } from '../model/config.js';
4
+ import { type MemoIr } from './protocol.js';
5
+ /**
6
+ * The project's effective settings.
7
+ *
8
+ * Settings are optional — a project with none is complete, because a MEMO
9
+ * project declares its identity in SysML, not in YAML.
10
+ */
11
+ export declare function loadProjectConfig(projectDir: string): MEMOConfig;
12
+ /**
13
+ * The ontology registries the builder resolves kinds against.
14
+ *
15
+ * A project that cannot load them still lowers, with reduced kind resolution —
16
+ * §1.1 again: the compiler reports what is wrong, it does not refuse to work.
17
+ */
18
+ export declare function loadBuilderRegistries(projectDir: string): Promise<BuilderRegistries | undefined>;
19
+ export interface LoweringOptions {
20
+ /**
21
+ * Ontology registries the caller has already loaded. See `ProviderContext`.
22
+ */
23
+ registries?: BuilderRegistries;
24
+ /**
25
+ * The exact sources to read, instead of the directory's own discovery.
26
+ *
27
+ * Absolute paths, and never a project's normal input: a project is defined
28
+ * by what is in it. It exists for callers whose subject is a *file set*
29
+ * rather than a project — conformance runs a corpus unit whose Kernel
30
+ * libraries are `.kerml`, which the project walker does not collect, and a
31
+ * run that silently analysed none of them would report a clean pass on
32
+ * files it never opened.
33
+ */
34
+ files?: readonly string[];
35
+ }
36
+ /**
37
+ * The sources a run reads: the caller's explicit list, or the project's own.
38
+ *
39
+ * Sorted either way, because "both transports are byte-identical" only holds
40
+ * against an input order that does not depend on who built the list.
41
+ */
42
+ export declare function resolveSources(root: string, files?: readonly string[]): string[];
43
+ /**
44
+ * Lower a project to IR.
45
+ *
46
+ * Everything here is deterministic given the file contents: file discovery is
47
+ * sorted, element identity is content-hashed, and the payload is plain JSON. It
48
+ * has to be — "both transports are byte-identical" is only a meaningful test
49
+ * against a function whose output does not depend on which process ran it.
50
+ */
51
+ export declare function lowerProject(projectDir: string, options?: LoweringOptions): Promise<MemoIr>;
52
+ /**
53
+ * Parse without building — what `check` needs and nothing more.
54
+ *
55
+ * The validator role asks a narrower question than lowering does, and paying
56
+ * for a full model build to answer it would make `memo validate` slower for no
57
+ * reason.
58
+ */
59
+ export declare function checkProject(projectDir: string, files?: readonly string[]): Promise<{
60
+ accepted: boolean;
61
+ parseErrors: ParseError[];
62
+ }>;
63
+ //# sourceMappingURL=lowering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowering.d.ts","sourceRoot":"","sources":["../../src/toolchain/lowering.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAGhE;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAOtG;AAED,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEhF;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAI3D"}
@@ -0,0 +1,100 @@
1
+ // ─── Lowering: the one implementation, reached two ways ──────────────────────
2
+ //
3
+ // "What can MEMO ingest from this revision?" is answered here and nowhere else.
4
+ // The in-process transport calls `lowerProject` directly; the process transport
5
+ // calls it inside `memo-sysmlc`, over the protocol. That is the whole reason both
6
+ // transports can be byte-identical: there is one function, not two that are
7
+ // meant to agree.
8
+ //
9
+ // Note what it takes: a project directory, and nothing else. The compiler loads
10
+ // the project's own settings itself, the way a compiler run in that directory
11
+ // would. Passing a caller-supplied config in-process and letting the child load
12
+ // its own would be the classic way for two transports to drift — same code,
13
+ // different inputs — so the input is derived the same way on both sides.
14
+ // ─────────────────────────────────────────────────────────────────────────────
15
+ import { resolve } from 'node:path';
16
+ import { buildMemoModel } from '../model/builder.js';
17
+ import { findConfigFile, loadProjectSettings } from '../model/config-loader.js';
18
+ import { loadOntologyRegistries } from '../model/ontology-loader.js';
19
+ import { parseFiles } from '../model/parser-utils.js';
20
+ import { modelToDTO } from '../model/semantic.js';
21
+ import { lowerAstToSysmlIr, projectSysmlIrToMemo } from '../model/sysml-ir.js';
22
+ import { findSysmlFiles } from '../model/sysml-files.js';
23
+ import { loadAndResolveConfig } from '../server/config-resolver.js';
24
+ import { SYSMLC_IR_VERSION } from './protocol.js';
25
+ /**
26
+ * The project's effective settings.
27
+ *
28
+ * Settings are optional — a project with none is complete, because a MEMO
29
+ * project declares its identity in SysML, not in YAML.
30
+ */
31
+ export function loadProjectConfig(projectDir) {
32
+ const configPath = findConfigFile(projectDir);
33
+ return configPath ? loadAndResolveConfig(configPath) : loadProjectSettings(projectDir);
34
+ }
35
+ /**
36
+ * The ontology registries the builder resolves kinds against.
37
+ *
38
+ * A project that cannot load them still lowers, with reduced kind resolution —
39
+ * §1.1 again: the compiler reports what is wrong, it does not refuse to work.
40
+ */
41
+ export async function loadBuilderRegistries(projectDir) {
42
+ try {
43
+ const result = await loadOntologyRegistries(projectDir);
44
+ return result.fileCount > 0 ? result.registries : undefined;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ /**
51
+ * The sources a run reads: the caller's explicit list, or the project's own.
52
+ *
53
+ * Sorted either way, because "both transports are byte-identical" only holds
54
+ * against an input order that does not depend on who built the list.
55
+ */
56
+ export function resolveSources(root, files) {
57
+ return (files ? files.map(file => resolve(root, file)) : findSysmlFiles(root)).slice().sort();
58
+ }
59
+ /**
60
+ * Lower a project to IR.
61
+ *
62
+ * Everything here is deterministic given the file contents: file discovery is
63
+ * sorted, element identity is content-hashed, and the payload is plain JSON. It
64
+ * has to be — "both transports are byte-identical" is only a meaningful test
65
+ * against a function whose output does not depend on which process ran it.
66
+ */
67
+ export async function lowerProject(projectDir, options = {}) {
68
+ const root = resolve(projectDir);
69
+ const config = loadProjectConfig(root);
70
+ // Loading the ontology closure is the expensive part, and a caller that has
71
+ // already done it — the snapshot builder needs the same registries to
72
+ // validate against — may hand them over rather than pay twice. It is the
73
+ // same value either way: a process transport loads its own, and the two
74
+ // agree because they resolve the same project.
75
+ const registries = options.registries ?? await loadBuilderRegistries(root);
76
+ const { documents, errors } = await parseFiles(resolveSources(root, options.files), `${root}/`);
77
+ const built = buildMemoModel(documents, config, errors, registries);
78
+ const sysml = lowerAstToSysmlIr(documents, modelToDTO(built), root);
79
+ const model = projectSysmlIrToMemo(sysml, modelToDTO(built));
80
+ return {
81
+ irVersion: SYSMLC_IR_VERSION,
82
+ model,
83
+ parseErrors: errors,
84
+ accepted: errors.length === 0,
85
+ sysml,
86
+ };
87
+ }
88
+ /**
89
+ * Parse without building — what `check` needs and nothing more.
90
+ *
91
+ * The validator role asks a narrower question than lowering does, and paying
92
+ * for a full model build to answer it would make `memo validate` slower for no
93
+ * reason.
94
+ */
95
+ export async function checkProject(projectDir, files) {
96
+ const root = resolve(projectDir);
97
+ const { errors } = await parseFiles(resolveSources(root, files), `${root}/`);
98
+ return { accepted: errors.length === 0, parseErrors: errors };
99
+ }
100
+ //# sourceMappingURL=lowering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowering.js","sourceRoot":"","sources":["../../src/toolchain/lowering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { BuilderRegistries } from '../model/builder.js';
2
+ import type { MEMOConfig } from '../model/config.js';
3
+ import type { Diagnostic } from './diagnostic.js';
4
+ import { type EffectiveToolchain } from './effective.js';
5
+ import { type Availability, type LoweringRunResult, type ProviderRegistry, type ProviderRole, type ProviderRunResult } from './registry.js';
6
+ export interface ToolchainRunOptions {
7
+ config: MEMOConfig;
8
+ projectDir: string;
9
+ registry?: ProviderRegistry;
10
+ /** Overrides the include paths derived from the project's library roots. */
11
+ includeDirs?: string[];
12
+ /**
13
+ * The exact sources to analyse, instead of the directory's own discovery.
14
+ * See `ProviderContext.files` — a conformance corpus is a file set, not a
15
+ * project, and every role has to be told the same set or the counts are not
16
+ * comparable.
17
+ */
18
+ files?: readonly string[];
19
+ outputPath?: string;
20
+ /** Ontology registries the caller already loaded. See `ProviderContext`. */
21
+ registries?: BuilderRegistries;
22
+ }
23
+ /** Run the selected validator. Diagnostics come back in the `sysml` domain. */
24
+ export declare function runValidator(options: ToolchainRunOptions): Promise<ProviderRunResult>;
25
+ /** Run the selected lowering provider. Diagnostics are `memo-ingest`. */
26
+ export declare function runLowering(options: ToolchainRunOptions): Promise<LoweringRunResult>;
27
+ /** Run the selected packager against `outputPath`. */
28
+ export declare function runPackager(options: ToolchainRunOptions): Promise<ProviderRunResult>;
29
+ /**
30
+ * Collapse an ingest failure that the validator already reported.
31
+ *
32
+ * When one provider fills both roles it sees the same defect twice, once per
33
+ * role. Reporting it twice, in two domains, would make the domain split look
34
+ * like noise. A failure is reported once, in the domain with the most
35
+ * authority — `sysml` outranks `memo-ingest`, because a source the validator
36
+ * rejected is not a story about MEMO's ingest.
37
+ */
38
+ export declare function mergeDiagnostics(validatorDiagnostics: readonly Diagnostic[], ingestDiagnostics: readonly Diagnostic[]): Diagnostic[];
39
+ export interface RoleProbe {
40
+ role: ProviderRole;
41
+ /** The settings key that selects this role, e.g. `validator`. */
42
+ setting: string;
43
+ provider: string;
44
+ source: 'settings' | 'deprecated-alias' | 'default';
45
+ availability: Availability;
46
+ }
47
+ export interface ToolchainProbe {
48
+ projectDir: string;
49
+ effective: EffectiveToolchain;
50
+ roles: RoleProbe[];
51
+ }
52
+ /**
53
+ * Resolve every role and ask each selected provider whether it can run here,
54
+ * without running it.
55
+ *
56
+ * This is what answers "which `syside` am I actually using?" — a question that
57
+ * costs an afternoon when the only way to ask it is to run a build and read
58
+ * the errors.
59
+ */
60
+ export declare function probeToolchain(options: {
61
+ config: MEMOConfig;
62
+ projectDir: string;
63
+ registry?: ProviderRegistry;
64
+ }): ToolchainProbe;
65
+ /** One `role provider path version` line per role, for `memo toolchain probe`. */
66
+ export declare function formatProbeLine(probe: RoleProbe): string;
67
+ /** The full resolved picture, for `memo config effective`. */
68
+ export interface EffectiveConfigReport {
69
+ projectName: string;
70
+ projectRoot: string;
71
+ settingsFile?: string;
72
+ toolchain: {
73
+ validator: string;
74
+ lowering: string;
75
+ packager: string;
76
+ selections: EffectiveToolchain['selections'];
77
+ providers: Record<string, unknown>;
78
+ };
79
+ deprecations: string[];
80
+ }
81
+ export declare function effectiveConfigReport(options: {
82
+ config: MEMOConfig;
83
+ projectDir: string;
84
+ settingsFile?: string;
85
+ registry?: ProviderRegistry;
86
+ }): EffectiveConfigReport;
87
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/toolchain/operations.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAGH,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACzB,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAaD,+EAA+E;AAC/E,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAI3F;AAED,yEAAyE;AACzE,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAI1F;AAED,sDAAsD;AACtD,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAI1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC5B,oBAAoB,EAAE,SAAS,UAAU,EAAE,EAC3C,iBAAiB,EAAE,SAAS,UAAU,EAAE,GACzC,UAAU,EAAE,CAGd;AAOD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,YAAY,CAAC;IACnB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACpD,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC/B,GAAG,cAAc,CAejB;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAMxD;AAED,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC7C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;IACF,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC/B,GAAG,qBAAqB,CAqBxB"}
@@ -0,0 +1,111 @@
1
+ // ─── Toolchain operations ────────────────────────────────────────────────────
2
+ //
3
+ // The single implementation behind both `memo <command>` and Architect's
4
+ // server protocol. Callers pass settings and a project directory and get
5
+ // normalized `Diagnostic`s back. Nothing here branches on a provider name.
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+ import { discoverLibraryRoots } from '../model/native-project.js';
8
+ import { resolveToolchain } from './effective.js';
9
+ import { PROVIDER_ROLES, ROLE_SETTING, } from './registry.js';
10
+ import { defaultRegistry } from './default-registry.js';
11
+ function context(options) {
12
+ return {
13
+ config: options.config,
14
+ projectDir: options.projectDir,
15
+ includeDirs: options.includeDirs ?? discoverLibraryRoots(options.projectDir).map(r => r.sysmlDir),
16
+ files: options.files,
17
+ outputPath: options.outputPath,
18
+ registries: options.registries,
19
+ };
20
+ }
21
+ /** Run the selected validator. Diagnostics come back in the `sysml` domain. */
22
+ export async function runValidator(options) {
23
+ const registry = options.registry ?? defaultRegistry;
24
+ const effective = resolveToolchain(options.config, registry);
25
+ return registry.resolveValidator(effective.validator, context(options)).run();
26
+ }
27
+ /** Run the selected lowering provider. Diagnostics are `memo-ingest`. */
28
+ export async function runLowering(options) {
29
+ const registry = options.registry ?? defaultRegistry;
30
+ const effective = resolveToolchain(options.config, registry);
31
+ return registry.resolveLowering(effective.lowering, context(options)).run();
32
+ }
33
+ /** Run the selected packager against `outputPath`. */
34
+ export async function runPackager(options) {
35
+ const registry = options.registry ?? defaultRegistry;
36
+ const effective = resolveToolchain(options.config, registry);
37
+ return registry.resolvePackager(effective.packager, context(options)).run();
38
+ }
39
+ /**
40
+ * Collapse an ingest failure that the validator already reported.
41
+ *
42
+ * When one provider fills both roles it sees the same defect twice, once per
43
+ * role. Reporting it twice, in two domains, would make the domain split look
44
+ * like noise. A failure is reported once, in the domain with the most
45
+ * authority — `sysml` outranks `memo-ingest`, because a source the validator
46
+ * rejected is not a story about MEMO's ingest.
47
+ */
48
+ export function mergeDiagnostics(validatorDiagnostics, ingestDiagnostics) {
49
+ const seen = new Set(validatorDiagnostics.map(fingerprint));
50
+ return [...validatorDiagnostics, ...ingestDiagnostics.filter(d => !seen.has(fingerprint(d)))];
51
+ }
52
+ function fingerprint(diagnostic) {
53
+ const { line = 0, column = 0 } = diagnostic.range?.start ?? {};
54
+ return `${diagnostic.file ?? ''}:${line}:${column}:${diagnostic.message}`;
55
+ }
56
+ /**
57
+ * Resolve every role and ask each selected provider whether it can run here,
58
+ * without running it.
59
+ *
60
+ * This is what answers "which `syside` am I actually using?" — a question that
61
+ * costs an afternoon when the only way to ask it is to run a build and read
62
+ * the errors.
63
+ */
64
+ export function probeToolchain(options) {
65
+ const registry = options.registry ?? defaultRegistry;
66
+ const effective = resolveToolchain(options.config, registry);
67
+ const providerContext = { config: options.config, projectDir: options.projectDir };
68
+ const roles = PROVIDER_ROLES.map(role => {
69
+ const selection = effective.selections.find(s => s.role === role);
70
+ return {
71
+ role,
72
+ setting: ROLE_SETTING[role],
73
+ provider: selection.provider,
74
+ source: selection.source,
75
+ availability: registry.descriptor(role, selection.provider).probe(providerContext),
76
+ };
77
+ });
78
+ return { projectDir: options.projectDir, effective, roles };
79
+ }
80
+ /** One `role provider path version` line per role, for `memo toolchain probe`. */
81
+ export function formatProbeLine(probe) {
82
+ const { availability } = probe;
83
+ const where = availability.executable ?? `(${availability.transport})`;
84
+ const version = availability.version ? ` ${availability.version}` : '';
85
+ const status = availability.available ? `${where}${version}` : `unavailable — ${availability.detail}`;
86
+ return `${probe.role.padEnd(10)} ${probe.provider.padEnd(12)} ${status}`;
87
+ }
88
+ export function effectiveConfigReport(options) {
89
+ const registry = options.registry ?? defaultRegistry;
90
+ const effective = resolveToolchain(options.config, registry);
91
+ const providers = {};
92
+ for (const id of registry.allIds()) {
93
+ const settings = options.config.toolchain?.[id];
94
+ if (settings !== undefined)
95
+ providers[id] = settings;
96
+ }
97
+ return {
98
+ projectName: options.config.projectName,
99
+ projectRoot: options.projectDir,
100
+ settingsFile: options.settingsFile,
101
+ toolchain: {
102
+ validator: effective.validator,
103
+ lowering: effective.lowering,
104
+ packager: effective.packager,
105
+ selections: effective.selections,
106
+ providers,
107
+ },
108
+ deprecations: effective.deprecations,
109
+ };
110
+ }
111
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/toolchain/operations.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,gFAAgF;AAIhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACH,cAAc,EACd,YAAY,GAOf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAoBxD,SAAS,OAAO,CAAC,OAA4B;IACzC,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjG,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;KACjC,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAClF,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA4B;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAChF,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA4B;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC5B,oBAA2C,EAC3C,iBAAwC;IAExC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,oBAAoB,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,WAAW,CAAC,UAAsB;IACvC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IAC/D,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;AAC9E,CAAC;AAiBD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAI9B;IACG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAoB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IACpG,MAAM,KAAK,GAAgB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAE,CAAC;QACnE,OAAO;YACH,IAAI;YACJ,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC;YAC3B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;SACrF,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC5C,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,IAAI,IAAI,YAAY,CAAC,SAAS,GAAG,CAAC;IACvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,iBAAiB,YAAY,CAAC,MAAM,EAAE,CAAC;IACtG,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;AAC7E,CAAC;AAiBD,MAAM,UAAU,qBAAqB,CAAC,OAKrC;IACG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IACzD,CAAC;IACD,OAAO;QACH,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;QACvC,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE;YACP,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,SAAS;SACZ;QACD,YAAY,EAAE,SAAS,CAAC,YAAY;KACvC,CAAC;AACN,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { type ToolInvocation } from './registry.js';
2
+ /** Expand `~`, then resolve relative paths against the project directory. */
3
+ export declare function resolveProjectPath(value: string, projectDir: string): string;
4
+ /**
5
+ * A configured executable is a path when it looks like one, and a PATH lookup
6
+ * otherwise. `syside` means "whatever is on PATH"; `./bin/syside` means that
7
+ * file.
8
+ */
9
+ export declare function resolveExecutable(value: string | undefined, fallback: string, projectDir: string): string;
10
+ /**
11
+ * Absolute path of a command, resolved the way the shell would.
12
+ *
13
+ * `memo toolchain probe` prints this: knowing *which* `syside` ran matters as
14
+ * much as knowing that one did.
15
+ */
16
+ export declare function whichExecutable(command: string, env?: NodeJS.ProcessEnv): string | undefined;
17
+ /**
18
+ * A binary shipped in the same install, found without the user doing anything.
19
+ *
20
+ * "The user is responsible for PATH" is a rule about *third-party* tools. It
21
+ * has never applied to MEMO's own: a default install must work with nothing
22
+ * installed and nothing configured. So a bundled binary is looked up the way
23
+ * Node looks up a module — walk up from a starting directory checking each
24
+ * `node_modules/.bin` — which finds it whether the caller is a project, a
25
+ * global install, or a workspace checkout.
26
+ */
27
+ export declare function findBundledExecutable(name: string, fromDirs: readonly string[]): string | undefined;
28
+ export interface CaptureResult {
29
+ status: number | null;
30
+ stdout: string;
31
+ stderr: string;
32
+ }
33
+ /**
34
+ * Run a tool and capture its output.
35
+ *
36
+ * A non-zero status is not an exception: a validator rejecting the source is
37
+ * the normal case, and its complaints are diagnostics. Only a binary that could
38
+ * not be run at all is an error, because that means the user asked for a tool
39
+ * MEMO cannot honour — and rule 2 says never downgrade to a different provider
40
+ * in silence.
41
+ */
42
+ export declare function captureToolInvocation(invocation: ToolInvocation, cwd: string): CaptureResult;
43
+ /** First line of `<command> --version`, or undefined when it will not say. */
44
+ export declare function probeVersion(command: string, args?: readonly string[]): string | undefined;
45
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/toolchain/process.ts"],"names":[],"mappings":"AAWA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtE,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB,MAAM,CAKR;AAYD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAczG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,GAAG,SAAS,CAepB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAc5F;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,SAAS,MAAM,EAAkB,GACxC,MAAM,GAAG,SAAS,CAKpB"}
@@ -0,0 +1,125 @@
1
+ // ─── Executable resolution and spawning, shared by every process adapter ─────
2
+ //
3
+ // Adapters build argument lists and parse output. Finding the binary, running
4
+ // it, and turning ENOENT into a clear missing-tool error is the same work for
5
+ // all of them, so it lives here — with no provider name in sight.
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+ import { accessSync, constants, existsSync, statSync } from 'node:fs';
8
+ import { homedir, platform } from 'node:os';
9
+ import { delimiter, isAbsolute, resolve } from 'node:path';
10
+ import { spawnSync } from 'node:child_process';
11
+ import { MissingToolError } from './registry.js';
12
+ /** Expand `~`, then resolve relative paths against the project directory. */
13
+ export function resolveProjectPath(value, projectDir) {
14
+ if (value === '~')
15
+ return homedir();
16
+ if (value.startsWith('~/'))
17
+ return resolve(homedir(), value.slice(2));
18
+ return isAbsolute(value) ? value : resolve(projectDir, value);
19
+ }
20
+ /**
21
+ * A configured executable is a path when it looks like one, and a PATH lookup
22
+ * otherwise. `syside` means "whatever is on PATH"; `./bin/syside` means that
23
+ * file.
24
+ */
25
+ export function resolveExecutable(value, fallback, projectDir) {
26
+ if (!value)
27
+ return fallback;
28
+ return value.includes('/') || value.includes('\\') || value.startsWith('~')
29
+ ? resolveProjectPath(value, projectDir)
30
+ : value;
31
+ }
32
+ function isExecutableFile(candidate) {
33
+ try {
34
+ if (!statSync(candidate).isFile())
35
+ return false;
36
+ accessSync(candidate, constants.X_OK);
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /**
44
+ * Absolute path of a command, resolved the way the shell would.
45
+ *
46
+ * `memo toolchain probe` prints this: knowing *which* `syside` ran matters as
47
+ * much as knowing that one did.
48
+ */
49
+ export function whichExecutable(command, env = process.env) {
50
+ if (command.includes('/') || command.includes('\\')) {
51
+ return existsSync(command) ? resolve(command) : undefined;
52
+ }
53
+ const extensions = platform() === 'win32'
54
+ ? (env.PATHEXT ?? '.COM;.EXE;.BAT;.CMD').split(';').filter(Boolean)
55
+ : [''];
56
+ for (const dir of (env.PATH ?? '').split(delimiter).filter(Boolean)) {
57
+ for (const ext of extensions) {
58
+ const candidate = resolve(dir, command + ext);
59
+ if (isExecutableFile(candidate))
60
+ return candidate;
61
+ }
62
+ }
63
+ return undefined;
64
+ }
65
+ /**
66
+ * A binary shipped in the same install, found without the user doing anything.
67
+ *
68
+ * "The user is responsible for PATH" is a rule about *third-party* tools. It
69
+ * has never applied to MEMO's own: a default install must work with nothing
70
+ * installed and nothing configured. So a bundled binary is looked up the way
71
+ * Node looks up a module — walk up from a starting directory checking each
72
+ * `node_modules/.bin` — which finds it whether the caller is a project, a
73
+ * global install, or a workspace checkout.
74
+ */
75
+ export function findBundledExecutable(name, fromDirs) {
76
+ const suffixes = platform() === 'win32' ? ['.cmd', '.exe', ''] : [''];
77
+ for (const from of fromDirs) {
78
+ let dir = resolve(from);
79
+ for (;;) {
80
+ for (const suffix of suffixes) {
81
+ const candidate = resolve(dir, 'node_modules', '.bin', name + suffix);
82
+ if (isExecutableFile(candidate))
83
+ return candidate;
84
+ }
85
+ const parent = resolve(dir, '..');
86
+ if (parent === dir)
87
+ break;
88
+ dir = parent;
89
+ }
90
+ }
91
+ return undefined;
92
+ }
93
+ /**
94
+ * Run a tool and capture its output.
95
+ *
96
+ * A non-zero status is not an exception: a validator rejecting the source is
97
+ * the normal case, and its complaints are diagnostics. Only a binary that could
98
+ * not be run at all is an error, because that means the user asked for a tool
99
+ * MEMO cannot honour — and rule 2 says never downgrade to a different provider
100
+ * in silence.
101
+ */
102
+ export function captureToolInvocation(invocation, cwd) {
103
+ const result = spawnSync(invocation.command, invocation.args, {
104
+ cwd,
105
+ encoding: 'utf8',
106
+ maxBuffer: 64 * 1024 * 1024,
107
+ });
108
+ if (result.error) {
109
+ throw new MissingToolError(invocation.provider, invocation.command, result.error.message);
110
+ }
111
+ return {
112
+ status: result.status,
113
+ stdout: result.stdout ?? '',
114
+ stderr: result.stderr ?? '',
115
+ };
116
+ }
117
+ /** First line of `<command> --version`, or undefined when it will not say. */
118
+ export function probeVersion(command, args = ['--version']) {
119
+ const result = spawnSync(command, [...args], { encoding: 'utf8', timeout: 5000 });
120
+ if (result.error || result.status !== 0)
121
+ return undefined;
122
+ const line = `${result.stdout ?? ''}${result.stderr ?? ''}`.split('\n')[0]?.trim();
123
+ return line && line.length > 0 ? line : undefined;
124
+ }
125
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/toolchain/process.ts"],"names":[],"mappings":"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"}