@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,111 @@
1
+ import path from "node:path";
2
+ import { boolFlag, stringFlag } from "../cli/args.js";
3
+ import { EXIT, UsageError } from "../cli/exit.js";
4
+ import { note } from "../cli/io.js";
5
+ import { loadWorkspace } from "../cli/workspace.js";
6
+ import { serveUntangleMcpStdio } from "../mcp/stdio.js";
7
+ const FLAGS = {
8
+ stdio: {
9
+ kind: "boolean",
10
+ describe: "Serve MCP over stdin/stdout; stdout contains JSON-RPC only.",
11
+ },
12
+ root: {
13
+ kind: "string",
14
+ placeholder: "PATH",
15
+ describe: "Workspace starting point and additional path-sandbox root.",
16
+ defaultLabel: "current directory",
17
+ },
18
+ };
19
+ export const mcpCommand = {
20
+ spec: {
21
+ name: "mcp",
22
+ implementedBy: "commands/mcp.js",
23
+ summary: "Expose Untangle tools as a local MCP stdio server",
24
+ usage: "untangle mcp --stdio [--root=<PATH>]",
25
+ details: [
26
+ "Registers the complete stable MCP v1 tool set. Unimplemented capabilities return FEATURE_UNAVAILABLE rather than invented empty results.",
27
+ "Path parameters are checked against the loaded workspace root and configured repository roots. The server does not launch arbitrary external commands.",
28
+ "stdout is reserved exclusively for the MCP JSON-RPC protocol; diagnostics go to stderr.",
29
+ ],
30
+ flags: FLAGS,
31
+ examples: ["untangle mcp --stdio", "untangle mcp --stdio --root=/path/to/workspace"],
32
+ exitCodes: [
33
+ [EXIT.ok, "The MCP connection closed cleanly."],
34
+ [EXIT.operational, "The MCP transport failed."],
35
+ [EXIT.usage, "--stdio is missing or positional arguments were supplied."],
36
+ [EXIT.cancelled, "SIGINT/SIGTERM stopped the server."],
37
+ ],
38
+ },
39
+ async run(ctx, args) {
40
+ if (!boolFlag(args, "stdio")) {
41
+ throw new UsageError("The MCP command requires --stdio.", "Run `untangle mcp --stdio`.");
42
+ }
43
+ if (args.positionals.length > 0) {
44
+ throw new UsageError(`The MCP command does not accept positional arguments: ${args.positionals.join(" ")}`, "Run `untangle mcp --stdio`.");
45
+ }
46
+ const cwd = path.resolve(ctx.cwd, stringFlag(args, "root") ?? ".");
47
+ const workspaceRoots = discoverWorkspaceRoots(cwd, ctx.env);
48
+ const handle = serveUntangleMcpStdio({
49
+ cwd,
50
+ env: ctx.env,
51
+ workspaceRoots,
52
+ onerror: (error) => {
53
+ note(ctx.io, `MCP transport error: ${error.message}`);
54
+ },
55
+ });
56
+ const reason = await waitForConnectionEnd(ctx.signal, handle.closed);
57
+ await handle.close();
58
+ if (reason === "aborted")
59
+ return EXIT.cancelled;
60
+ if (reason === "transport_error")
61
+ return EXIT.operational;
62
+ return EXIT.ok;
63
+ },
64
+ };
65
+ export function discoverWorkspaceRoots(cwd, env) {
66
+ const roots = new Set([path.resolve(cwd)]);
67
+ try {
68
+ const view = loadWorkspace({ cwd, env, strict: false });
69
+ roots.add(path.resolve(view.root));
70
+ for (const repository of view.config.repositories ?? []) {
71
+ roots.add(path.resolve(repository.path));
72
+ }
73
+ }
74
+ catch {
75
+ // The runtime reports configuration errors per tool. The server itself
76
+ // still starts, confined to the explicit cwd.
77
+ }
78
+ return [...roots];
79
+ }
80
+ function waitForConnectionEnd(signal, transportClosed) {
81
+ if (signal.aborted)
82
+ return Promise.resolve("aborted");
83
+ if (process.stdin.readableEnded || process.stdin.destroyed)
84
+ return Promise.resolve("closed");
85
+ return new Promise((resolve) => {
86
+ let settled = false;
87
+ const finish = (reason) => {
88
+ if (settled)
89
+ return;
90
+ settled = true;
91
+ process.stdin.off("end", onClosed);
92
+ process.stdin.off("close", onClosed);
93
+ signal.removeEventListener("abort", onAborted);
94
+ resolve(reason);
95
+ };
96
+ const onClosed = () => {
97
+ finish("closed");
98
+ };
99
+ const onAborted = () => {
100
+ finish("aborted");
101
+ };
102
+ process.stdin.once("end", onClosed);
103
+ process.stdin.once("close", onClosed);
104
+ signal.addEventListener("abort", onAborted, { once: true });
105
+ process.stdin.resume();
106
+ void transportClosed.then((outcome) => {
107
+ finish(outcome.reason === "error" ? "transport_error" : "closed");
108
+ });
109
+ });
110
+ }
111
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProductTestProcessRequestV1, ProductTestProcessResultV1 } from "@untangle-code/core";
2
+ /** Host-only subprocess adapter. Never invoke a shell or infer a repository test command. */
3
+ export declare function executeProductTests(request: ProductTestProcessRequestV1): Promise<ProductTestProcessResultV1>;
4
+ //# sourceMappingURL=product-test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-test-runner.d.ts","sourceRoot":"","sources":["../../src/commands/product-test-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEnG,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC,CAwErC"}
@@ -0,0 +1,85 @@
1
+ import { spawn } from "node:child_process";
2
+ /** Host-only subprocess adapter. Never invoke a shell or infer a repository test command. */
3
+ export function executeProductTests(request) {
4
+ request.signal?.throwIfAborted();
5
+ return new Promise((resolve) => {
6
+ const stdout = [];
7
+ const stderr = [];
8
+ let captured = 0;
9
+ let status = "completed";
10
+ const child = spawn(request.command[0], request.command.slice(1), {
11
+ cwd: request.root,
12
+ shell: false,
13
+ detached: process.platform !== "win32",
14
+ stdio: ["ignore", "pipe", "pipe"],
15
+ windowsHide: true,
16
+ });
17
+ let forceKill;
18
+ const killTree = (signal) => {
19
+ if (child.pid === undefined)
20
+ return;
21
+ try {
22
+ if (process.platform === "win32") {
23
+ const terminator = spawn("taskkill", ["/pid", String(child.pid), "/t", "/f"], {
24
+ stdio: "ignore",
25
+ shell: false,
26
+ windowsHide: true,
27
+ });
28
+ terminator.on("error", () => {
29
+ child.kill(signal);
30
+ });
31
+ }
32
+ else
33
+ process.kill(-child.pid, signal);
34
+ }
35
+ catch {
36
+ /* An already exited process group requires no further action. */
37
+ }
38
+ };
39
+ const stop = (reason) => {
40
+ if (status !== "completed")
41
+ return;
42
+ status = reason;
43
+ killTree("SIGTERM");
44
+ forceKill = setTimeout(() => killTree("SIGKILL"), 250);
45
+ };
46
+ const capture = (chunks, chunk) => {
47
+ const available = request.outputLimitBytes - captured;
48
+ if (available > 0)
49
+ chunks.push(chunk.subarray(0, available));
50
+ captured += chunk.byteLength;
51
+ if (captured > request.outputLimitBytes)
52
+ stop("output_limit");
53
+ };
54
+ child.stdout.on("data", (chunk) => capture(stdout, chunk));
55
+ child.stderr.on("data", (chunk) => capture(stderr, chunk));
56
+ const timeout = setTimeout(() => stop("timed_out"), request.timeoutMs);
57
+ const abort = () => stop("cancelled");
58
+ request.signal?.addEventListener("abort", abort, { once: true });
59
+ if (request.signal?.aborted === true)
60
+ abort();
61
+ child.on("error", (error) => {
62
+ if (status === "completed")
63
+ status = "spawn_failed";
64
+ capture(stderr, Buffer.from(error.message));
65
+ });
66
+ child.on("close", (code, signal) => {
67
+ clearTimeout(timeout);
68
+ killTree("SIGKILL");
69
+ if (forceKill !== undefined) {
70
+ // Reap descendants even if the direct child closed its streams first.
71
+ killTree("SIGKILL");
72
+ clearTimeout(forceKill);
73
+ }
74
+ request.signal?.removeEventListener("abort", abort);
75
+ resolve({
76
+ status: code === null && status === "completed" ? "spawn_failed" : status,
77
+ exitCode: status === "spawn_failed" ? null : code,
78
+ ...(signal === null ? {} : { terminationSignal: signal }),
79
+ stdout: Buffer.concat(stdout),
80
+ stderr: Buffer.concat(stderr),
81
+ });
82
+ });
83
+ });
84
+ }
85
+ //# sourceMappingURL=product-test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-test-runner.js","sourceRoot":"","sources":["../../src/commands/product-test-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { analyzeProductAlignment, runProductTests } from "@untangle-code/core";
2
+ import type { ProductAlignmentReportV1 } from "@untangle-code/domain";
3
+ import { type ParsedArgs } from "../cli/args.js";
4
+ import type { Command } from "../cli/command.js";
5
+ type ProductAnalyzer = typeof analyzeProductAlignment;
6
+ /** Resolve evidence paths only after selecting the target project. */
7
+ export declare function productOptionsFrom(args: ParsedArgs, cwd: string, signal: AbortSignal): Parameters<ProductAnalyzer>[0];
8
+ export declare function createProductCommand(deps?: {
9
+ analyze?: ProductAnalyzer;
10
+ runTests?: typeof runProductTests;
11
+ }): Command;
12
+ /** Keep evidence statuses and metrics visible in the agent-facing text view. */
13
+ export declare function formatProductReport(report: ProductAlignmentReportV1): string;
14
+ export declare const productCommand: Command;
15
+ export {};
16
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../src/commands/product.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AAwDjE,KAAK,eAAe,GAAG,OAAO,uBAAuB,CAAC;AAEtD,sEAAsE;AACtE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,GAClB,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAmEhC;AAED,wBAAgB,oBAAoB,CAClC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,eAAe,CAAA;CAAO,GAC1E,OAAO,CAqHT;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAyD5E;AAMD,eAAO,MAAM,cAAc,EAAE,OAAgC,CAAC"}
@@ -0,0 +1,262 @@
1
+ import path from "node:path";
2
+ import { analyzeProductAlignment, runProductTests } from "@untangle-code/core";
3
+ import { boolFlag, enumFlag, numberFlag, stringFlag, } from "../cli/args.js";
4
+ import { EXIT, UsageError } from "../cli/exit.js";
5
+ import { line, note } from "../cli/io.js";
6
+ import { executeProductTests } from "./product-test-runner.js";
7
+ import { runSddConnection, SDD_CONNECT_FLAGS } from "./sdd.js";
8
+ const FLAGS = {
9
+ ...SDD_CONNECT_FLAGS,
10
+ root: { kind: "string", placeholder: "PATH", describe: "Project directory." },
11
+ manifest: {
12
+ kind: "string",
13
+ placeholder: "PATH",
14
+ describe: "Declared feature map, relative to the project directory.",
15
+ defaultLabel: "untangle.features.json",
16
+ },
17
+ feature: { kind: "string", placeholder: "ID", describe: "Inspect one declared feature." },
18
+ path: {
19
+ kind: "string",
20
+ placeholder: "PATH",
21
+ describe: "Find declared features for one repository-relative literal search-hit path.",
22
+ },
23
+ draft: {
24
+ kind: "boolean",
25
+ describe: "With explicit --feature and --path, show an unwritten review draft only when the feature manifest is missing.",
26
+ },
27
+ "run-tests": {
28
+ kind: "boolean",
29
+ describe: "Explicitly run a Vitest-compatible argv after --, without a shell; capture source-bound test evidence.",
30
+ },
31
+ "test-timeout": {
32
+ kind: "number",
33
+ placeholder: "MS",
34
+ describe: "Explicit test-run timeout in milliseconds (1..3600000).",
35
+ defaultLabel: "120000",
36
+ },
37
+ "test-evidence": {
38
+ kind: "string",
39
+ placeholder: "PATH",
40
+ describe: "Supplied source-bound test report, relative to the project directory.",
41
+ },
42
+ "max-cognitive": {
43
+ kind: "number",
44
+ placeholder: "N",
45
+ describe: "Default cognitive threshold per execution unit.",
46
+ defaultLabel: "15",
47
+ },
48
+ "require-complete": {
49
+ kind: "boolean",
50
+ describe: "Exit 5 unless the report status is evidence_consistent.",
51
+ },
52
+ format: { kind: "string", placeholder: "text|json", describe: "Output format." },
53
+ };
54
+ /** Resolve evidence paths only after selecting the target project. */
55
+ export function productOptionsFrom(args, cwd, signal) {
56
+ const runTests = boolFlag(args, "run-tests");
57
+ if (!runTests && args.positionals.length !== 0) {
58
+ throw new UsageError("product does not accept positional arguments.", "untangle product --help");
59
+ }
60
+ const root = path.resolve(cwd, stringFlag(args, "root") ?? ".");
61
+ const manifest = stringFlag(args, "manifest");
62
+ const testEvidence = stringFlag(args, "test-evidence");
63
+ const featureId = stringFlag(args, "feature");
64
+ const selectedPath = stringFlag(args, "path");
65
+ if (selectedPath !== undefined &&
66
+ (selectedPath.length === 0 ||
67
+ selectedPath.length > 4096 ||
68
+ path.isAbsolute(selectedPath) ||
69
+ /[:\\*?[\]{}]/u.test(selectedPath) ||
70
+ Array.from(selectedPath).some((character) => character.charCodeAt(0) < 32) ||
71
+ selectedPath.split("/").some((part) => part === "" || part === "." || part === "..")))
72
+ throw new UsageError("--path requires one repository-relative literal file path without glob syntax.");
73
+ if (runTests && testEvidence !== undefined)
74
+ throw new UsageError("--run-tests cannot be combined with --test-evidence; existing evidence is never replaced.");
75
+ if (boolFlag(args, "draft") && (featureId === undefined || selectedPath === undefined))
76
+ throw new UsageError("--draft requires an explicitly chosen --feature=ID and --path=PATH.");
77
+ if (boolFlag(args, "draft") && (runTests || testEvidence !== undefined))
78
+ throw new UsageError("--draft cannot be combined with test execution or supplied test evidence.");
79
+ if (runTests && args.positionals.length === 0)
80
+ throw new UsageError("--run-tests requires a Vitest-compatible command after --.", "untangle product --run-tests -- pnpm exec vitest run");
81
+ if (!runTests && numberFlag(args, "test-timeout") !== undefined)
82
+ throw new UsageError("--test-timeout requires --run-tests.");
83
+ const timeout = numberFlag(args, "test-timeout") ?? 120_000;
84
+ if (!Number.isInteger(timeout) || timeout <= 0 || timeout > 3_600_000)
85
+ throw new UsageError("--test-timeout must be an integer between 1 and 3600000 milliseconds.");
86
+ const maxCognitive = numberFlag(args, "max-cognitive") ?? 15;
87
+ if (!Number.isFinite(maxCognitive) || maxCognitive < 0) {
88
+ throw new UsageError("--max-cognitive must be a finite number >= 0.");
89
+ }
90
+ for (const [name, value] of [
91
+ ["manifest", manifest],
92
+ ["test-evidence", testEvidence],
93
+ ["feature", featureId],
94
+ ]) {
95
+ if (value !== undefined && value.trim().length === 0) {
96
+ throw new UsageError(`--${name} requires a non-empty value.`);
97
+ }
98
+ }
99
+ return {
100
+ root,
101
+ ...(manifest === undefined ? {} : { manifestPath: path.resolve(root, manifest) }),
102
+ ...(testEvidence === undefined ? {} : { testEvidencePath: path.resolve(root, testEvidence) }),
103
+ ...(featureId === undefined ? {} : { featureId }),
104
+ ...(selectedPath === undefined ? {} : { path: selectedPath }),
105
+ maxCognitive,
106
+ signal,
107
+ };
108
+ }
109
+ export function createProductCommand(deps = {}) {
110
+ return {
111
+ spec: {
112
+ name: "product",
113
+ implementedBy: "commands/product.js",
114
+ summary: "Inspect declared features, evidence, ownership and complexity",
115
+ usage: "untangle product [connect [auto|spec-kit|openspec] [--dry-run]] [--root=PATH] [--manifest=PATH] [--feature=ID] [--path=PATH] [--require-complete] [--run-tests -- <vitest command argv>]",
116
+ details: [
117
+ "product connect [auto|spec-kit|openspec] reads supported local framework artifacts and explicit source references. --dry-run writes nothing; an explicit connection saves a source-bound proposed feature manifest and report under .untangle/sdd/. It runs no framework scripts or tests, replaces no declarations, and confirms no implementation or ownership.",
118
+ "Reads a declared feature map and current local files. No index or embedding provider is required. The default analysis executes no tests and writes no files.",
119
+ "--path connects one literal repository-relative search hit to every declared code, test, intent or ownership association. Matching features retain their complete code/test measurements and global shared-file coverage.",
120
+ "--draft --feature=ID --path=PATH shows a review draft on stdout when the manifest is missing and the literal file is accepted and fresh. It invents no owners, intent references, criteria or test paths, confirms no implementation, and writes no manifest.",
121
+ "Only --run-tests explicitly executes the supplied Vitest-compatible command argv without a shell. Untangle adds JSON reporter/output arguments and captures original output, full before/after source inventories, evidence and hashes in a unique OS-temporary directory. This is local execution capture, not authenticated evidence; inspect testRun.receiptPath. Default timeout: 120 seconds; stdout/stderr and JSON limits: 16 MiB each. No tests run automatically.",
122
+ "Vision/spec references, code/test selections, declared ownership, metrics and supplied source-bound test evidence stay inspectable. Semantic conformance and ownership authority are not independently proven.",
123
+ "Normal reports exit 0 even when evidence needs review. --require-complete exits 5 for every status except evidence_consistent; the report remains available.",
124
+ "Code and test metrics are separate. Shared files are reported explicitly; their union is not the sum of per-feature metrics. Agent hints identify missing evidence and bounded next actions.",
125
+ ],
126
+ flags: FLAGS,
127
+ examples: [
128
+ "untangle product connect auto --dry-run --format=json",
129
+ "untangle product connect spec-kit --format=json",
130
+ "untangle product connect openspec --format=json",
131
+ "untangle product --format=json",
132
+ "untangle product --feature=search.local --test-evidence=checks/unit.json",
133
+ "untangle product --require-complete --max-cognitive=15",
134
+ "untangle product --path=src/accounts/lookup.ts --format=json",
135
+ "untangle product --draft --feature=accounts.lookup --path=src/accounts/lookup.ts --format=json",
136
+ "untangle product --run-tests -- pnpm exec vitest run src/accounts/lookup.test.ts",
137
+ ],
138
+ exitCodes: [
139
+ [EXIT.ok, "Report produced; inspect its evidence status."],
140
+ [EXIT.operational, "Local analysis failed."],
141
+ [EXIT.usage, "Invalid arguments."],
142
+ [EXIT.gate, "--require-complete requested, but evidence is not consistent."],
143
+ [EXIT.cancelled, "Cancelled."],
144
+ ],
145
+ },
146
+ async run(ctx, args) {
147
+ if (args.positionals[0] === "connect")
148
+ return runSddConnection(ctx, args);
149
+ if (args.flags["dry-run"] !== undefined)
150
+ throw new UsageError("--dry-run is supported only by product connect.");
151
+ const format = enumFlag(args, "format", ["text", "json"], "text");
152
+ const options = productOptionsFrom(args, ctx.cwd, ctx.signal);
153
+ ctx.signal.throwIfAborted();
154
+ const execution = boolFlag(args, "run-tests")
155
+ ? await (deps.runTests ?? runProductTests)({
156
+ root: options.root,
157
+ command: args.positionals,
158
+ execute: executeProductTests,
159
+ signal: ctx.signal,
160
+ timeoutMs: numberFlag(args, "test-timeout") ?? 120_000,
161
+ })
162
+ : undefined;
163
+ if (ctx.signal.aborted && execution !== undefined)
164
+ note(ctx.io, `Explicit test run interrupted; receipt ${execution.run.receiptPath}`);
165
+ ctx.signal.throwIfAborted();
166
+ if (execution?.evidence !== undefined && execution.evidence !== null)
167
+ options.testEvidence = execution.evidence;
168
+ const report = await (deps.analyze ?? analyzeProductAlignment)(options);
169
+ ctx.signal.throwIfAborted();
170
+ if (boolFlag(args, "draft")) {
171
+ if (report.manifest.status !== "missing")
172
+ throw new UsageError("--draft requires a missing manifest; inspect the existing map instead of replacing its declarations.");
173
+ if (report.selection?.status !== "unmapped")
174
+ throw new UsageError("--draft requires a fresh accepted file; missing, ignored or changed paths cannot seed a declaration.");
175
+ report.draft = {
176
+ schemaVersion: 1,
177
+ owners: [],
178
+ features: [
179
+ {
180
+ id: options.featureId,
181
+ title: options.featureId,
182
+ stage: "planned",
183
+ review: "proposed",
184
+ intent: [],
185
+ owners: [],
186
+ code: { include: [options.path] },
187
+ tests: { include: [] },
188
+ criteria: [],
189
+ dependsOn: [],
190
+ },
191
+ ],
192
+ };
193
+ report.issues.push("Review draft only: extend the complete code boundary, declare vision/specification, owners, tests and acceptance criteria, and confirm implementation explicitly. No manifest was written.");
194
+ }
195
+ if (execution !== undefined) {
196
+ report.testRun = execution.run;
197
+ if (execution.run.status !== "completed") {
198
+ report.issues.push(`Explicit test run: ${execution.run.status}. ${execution.run.issue ?? "Inspect the immutable runner receipt."}`);
199
+ if (report.status !== "violated")
200
+ report.status = "incomplete";
201
+ }
202
+ }
203
+ line(ctx.io, format === "json" ? JSON.stringify(report, null, 2) : formatProductReport(report));
204
+ if (execution !== undefined && execution.run.status !== "completed")
205
+ return EXIT.operational;
206
+ if (execution !== undefined &&
207
+ (execution.run.exitCode !== 0 ||
208
+ execution.evidence?.tests.some((test) => test.status === "failed") === true))
209
+ return EXIT.gate;
210
+ return boolFlag(args, "require-complete") && report.status !== "evidence_consistent"
211
+ ? EXIT.gate
212
+ : EXIT.ok;
213
+ },
214
+ };
215
+ }
216
+ /** Keep evidence statuses and metrics visible in the agent-facing text view. */
217
+ export function formatProductReport(report) {
218
+ const lines = [
219
+ `untangle product — ${oneLine(report.root)}`,
220
+ `Status: ${report.status}; manifest ${oneLine(report.manifest.path)} (${report.manifest.status})`,
221
+ `Source tree: ${report.sourceTreeDigest}; inventory ${String(report.inventory.files)} files${report.inventory.truncated ? " (truncated)" : ""}`,
222
+ `Semantic conformance: ${report.semanticConformance}; ownership authority: ${report.ownershipAuthority}`,
223
+ ];
224
+ if (report.selection !== undefined)
225
+ lines.push(`Selected path: ${oneLine(report.selection.path)} (${report.selection.status}); features: ${report.selection.matches.map((match) => `${oneLine(match.featureId)} [${match.roles.join(", ")}]`).join("; ") || "none"}`);
226
+ if (report.testRun !== undefined)
227
+ lines.push(`Explicit test run: ${report.testRun.status}; exit=${String(report.testRun.exitCode)}; receipt ${oneLine(report.testRun.receiptPath)}`);
228
+ for (const feature of report.features) {
229
+ lines.push("", `${oneLine(feature.id)} — ${oneLine(feature.title)}: ${feature.status}`);
230
+ lines.push(` Declaration: ${feature.stage}, ${feature.review}; owners ${feature.ownership.map((owner) => `${oneLine(owner.id)}:${owner.status}`).join(", ") || "none"}`);
231
+ lines.push(` Code: ${String(feature.code.files.length)} files, complete=${String(feature.code.complete)}; tests: ${String(feature.tests.files.length)} files, complete=${String(feature.tests.complete)}`);
232
+ if (feature.code.metrics !== null) {
233
+ const metrics = feature.code.metrics;
234
+ lines.push(` Cognitive: execution_unit=${String(metrics.cognitive.execution_unit)}, self=${String(metrics.cognitive.self)}, top_level=${String(metrics.cognitive.top_level)}; ${metrics.metricsVersion}/${metrics.cognitiveAlgorithm}`);
235
+ }
236
+ lines.push(` Test evidence: ${feature.testEvidence.status} (${String(feature.testEvidence.passed)} passed, ${String(feature.testEvidence.failed)} failed, ${String(feature.testEvidence.skipped)} skipped); ${feature.testEvidence.proof}`);
237
+ for (const criterion of feature.criteria) {
238
+ lines.push(` Criterion ${oneLine(criterion.id)}: ${criterion.status} — ${oneLine(criterion.description)}`);
239
+ }
240
+ for (const hint of feature.agentHints) {
241
+ lines.push(` ${hint.severity.toUpperCase()} ${oneLine(hint.code)}: ${oneLine(hint.message)}`);
242
+ lines.push(` Action: ${oneLine(hint.suggestedAction)}; paths: ${hint.paths.map(oneLine).join(", ") || "none"}`);
243
+ if (hint.search !== undefined)
244
+ lines.push(` Search: ${JSON.stringify(hint.search)}`);
245
+ }
246
+ for (const issue of feature.issues)
247
+ lines.push(` Issue: ${oneLine(issue)}`);
248
+ }
249
+ lines.push("", `Coverage: ${String(report.coverage.mappedCodeFiles)} mapped / ${String(report.coverage.measuredCodeFiles)} measured code files; ${String(report.coverage.unmappedCodeFileCount)} unmapped; ${String(report.coverage.sharedFiles.length)} shared files`);
250
+ for (const issue of report.issues)
251
+ lines.push(`Issue: ${oneLine(issue)}`);
252
+ for (const limitation of report.limitations)
253
+ lines.push(`Limit: ${oneLine(limitation)}`);
254
+ if (report.draft !== null)
255
+ lines.push(`Review draft (not written): ${JSON.stringify(report.draft)}`);
256
+ return lines.join("\n");
257
+ }
258
+ function oneLine(value) {
259
+ return value.replace(/[\r\n]/gu, " ");
260
+ }
261
+ export const productCommand = createProductCommand();
262
+ //# sourceMappingURL=product.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/commands/product.ts"],"names":[],"mappings":"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"}