@untangle-code/cli 0.0.0-stage → 0.1.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 (571) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +90 -0
  3. package/README.md +424 -2
  4. package/THIRD_PARTY_LICENSES.md +152 -0
  5. package/dist/cli/args.d.ts +48 -0
  6. package/dist/cli/args.d.ts.map +1 -0
  7. package/dist/cli/args.js +167 -0
  8. package/dist/cli/args.js.map +1 -0
  9. package/dist/cli/command.d.ts +69 -0
  10. package/dist/cli/command.d.ts.map +1 -0
  11. package/dist/cli/command.js +82 -0
  12. package/dist/cli/command.js.map +1 -0
  13. package/dist/cli/deadline.d.ts +33 -0
  14. package/dist/cli/deadline.d.ts.map +1 -0
  15. package/dist/cli/deadline.js +49 -0
  16. package/dist/cli/deadline.js.map +1 -0
  17. package/dist/cli/embedder-deadline.d.ts +72 -0
  18. package/dist/cli/embedder-deadline.d.ts.map +1 -0
  19. package/dist/cli/embedder-deadline.js +117 -0
  20. package/dist/cli/embedder-deadline.js.map +1 -0
  21. package/dist/cli/exit.d.ts +71 -0
  22. package/dist/cli/exit.d.ts.map +1 -0
  23. package/dist/cli/exit.js +81 -0
  24. package/dist/cli/exit.js.map +1 -0
  25. package/dist/cli/graphs.d.ts +65 -0
  26. package/dist/cli/graphs.d.ts.map +1 -0
  27. package/dist/cli/graphs.js +108 -0
  28. package/dist/cli/graphs.js.map +1 -0
  29. package/dist/cli/index-freshness.d.ts +13 -0
  30. package/dist/cli/index-freshness.d.ts.map +1 -0
  31. package/dist/cli/index-freshness.js +226 -0
  32. package/dist/cli/index-freshness.js.map +1 -0
  33. package/dist/cli/index-refresh.d.ts +10 -0
  34. package/dist/cli/index-refresh.d.ts.map +1 -0
  35. package/dist/cli/index-refresh.js +76 -0
  36. package/dist/cli/index-refresh.js.map +1 -0
  37. package/dist/cli/index-state.d.ts +184 -0
  38. package/dist/cli/index-state.d.ts.map +1 -0
  39. package/dist/cli/index-state.js +852 -0
  40. package/dist/cli/index-state.js.map +1 -0
  41. package/dist/cli/io.d.ts +29 -0
  42. package/dist/cli/io.d.ts.map +1 -0
  43. package/dist/cli/io.js +42 -0
  44. package/dist/cli/io.js.map +1 -0
  45. package/dist/cli/language-support.d.ts +77 -0
  46. package/dist/cli/language-support.d.ts.map +1 -0
  47. package/dist/cli/language-support.js +152 -0
  48. package/dist/cli/language-support.js.map +1 -0
  49. package/dist/cli/renewing-lease.d.ts +26 -0
  50. package/dist/cli/renewing-lease.d.ts.map +1 -0
  51. package/dist/cli/renewing-lease.js +102 -0
  52. package/dist/cli/renewing-lease.js.map +1 -0
  53. package/dist/cli/search-graph-enrichment.d.ts +16 -0
  54. package/dist/cli/search-graph-enrichment.d.ts.map +1 -0
  55. package/dist/cli/search-graph-enrichment.js +428 -0
  56. package/dist/cli/search-graph-enrichment.js.map +1 -0
  57. package/dist/cli/system.d.ts +34 -0
  58. package/dist/cli/system.d.ts.map +1 -0
  59. package/dist/cli/system.js +89 -0
  60. package/dist/cli/system.js.map +1 -0
  61. package/dist/cli/vector-store-policy.d.ts +116 -0
  62. package/dist/cli/vector-store-policy.d.ts.map +1 -0
  63. package/dist/cli/vector-store-policy.js +160 -0
  64. package/dist/cli/vector-store-policy.js.map +1 -0
  65. package/dist/cli/version.d.ts +3 -0
  66. package/dist/cli/version.d.ts.map +1 -0
  67. package/dist/cli/version.js +3 -0
  68. package/dist/cli/version.js.map +1 -0
  69. package/dist/cli/workspace.d.ts +105 -0
  70. package/dist/cli/workspace.d.ts.map +1 -0
  71. package/dist/cli/workspace.js +215 -0
  72. package/dist/cli/workspace.js.map +1 -0
  73. package/dist/commands/complexity.d.ts +72 -0
  74. package/dist/commands/complexity.d.ts.map +1 -0
  75. package/dist/commands/complexity.js +580 -0
  76. package/dist/commands/complexity.js.map +1 -0
  77. package/dist/commands/doctor.d.ts +66 -0
  78. package/dist/commands/doctor.d.ts.map +1 -0
  79. package/dist/commands/doctor.js +764 -0
  80. package/dist/commands/doctor.js.map +1 -0
  81. package/dist/commands/doctor.languages.d.ts +37 -0
  82. package/dist/commands/doctor.languages.d.ts.map +1 -0
  83. package/dist/commands/doctor.languages.js +143 -0
  84. package/dist/commands/doctor.languages.js.map +1 -0
  85. package/dist/commands/doctor.storage.d.ts +17 -0
  86. package/dist/commands/doctor.storage.d.ts.map +1 -0
  87. package/dist/commands/doctor.storage.js +91 -0
  88. package/dist/commands/doctor.storage.js.map +1 -0
  89. package/dist/commands/extensions/add.d.ts +10 -0
  90. package/dist/commands/extensions/add.d.ts.map +1 -0
  91. package/dist/commands/extensions/add.js +213 -0
  92. package/dist/commands/extensions/add.js.map +1 -0
  93. package/dist/commands/extensions/configure.d.ts +5 -0
  94. package/dist/commands/extensions/configure.d.ts.map +1 -0
  95. package/dist/commands/extensions/configure.js +58 -0
  96. package/dist/commands/extensions/configure.js.map +1 -0
  97. package/dist/commands/extensions/container.d.ts +15 -0
  98. package/dist/commands/extensions/container.d.ts.map +1 -0
  99. package/dist/commands/extensions/container.js +135 -0
  100. package/dist/commands/extensions/container.js.map +1 -0
  101. package/dist/commands/extensions/context.d.ts +37 -0
  102. package/dist/commands/extensions/context.d.ts.map +1 -0
  103. package/dist/commands/extensions/context.js +72 -0
  104. package/dist/commands/extensions/context.js.map +1 -0
  105. package/dist/commands/extensions/enable.d.ts +6 -0
  106. package/dist/commands/extensions/enable.d.ts.map +1 -0
  107. package/dist/commands/extensions/enable.js +180 -0
  108. package/dist/commands/extensions/enable.js.map +1 -0
  109. package/dist/commands/extensions/environment.d.ts +74 -0
  110. package/dist/commands/extensions/environment.d.ts.map +1 -0
  111. package/dist/commands/extensions/environment.js +168 -0
  112. package/dist/commands/extensions/environment.js.map +1 -0
  113. package/dist/commands/extensions/feature-scan.d.ts +48 -0
  114. package/dist/commands/extensions/feature-scan.d.ts.map +1 -0
  115. package/dist/commands/extensions/feature-scan.js +156 -0
  116. package/dist/commands/extensions/feature-scan.js.map +1 -0
  117. package/dist/commands/extensions/invoke.d.ts +60 -0
  118. package/dist/commands/extensions/invoke.d.ts.map +1 -0
  119. package/dist/commands/extensions/invoke.js +275 -0
  120. package/dist/commands/extensions/invoke.js.map +1 -0
  121. package/dist/commands/extensions/list.d.ts +5 -0
  122. package/dist/commands/extensions/list.d.ts.map +1 -0
  123. package/dist/commands/extensions/list.js +125 -0
  124. package/dist/commands/extensions/list.js.map +1 -0
  125. package/dist/commands/extensions/logs.d.ts +5 -0
  126. package/dist/commands/extensions/logs.d.ts.map +1 -0
  127. package/dist/commands/extensions/logs.js +74 -0
  128. package/dist/commands/extensions/logs.js.map +1 -0
  129. package/dist/commands/extensions/provision.d.ts +36 -0
  130. package/dist/commands/extensions/provision.d.ts.map +1 -0
  131. package/dist/commands/extensions/provision.js +137 -0
  132. package/dist/commands/extensions/provision.js.map +1 -0
  133. package/dist/commands/extensions/remove.d.ts +5 -0
  134. package/dist/commands/extensions/remove.d.ts.map +1 -0
  135. package/dist/commands/extensions/remove.js +77 -0
  136. package/dist/commands/extensions/remove.js.map +1 -0
  137. package/dist/commands/extensions/render.d.ts +16 -0
  138. package/dist/commands/extensions/render.d.ts.map +1 -0
  139. package/dist/commands/extensions/render.js +25 -0
  140. package/dist/commands/extensions/render.js.map +1 -0
  141. package/dist/commands/extensions/run.d.ts +30 -0
  142. package/dist/commands/extensions/run.d.ts.map +1 -0
  143. package/dist/commands/extensions/run.js +292 -0
  144. package/dist/commands/extensions/run.js.map +1 -0
  145. package/dist/commands/extensions/secret-store.d.ts +15 -0
  146. package/dist/commands/extensions/secret-store.d.ts.map +1 -0
  147. package/dist/commands/extensions/secret-store.js +164 -0
  148. package/dist/commands/extensions/secret-store.js.map +1 -0
  149. package/dist/commands/extensions/setup.d.ts +17 -0
  150. package/dist/commands/extensions/setup.d.ts.map +1 -0
  151. package/dist/commands/extensions/setup.js +94 -0
  152. package/dist/commands/extensions/setup.js.map +1 -0
  153. package/dist/commands/extensions/source.d.ts +47 -0
  154. package/dist/commands/extensions/source.d.ts.map +1 -0
  155. package/dist/commands/extensions/source.js +142 -0
  156. package/dist/commands/extensions/source.js.map +1 -0
  157. package/dist/commands/extensions/state.d.ts +62 -0
  158. package/dist/commands/extensions/state.d.ts.map +1 -0
  159. package/dist/commands/extensions/state.js +177 -0
  160. package/dist/commands/extensions/state.js.map +1 -0
  161. package/dist/commands/extensions/status.d.ts +9 -0
  162. package/dist/commands/extensions/status.d.ts.map +1 -0
  163. package/dist/commands/extensions/status.js +239 -0
  164. package/dist/commands/extensions/status.js.map +1 -0
  165. package/dist/commands/extensions.d.ts +3 -0
  166. package/dist/commands/extensions.d.ts.map +1 -0
  167. package/dist/commands/extensions.js +223 -0
  168. package/dist/commands/extensions.js.map +1 -0
  169. package/dist/commands/flow/index.d.ts +3 -0
  170. package/dist/commands/flow/index.d.ts.map +1 -0
  171. package/dist/commands/flow/index.js +295 -0
  172. package/dist/commands/flow/index.js.map +1 -0
  173. package/dist/commands/flow/limits.d.ts +12 -0
  174. package/dist/commands/flow/limits.d.ts.map +1 -0
  175. package/dist/commands/flow/limits.js +13 -0
  176. package/dist/commands/flow/limits.js.map +1 -0
  177. package/dist/commands/flow/output.d.ts +8 -0
  178. package/dist/commands/flow/output.d.ts.map +1 -0
  179. package/dist/commands/flow/output.js +11 -0
  180. package/dist/commands/flow/output.js.map +1 -0
  181. package/dist/commands/flow/render.d.ts +51 -0
  182. package/dist/commands/flow/render.d.ts.map +1 -0
  183. package/dist/commands/flow/render.js +220 -0
  184. package/dist/commands/flow/render.js.map +1 -0
  185. package/dist/commands/flow/select.d.ts +31 -0
  186. package/dist/commands/flow/select.d.ts.map +1 -0
  187. package/dist/commands/flow/select.js +62 -0
  188. package/dist/commands/flow/select.js.map +1 -0
  189. package/dist/commands/graph/boundaries-input.d.ts +26 -0
  190. package/dist/commands/graph/boundaries-input.d.ts.map +1 -0
  191. package/dist/commands/graph/boundaries-input.js +54 -0
  192. package/dist/commands/graph/boundaries-input.js.map +1 -0
  193. package/dist/commands/graph/boundaries.d.ts +4 -0
  194. package/dist/commands/graph/boundaries.d.ts.map +1 -0
  195. package/dist/commands/graph/boundaries.js +141 -0
  196. package/dist/commands/graph/boundaries.js.map +1 -0
  197. package/dist/commands/graph/bounds.d.ts +16 -0
  198. package/dist/commands/graph/bounds.d.ts.map +1 -0
  199. package/dist/commands/graph/bounds.js +22 -0
  200. package/dist/commands/graph/bounds.js.map +1 -0
  201. package/dist/commands/graph/category-clusters.d.ts +20 -0
  202. package/dist/commands/graph/category-clusters.d.ts.map +1 -0
  203. package/dist/commands/graph/category-clusters.js +158 -0
  204. package/dist/commands/graph/category-clusters.js.map +1 -0
  205. package/dist/commands/graph/feature-3d.d.ts +22 -0
  206. package/dist/commands/graph/feature-3d.d.ts.map +1 -0
  207. package/dist/commands/graph/feature-3d.js +114 -0
  208. package/dist/commands/graph/feature-3d.js.map +1 -0
  209. package/dist/commands/graph/feature-clusters.d.ts +17 -0
  210. package/dist/commands/graph/feature-clusters.d.ts.map +1 -0
  211. package/dist/commands/graph/feature-clusters.js +94 -0
  212. package/dist/commands/graph/feature-clusters.js.map +1 -0
  213. package/dist/commands/graph/feature-html.d.ts +26 -0
  214. package/dist/commands/graph/feature-html.d.ts.map +1 -0
  215. package/dist/commands/graph/feature-html.js +314 -0
  216. package/dist/commands/graph/feature-html.js.map +1 -0
  217. package/dist/commands/graph/feature-map.d.ts +31 -0
  218. package/dist/commands/graph/feature-map.d.ts.map +1 -0
  219. package/dist/commands/graph/feature-map.js +217 -0
  220. package/dist/commands/graph/feature-map.js.map +1 -0
  221. package/dist/commands/graph/feature-model.d.ts +55 -0
  222. package/dist/commands/graph/feature-model.d.ts.map +1 -0
  223. package/dist/commands/graph/feature-model.js +167 -0
  224. package/dist/commands/graph/feature-model.js.map +1 -0
  225. package/dist/commands/graph/feature-untangle-motion.d.ts +33 -0
  226. package/dist/commands/graph/feature-untangle-motion.d.ts.map +1 -0
  227. package/dist/commands/graph/feature-untangle-motion.js +155 -0
  228. package/dist/commands/graph/feature-untangle-motion.js.map +1 -0
  229. package/dist/commands/graph/index.d.ts +3 -0
  230. package/dist/commands/graph/index.d.ts.map +1 -0
  231. package/dist/commands/graph/index.js +414 -0
  232. package/dist/commands/graph/index.js.map +1 -0
  233. package/dist/commands/graph/render.d.ts +63 -0
  234. package/dist/commands/graph/render.d.ts.map +1 -0
  235. package/dist/commands/graph/render.js +352 -0
  236. package/dist/commands/graph/render.js.map +1 -0
  237. package/dist/commands/graph/select.d.ts +34 -0
  238. package/dist/commands/graph/select.d.ts.map +1 -0
  239. package/dist/commands/graph/select.js +55 -0
  240. package/dist/commands/graph/select.js.map +1 -0
  241. package/dist/commands/index/index.d.ts +6 -0
  242. package/dist/commands/index/index.d.ts.map +1 -0
  243. package/dist/commands/index/index.js +461 -0
  244. package/dist/commands/index/index.js.map +1 -0
  245. package/dist/commands/index/render.d.ts +53 -0
  246. package/dist/commands/index/render.d.ts.map +1 -0
  247. package/dist/commands/index/render.js +205 -0
  248. package/dist/commands/index/render.js.map +1 -0
  249. package/dist/commands/index/target.d.ts +34 -0
  250. package/dist/commands/index/target.d.ts.map +1 -0
  251. package/dist/commands/index/target.js +97 -0
  252. package/dist/commands/index/target.js.map +1 -0
  253. package/dist/commands/index-watch.d.ts +30 -0
  254. package/dist/commands/index-watch.d.ts.map +1 -0
  255. package/dist/commands/index-watch.js +138 -0
  256. package/dist/commands/index-watch.js.map +1 -0
  257. package/dist/commands/init/command.d.ts +25 -0
  258. package/dist/commands/init/command.d.ts.map +1 -0
  259. package/dist/commands/init/command.js +198 -0
  260. package/dist/commands/init/command.js.map +1 -0
  261. package/dist/commands/init/config-draft.d.ts +48 -0
  262. package/dist/commands/init/config-draft.d.ts.map +1 -0
  263. package/dist/commands/init/config-draft.js +201 -0
  264. package/dist/commands/init/config-draft.js.map +1 -0
  265. package/dist/commands/init/diff.d.ts +33 -0
  266. package/dist/commands/init/diff.d.ts.map +1 -0
  267. package/dist/commands/init/diff.js +109 -0
  268. package/dist/commands/init/diff.js.map +1 -0
  269. package/dist/commands/init/http-probe.d.ts +26 -0
  270. package/dist/commands/init/http-probe.d.ts.map +1 -0
  271. package/dist/commands/init/http-probe.js +144 -0
  272. package/dist/commands/init/http-probe.js.map +1 -0
  273. package/dist/commands/init/ignore-rules.d.ts +70 -0
  274. package/dist/commands/init/ignore-rules.d.ts.map +1 -0
  275. package/dist/commands/init/ignore-rules.js +146 -0
  276. package/dist/commands/init/ignore-rules.js.map +1 -0
  277. package/dist/commands/init/index.d.ts +33 -0
  278. package/dist/commands/init/index.d.ts.map +1 -0
  279. package/dist/commands/init/index.js +32 -0
  280. package/dist/commands/init/index.js.map +1 -0
  281. package/dist/commands/init/integrations-apply.d.ts +50 -0
  282. package/dist/commands/init/integrations-apply.d.ts.map +1 -0
  283. package/dist/commands/init/integrations-apply.js +452 -0
  284. package/dist/commands/init/integrations-apply.js.map +1 -0
  285. package/dist/commands/init/integrations-plan.d.ts +68 -0
  286. package/dist/commands/init/integrations-plan.d.ts.map +1 -0
  287. package/dist/commands/init/integrations-plan.js +515 -0
  288. package/dist/commands/init/integrations-plan.js.map +1 -0
  289. package/dist/commands/init/integrations.d.ts +5 -0
  290. package/dist/commands/init/integrations.d.ts.map +1 -0
  291. package/dist/commands/init/integrations.js +4 -0
  292. package/dist/commands/init/integrations.js.map +1 -0
  293. package/dist/commands/init/languages.d.ts +55 -0
  294. package/dist/commands/init/languages.d.ts.map +1 -0
  295. package/dist/commands/init/languages.js +245 -0
  296. package/dist/commands/init/languages.js.map +1 -0
  297. package/dist/commands/init/product-context.d.ts +63 -0
  298. package/dist/commands/init/product-context.d.ts.map +1 -0
  299. package/dist/commands/init/product-context.js +390 -0
  300. package/dist/commands/init/product-context.js.map +1 -0
  301. package/dist/commands/init/render.d.ts +38 -0
  302. package/dist/commands/init/render.d.ts.map +1 -0
  303. package/dist/commands/init/render.js +501 -0
  304. package/dist/commands/init/render.js.map +1 -0
  305. package/dist/commands/init/report.d.ts +24 -0
  306. package/dist/commands/init/report.d.ts.map +1 -0
  307. package/dist/commands/init/report.js +163 -0
  308. package/dist/commands/init/report.js.map +1 -0
  309. package/dist/commands/init/run.d.ts +71 -0
  310. package/dist/commands/init/run.d.ts.map +1 -0
  311. package/dist/commands/init/run.js +253 -0
  312. package/dist/commands/init/run.js.map +1 -0
  313. package/dist/commands/init/services.d.ts +82 -0
  314. package/dist/commands/init/services.d.ts.map +1 -0
  315. package/dist/commands/init/services.js +209 -0
  316. package/dist/commands/init/services.js.map +1 -0
  317. package/dist/commands/init/storage.d.ts +8 -0
  318. package/dist/commands/init/storage.d.ts.map +1 -0
  319. package/dist/commands/init/storage.js +102 -0
  320. package/dist/commands/init/storage.js.map +1 -0
  321. package/dist/commands/init/toml.d.ts +65 -0
  322. package/dist/commands/init/toml.d.ts.map +1 -0
  323. package/dist/commands/init/toml.js +159 -0
  324. package/dist/commands/init/toml.js.map +1 -0
  325. package/dist/commands/init/topology.d.ts +54 -0
  326. package/dist/commands/init/topology.d.ts.map +1 -0
  327. package/dist/commands/init/topology.js +146 -0
  328. package/dist/commands/init/topology.js.map +1 -0
  329. package/dist/commands/init/types.d.ts +334 -0
  330. package/dist/commands/init/types.d.ts.map +1 -0
  331. package/dist/commands/init/types.js +31 -0
  332. package/dist/commands/init/types.js.map +1 -0
  333. package/dist/commands/init/wizard-terminal.d.ts +36 -0
  334. package/dist/commands/init/wizard-terminal.d.ts.map +1 -0
  335. package/dist/commands/init/wizard-terminal.js +163 -0
  336. package/dist/commands/init/wizard-terminal.js.map +1 -0
  337. package/dist/commands/init/wizard.d.ts +25 -0
  338. package/dist/commands/init/wizard.d.ts.map +1 -0
  339. package/dist/commands/init/wizard.js +358 -0
  340. package/dist/commands/init/wizard.js.map +1 -0
  341. package/dist/commands/mcp.d.ts +4 -0
  342. package/dist/commands/mcp.d.ts.map +1 -0
  343. package/dist/commands/mcp.js +111 -0
  344. package/dist/commands/mcp.js.map +1 -0
  345. package/dist/commands/product-test-runner.d.ts +4 -0
  346. package/dist/commands/product-test-runner.d.ts.map +1 -0
  347. package/dist/commands/product-test-runner.js +85 -0
  348. package/dist/commands/product-test-runner.js.map +1 -0
  349. package/dist/commands/product.d.ts +16 -0
  350. package/dist/commands/product.d.ts.map +1 -0
  351. package/dist/commands/product.js +262 -0
  352. package/dist/commands/product.js.map +1 -0
  353. package/dist/commands/query.d.ts +114 -0
  354. package/dist/commands/query.d.ts.map +1 -0
  355. package/dist/commands/query.js +783 -0
  356. package/dist/commands/query.js.map +1 -0
  357. package/dist/commands/scan.d.ts +10 -0
  358. package/dist/commands/scan.d.ts.map +1 -0
  359. package/dist/commands/scan.js +302 -0
  360. package/dist/commands/scan.js.map +1 -0
  361. package/dist/commands/sdd.d.ts +24 -0
  362. package/dist/commands/sdd.d.ts.map +1 -0
  363. package/dist/commands/sdd.js +195 -0
  364. package/dist/commands/sdd.js.map +1 -0
  365. package/dist/commands/unavailable.d.ts +40 -0
  366. package/dist/commands/unavailable.d.ts.map +1 -0
  367. package/dist/commands/unavailable.js +73 -0
  368. package/dist/commands/unavailable.js.map +1 -0
  369. package/dist/commands/watch/analyze.d.ts +69 -0
  370. package/dist/commands/watch/analyze.d.ts.map +1 -0
  371. package/dist/commands/watch/analyze.js +402 -0
  372. package/dist/commands/watch/analyze.js.map +1 -0
  373. package/dist/commands/watch/cli.d.ts +8 -0
  374. package/dist/commands/watch/cli.d.ts.map +1 -0
  375. package/dist/commands/watch/cli.js +97 -0
  376. package/dist/commands/watch/cli.js.map +1 -0
  377. package/dist/commands/watch/delta.d.ts +46 -0
  378. package/dist/commands/watch/delta.d.ts.map +1 -0
  379. package/dist/commands/watch/delta.js +170 -0
  380. package/dist/commands/watch/delta.js.map +1 -0
  381. package/dist/commands/watch/events.d.ts +214 -0
  382. package/dist/commands/watch/events.d.ts.map +1 -0
  383. package/dist/commands/watch/events.js +13 -0
  384. package/dist/commands/watch/events.js.map +1 -0
  385. package/dist/commands/watch/index.d.ts +19 -0
  386. package/dist/commands/watch/index.d.ts.map +1 -0
  387. package/dist/commands/watch/index.js +15 -0
  388. package/dist/commands/watch/index.js.map +1 -0
  389. package/dist/commands/watch/options.d.ts +43 -0
  390. package/dist/commands/watch/options.d.ts.map +1 -0
  391. package/dist/commands/watch/options.js +193 -0
  392. package/dist/commands/watch/options.js.map +1 -0
  393. package/dist/commands/watch/render.d.ts +26 -0
  394. package/dist/commands/watch/render.d.ts.map +1 -0
  395. package/dist/commands/watch/render.js +175 -0
  396. package/dist/commands/watch/render.js.map +1 -0
  397. package/dist/commands/watch/run.d.ts +14 -0
  398. package/dist/commands/watch/run.d.ts.map +1 -0
  399. package/dist/commands/watch/run.js +460 -0
  400. package/dist/commands/watch/run.js.map +1 -0
  401. package/dist/commands/watch/runtime.d.ts +67 -0
  402. package/dist/commands/watch/runtime.d.ts.map +1 -0
  403. package/dist/commands/watch/runtime.js +149 -0
  404. package/dist/commands/watch/runtime.js.map +1 -0
  405. package/dist/commands/watch-command.d.ts +3 -0
  406. package/dist/commands/watch-command.d.ts.map +1 -0
  407. package/dist/commands/watch-command.js +273 -0
  408. package/dist/commands/watch-command.js.map +1 -0
  409. package/dist/entry-point.d.ts +11 -0
  410. package/dist/entry-point.d.ts.map +1 -0
  411. package/dist/entry-point.js +65 -0
  412. package/dist/entry-point.js.map +1 -0
  413. package/dist/index.d.ts +38 -0
  414. package/dist/index.d.ts.map +1 -0
  415. package/dist/index.js +245 -0
  416. package/dist/index.js.map +1 -0
  417. package/dist/mcp/boundaries-schema.d.ts +262 -0
  418. package/dist/mcp/boundaries-schema.d.ts.map +1 -0
  419. package/dist/mcp/boundaries-schema.js +183 -0
  420. package/dist/mcp/boundaries-schema.js.map +1 -0
  421. package/dist/mcp/default-runtime.d.ts +16 -0
  422. package/dist/mcp/default-runtime.d.ts.map +1 -0
  423. package/dist/mcp/default-runtime.js +718 -0
  424. package/dist/mcp/default-runtime.js.map +1 -0
  425. package/dist/mcp/envelope.d.ts +13 -0
  426. package/dist/mcp/envelope.d.ts.map +1 -0
  427. package/dist/mcp/envelope.js +29 -0
  428. package/dist/mcp/envelope.js.map +1 -0
  429. package/dist/mcp/index.d.ts +8 -0
  430. package/dist/mcp/index.d.ts.map +1 -0
  431. package/dist/mcp/index.js +8 -0
  432. package/dist/mcp/index.js.map +1 -0
  433. package/dist/mcp/output-schemas.d.ts +5928 -0
  434. package/dist/mcp/output-schemas.d.ts.map +1 -0
  435. package/dist/mcp/output-schemas.js +2814 -0
  436. package/dist/mcp/output-schemas.js.map +1 -0
  437. package/dist/mcp/path-sandbox.d.ts +35 -0
  438. package/dist/mcp/path-sandbox.d.ts.map +1 -0
  439. package/dist/mcp/path-sandbox.js +128 -0
  440. package/dist/mcp/path-sandbox.js.map +1 -0
  441. package/dist/mcp/server.d.ts +155 -0
  442. package/dist/mcp/server.d.ts.map +1 -0
  443. package/dist/mcp/server.js +257 -0
  444. package/dist/mcp/server.js.map +1 -0
  445. package/dist/mcp/stdio.d.ts +20 -0
  446. package/dist/mcp/stdio.d.ts.map +1 -0
  447. package/dist/mcp/stdio.js +71 -0
  448. package/dist/mcp/stdio.js.map +1 -0
  449. package/dist/mcp/tools.d.ts +355 -0
  450. package/dist/mcp/tools.d.ts.map +1 -0
  451. package/dist/mcp/tools.js +319 -0
  452. package/dist/mcp/tools.js.map +1 -0
  453. package/dist/mcp/types.d.ts +15 -0
  454. package/dist/mcp/types.d.ts.map +1 -0
  455. package/dist/mcp/types.js +45 -0
  456. package/dist/mcp/types.js.map +1 -0
  457. package/package.json +99 -3
  458. package/src/cli/args.ts +231 -0
  459. package/src/cli/command.ts +146 -0
  460. package/src/cli/deadline.ts +56 -0
  461. package/src/cli/embedder-deadline.ts +187 -0
  462. package/src/cli/exit.ts +94 -0
  463. package/src/cli/graphs.ts +191 -0
  464. package/src/cli/index-freshness.ts +303 -0
  465. package/src/cli/index-refresh.ts +125 -0
  466. package/src/cli/index-state.ts +1217 -0
  467. package/src/cli/io.ts +56 -0
  468. package/src/cli/language-support.ts +203 -0
  469. package/src/cli/renewing-lease.ts +121 -0
  470. package/src/cli/search-graph-enrichment.ts +639 -0
  471. package/src/cli/system.ts +94 -0
  472. package/src/cli/vector-store-policy.ts +213 -0
  473. package/src/cli/version.ts +2 -0
  474. package/src/cli/workspace.ts +324 -0
  475. package/src/commands/complexity.ts +776 -0
  476. package/src/commands/doctor.languages.ts +187 -0
  477. package/src/commands/doctor.storage.ts +124 -0
  478. package/src/commands/doctor.ts +946 -0
  479. package/src/commands/extensions/add.ts +312 -0
  480. package/src/commands/extensions/configure.ts +82 -0
  481. package/src/commands/extensions/container.ts +209 -0
  482. package/src/commands/extensions/context.ts +109 -0
  483. package/src/commands/extensions/enable.ts +237 -0
  484. package/src/commands/extensions/environment.ts +218 -0
  485. package/src/commands/extensions/feature-scan.ts +232 -0
  486. package/src/commands/extensions/invoke.ts +368 -0
  487. package/src/commands/extensions/list.ts +158 -0
  488. package/src/commands/extensions/logs.ts +104 -0
  489. package/src/commands/extensions/provision.ts +206 -0
  490. package/src/commands/extensions/remove.ts +110 -0
  491. package/src/commands/extensions/render.ts +32 -0
  492. package/src/commands/extensions/run.ts +386 -0
  493. package/src/commands/extensions/secret-store.ts +223 -0
  494. package/src/commands/extensions/setup.ts +140 -0
  495. package/src/commands/extensions/source.ts +189 -0
  496. package/src/commands/extensions/state.ts +252 -0
  497. package/src/commands/extensions/status.ts +320 -0
  498. package/src/commands/extensions.ts +280 -0
  499. package/src/commands/flow/index.ts +402 -0
  500. package/src/commands/flow/limits.ts +14 -0
  501. package/src/commands/flow/output.ts +16 -0
  502. package/src/commands/flow/render.ts +318 -0
  503. package/src/commands/flow/select.ts +101 -0
  504. package/src/commands/graph/boundaries-input.ts +63 -0
  505. package/src/commands/graph/boundaries.ts +182 -0
  506. package/src/commands/graph/bounds.ts +25 -0
  507. package/src/commands/graph/category-clusters.ts +194 -0
  508. package/src/commands/graph/feature-3d.ts +141 -0
  509. package/src/commands/graph/feature-clusters.ts +125 -0
  510. package/src/commands/graph/feature-html.ts +336 -0
  511. package/src/commands/graph/feature-map.ts +270 -0
  512. package/src/commands/graph/feature-model.ts +234 -0
  513. package/src/commands/graph/feature-untangle-motion.ts +192 -0
  514. package/src/commands/graph/index.ts +562 -0
  515. package/src/commands/graph/render.ts +503 -0
  516. package/src/commands/graph/select.ts +77 -0
  517. package/src/commands/index/index.ts +595 -0
  518. package/src/commands/index/render.ts +325 -0
  519. package/src/commands/index/target.ts +136 -0
  520. package/src/commands/index-watch.ts +206 -0
  521. package/src/commands/init/command.ts +238 -0
  522. package/src/commands/init/config-draft.ts +235 -0
  523. package/src/commands/init/diff.ts +117 -0
  524. package/src/commands/init/http-probe.ts +150 -0
  525. package/src/commands/init/ignore-rules.ts +170 -0
  526. package/src/commands/init/index.ts +63 -0
  527. package/src/commands/init/integrations-apply.ts +618 -0
  528. package/src/commands/init/integrations-plan.ts +634 -0
  529. package/src/commands/init/integrations.ts +8 -0
  530. package/src/commands/init/languages.ts +320 -0
  531. package/src/commands/init/product-context.ts +576 -0
  532. package/src/commands/init/render.ts +598 -0
  533. package/src/commands/init/report.ts +204 -0
  534. package/src/commands/init/run.ts +349 -0
  535. package/src/commands/init/services.ts +271 -0
  536. package/src/commands/init/storage.ts +136 -0
  537. package/src/commands/init/toml.ts +174 -0
  538. package/src/commands/init/topology.ts +192 -0
  539. package/src/commands/init/types.ts +366 -0
  540. package/src/commands/init/wizard-terminal.ts +206 -0
  541. package/src/commands/init/wizard.ts +450 -0
  542. package/src/commands/mcp.ts +123 -0
  543. package/src/commands/product-test-runner.ts +80 -0
  544. package/src/commands/product.ts +331 -0
  545. package/src/commands/query.ts +1032 -0
  546. package/src/commands/scan.ts +360 -0
  547. package/src/commands/sdd.ts +243 -0
  548. package/src/commands/unavailable.ts +92 -0
  549. package/src/commands/watch/README.md +160 -0
  550. package/src/commands/watch/analyze.ts +600 -0
  551. package/src/commands/watch/cli.ts +108 -0
  552. package/src/commands/watch/delta.ts +186 -0
  553. package/src/commands/watch/events.ts +235 -0
  554. package/src/commands/watch/index.ts +53 -0
  555. package/src/commands/watch/options.ts +234 -0
  556. package/src/commands/watch/render.ts +240 -0
  557. package/src/commands/watch/run.ts +553 -0
  558. package/src/commands/watch/runtime.ts +167 -0
  559. package/src/commands/watch-command.ts +294 -0
  560. package/src/entry-point.ts +67 -0
  561. package/src/index.ts +291 -0
  562. package/src/mcp/boundaries-schema.ts +193 -0
  563. package/src/mcp/default-runtime.ts +1034 -0
  564. package/src/mcp/envelope.ts +57 -0
  565. package/src/mcp/index.ts +28 -0
  566. package/src/mcp/output-schemas.ts +3071 -0
  567. package/src/mcp/path-sandbox.ts +156 -0
  568. package/src/mcp/server.ts +358 -0
  569. package/src/mcp/stdio.ts +92 -0
  570. package/src/mcp/tools.ts +563 -0
  571. package/src/mcp/types.ts +66 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Bereitstellung eines Container-Dienstes aus dem Manifest (extensions.md §6.2).
