@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
package/NOTICE ADDED
@@ -0,0 +1,90 @@
1
+ # NOTICE
2
+
3
+ Copyright (C) 2026 Luke Bölling and contributors.
4
+
5
+ This attribution covers original Untangle work. Contributors retain copyright in
6
+ their contributions. Third-party packages, grammars and other materials retain
7
+ their own copyright holders, licenses and notices; this line does not replace them.
8
+
9
+ ## License — binding decision
10
+
11
+ Untangle is licensed under the **GNU Affero General Public License, Version 3
12
+ (AGPL-3.0-only)**. See [`LICENSE`](./LICENSE).
13
+
14
+ This decision is **final, not provisional**, and was explicitly instructed by
15
+ the project owner. No contributor, agent or tool may change it without a new
16
+ explicit instruction.
17
+
18
+ The repository-wide license covers Untangle's first-party source code, scripts,
19
+ tests, fixtures, configuration, documentation, website and brand artwork, including
20
+ the logo and 3D yarn illustrations. Every workspace `package.json` declares
21
+ `"license": "AGPL-3.0-only"`. There is no separately licensed enterprise component
22
+ or separate permissive license for documentation or brand assets.
23
+
24
+ Third-party code, embedded grammars, dependency assets and their notices retain
25
+ their original licenses. Their inclusion does not relicense those works. The
26
+ repository license does not grant trademark rights or change the license of a
27
+ repository analyzed with Untangle. See the repository's `docs/LICENSING.md` for
28
+ scope and verification details.
29
+
30
+ This resolves the license question left open in `vision.md` §14 and completes
31
+ `product.md` §16, item 2.
32
+
33
+ ## Rationale
34
+
35
+ - **Network copyleft fits the intended product model.** AGPL §13 sets source
36
+ availability requirements for modified versions used through a computer network.
37
+ The current local CLI/stdio-MCP entry and future shared-server modes share the
38
+ same license.
39
+ - **Local-first analysis has a clear boundary.** Running Untangle against a codebase
40
+ does not replace that codebase's own license with Untangle's license.
41
+ - **First-party components share one license.** Implemented components and future
42
+ official plugins use this repository's licensing policy. Planned integrations do
43
+ not establish implemented or published products.
44
+
45
+ ## Deliberately accepted consequence
46
+
47
+ The project deliberately chooses AGPL rather than a permissive embedding license.
48
+ Redistribution, modifications and combined works must be assessed against the
49
+ actual terms in `LICENSE`, including applicable Corresponding Source requirements.
50
+ No permissive exception, commercial dual license or special contract-only package
51
+ license is granted or promised by this notice.
52
+
53
+ ## Dependencies
54
+
55
+ Third-party runtime dependencies are checked against the allowlist in
56
+ `scripts/check-licenses.mjs`. Their licenses and copyright notices remain unchanged
57
+ and traceable through package `THIRD_PARTY_LICENSES.md` files, grammar provenance,
58
+ the lockfile and release SBOM. The allowlist includes MIT / Apache-2.0 / BSD / ISC
59
+ and other explicitly listed licenses; it is not a license grant for dependencies.
60
+
61
+ The allowlist in `scripts/check-licenses.mjs` applies to **dependencies**, not
62
+ workspace packages. Untangle's own packages carry AGPL-3.0-only and are excluded
63
+ from that check.
64
+
65
+ ## Clean room
66
+
67
+ Untangle is an independent implementation with its own data models, APIs, tool
68
+ names, tests and sources. Feature ideas may be derived from publicly observable
69
+ behavior and generally known techniques. Third-party source code is not copied,
70
+ including from AGPL projects even where the license would permit it.
71
+
72
+ ## Contribution terms
73
+
74
+ Pull requests are welcome under the repository's existing AGPL-3.0-only license.
75
+ No separate CLA, copyright assignment or DCO sign-off is required. Contributors
76
+ must have the right to submit their work under those terms. See CONTRIBUTING.md.
77
+
78
+ ## Release decisions
79
+
80
+ - [x] Copyright attribution: Luke Bölling, with contributors retaining their rights.
81
+ - [x] Contributions use AGPL-3.0-only without an additional CLA or DCO gate.
82
+
83
+ ## Open legal items before public beta
84
+
85
+ - [ ] Trademark search for the product name `Untangle`.
86
+ - [ ] Registration and legal review of the npm scope `@untangle-code`.
87
+ - [ ] Verify source availability and notices for each released network daemon/server
88
+ mode (WP-59). The current stdio MCP `untangle_about` already reports the license,
89
+ source repository and build commit when supplied; metadata alone does not prove
90
+ that a concrete deployed version's source is available.
package/README.md CHANGED
@@ -1,3 +1,425 @@
1
- # Temporary Holding Version
1
+ # @untangle-code/cli
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Untangle's CLI and MCP entry point: the **`untangle`** binary. It connects local search,
4
+ code complexity and declared feature responsibility. Requires Node.js **`^22.13.0 || >=24.0.0`**.
5
+
6
+ The first public release is being prepared. The recorded public lookup on 2 November 2026
7
+ returned `E404` for `@untangle-code/cli@0.1.0`; this is not a current availability or scope-rights
8
+ claim. Until publication, use an available checkout. One CLI tarball does not publish its
9
+ Untangle dependencies. The [release guide](https://github.com/lboel/untangle/blob/main/docs/RELEASE.md)
10
+ separates local acceptance, remote matrix and actual publication.
11
+
12
+ The [agent workflow](https://github.com/lboel/untangle/blob/main/docs/AGENT_WORKFLOW.md)
13
+ connects MCP, search, complete feature scopes and real tests, with a copyable task brief for
14
+ spec-driven development and agentic engineering.
15
+
16
+ ## Installed CLI — after registry publication
17
+
18
+ After `@untangle-code/cli@0.1.0` and its Untangle dependencies are published to npm, use
19
+ this version-pinned entry point without a global installation. Replace the project path:
20
+
21
+ ```bash
22
+ npm exec --yes --package=@untangle-code/cli@0.1.0 -- \
23
+ untangle complexity --root=/absolute/path/to/project --format=json
24
+
25
+ npm exec --yes --package=@untangle-code/cli@0.1.0 -- \
26
+ untangle init --root=/absolute/path/to/project --offline --dry-run --format=json
27
+ ```
28
+
29
+ `npm exec` may download the package. Direct complexity analysis needs no search services;
30
+ the offline init dry-run previews configuration without writing files or probing services.
31
+ The checkout helper below is a separate way to build and try an unpublished version.
32
+
33
+ ## First checkout result
34
+
35
+ From the checkout root with **pnpm 10.34.5**:
36
+
37
+ ```bash
38
+ pnpm setup:local --project=/absolute/path/to/your/project
39
+ ```
40
+
41
+ This explicit helper checks pnpm, installs frozen dependencies, builds the checkout and
42
+ measures the target directly. The first report needs no index, Qdrant, Ollama, LLM or feature
43
+ map. Without `--project` it analyzes Untangle. Unanalyzed sources/reasons remain visible.
44
+ It writes no target configuration, feature declarations or ignore rules; registers no host,
45
+ changes no shell profile and starts no tests, global install or services. It prints follow-up
46
+ commands and an MCP template using actual absolute Node/CLI/project paths.
47
+
48
+ ```bash
49
+ pnpm setup:local --project=/absolute/path/to/project --dry-run
50
+ pnpm setup:local --project=/absolute/path/to/project --skip-build --format=json
51
+ ```
52
+
53
+ Dry-run executes nothing. Skip-build uses existing Dist files without proving they match
54
+ edited sources. JSON includes plan, executed steps, analysis, next commands and MCP template.
55
+ The helper targets Linux/macOS and belongs to the checkout, not the installed CLI package.
56
+ For later calls in the same shell:
57
+
58
+ ```bash
59
+ UNTANGLE_CLI="$PWD/apps/cli/dist/index.js"
60
+ untangle() { node "$UNTANGLE_CLI" "$@"; }
61
+ cd /path/to/your/project
62
+ untangle --help
63
+ ```
64
+
65
+ An agent host uses the MCP template rather than this shell function. Standalone `changes`
66
+ and `gate` commands are not implemented; `complexity --max-*` thresholds are available.
67
+
68
+ ## Workflow
69
+
70
+ ```bash
71
+ untangle complexity # Direct AST analysis, no services/index
72
+ untangle init --offline --dry-run # Inspect local context without writing
73
+ untangle product # Declared features, ownership and code/test metrics
74
+ untangle scan # Own metrics and explicitly enabled extensions
75
+ untangle init --interactive # Guided configuration and optional tool setup
76
+ untangle product connect auto --dry-run --format=json
77
+ untangle graph features # Local interactive 3D feature/code map
78
+ untangle doctor # Inspect config, parsers, services and index
79
+ untangle index # Index/graphs; selected storage and embedder
80
+ untangle query "..." # Hybrid, lexical, symbol, semantic or grep-like
81
+ untangle graph visualize --out=graph.html
82
+ untangle mcp --stdio # Local server for agent hosts
83
+ ```
84
+
85
+ New projects store their index in LanceDB under `.untangle/index/lancedb`, without a database
86
+ service. `init --storage=qdrant` selects Qdrant; existing Qdrant configurations keep that backend.
87
+ Lexical/symbol retrieval needs a compatible index but no query embedding.
88
+ `index --embedder=offline` builds one without Ollama; its deterministic vectors have no
89
+ language-model semantics. Semantic retrieval needs its configured embedding provider.
90
+ Noninteractive init starts no services/models. Explicit scan can run enabled analyzers;
91
+ container provisioning requires separate consent.
92
+
93
+ Guided init previews its file/command plan and separates preparation from execution. Offers
94
+ include embedded LanceDB (default), local Qdrant/Ollama, local/existing SonarQube, a hash-verified Sentrux binary/MCP
95
+ template and custom SARIF/JUnit/JSON extensions. Tokens use environment-variable names, not
96
+ project-stored values. Existing files and foreign containers are preserved. Tool installation
97
+ is not scan evidence.
98
+
99
+ The map stores HTML/JSON under `<project>/.untangle/feature-map/`. Its 3D positions, perspective,
100
+ rotation, zoom, filters, neighbor selection and accessible list inspect declared relationships.
101
+ Complete feature metrics and gaps stay visible independently of rendering caps. Missing
102
+ features are not invented. Spatial distance is not semantic proof. Controls are English;
103
+ inspected names/source content are preserved. JSON, pipes and dry-run never open a TUI;
104
+ `init --no-interactive --offline --format=json` remains scriptable.
105
+
106
+ ## Product context in init
107
+
108
+ Init inspects candidates for vision, specification and product descriptions from the accepted
109
+ scan. Filename roles are provisional; ambiguity remains open. Select other paths explicitly:
110
+
111
+ ```bash
112
+ untangle init /path/to/project --vision=docs/vision.md --spec=docs/requirements.md --offline --dry-run --format=json
113
+ ```
114
+
115
+ Paths are project-relative. Offline suppresses network probes; document inspection needs no
116
+ provider/LLM/embeddings. `findings.productContext` contains paths, content hashes, sections,
117
+ selection reasons and local references, with `needs_context`, `needs_selection`,
118
+ `ready_for_review` or `incomplete`. Vision/specification are required; product description is
119
+ optional. Ignore/security/read limits still apply and missing/unassessed sources are explicit.
120
+
121
+ After 256 references, `referencesTruncated: true` marks incomplete inspection. Parse limits
122
+ are 16,384 UTF-16 units per line, 4,096 `[` openings and 2,048 heading candidates per document.
123
+ Exceeded budgets retain the hash but mark `not_assessed`/`incomplete`.
124
+
125
+ Even `ready_for_review` leaves `alignment.status: unverified` and empty feature/ownership
126
+ review drafts. A `present` reference proves only its accepted path/hash, not anchors, behavior
127
+ or ownership. Selected readable documents become markdown `[[contextArtifacts]]` in the TOML
128
+ proposal. Ordinary Markdown search works after indexing; independent artifact search remains
129
+ unimplemented in CLI/MCP.
130
+
131
+ Configuration-only init writes no documents/Journey data; dry-run writes nothing. Differing
132
+ configuration needs `--force` or explicit guided replacement. `--feature-map=docs/features.json`
133
+ selects an existing declared map; otherwise init looks for `untangle.features.json`. That
134
+ inspection neither writes nor confirms declarations and leaves document-context assessment
135
+ independent. It adds no MCP init tool.
136
+
137
+ ## Concrete SDD connectors
138
+
139
+ ```bash
140
+ untangle product connect auto --dry-run --format=json
141
+ untangle product connect spec-kit --format=json
142
+ untangle product connect openspec --format=json
143
+ ```
144
+
145
+ Spec Kit/OpenSpec adapters read supported local specs, plans, tasks and change artifacts.
146
+ They record actual requirement/task identities, checked state and explicit file-reference
147
+ provenance/hashes without running framework scripts. An explicit connection saves versioned
148
+ `.untangle/sdd/` report/manifest files after source revalidation; dry-run writes nothing.
149
+ Drafts stay `planned`/`proposed`, without invented owners, dependencies or passing-test claims.
150
+ Inspect and complete the returned manifest, then pass its real path to `product --manifest`
151
+ and `graph features --feature-map`. Existing declarations are never silently merged/replaced.
152
+ The spec-driven TUI offers detected workspaces when no explicit feature manifest is selected,
153
+ and writes only after final confirmation.
154
+ [Supported artifact layouts and limits](https://github.com/lboel/untangle/blob/main/docs/SDD_CONNECTORS.md).
155
+
156
+ ## Declared feature alignment
157
+
158
+ ```bash
159
+ untangle product --root=/path/to/project --format=json
160
+ untangle product --path=src/accounts/lookup.ts
161
+ untangle product --draft --feature=accounts.lookup --path=src/accounts/lookup.ts --format=json
162
+ untangle product --path=src/accounts/lookup.ts --run-tests -- pnpm exec vitest run src/accounts/lookup.test.ts
163
+ untangle product --test-evidence=.untangle/product-tests.json --max-cognitive=15 --require-complete --format=json
164
+ ```
165
+
166
+ The default map is `untangle.features.json`; `--manifest` selects another in-root path.
167
+ The index-free report connects declared IDs to exact vision/spec headings, owners and full
168
+ code/test scopes. Code/tests stay separate, shared sources count once in the overall union,
169
+ and missing/partial sources remain gaps.
170
+
171
+ `--path` accepts a literal search hit. `selection.matches` reports every feature association
172
+ as code/test/intent/ownership while retaining complete measurements, including helpers.
173
+ MCP exposes `untangle_product({path: "src/accounts/lookup.ts"})`.
174
+
175
+ With a missing map, `--draft --feature=ID --path=PATH` supplies an unreviewed **`report.draft`**,
176
+ not an entire-report manifest. Review/extend all code, tests, intent and owners before saving;
177
+ the command writes nothing and invents no owner.
178
+
179
+ Default analysis executes no tests. `--test-evidence` reads a real report bound to the entire
180
+ accepted inventory before/after execution; `testNames` can identify exact criteria cases.
181
+ Only explicit `--run-tests -- <argv>` executes a Vitest-compatible command without a shell
182
+ inside the target. The runner must exist; Untangle installs none. Reporter/output arguments
183
+ are supplied by Untangle and caller overrides rejected; other test frameworks are unsupported.
184
+
185
+ `testRun.receiptPath` records inventories, actual argv/exit, original reports and hashes in an
186
+ exclusive OS-temporary directory; archive it for durable evidence. Timeout defaults to 120s,
187
+ with `--test-timeout` at most one hour. stdout/stderr share 16 MiB; JSON has another 16 MiB.
188
+ Timeout/abort stop the child tree. Changed sources are `stale`, failures `bound_failed`, skips
189
+ satisfy no criterion. Failing tests exit 5; runner errors exit 1. Binding authenticates neither
190
+ external toolchain nor runner. `--run-tests` and `--test-evidence` are mutually exclusive;
191
+ MCP remains read-only.
192
+
193
+ Default `--max-cognitive=15` is per execution unit. Normal report exit 0 can include open
194
+ review; `--require-complete` exits 5 except for `evidence_consistent`. Missing maps yield
195
+ `needs_manifest`. Consistent declarations prove neither semantic behavior nor owner identity.
196
+ The [feature contract](https://github.com/lboel/untangle/blob/main/docs/FEATURE_ALIGNMENT.md)
197
+ details source binding, scopes and budgets. Untangle's own map has proposed reviews/declared
198
+ roles, not human approval or an objective feature-richness score.
199
+
200
+ ## Command status
201
+
202
+ | Command | Status and scope |
203
+ |---|---|
204
+ | `init` | Implemented: commented configuration, context inventory, optional guided setup. |
205
+ | `query` | Implemented: hybrid/lexical/symbol/semantic/pattern retrieval; scoped profile auto-selection. |
206
+ | `complexity` | Implemented: direct measurements without services/index, threshold exit 5. |
207
+ | `product` | Implemented: declared alignment, separate metrics, source-bound evidence and optional gate. |
208
+ | `product connect` | Implemented: native local Spec Kit/OpenSpec imports into proposed manifests. |
209
+ | `scan` | Implemented: own analysis, enabled extensions and explained failures; explicit container consent. |
210
+ | `doctor` | Implemented: read-only checks, exactly one next step per failed check. |
211
+ | `watch` | Implemented: complexity deltas; optional serialized index refresh. |
212
+ | `extensions` | Implemented: analyzer manifest/import/activation/execution. |
213
+ | `index` | Implemented: complete core pipeline, incremental/dry-run/offline modes. |
214
+ | `graph` | Implemented: file/symbol context, frontend/FastAPI boundaries, offline explorers/3D feature map. |
215
+ | `flow` | Implemented: symbol paths, impact, entry points and confidence. |
216
+ | `mcp` | Implemented: stdio runtime; specified unbuilt capabilities explicitly unavailable. |
217
+
218
+ Command specifications/`--help` are executable truth. Registered but unbuilt MCP tools return
219
+ `FEATURE_UNAVAILABLE`. An explicit-root MCP template:
220
+
221
+ ```json
222
+ {
223
+ "mcpServers": {
224
+ "untangle": {
225
+ "command": "/absolute/path/to/node",
226
+ "args": [
227
+ "/absolute/path/to/untangle/apps/cli/dist/index.js",
228
+ "mcp",
229
+ "--stdio",
230
+ "--root=/path/to/your/project"
231
+ ]
232
+ }
233
+ }
234
+ }
235
+ ```
236
+
237
+ ## Exit codes and streams
238
+
239
+ | Code | Meaning |
240
+ |---|---|
241
+ | 0 | Success/report produced; inspect report status. |
242
+ | 1 | Operational error: unreadable file, invalid configuration, adapter/runner failure. |
243
+ | 2 | Invalid arguments, command or option. |
244
+ | 3 | Capability unimplemented, not a user error. |
245
+ | 4 | Environment/index unavailable, unconfirmed required freshness or incomplete retrieval. |
246
+ | 5 | Analysis/evidence threshold or explicit tests failed. |
247
+ | 130 | Cancelled by SIGINT/SIGTERM. |
248
+
249
+ Unavailable capability, environment and quality-gate failures stay distinct without parsing
250
+ stderr. MCP tool errors remain structured on a live connection rather than terminating its
251
+ server. Scan can exit 0 with individual extension failures in its report.
252
+
253
+ **Payload to stdout, human diagnostics to stderr.** JSON also contains structured warnings,
254
+ freshness and skipped data. JSONL begins with a header; hits are under `hit`:
255
+
256
+ ```bash
257
+ untangle query "retry" --format=jsonl | jq -r 'select(.kind == "hit") | .hit.filePath'
258
+ ```
259
+
260
+ Inspect the search exit code too; `set -o pipefail` prevents jq from hiding it.
261
+
262
+ ## Query
263
+
264
+ ```bash
265
+ untangle query "where is a payment triggered" # hybrid
266
+ untangle query "charge" --mode=symbol --explain
267
+ untangle query "user id" --mode=lexical --require-fresh
268
+ untangle query "renew a token" --mode=semantic
269
+ untangle query "charge" --context --linked
270
+ untangle query --regex "await\s+fetch\(" -C 2 --path='src/**' --exclude='**/*.test.ts'
271
+ ```
272
+
273
+ `--explain` exposes raw score values, weights and contributions, helping investigate both
274
+ high and missing rankings. Auto embedding selection reads bounded `.untangle/index-states-v1/`
275
+ records scoped to workspace/repository/ref/profile and generation-bound current pointers.
276
+ Multiple refs/profiles/logical repositories on one physical root remain separate. Incompatible
277
+ selected spaces require explicit `service`/`offline` rather than silently searching a subset.
278
+ The old `.untangle/index-state.json` is read-only migration fallback.
279
+
280
+ Every query checks content hashes and reports freshness/time/reasons per repository.
281
+ `--require-fresh` requires confirmed currency; `--refresh` updates stale checked-out refs first,
282
+ with stderr progress. `watch --index` repeats serially at its reconciliation interval.
283
+ Historical unchecked-out refs remain `unknown`; refresh cannot assign them the current tree.
284
+ MCP exposes the same freshness and read-only `requireFresh`.
285
+
286
+ Lexical uses sparse/BM25, symbol uses symbols, semantic uses dense retrieval. The first two
287
+ need no query embedding but do need a compatible index. Offline indexing needs no Ollama and
288
+ claims no model semantics. Hybrid fuses independent paths, with a ten-second per-branch budget
289
+ preventing a hung service from hiding ready hits. Partial failures preserve hits/warnings on
290
+ stdout and exit 4. Versioned identifier tokenization requires legacy migration/reindex;
291
+ refresh handles this. Stale/incomplete contexts are not complete Journey measurements.
292
+
293
+ Strict abstention is default: insufficient evidence clears hits. `--abstention=evidence`
294
+ retains candidates/verdict for inspection without overriding warnings/freshness/exit status.
295
+ MCP partial errors retain data under `error.details.data`.
296
+
297
+ ## Observe search effort through MCP
298
+
299
+ An explicitly started Search Journey connects a caller-declared feature ID to actual
300
+ attempts and a confirmed target. Effort remains separate from complexity; it proves neither
301
+ semantic correctness nor causes of findability and produces no combined score.
302
+
303
+ ```jsonc
304
+ // Send to untangle_search_session; retain session.sessionId.
305
+ {
306
+ "action": "start",
307
+ "goal": "Find profile card rendering and its tests",
308
+ "featureId": "profile.cards.presentation",
309
+ "executionContext": {
310
+ "agentModel": "model-with-exact-version",
311
+ "harness": "my-harness-v2",
312
+ "searchStrategy": "hybrid-then-symbol-and-graph-v1",
313
+ "taskClass": "find-feature-code-and-tests",
314
+ "taskMix": "fixed-eight-task-suite-v1",
315
+ "priorContext": "fresh-session-no-open-files"
316
+ }
317
+ }
318
+ // Send to untangle_search.
319
+ { "query": "profile card component", "session": { "id": "<session-id>", "step": 1 } }
320
+ // Confirm the actual target through untangle_search_session.
321
+ { "action": "complete", "sessionId": "<session-id>", "target": { "filePath": "src/profile/ProfileCard.tsx" } }
322
+ { "action": "report" }
323
+ ```
324
+
325
+ Optional `executionContext` is entirely caller-declared. When present it requires model,
326
+ harness, strategy and task class; task mix/prior context are optional. Values are trimmed
327
+ identifiers of at most 256 UTF-16 units. No hidden environment inference occurs. Different
328
+ contexts create separate cohorts; absent conditions remain `not-recorded`/`uncontrolledDimensions`.
329
+ Even complete declarations do not independently prove controlled conditions.
330
+
331
+ Actions are `start`, `get`, `observe`, `complete`, `abandon`, `report`. Observe records explicit
332
+ `open-file`, `open-symbol`, `graph-query`, `other-tool` steps. Completion needs at least one
333
+ search attempt and an explicit file/chunk/symbol target. `acceptedAttemptId` can bind a specific
334
+ attempt. Steps are positive integers ≤128; numbered/unnumbered attempts cannot mix. Identical
335
+ repeated steps are idempotent; differing data conflicts. Limits: 128 attempts and 512 navigation
336
+ events per Journey.
337
+
338
+ Successful recording returns `searchObservation.status: recorded` and `attemptId`. Optional
339
+ recording failure preserves search with `not_recorded`/`SEARCH_SESSION_RECORDING_FAILED`.
340
+ Stale/failed/incomplete retrieval is not full evidence. Cohorts separate ranker, ranking
341
+ context, hit/candidate limits, profile, generation and immutable corpus revision. Legacy
342
+ incomplete revisions remain readable/insufficient; fewer than three compatible completions
343
+ set `sufficientEvidence: false`, without independently confirming caller conditions.
344
+
345
+ `cohorts`/feature search mappings retain completed-task views. `outcomeCohorts` adds active,
346
+ completed and abandoned sessions with effort/reasons. `terminalCompletionRate` uses completed
347
+ plus abandoned as denominator and is null without terminals. Active sessions stay separate;
348
+ easy successes do not hide abandoned effort. Feature mappings require explicit IDs/unambiguous
349
+ target evidence and do not average incompatible metric versions.
350
+
351
+ Recording is local/opt-in. Default `retainText: false` uses separate workspace HMAC domains
352
+ for goals, feature IDs, queries and context. Candidate paths, ranks/scores and declared tool
353
+ metadata/reason codes remain; source/chunk content and free error/abort text are not retained.
354
+ `retainText: true` additionally retains those texts. The separate key is
355
+ `.untangle/product-complexity/fingerprint.key`. This is neither encryption nor anonymity;
356
+ access to full local state permits testing guessed values.
357
+ [Context, denominators and privacy](https://github.com/lboel/untangle/blob/main/docs/SEARCH-JOURNEY-CONTEXT.md)
358
+ do not imply automatic time trends, ROI or productivity measurement.
359
+
360
+ ## Decisions
361
+
362
+ - The custom closed argument parser rejects unknown options instead of silently treating
363
+ typos as positional inputs. Help is generated from the option specification.
364
+ - Doctor has a per-check deadline (`--timeout`, default 15s). Adapter retry/backoff suited
365
+ to indexing must not leave diagnosis hanging. Deadline is a failed check; outer abort is
366
+ whole-command exit 130/MCP `CANCELLED`.
367
+ - A failed retrieval target is a failure, not empty success. Provider-unavailable data stays
368
+ visible in warnings/ledger and query exits 4.
369
+ - Query has its own default 60s deadline, allowing model warm-up without indefinite hanging.
370
+ - Main explicitly exits after flushing streams; it does not wait for lingering adapter work
371
+ once the final outcome is known.
372
+ - MCP is another interface to the same analysis, not a second implementation. The public
373
+ CLI export owns runtime; private MCP app only re-exports it. Canonical roots, JSON-RPC-only
374
+ stdout, validated inputs/envelopes/data, disjoint success/failure, explicit availability,
375
+ hard graph/flow/impact/visualization budgets and in-flight cancellation have contract tests.
376
+
377
+ ## Known limits
378
+
379
+ - Each search requires compatible embedding spaces; explicit profiles search their own
380
+ collection. Profile changes need a matching index.
381
+ - Query searches the index, not disk; absent indexes exit 4 rather than claim no hits.
382
+ - Complexity measures only available deep adapters; other sources remain explained skips.
383
+ - Graph context is generation-bound. Context/linked data uses direct/exact resolved edges
384
+ from the same generation without changing rank/count. New payloads include `generation_id`
385
+ and `metrics_version`; missing legacy values remain `unknown`, requiring one deliberate
386
+ `index --no-incremental --no-resume`, without attaching an unrelated current graph.
387
+ - Damaged syntax trees contribute no complexity numbers because unreliable scopes/hotspots
388
+ are worse than explicitly incomplete coverage.
389
+ - Retrieval depends on parsers, chunks, model and ranking. Missing hits do not prove absent
390
+ implementation. Real acceptance covers targeted identifier/language/freshness/migration/
391
+ outage cases, not complete recall.
392
+ - Ownership and feature richness are not automatically proven. Declared IDs and confirmed
393
+ target observations remain caller evidence. The general capability/reduce-complexity loop
394
+ is unimplemented; embedding similarity is not behavior equivalence.
395
+
396
+ ## Combined analysis report
397
+
398
+ ```bash
399
+ untangle scan --root=/path/to/project --format=json
400
+ untangle scan --feature=accounts.lookup --format=json
401
+ ```
402
+
403
+ Scan runs own analysis and enabled extensions, separating own metrics, external evidence and
404
+ explained omissions. Without `--yes`, no container provisioning occurs; with it, resources are
405
+ shown on stderr first and license gates remain. Exit 0 means report produced, even if some
406
+ extensions failed. JSON retains run status, provenance, findings and diagnostics.
407
+
408
+ `--feature` adds `featureAlignment`, not a smaller repository/analyzer scan. Explicit
409
+ `--manifest`/`--test-evidence` require a feature and execute no tests. Sentrux/Sonar/other tools
410
+ use reviewed definitions in the user profile. Repository metrics stay `repository_context`;
411
+ file/symbol findings attach only through real paths. Values are neither summed with own metrics
412
+ nor apportioned into features. Sonar retrieval proves no analysis of the current commit.
413
+ [Provider boundaries](https://github.com/lboel/untangle/blob/main/docs/ANALYZER-FEATURE-WORKFLOW.md).
414
+
415
+ Complexity/scan totals use `totalsReading: execution_unit`: inclusive outer functions plus
416
+ self contributions outside them, without re-adding nested functions. `executionUnits` counts
417
+ all functions; `executionUnitRoots` counts outer ones. Legacy double-counted totals require a
418
+ new measured baseline.
419
+
420
+ ## License
421
+
422
+ **AGPL-3.0-only.** The tarball includes [`LICENSE`](./LICENSE), [`NOTICE`](./NOTICE),
423
+ [`THIRD_PARTY_LICENSES.md`](./THIRD_PARTY_LICENSES.md) and corresponding TypeScript under `src/`.
424
+ A README is not a substitute for the full license copy. Repository:
425
+ <https://github.com/lboel/untangle>.