@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,209 @@
1
+ /**
2
+ * Probing the two pieces of infrastructure Untangle needs.
3
+ *
4
+ * READ-ONLY, ON PURPOSE. `HttpProbePort` can issue a GET and nothing else, so
5
+ * `init` is structurally incapable of changing a service it finds — which is
6
+ * what spec.md §3.2 demands of External Infrastructure mode ("Untangle DARF in
7
+ * diesem Modus keine fremden Prozesse oder Container verändern").
8
+ *
9
+ * WHICH URLS ARE PROBED AT ALL IS NOT DECIDED HERE ANY MORE (WP-222). That
10
+ * rule lives in `cli/vector-store-policy.ts` and is the SAME rule
11
+ * `untangle doctor` obeys. It used to be written out twice — once here, once
12
+ * (by omission) in `doctor` — and the two disagreed: `init` refused upstream's
13
+ * default port 6333 citing spec.md §3.2, while `doctor` fell back onto it,
14
+ * found the foreign instance living there and reported it as healthy. Two
15
+ * commands of one tool, two answers to a safety question. One rule, one
16
+ * file, one answer.
17
+ *
18
+ * NOT FINDING EITHER SERVICE IS NOT AN ERROR (WP-125): the configuration is
19
+ * written regardless, and the command names exactly one next step.
20
+ */
21
+ import { compareCodepoints } from "@untangle-code/domain";
22
+ import { MANAGED_QDRANT_URL, qdrantProbePlan } from "../../cli/vector-store-policy.js";
23
+ /** Native Ollama probe target (spec.md §3.1). */
24
+ export const DEFAULT_OLLAMA_URL = "http://127.0.0.1:11434";
25
+ /**
26
+ * Managed Qdrant REST port (spec.md §3.1) — re-exported, NOT redefined. The
27
+ * value belongs to the shared policy; a second copy here is exactly how the
28
+ * two commands drifted apart in the first place.
29
+ */
30
+ export const DEFAULT_QDRANT_URL = MANAGED_QDRANT_URL;
31
+ /**
32
+ * Reads `/api/tags` into the embedding models it describes.
33
+ *
34
+ * The provider reports `capabilities`, `embedding_length` and
35
+ * `context_length` per model, so the vector width is READ, never guessed and
36
+ * never obtained by sending the model something to embed. A model that
37
+ * predates the `capabilities` field is still recognised by the presence of an
38
+ * `embedding_length`, which only embedding models carry.
39
+ */
40
+ export function readEmbeddingModels(payload) {
41
+ if (typeof payload !== "object" || payload === null) {
42
+ return [];
43
+ }
44
+ const models = payload.models;
45
+ if (!Array.isArray(models)) {
46
+ return [];
47
+ }
48
+ const found = [];
49
+ for (const raw of models) {
50
+ if (typeof raw !== "object" || raw === null) {
51
+ continue;
52
+ }
53
+ const name = typeof raw.name === "string" ? raw.name : undefined;
54
+ if (name === undefined || name.length === 0) {
55
+ continue;
56
+ }
57
+ const capabilities = Array.isArray(raw.capabilities)
58
+ ? raw.capabilities.filter((item) => typeof item === "string")
59
+ : [];
60
+ const details = typeof raw.details === "object" && raw.details !== null ? raw.details : {};
61
+ const dimensions = positiveInteger(details.embedding_length);
62
+ const contextLength = positiveInteger(details.context_length);
63
+ const isEmbedding = capabilities.includes("embedding") || dimensions !== undefined;
64
+ if (!isEmbedding) {
65
+ continue;
66
+ }
67
+ found.push({
68
+ name,
69
+ ...(dimensions === undefined ? {} : { dimensions }),
70
+ ...(contextLength === undefined ? {} : { contextLength }),
71
+ });
72
+ }
73
+ found.sort((a, b) => compareCodepoints(a.name, b.name));
74
+ return found;
75
+ }
76
+ /**
77
+ * Chooses one embedding model out of what the provider actually has.
78
+ *
79
+ * The rule, in order: the widest context window first, because a code chunk
80
+ * that does not fit is a chunk that gets truncated; then the widest vector,
81
+ * because that is the model with more to say; then codepoint order, so the
82
+ * decision never depends on the order the provider happened to list its
83
+ * models in. `preferred` (an explicit user choice) short-circuits all of it.
84
+ *
85
+ * Deliberately NOT "whatever the product default is called": on a machine
86
+ * that has three embedding models and not the default one, silently falling
87
+ * back to a name that is not installed produces a configuration that fails on
88
+ * first use.
89
+ */
90
+ export function chooseEmbeddingModel(models, preferred) {
91
+ if (models.length === 0) {
92
+ return undefined;
93
+ }
94
+ if (preferred !== undefined) {
95
+ const exact = models.find((model) => model.name === preferred);
96
+ if (exact !== undefined) {
97
+ return { model: exact, reason: "explicitly requested (--embedding-model)" };
98
+ }
99
+ }
100
+ const ranked = [...models].sort((a, b) => {
101
+ const contextDelta = (b.contextLength ?? 0) - (a.contextLength ?? 0);
102
+ if (contextDelta !== 0) {
103
+ return contextDelta;
104
+ }
105
+ const dimensionDelta = (b.dimensions ?? 0) - (a.dimensions ?? 0);
106
+ if (dimensionDelta !== 0) {
107
+ return dimensionDelta;
108
+ }
109
+ return compareCodepoints(a.name, b.name);
110
+ });
111
+ const model = ranked[0];
112
+ return {
113
+ model,
114
+ reason: models.length === 1
115
+ ? "the provider's only reported embedding model"
116
+ : `largest context window among ${String(models.length)} reported embedding models`,
117
+ };
118
+ }
119
+ /**
120
+ * WP-228: Erreichbarkeit heisst NICHT „benutzbar".
121
+ *
122
+ * Bis hierher fragte `init` nur `/api/version` und `/api/tags` — zwei
123
+ * Endpunkte, die der Indexlauf nie anfasst. Auf dem Rechner, an dem das
124
+ * gemessen wurde, antworteten beide sofort, waehrend `/api/embed` haengte:
125
+ * die geschriebene Konfiguration versprach einen Dienst, der keinen einzigen
126
+ * Chunk einbetten konnte. Deshalb wird jetzt der Endpunkt geprueft, den das
127
+ * Produkt WIRKLICH benutzt — mit kurzer Frist, und ein Fristablauf ist ein
128
+ * Befund, keine bestandene Pruefung.
129
+ */
130
+ export async function probeOllama(input) {
131
+ const { http, limits, ollamaUrl } = input;
132
+ const notProbed = (detail) => ({
133
+ outcome: "not-probed",
134
+ timeoutMs: limits.embedProbeTimeoutMs,
135
+ detail,
136
+ });
137
+ const version = await http.getJson(`${trimSlash(ollamaUrl)}/api/version`, limits.probeTimeoutMs);
138
+ if (version === null) {
139
+ return {
140
+ outcome: "unreachable",
141
+ url: ollamaUrl,
142
+ embeddingModels: [],
143
+ embedProbe: notProbed("the provider was already unreachable"),
144
+ };
145
+ }
146
+ const versionString = readString(version, "version");
147
+ const tags = await http.getJson(`${trimSlash(ollamaUrl)}/api/tags`, limits.probeTimeoutMs);
148
+ const embeddingModels = readEmbeddingModels(tags);
149
+ const choice = chooseEmbeddingModel(embeddingModels, input.preferredModel);
150
+ const embedProbe = choice === undefined
151
+ ? notProbed("the provider reports no embedding model")
152
+ : await runEmbedProbe(http, ollamaUrl, choice.model.name, limits.embedProbeTimeoutMs);
153
+ return {
154
+ outcome: "reachable",
155
+ url: ollamaUrl,
156
+ ...(versionString === undefined ? {} : { version: versionString }),
157
+ embeddingModels,
158
+ ...(choice === undefined ? {} : { chosenModel: choice.model, chosenReason: choice.reason }),
159
+ embedProbe,
160
+ };
161
+ }
162
+ /** Ein winziges Probe-Embedding, mit Frist. Wirft nie — es antwortet. */
163
+ async function runEmbedProbe(http, ollamaUrl, model, timeoutMs) {
164
+ const result = await http.probeEmbedding(trimSlash(ollamaUrl), model, timeoutMs);
165
+ if (result.ok) {
166
+ return { outcome: "ok", timeoutMs, dimensions: result.dimensions };
167
+ }
168
+ return {
169
+ outcome: result.timedOut ? "timeout" : "failed",
170
+ timeoutMs,
171
+ detail: result.detail,
172
+ };
173
+ }
174
+ export async function probeQdrant(input) {
175
+ const { http, limits, qdrantUrls } = input;
176
+ const probedUrls = [...qdrantUrls];
177
+ // The skipped list — with its reason — comes from the shared policy, so it
178
+ // can never claim something other than what the policy actually enforces.
179
+ const skippedUrls = qdrantProbePlan({}).skipped.filter((candidate) => !probedUrls.includes(candidate.url));
180
+ for (const url of probedUrls) {
181
+ const payload = await http.getJson(`${trimSlash(url)}/`, limits.probeTimeoutMs);
182
+ if (payload === null) {
183
+ continue;
184
+ }
185
+ const version = readString(payload, "version");
186
+ return {
187
+ outcome: "reachable",
188
+ probedUrls,
189
+ url,
190
+ ...(version === undefined ? {} : { version }),
191
+ skippedUrls,
192
+ };
193
+ }
194
+ return { outcome: "unreachable", probedUrls, skippedUrls };
195
+ }
196
+ function trimSlash(value) {
197
+ return value.endsWith("/") ? value.slice(0, -1) : value;
198
+ }
199
+ function readString(payload, key) {
200
+ if (typeof payload !== "object" || payload === null) {
201
+ return undefined;
202
+ }
203
+ const value = payload[key];
204
+ return typeof value === "string" && value.length > 0 ? value : undefined;
205
+ }
206
+ function positiveInteger(value) {
207
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
208
+ }
209
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/commands/init/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAUvF,iDAAiD;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAarD;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAI,OAAgC,CAAC,MAAM,CAAC;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,MAAuB,EAAE,CAAC;QAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YAClD,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;YAC7E,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,KAAK,SAAS,CAAC;QACnF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;YACnD,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAuC,EACvC,SAAkB;IAElB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC/D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;QACjE,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAyB,CAAC;IAChD,OAAO;QACL,KAAK;QACL,MAAM,EACJ,MAAM,CAAC,MAAM,KAAK,CAAC;YACjB,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,gCAAgC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B;KACxF,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAiB;IACjD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC1C,MAAM,SAAS,GAAG,CAAC,MAAc,EAAkC,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,MAAM,CAAC,mBAAmB;QACrC,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACjG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,SAAS;YACd,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,SAAS,CAAC,sCAAsC,CAAC;SAC9D,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,oBAAoB,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAE3E,MAAM,UAAU,GACd,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC;QACtD,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE1F,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,GAAG,EAAE,SAAS;QACd,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAClE,eAAe;QACf,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3F,UAAU;KACX,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,aAAa,CAC1B,IAAmB,EACnB,SAAiB,EACjB,KAAa,EACb,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACrE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC/C,SAAS;QACT,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAiB;IACjD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACnC,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CACpD,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CACnD,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QAChF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/C,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,UAAU;YACV,GAAG;YACH,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YAC7C,WAAW;SACZ,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC;AAED,SAAS,UAAU,CAAC,OAAgB,EAAE,GAAW;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type RawConfigLayer } from "@untangle-code/config";
2
+ import type { FileSystemPort } from "@untangle-code/domain";
3
+ import type { StorageFindingsV1 } from "./types.js";
4
+ /** Explicit selection wins; an explicitly configured Qdrant remains opt-in. */
5
+ export declare function initStorageBackend(explicit: StorageFindingsV1["backend"] | undefined, env: Readonly<Record<string, string | undefined>>, existing?: RawConfigLayer): StorageFindingsV1["backend"];
6
+ /** Inspect a local directory without opening a database or creating files. */
7
+ export declare function inspectInitStorage(fs: FileSystemPort, root: string, explicit: StorageFindingsV1["backend"] | undefined, env: Readonly<Record<string, string | undefined>>, signal?: AbortSignal): Promise<StorageFindingsV1>;
8
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/commands/init/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,EAClD,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,QAAQ,GAAE,cAAmB,GAC5B,iBAAiB,CAAC,SAAS,CAAC,CAa9B;AAED,8EAA8E;AAC9E,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,EAClD,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA0C5B"}
@@ -0,0 +1,102 @@
1
+ import path from "node:path";
2
+ import { DEFAULT_STORAGE_CONFIG, buildEnvConfigLayer, mergeConfigLayers, parseConfigText, resolveUserConfigDir, } from "@untangle-code/config";
3
+ import { OperationalError } from "../../cli/exit.js";
4
+ /** Explicit selection wins; an explicitly configured Qdrant remains opt-in. */
5
+ export function initStorageBackend(explicit, env, existing = {}) {
6
+ const selected = explicit ?? env["UNTANGLE_STORAGE_BACKEND"] ?? existing.storage?.backend;
7
+ if (selected !== undefined) {
8
+ if (selected === "lancedb" || selected === "qdrant")
9
+ return selected;
10
+ throw new OperationalError(`Unknown storage backend ${JSON.stringify(selected)}.`, "Select --storage=lancedb or --storage=qdrant.");
11
+ }
12
+ return existing.qdrant !== undefined ||
13
+ buildEnvConfigLayer(env).layer.qdrant !== undefined
14
+ ? "qdrant"
15
+ : "lancedb";
16
+ }
17
+ /** Inspect a local directory without opening a database or creating files. */
18
+ export async function inspectInitStorage(fs, root, explicit, env, signal) {
19
+ signal?.throwIfAborted();
20
+ const { layer: existing, warnings } = await existingStorageConfig(fs, root, env, signal);
21
+ const backend = initStorageBackend(explicit, env, existing);
22
+ if (backend === "qdrant") {
23
+ const mode = env["UNTANGLE_QDRANT_MODE"] ?? existing.qdrant?.mode;
24
+ const url = env["UNTANGLE_QDRANT_URL"] ?? existing.qdrant?.url;
25
+ return {
26
+ backend,
27
+ ...(mode === "managed" || mode === "external" ? { qdrantMode: mode } : {}),
28
+ ...(url === undefined ? {} : { qdrantUrl: url }),
29
+ ...(warnings.length === 0 ? {} : { configurationWarnings: warnings }),
30
+ };
31
+ }
32
+ const localPath = env["UNTANGLE_LANCEDB_PATH"] ?? existing.storage?.path ?? DEFAULT_STORAGE_CONFIG.path;
33
+ if (!localPath)
34
+ throw new OperationalError("The local storage path is empty.", "Set UNTANGLE_LANCEDB_PATH.");
35
+ const directory = path.resolve(root, localPath);
36
+ signal?.throwIfAborted();
37
+ try {
38
+ const entry = await fs.stat(directory);
39
+ signal?.throwIfAborted();
40
+ return {
41
+ backend,
42
+ path: localPath,
43
+ directory,
44
+ directoryStatus: entry === null ? "missing" : entry.kind === "directory" ? "present" : "not-directory",
45
+ ...(warnings.length === 0 ? {} : { configurationWarnings: warnings }),
46
+ };
47
+ }
48
+ catch (error) {
49
+ signal?.throwIfAborted();
50
+ return {
51
+ backend,
52
+ path: localPath,
53
+ directory,
54
+ directoryStatus: "unreadable",
55
+ detail: error instanceof Error ? error.message : String(error),
56
+ ...(warnings.length === 0 ? {} : { configurationWarnings: warnings }),
57
+ };
58
+ }
59
+ }
60
+ /** Read the same project layer formats/order as config loading, through init's filesystem port. */
61
+ async function existingStorageConfig(fs, root, env, signal) {
62
+ signal?.throwIfAborted();
63
+ const json = path.join(root, ".untangle.json");
64
+ const toml = path.join(root, "untangle.toml");
65
+ const legacyExists = (await fs.stat(json)) !== null || (await fs.stat(toml)) !== null;
66
+ const user = path.join(resolveUserConfigDir(env, process.platform), "config.json");
67
+ const paths = [
68
+ { path: user, format: "json" },
69
+ { path: toml, format: "toml" },
70
+ {
71
+ path: legacyExists ? json : path.join(root, ".untangle/config.json"),
72
+ format: "json",
73
+ },
74
+ { path: path.join(root, ".untangle.local.json"), format: "json" },
75
+ ];
76
+ const layers = [];
77
+ const warnings = [];
78
+ let legacyQdrant = false;
79
+ for (const file of paths) {
80
+ signal?.throwIfAborted();
81
+ try {
82
+ if ((await fs.stat(file.path))?.kind !== "file")
83
+ continue;
84
+ const layer = parseConfigText(await fs.readTextFile(file.path), file.format);
85
+ if (layer.qdrant !== undefined)
86
+ legacyQdrant = true;
87
+ layers.push(layer);
88
+ }
89
+ catch {
90
+ signal?.throwIfAborted();
91
+ warnings.push(`Storage selection could not be inspected in ${file.path}; existing configuration is preserved unless --force is selected.`);
92
+ }
93
+ }
94
+ return {
95
+ layer: mergeConfigLayers([
96
+ ...(legacyQdrant ? [{ storage: { backend: "qdrant" } }] : []),
97
+ ...layers,
98
+ ]),
99
+ warnings,
100
+ };
101
+ }
102
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/commands/init/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * A small, purpose-built TOML emitter.
3
+ *
4
+ * WHY NOT A LIBRARY: the point of the file `init` writes is the COMMENTS —
5
+ * the user must be able to see what was decided and why. Every general TOML
6
+ * serializer takes a value and drops the prose, because prose is not part of
7
+ * the value. So the emitter here is a line builder that happens to know how
8
+ * to spell TOML scalars, not a serializer of an object graph.
9
+ *
10
+ * It is deliberately narrow: tables, array-of-tables, scalars and homogeneous
11
+ * scalar arrays. Anything outside that throws rather than guessing — a config
12
+ * file that silently loses a value would be worse than no config file at all.
13
+ */
14
+ export type TomlScalar = string | number | boolean;
15
+ /**
16
+ * TOML basic-string escaping. `\` and `"` plus the control characters TOML
17
+ * names explicitly; everything else below U+0020 goes to `\uXXXX` because a
18
+ * raw control byte in a config file is unreadable and, in some cases,
19
+ * unparseable.
20
+ */
21
+ export declare function escapeTomlString(value: string): string;
22
+ /** A key is written bare when it can be, quoted when it must be. */
23
+ export declare function formatTomlKey(key: string): string;
24
+ /**
25
+ * Formats a number the way TOML distinguishes integers from floats: an
26
+ * integral value stays integral, a fractional one keeps its decimal point.
27
+ * Non-finite numbers are rejected — TOML has `inf`/`nan` literals, but a
28
+ * config value that is either is a bug upstream, not something to serialize.
29
+ */
30
+ export declare function formatTomlNumber(value: number): string;
31
+ export declare function formatTomlScalar(value: TomlScalar): string;
32
+ /**
33
+ * A line builder for commented TOML.
34
+ *
35
+ * Order is the order of the calls: this class never reorders anything, which
36
+ * is what lets the caller interleave prose and values so that each decision
37
+ * sits directly under its justification.
38
+ */
39
+ export declare class TomlWriter {
40
+ private readonly lines;
41
+ /** A `#` comment. An empty string yields a bare `#`, which reads as a spacer. */
42
+ comment(text: string): this;
43
+ /** Several comment lines at once; convenience for wrapped prose. */
44
+ comments(texts: readonly string[]): this;
45
+ blank(): this;
46
+ /** A `[table.path]` header. */
47
+ table(path: readonly string[]): this;
48
+ /** A `[[table.path]]` array-of-tables header. */
49
+ arrayTable(path: readonly string[]): this;
50
+ scalar(key: string, value: TomlScalar): this;
51
+ /**
52
+ * A single-line array. Written multi-line once it would be long, because a
53
+ * 200-column exclude list is not something a human edits.
54
+ */
55
+ array(key: string, values: readonly TomlScalar[]): this;
56
+ /** An empty inline table — the honest way to write "nothing configured here". */
57
+ emptyInlineTable(key: string): this;
58
+ /**
59
+ * The finished document. Always ends in exactly one newline: a trailing
60
+ * newline is what every line-oriented tool expects, and "exactly one" is
61
+ * what keeps the idempotency comparison from reporting phantom changes.
62
+ */
63
+ render(): string;
64
+ }
65
+ //# sourceMappingURL=toml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml.d.ts","sourceRoot":"","sources":["../../../src/commands/init/toml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAInD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoCtD;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQ1D;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAEtC,iFAAiF;IAC1E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC,oEAAoE;IAC7D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAOxC,KAAK,IAAI,IAAI;IAKpB,+BAA+B;IACxB,KAAK,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAK3C,iDAAiD;IAC1C,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAKzC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAKnD;;;OAGG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI;IAe9D,iFAAiF;IAC1E,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK1C;;;;OAIG;IACI,MAAM,IAAI,MAAM;CAIxB"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * A small, purpose-built TOML emitter.
3
+ *
4
+ * WHY NOT A LIBRARY: the point of the file `init` writes is the COMMENTS —
5
+ * the user must be able to see what was decided and why. Every general TOML
6
+ * serializer takes a value and drops the prose, because prose is not part of
7
+ * the value. So the emitter here is a line builder that happens to know how
8
+ * to spell TOML scalars, not a serializer of an object graph.
9
+ *
10
+ * It is deliberately narrow: tables, array-of-tables, scalars and homogeneous
11
+ * scalar arrays. Anything outside that throws rather than guessing — a config
12
+ * file that silently loses a value would be worse than no config file at all.
13
+ */
14
+ const BARE_KEY = /^[A-Za-z0-9_-]+$/;
15
+ /**
16
+ * TOML basic-string escaping. `\` and `"` plus the control characters TOML
17
+ * names explicitly; everything else below U+0020 goes to `\uXXXX` because a
18
+ * raw control byte in a config file is unreadable and, in some cases,
19
+ * unparseable.
20
+ */
21
+ export function escapeTomlString(value) {
22
+ let out = "";
23
+ for (const char of value) {
24
+ switch (char) {
25
+ case "\\":
26
+ out += "\\\\";
27
+ break;
28
+ case '"':
29
+ out += '\\"';
30
+ break;
31
+ case "\b":
32
+ out += "\\b";
33
+ break;
34
+ case "\t":
35
+ out += "\\t";
36
+ break;
37
+ case "\n":
38
+ out += "\\n";
39
+ break;
40
+ case "\f":
41
+ out += "\\f";
42
+ break;
43
+ case "\r":
44
+ out += "\\r";
45
+ break;
46
+ default: {
47
+ const code = char.codePointAt(0) ?? 0;
48
+ if (code < 0x20 || code === 0x7f) {
49
+ out += `\\u${code.toString(16).padStart(4, "0").toUpperCase()}`;
50
+ }
51
+ else {
52
+ out += char;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ return out;
58
+ }
59
+ /** A key is written bare when it can be, quoted when it must be. */
60
+ export function formatTomlKey(key) {
61
+ return BARE_KEY.test(key) ? key : `"${escapeTomlString(key)}"`;
62
+ }
63
+ /**
64
+ * Formats a number the way TOML distinguishes integers from floats: an
65
+ * integral value stays integral, a fractional one keeps its decimal point.
66
+ * Non-finite numbers are rejected — TOML has `inf`/`nan` literals, but a
67
+ * config value that is either is a bug upstream, not something to serialize.
68
+ */
69
+ export function formatTomlNumber(value) {
70
+ if (!Number.isFinite(value)) {
71
+ throw new Error(`cannot serialize non-finite number: ${String(value)}`);
72
+ }
73
+ if (Number.isInteger(value)) {
74
+ return value.toFixed(0);
75
+ }
76
+ return String(value);
77
+ }
78
+ export function formatTomlScalar(value) {
79
+ if (typeof value === "string") {
80
+ return `"${escapeTomlString(value)}"`;
81
+ }
82
+ if (typeof value === "boolean") {
83
+ return value ? "true" : "false";
84
+ }
85
+ return formatTomlNumber(value);
86
+ }
87
+ /**
88
+ * A line builder for commented TOML.
89
+ *
90
+ * Order is the order of the calls: this class never reorders anything, which
91
+ * is what lets the caller interleave prose and values so that each decision
92
+ * sits directly under its justification.
93
+ */
94
+ export class TomlWriter {
95
+ lines = [];
96
+ /** A `#` comment. An empty string yields a bare `#`, which reads as a spacer. */
97
+ comment(text) {
98
+ this.lines.push(text.length === 0 ? "#" : `# ${text}`);
99
+ return this;
100
+ }
101
+ /** Several comment lines at once; convenience for wrapped prose. */
102
+ comments(texts) {
103
+ for (const text of texts) {
104
+ this.comment(text);
105
+ }
106
+ return this;
107
+ }
108
+ blank() {
109
+ this.lines.push("");
110
+ return this;
111
+ }
112
+ /** A `[table.path]` header. */
113
+ table(path) {
114
+ this.lines.push(`[${path.map(formatTomlKey).join(".")}]`);
115
+ return this;
116
+ }
117
+ /** A `[[table.path]]` array-of-tables header. */
118
+ arrayTable(path) {
119
+ this.lines.push(`[[${path.map(formatTomlKey).join(".")}]]`);
120
+ return this;
121
+ }
122
+ scalar(key, value) {
123
+ this.lines.push(`${formatTomlKey(key)} = ${formatTomlScalar(value)}`);
124
+ return this;
125
+ }
126
+ /**
127
+ * A single-line array. Written multi-line once it would be long, because a
128
+ * 200-column exclude list is not something a human edits.
129
+ */
130
+ array(key, values) {
131
+ const rendered = values.map(formatTomlScalar);
132
+ const inline = `${formatTomlKey(key)} = [${rendered.join(", ")}]`;
133
+ if (rendered.length === 0 || inline.length <= 96) {
134
+ this.lines.push(inline);
135
+ return this;
136
+ }
137
+ this.lines.push(`${formatTomlKey(key)} = [`);
138
+ for (const item of rendered) {
139
+ this.lines.push(` ${item},`);
140
+ }
141
+ this.lines.push("]");
142
+ return this;
143
+ }
144
+ /** An empty inline table — the honest way to write "nothing configured here". */
145
+ emptyInlineTable(key) {
146
+ this.lines.push(`${formatTomlKey(key)} = {}`);
147
+ return this;
148
+ }
149
+ /**
150
+ * The finished document. Always ends in exactly one newline: a trailing
151
+ * newline is what every line-oriented tool expects, and "exactly one" is
152
+ * what keeps the idempotency comparison from reporting phantom changes.
153
+ */
154
+ render() {
155
+ const body = this.lines.join("\n").replace(/\n+$/u, "");
156
+ return `${body}\n`;
157
+ }
158
+ }
159
+ //# sourceMappingURL=toml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml.js","sourceRoot":"","sources":["../../../src/commands/init/toml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Monorepo topology: the level ABOVE the files.
3
+ *
4
+ * A project is rarely one thing. It is `packages/*` under a workspace
5
+ * definition, and it is `frontend`/`backend`/`worker` under a container
6
+ * composition — two different, equally real decompositions of the same
7
+ * repository. `@untangle-code/file-graph` already reads both
8
+ * (`loadWorkspaceTopology`: `pnpm-workspace.yaml`, `package.json#workspaces`,
9
+ * `tsconfig*.json`, and every composition file), so this module CALLS it and
10
+ * does not rebuild it.
11
+ *
12
+ * What is added here is exactly the part file-graph does not read: the marker
13
+ * files of the other workspace managers (`lerna.json`, `nx.json`,
14
+ * `turbo.json`). They are DETECTED, not interpreted into a second package
15
+ * discovery. When such a marker declares a layout the topology pass did not
16
+ * find, that is written down as a gap (E4) — a config that quietly claims a
17
+ * single-package project because nobody read `lerna.json` is exactly the kind
18
+ * of silent skip the project forbids.
19
+ */
20
+ import type { FileSystemPort, SkipLedgerEntryV1 } from "@untangle-code/domain";
21
+ import type { InitLimitsV1, TopologyFindingsV1, WorkspaceManagerMarkersV1 } from "./types.js";
22
+ /**
23
+ * Transient ids for the topology pass. `loadWorkspaceTopology` needs a
24
+ * workspace id and a generation id to key its skip ledger; `init` persists
25
+ * neither, so both are fixed constants rather than a clock- or
26
+ * random-derived value (determinism rule: no `Date.now()`/`Math.random()` in
27
+ * result data).
28
+ */
29
+ export declare const INIT_WORKSPACE_ID = "untangle-init";
30
+ export declare const INIT_GENERATION_ID = "untangle-init";
31
+ /** The single repository `init` looks at: the directory it was pointed at. */
32
+ export declare const INIT_REPO_ID = "root";
33
+ export declare const INIT_REF_ID = "root:HEAD";
34
+ /** Marker files of workspace managers, in probe order (codepoint-sorted). */
35
+ export declare const WORKSPACE_MANAGER_MARKERS: readonly ["lerna.json", "nx.json", "turbo.json"];
36
+ export interface TopologyInput {
37
+ fs: FileSystemPort;
38
+ /** Absolute, canonical repository root. */
39
+ repoRoot: string;
40
+ limits: InitLimitsV1;
41
+ onSkipEntry: (entry: SkipLedgerEntryV1) => void;
42
+ }
43
+ export declare function detectTopology(input: TopologyInput): Promise<TopologyFindingsV1>;
44
+ /**
45
+ * Reads the marker files of the workspace managers file-graph does not know.
46
+ *
47
+ * `lerna.json` is the only one of the three that declares a package layout in
48
+ * its own right (`packages: [...]`); `nx.json` and `turbo.json` sit on top of
49
+ * an existing npm/pnpm/yarn workspace and therefore add nothing to the
50
+ * package list. So only lerna can produce a real gap, and only when the
51
+ * topology pass found no packages at all.
52
+ */
53
+ export declare function detectWorkspaceManagers(fs: FileSystemPort, repoRoot: string, packagesFound: number, onSkipEntry: (entry: SkipLedgerEntryV1) => void): Promise<WorkspaceManagerMarkersV1>;
54
+ //# sourceMappingURL=topology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology.d.ts","sourceRoot":"","sources":["../../../src/commands/init/topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI/E,OAAO,KAAK,EAGV,YAAY,EACZ,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AACjD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,SAAS,CAAC;AACnC,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,kDAAmD,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,cAAc,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACjD;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuDtF;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAC9C,OAAO,CAAC,yBAAyB,CAAC,CAgDpC"}