3
+ *
4
+ * Der Ablauf ist bewusst kurz und ohne Werkzeugwissen:
5
+ *
6
+ * Manifest → Compose-Datei rendern → up → Healthcheck des Manifests
7
+ *
8
+ * Die Compose-Datei entsteht bei jedem Lauf neu aus dem validierten Manifest.
9
+ * Damit gilt der gepinnte Digest wirklich, die Ports binden wirklich an
10
+ * Loopback und die Labels sind wirklich gesetzt — statt in einer mitgebrachten
11
+ * YAML behauptet zu werden, die Untangle nicht geprueft hat.
12
+ *
13
+ * Auf die Gesundheit wartet Untangle SELBST, ueber den Healthcheck aus dem
14
+ * Manifest, statt einen in den Container zu rendern. Ein Healthcheck im
15
+ * Container muesste voraussetzen, welches Programm darin liegt, um eine URL
16
+ * abzufragen — genau das Werkzeugwissen, das X9 aus dem Quelltext heraushaelt.
17
+ */
18
+ import { dirname, join } from "node:path";
19
+ import { renderComposeFile, } from "@untangle-code/extension-runtime";
20
+ /** Ort der gerenderten Datei: im Nutzer-Datenverzeichnis, nie im Projekt. */
21
+ export function composeFilePath(userDataDirectory, extensionId) {
22
+ return join(userDataDirectory, "extensions", extensionId, "compose.yaml");
23
+ }
24
+ /** Der erste Hostport des Manifests, mit optionaler Ueberschreibung. */
25
+ export function primaryHostPort(manifest, overrides = {}) {
26
+ const port = manifest.container?.ports[0];
27
+ if (port === undefined) {
28
+ return undefined;
29
+ }
30
+ return overrides[port.name] ?? port.hostPortDefault;
31
+ }
32
+ /**
33
+ * Startet den Dienst, falls noetig, und wartet auf seine Gesundheit.
34
+ *
35
+ * Ein bereits laufender, Untangle gehoerender Container wird NICHT neu
36
+ * gestartet: der Lauf soll den Dienst benutzen, nicht bewirtschaften.
37
+ */
38
+ export async function provisionContainer(deps, input) {
39
+ const steps = [];
40
+ const manifest = input.manifest;
41
+ const container = manifest.container;
42
+ if (container === undefined) {
43
+ const state = {
44
+ exists: false,
45
+ running: false,
46
+ ownedByUntangle: false,
47
+ detail: "the manifest declares no container block",
48
+ };
49
+ return { healthy: false, steps, state, detail: state.detail };
50
+ }
51
+ const runtime = await deps.container.available(input.signal === undefined ? {} : { signal: input.signal });
52
+ steps.push(runtime.detail);
53
+ if (!runtime.available) {
54
+ return {
55
+ healthy: false,
56
+ steps,
57
+ state: {
58
+ exists: false,
59
+ running: false,
60
+ ownedByUntangle: false,
61
+ detail: runtime.detail,
62
+ },
63
+ detail: runtime.detail,
64
+ };
65
+ }
66
+ const path = composeFilePath(input.userDataDirectory, manifest.id);
67
+ const yaml = renderComposeFile({
68
+ manifest,
69
+ ...(input.hostPorts === undefined ? {} : { hostPorts: input.hostPorts }),
70
+ ...(input.workspacePath === undefined ? {} : { workspacePath: input.workspacePath }),
71
+ });
72
+ await deps.fs.mkdir(dirname(path), { recursive: true });
73
+ await deps.fs.writeFile(path, new TextEncoder().encode(yaml));
74
+ steps.push(`rendered ${path} from the manifest (image pinned to ${container.digest})`);
75
+ let state = await deps.container.inspect(manifest, input.signal === undefined ? {} : { signal: input.signal });
76
+ if (state.exists && !state.ownedByUntangle) {
77
+ steps.push(state.detail);
78
+ return { healthy: false, steps, state, detail: state.detail };
79
+ }
80
+ if (state.running) {
81
+ steps.push("the container was already running; Untangle did not restart it");
82
+ }
83
+ else {
84
+ const up = await deps.container.up({ manifest, composeFilePath: path }, input.signal === undefined ? {} : { signal: input.signal });
85
+ steps.push(up.detail);
86
+ if (!up.ok) {
87
+ return { healthy: false, steps, state, detail: up.detail };
88
+ }
89
+ state = await deps.container.inspect(manifest, input.signal === undefined ? {} : { signal: input.signal });
90
+ }
91
+ const health = await waitForHealth(deps, {
92
+ manifest,
93
+ ...(input.hostPorts === undefined ? {} : { hostPorts: input.hostPorts }),
94
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
95
+ });
96
+ steps.push(health.detail);
97
+ return { healthy: health.healthy, steps, state, detail: health.detail };
98
+ }
99
+ /**
100
+ * Fragt den Healthcheck des Manifests ab, bis er antwortet oder die erklaerten
101
+ * Versuche erschoepft sind. Ein Dienst, der lange startet, ist kein Fehler —
102
+ * ein Dienst, der nie antwortet, schon, und dann steht der Grund da.
103
+ */
104
+ async function waitForHealth(deps, input) {
105
+ const check = input.manifest.container?.healthcheck;
106
+ if (check === undefined || check.kind !== "http" || check.httpPath === undefined) {
107
+ return {
108
+ healthy: true,
109
+ detail: "the manifest declares no http healthcheck; Untangle treats the container as ready " +
110
+ "without probing and says so rather than implying it checked",
111
+ };
112
+ }
113
+ const port = primaryHostPort(input.manifest, input.hostPorts ?? {});
114
+ if (port === undefined) {
115
+ return { healthy: false, detail: "the manifest declares a healthcheck but no port" };
116
+ }
117
+ const url = `http://127.0.0.1:${String(port)}${check.httpPath}`;
118
+ let lastDetail = "no probe was made";
119
+ for (let attempt = 1; attempt <= check.retries; attempt += 1) {
120
+ const response = await deps.httpRunner.request({ url, method: "GET" }, { ...deps.limits, timeoutMs: check.timeoutMs }, input.signal === undefined ? {} : { signal: input.signal });
121
+ if (response.outcome === "completed" && (response.status ?? 500) < 400) {
122
+ return {
123
+ healthy: true,
124
+ detail: `healthcheck ${url} answered ${String(response.status)} after ${String(attempt)} attempt(s)`,
125
+ };
126
+ }
127
+ lastDetail = `attempt ${String(attempt)}: ${response.outcome}${response.status === undefined ? "" : ` (status ${String(response.status)})`}`;
128
+ if (attempt < check.retries) {
129
+ await deps.wait(check.intervalMs, input.signal);
130
+ }
131
+ }
132
+ return {
133
+ healthy: false,
134
+ detail: `healthcheck ${url} did not answer within ${String(check.retries)} attempts — ${lastDetail}`,
135
+ };
136
+ }
137
+ //# sourceMappingURL=provision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../../src/commands/extensions/provision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ParsedArgs } from "../../cli/args.js";
2
+ import { type Io } from "../../cli/io.js";
3
+ import { type ExtensionEnvironmentV1 } from "./environment.js";
4
+ export declare function runRemove(environment: ExtensionEnvironmentV1, args: ParsedArgs, io: Io, format: "text" | "json"): Promise<number>;
5
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/extensions/remove.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAc,KAAK,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAIhF,wBAAsB,SAAS,CAC7B,WAAW,EAAE,sBAAsB,EACnC,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,CA6EjB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * `untangle extensions remove <id>`
3
+ *
4
+ * Deletes one installed extension directory from the user's extension root.
5
+ *
6
+ * Two guards. The directory must lie inside a resolved extension root — the
7
+ * command deletes recursively, and a recursive delete driven by an id from
8
+ * the command line has to prove where it is pointing. And it must not lie
9
+ * inside a project directory, which would mean the boundary was crossed
10
+ * earlier and deleting is not the right repair.
11
+ *
12
+ * The license acknowledgment is kept by default. It is a personal declaration
13
+ * about a tool's terms, not a property of the installed file, and
14
+ * re-installing the same tool should not quietly need a fresh one. Dropping
15
+ * it is `--revoke-license`, what extensions.md §9.3 calls revocation.
16
+ */
17
+ import { dirname } from "node:path";
18
+ import { boolFlag } from "../../cli/args.js";
19
+ import { EXIT, OperationalError, UsageError } from "../../cli/exit.js";
20
+ import { line, note } from "../../cli/io.js";
21
+ import { explainMissing, findExtension, loadExtensionContext } from "./context.js";
22
+ import { isInsideAnyRoot } from "./environment.js";
23
+ import { emitJson } from "./render.js";
24
+ import { removeAcknowledgments, saveAcknowledgments, saveCliState } from "./state.js";
25
+ export async function runRemove(environment, args, io, format) {
26
+ const extensionId = args.positionals[1];
27
+ if (extensionId === undefined) {
28
+ throw new UsageError("`untangle extensions remove` needs an extension id.", "Run `untangle extensions list` to see the installed ids.");
29
+ }
30
+ const context = await loadExtensionContext(environment);
31
+ const extension = findExtension(context, extensionId);
32
+ if (extension === null) {
33
+ throw new OperationalError(explainMissing(context, extensionId), "Run `untangle extensions list` to see what is installed and why something was rejected.");
34
+ }
35
+ const directory = dirname(extension.manifestPath);
36
+ if (!isInsideAnyRoot(directory, environment.roots)) {
37
+ throw new OperationalError(`Refusing to delete "${directory}": it is not inside a resolved extension root ` +
38
+ `(${environment.roots.join(", ")}).`, "Delete the directory yourself if that is really what you want.");
39
+ }
40
+ if (isInsideAnyRoot(directory, environment.projectRoots)) {
41
+ throw new OperationalError(`Refusing to delete "${directory}": it lies inside a project directory.`, "Extensions are user-profile artifacts; remove this one with your own tools.");
42
+ }
43
+ await environment.fs.remove(directory, { recursive: true });
44
+ const statePath = await saveCliState(environment.fs, environment.userDataDir, {
45
+ ...context.state,
46
+ enabled: context.state.enabled.filter((id) => id !== extensionId),
47
+ lastRuns: Object.fromEntries(Object.entries(context.state.lastRuns).filter(([id]) => id !== extensionId)),
48
+ });
49
+ let acknowledgmentFile;
50
+ const revoked = boolFlag(args, "revoke-license");
51
+ if (revoked) {
52
+ acknowledgmentFile = await saveAcknowledgments(environment.fs, environment.userDataDir, removeAcknowledgments(context.acknowledgments, extensionId));
53
+ }
54
+ if (format === "json") {
55
+ emitJson(io, {
56
+ command: "extensions remove",
57
+ extensionId,
58
+ removedDirectory: directory,
59
+ stateFile: statePath,
60
+ licenseAcknowledgment: revoked ? "revoked" : "kept",
61
+ acknowledgmentFile,
62
+ warnings: context.warnings,
63
+ });
64
+ }
65
+ else {
66
+ line(io, `removed "${extensionId}"`);
67
+ line(io, ` directory ${directory}`);
68
+ line(io, revoked
69
+ ? ` license acknowledgment revoked in ${String(acknowledgmentFile)}`
70
+ : " license acknowledgment kept (use --revoke-license to drop it)");
71
+ }
72
+ for (const warning of context.warnings) {
73
+ note(io, `warning: ${warning}`);
74
+ }
75
+ return EXIT.ok;
76
+ }
77
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/extensions/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The two output shapes the extension commands share.
3
+ *
4
+ * Payload goes to stdout, everything else to stderr (see `cli/io.ts`), so
5
+ * `--format=json | jq` stays usable while warnings remain visible.
6
+ */
7
+ import { type Io } from "../../cli/io.js";
8
+ /** Writes one JSON document to stdout. */
9
+ export declare function emitJson(io: Io, value: unknown): void;
10
+ /**
11
+ * Renders a table padded to the widest cell per column. Padding counts code
12
+ * units, which is what a fixed-width terminal measures for the ASCII
13
+ * identifiers, SPDX ids and paths shown here.
14
+ */
15
+ export declare function renderTable(header: readonly string[], rows: readonly (readonly string[])[]): string[];
16
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/commands/extensions/render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAQ,KAAK,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAEhD,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,IAAI,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GACnC,MAAM,EAAE,CAUV"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The two output shapes the extension commands share.
3
+ *
4
+ * Payload goes to stdout, everything else to stderr (see `cli/io.ts`), so
5
+ * `--format=json | jq` stays usable while warnings remain visible.
6
+ */
7
+ import { line } from "../../cli/io.js";
8
+ /** Writes one JSON document to stdout. */
9
+ export function emitJson(io, value) {
10
+ line(io, JSON.stringify(value, null, 2));
11
+ }
12
+ /**
13
+ * Renders a table padded to the widest cell per column. Padding counts code
14
+ * units, which is what a fixed-width terminal measures for the ASCII
15
+ * identifiers, SPDX ids and paths shown here.
16
+ */
17
+ export function renderTable(header, rows) {
18
+ const widths = header.map((cell, column) => rows.reduce((widest, row) => Math.max(widest, (row[column] ?? "").length), cell.length));
19
+ const render = (cells) => cells
20
+ .map((cell, column) => cell.padEnd(widths[column] ?? 0))
21
+ .join(" ")
22
+ .trimEnd();
23
+ return [render(header), render(widths.map((width) => "-".repeat(width))), ...rows.map(render)];
24
+ }
25
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/commands/extensions/render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAW,MAAM,iBAAiB,CAAC;AAEhD,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,EAAM,EAAE,KAAc;IAC7C,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,MAAyB,EACzB,IAAoC;IAEpC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CACzC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CACxF,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,KAAwB,EAAU,EAAE,CAClD,KAAK;SACF,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACvD,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,EAAE,CAAC;IACf,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACjG,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type FileResolutionV1 } from "@untangle-code/extension-runtime";
2
+ import { type ParsedArgs } from "../../cli/args.js";
3
+ import { type Io } from "../../cli/io.js";
4
+ import { type ExtensionEnvironmentV1 } from "./environment.js";
5
+ export interface RunDeps {
6
+ /** Injected in tests so no unit test opens a socket. */
7
+ fetchImpl?: typeof fetch;
8
+ signal?: AbortSignal;
9
+ }
10
+ export declare function runRun(environment: ExtensionEnvironmentV1, args: ParsedArgs, io: Io, format: "text" | "json", deps?: RunDeps): Promise<number>;
11
+ /**
12
+ * Maps a tool-reported path onto workspace-relative form.
13
+ *
14
+ * `fileId` is deliberately absent with a stated reason: this command runs
15
+ * against the working tree, not an index generation, so there is no file
16
+ * identity to attach. Inventing one would make a finding look joined to an
17
+ * index that never saw it.
18
+ */
19
+ export declare function workspaceFileResolver(workspacePath: string): (toolPath: string) => FileResolutionV1;
20
+ /**
21
+ * A `ReadonlyMap` view over the working tree that reads a file the first time
22
+ * a position inside it must be resolved.
23
+ *
24
+ * Reading the whole workspace eagerly to translate a handful of line numbers
25
+ * would be the wrong trade. A failed read is cached as "absent", which makes
26
+ * the position unresolvable — and therefore a ledger entry rather than a
27
+ * guess (E4).
28
+ */
29
+ export declare function lazyWorkspaceContents(workspacePath: string): ReadonlyMap<string, string>;
30
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/extensions/run.ts"],"names":[],"mappings":"AAwBA,OAAO,EAML,KAAK,gBAAgB,EAEtB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEvF,OAAO,EAAc,KAAK,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKhF,MAAM,WAAW,OAAO;IACtB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAsB,MAAM,CAC1B,WAAW,EAAE,sBAAsB,EACnC,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,IAAI,GAAE,OAAY,GACjB,OAAO,CAAC,MAAM,CAAC,CA+GjB;AAqBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,GACpB,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAuBxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBxF"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * `untangle extensions run <id>`
3
+ *
4
+ * Runs one installed extension and normalizes whatever it prints into
5
+ * `ExternalFindingV1` (X3). The order of the checks is the load-bearing part:
6
+ *
7
+ * license gate → availability probe → run → parse → normalize
8
+ *
9
+ * The gate comes first because a version probe is already a process start,
10
+ * and X5 forbids starting or pulling anything for a tool whose terms have not
11
+ * been acknowledged. Checking availability first and the license second would
12
+ * produce the same refusal — after having run the tool once.
13
+ *
14
+ * What comes out is evidence, never an Untangle metric: findings do not
15
+ * change the exit code, and no number here is ever folded into a complexity
16
+ * or risk value (X3). Everything the run could not resolve — a file outside
17
+ * the workspace, a position that does not exist, a severity that hit the
18
+ * mapping fallback — is reported with its reason rather than dropped (E4).
19
+ */
20
+ import { readFileSync } from "node:fs";
21
+ import { relative, resolve } from "node:path";
22
+ import { compareCodepoints } from "@untangle-code/domain";
23
+ import { createLineOffsetResolver, defaultProcessLimits, normalizeToolPath, } from "@untangle-code/extension-runtime";
24
+ import { boolFlag, integerFlag, stringFlag } from "../../cli/args.js";
25
+ import { EXIT, EnvironmentError, OperationalError, UsageError } from "../../cli/exit.js";
26
+ import { line, note } from "../../cli/io.js";
27
+ import { explainMissing, findExtension, gateFor, loadExtensionContext } from "./context.js";
28
+ import { resolveUserPath } from "./environment.js";
29
+ import { invokeExtension } from "./invoke.js";
30
+ import { emitJson, renderTable } from "./render.js";
31
+ import { saveCliState, summarizeRun } from "./state.js";
32
+ export async function runRun(environment, args, io, format, deps = {}) {
33
+ const command = args.positionals[0] === "setup" ? "extensions setup" : "extensions run";
34
+ const extensionId = args.positionals[1];
35
+ if (extensionId === undefined) {
36
+ throw new UsageError(`\`untangle ${command}\` needs an extension id.`, "Run `untangle extensions list` to see the installed ids.");
37
+ }
38
+ const context = await loadExtensionContext(environment);
39
+ const extension = findExtension(context, extensionId);
40
+ if (extension === null) {
41
+ throw new OperationalError(explainMissing(context, extensionId), "Install it first: untangle extensions add --from=<path-or-url>");
42
+ }
43
+ const manifest = extension.manifest;
44
+ const workspacePath = resolveUserPath(environment.cwd, stringFlag(args, "workspace") ?? ".");
45
+ const target = resolveUserPath(environment.cwd, stringFlag(args, "target") ?? workspacePath);
46
+ const ruleset = stringFlag(args, "ruleset") ?? manifest.defaultRuleset;
47
+ // --- license gate BEFORE any process start (X5) -------------------------
48
+ const gate = gateFor(context, extension, ruleset);
49
+ if (!gate.allowed) {
50
+ note(io, `EXTENSION_LICENSE_UNACKNOWLEDGED: ${extensionId} did not start.`);
51
+ note(io, ` ${gate.tool.reason}`);
52
+ for (const entry of gate.rulesets) {
53
+ if (entry.status !== "acknowledged" && entry.status !== "not_required") {
54
+ note(io, ` ruleset ${entry.ruleset}: ${entry.reason}`);
55
+ }
56
+ }
57
+ throw new EnvironmentError(`The license gate for "${extensionId}" is not satisfied; nothing was started and nothing was pulled.`, gate.acknowledgeCommands.join(" && "));
58
+ }
59
+ // Der eigentliche Lauf liegt in `invoke.ts` — als Daten hinein, als Ergebnis
60
+ // heraus. `runRun` ist die MENSCHLICHE Fassung davon: es uebersetzt einen
61
+ // nicht stattgefundenen Lauf in die Ausnahme, die ein einzelner Aufruf
62
+ // erwartet, und berichtet danach. Ein Sammelbericht ruft dieselbe Funktion
63
+ // auf und uebersetzt eben NICHT in eine Ausnahme.
64
+ const limits = readLimits(args);
65
+ const httpUrl = stringFlag(args, "url") ?? manifest.http?.defaultUrl;
66
+ const outcome = await invokeExtension({
67
+ environment,
68
+ context,
69
+ extension,
70
+ workspacePath,
71
+ target,
72
+ limits,
73
+ provisionConsent: boolFlag(args, "yes"),
74
+ ...(ruleset === undefined ? {} : { ruleset }),
75
+ ...(httpUrl === undefined ? {} : { httpUrl }),
76
+ ...(deps.fetchImpl === undefined ? {} : { fetchImpl: deps.fetchImpl }),
77
+ ...(deps.signal === undefined ? {} : { signal: deps.signal }),
78
+ onProvisionStep: (step) => {
79
+ note(io, ` ${step}`);
80
+ },
81
+ onProvisionPlanned: (detail) => {
82
+ note(io, ` ${detail}`);
83
+ },
84
+ resolveFile: workspaceFileResolver(workspacePath),
85
+ resolvePosition: createLineOffsetResolver(lazyWorkspaceContents(workspacePath)),
86
+ });
87
+ if (outcome.status === "not_run") {
88
+ note(io, `${extensionId} did not run: ${outcome.detail}`);
89
+ if (outcome.reason === "license_gate_open") {
90
+ throw new EnvironmentError(`The license gate for "${extensionId}" is not satisfied; nothing was started and nothing was pulled.`, outcome.nextStep ?? "acknowledge the licence first");
91
+ }
92
+ throw new EnvironmentError(`"${extensionId}" did not run (${outcome.reason}).`, outcome.nextStep ?? "see the reason above");
93
+ }
94
+ const { health, result } = outcome;
95
+ await saveCliState(environment.fs, environment.userDataDir, {
96
+ ...context.state,
97
+ lastRuns: {
98
+ ...context.state.lastRuns,
99
+ [extensionId]: summarizeRun(result.run),
100
+ },
101
+ });
102
+ report(io, format, {
103
+ command,
104
+ extensionId,
105
+ workspacePath,
106
+ target,
107
+ health,
108
+ result,
109
+ warnings: context.warnings,
110
+ });
111
+ if (result.run.exitStatus === "completed") {
112
+ return EXIT.ok;
113
+ }
114
+ throw new OperationalError(`"${extensionId}" ended with status ${result.run.exitStatus}` +
115
+ `${result.run.errorCode === undefined ? "" : ` (${result.run.errorCode})`}.`, describeNextStep(health, result));
116
+ }
117
+ function readLimits(args) {
118
+ const limits = defaultProcessLimits();
119
+ const timeout = integerFlag(args, "timeout", limits.timeoutMs);
120
+ const maxOutput = integerFlag(args, "max-output-bytes", limits.maxOutputBytes);
121
+ if (timeout <= 0) {
122
+ throw new UsageError("--timeout expects a positive number of milliseconds.", "Example: --timeout=60000");
123
+ }
124
+ if (maxOutput <= 0) {
125
+ throw new UsageError("--max-output-bytes expects a positive byte count.", "Example: --max-output-bytes=1048576");
126
+ }
127
+ return { ...limits, timeoutMs: timeout, maxOutputBytes: maxOutput };
128
+ }
129
+ /**
130
+ * Maps a tool-reported path onto workspace-relative form.
131
+ *
132
+ * `fileId` is deliberately absent with a stated reason: this command runs
133
+ * against the working tree, not an index generation, so there is no file
134
+ * identity to attach. Inventing one would make a finding look joined to an
135
+ * index that never saw it.
136
+ */
137
+ export function workspaceFileResolver(workspacePath) {
138
+ return (toolPath) => {
139
+ const normalized = normalizeToolPath(toolPath);
140
+ if (normalized === "") {
141
+ return { fileIdMissingReason: "the tool reported an empty path" };
142
+ }
143
+ const absolute = /^([a-zA-Z]:\/|\/)/.test(normalized)
144
+ ? normalized
145
+ : resolve(workspacePath, normalized);
146
+ const relativePath = relative(workspacePath, absolute).split("\\").join("/");
147
+ if (relativePath === "" || relativePath.startsWith("../")) {
148
+ return {
149
+ fileIdMissingReason: `the tool reported "${toolPath}", which is outside the analyzed workspace ` +
150
+ `"${workspacePath}"`,
151
+ };
152
+ }
153
+ return {
154
+ relativePath,
155
+ fileIdMissingReason: "no index generation is loaded; this run resolves paths against the working tree only",
156
+ };
157
+ };
158
+ }
159
+ /**
160
+ * A `ReadonlyMap` view over the working tree that reads a file the first time
161
+ * a position inside it must be resolved.
162
+ *
163
+ * Reading the whole workspace eagerly to translate a handful of line numbers
164
+ * would be the wrong trade. A failed read is cached as "absent", which makes
165
+ * the position unresolvable — and therefore a ledger entry rather than a
166
+ * guess (E4).
167
+ */
168
+ export function lazyWorkspaceContents(workspacePath) {
169
+ const cache = new Map();
170
+ const load = (relativePath) => {
171
+ if (cache.has(relativePath)) {
172
+ return cache.get(relativePath) ?? null;
173
+ }
174
+ let content;
175
+ try {
176
+ content = readFileSync(resolve(workspacePath, relativePath), "utf8");
177
+ }
178
+ catch {
179
+ content = null;
180
+ }
181
+ cache.set(relativePath, content);
182
+ return content;
183
+ };
184
+ return Object.assign(new Map(), {
185
+ get(key) {
186
+ return load(key) ?? undefined;
187
+ },
188
+ has(key) {
189
+ return load(key) !== null;
190
+ },
191
+ });
192
+ }
193
+ function report(io, format, input) {
194
+ const { result } = input;
195
+ if (format === "json") {
196
+ emitJson(io, {
197
+ command: input.command,
198
+ extensionId: input.extensionId,
199
+ workspace: input.workspacePath,
200
+ target: input.target,
201
+ evidenceOnly: true,
202
+ health: input.health,
203
+ run: result.run,
204
+ findings: result.findings,
205
+ measurements: result.measurements,
206
+ skipped: result.skipped,
207
+ error: result.error === undefined ? undefined : { message: result.error.message },
208
+ warnings: input.warnings,
209
+ });
210
+ }
211
+ else {
212
+ line(io, `run ${result.run.runId} — ${input.extensionId} (${result.run.exitStatus})`);
213
+ line(io, ` invocation ${result.run.invocation ?? "(none)"}`);
214
+ line(io, ` tool ${result.run.toolVersion}`);
215
+ line(io, ` format ${result.run.outputFormat} via ${result.run.formatParserVersion}`);
216
+ line(io, ` target ${input.target}`);
217
+ line(io, ` wall time ${String(result.run.resources.wallTimeMs)} ms`);
218
+ line(io, ` findings ${String(result.run.findingsTotal)} (${describeCounts(result.run.findingCounts)})`);
219
+ if (result.findings.length > 0) {
220
+ line(io, "");
221
+ const rows = [...result.findings]
222
+ .sort((left, right) => compareCodepoints(left.filePath, right.filePath) ||
223
+ left.sourceRange.startByte - right.sourceRange.startByte ||
224
+ compareCodepoints(left.ruleId, right.ruleId))
225
+ .map((finding) => [
226
+ finding.severity.normalized,
227
+ `${finding.filePath}:${String(finding.sourceRange.startLine ?? 0)}`,
228
+ finding.ruleId,
229
+ firstLine(finding.message),
230
+ ]);
231
+ for (const rendered of renderTable(["SEVERITY", "LOCATION", "RULE", "MESSAGE"], rows)) {
232
+ line(io, rendered);
233
+ }
234
+ line(io, "");
235
+ line(io, "These are external findings — evidence from a third-party tool. They are never folded " +
236
+ "into Untangle complexity or risk numbers (X3).");
237
+ }
238
+ }
239
+ reportUnmappedSeverities(io, result.findings);
240
+ for (const entry of result.skipped) {
241
+ note(io, `skipped ${describeSkip(entry)}`);
242
+ }
243
+ for (const warning of result.run.warnings) {
244
+ note(io, `warning: ${warning}`);
245
+ }
246
+ for (const warning of input.warnings) {
247
+ note(io, `warning: ${warning}`);
248
+ }
249
+ for (const error of result.run.errors) {
250
+ note(io, `${error.code}: ${error.message}`);
251
+ }
252
+ if (result.run.exitStatus !== "completed") {
253
+ for (const reason of input.health.unavailableReasons) {
254
+ note(io, ` ${reason.invocation}: ${reason.detail}`);
255
+ }
256
+ }
257
+ }
258
+ function describeNextStep(health, result) {
259
+ if (!health.available) {
260
+ const first = health.unavailableReasons[0];
261
+ return first === undefined
262
+ ? "Check the manifest's invocation section against what is installed on this machine."
263
+ : `Make the ${first.invocation} invocation work: ${first.detail}`;
264
+ }
265
+ return result.error === undefined
266
+ ? "Re-run with --format=json to see the full run record."
267
+ : result.error.message;
268
+ }
269
+ function reportUnmappedSeverities(io, findings) {
270
+ const unmapped = findings.filter((finding) => !finding.severity.mappingMatched);
271
+ if (unmapped.length === 0) {
272
+ return;
273
+ }
274
+ const originals = [...new Set(unmapped.map((finding) => finding.severity.original))].sort(compareCodepoints);
275
+ note(io, `warning: ${String(unmapped.length)} finding(s) hit the severity fallback; the manifest maps ` +
276
+ `no rule for: ${originals.join(", ")}`);
277
+ }
278
+ function describeCounts(counts) {
279
+ const parts = Object.entries(counts)
280
+ .filter(([, value]) => value > 0)
281
+ .map(([key, value]) => `${key} ${String(value)}`);
282
+ return parts.length === 0 ? "none" : parts.join(", ");
283
+ }
284
+ function describeSkip(entry) {
285
+ const where = entry.path === undefined ? entry.subjectKind : `${entry.subjectKind} ${entry.path}`;
286
+ return `${where}: ${entry.reason} — ${entry.detail}`;
287
+ }
288
+ function firstLine(message) {
289
+ const text = message.split("\n")[0] ?? "";
290
+ return text.length > 96 ? `${text.slice(0, 93)}...` : text;
291
+ }
292
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/extensions/run.ts"],"names":[],"mappings":"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"}