@untangle-code/cli 0.0.0-stage → 0.1.1

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 +451 -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,116 @@
1
+ /**
2
+ * WP-222 — DIE EINE STELLE, DIE ENTSCHEIDET, WELCHER VEKTORSPEICHER BENUTZT
3
+ * WERDEN DARF.
4
+ *
5
+ * Vorher stand diese Regel zweimal im Werkzeug, und die zwei Fassungen
6
+ * widersprachen sich in einer Sicherheitsfrage:
7
+ *
8
+ * `untangle init` kannte spec.md §3.2 und prueft den ueblichen
9
+ * Standardport eines fremden Vektorspeichers
10
+ * ABSICHTLICH NICHT. Es schrieb den Grund sogar in die
11
+ * erzeugte Konfiguration.
12
+ * `untangle doctor` kannte die Regel nicht. Es liess `qdrant.mode =
13
+ * "managed"` vom Speicheradapter aufloesen, der ohne
14
+ * `url` auf denselben Standardport zurueckfiel, fand
15
+ * dort eine FREMDE Instanz mit fremden Daten, meldete
16
+ * "[OK ] Qdrant — Erreichbar" und empfahl, dorthin zu
17
+ * indizieren.
18
+ *
19
+ * Zwei Befehle desselben Werkzeugs, zwei Antworten, und die gefaehrlichere
20
+ * gewann: der Nutzer folgt dem Diagnosewerkzeug, nicht dem Kommentar in
21
+ * einer Datei. Die Ursache war nicht, dass eine der beiden Fassungen falsch
22
+ * war — die Ursache war, dass es ZWEI gab.
23
+ *
24
+ * Also: hier steht sie einmal. `init` bezieht von hier, welche Adressen es
25
+ * ueberhaupt anfassen darf; `doctor` und jeder andere Befehl bekommen ihren
26
+ * Speicher ueber `cli/workspace.ts`, das vor dem Verdrahten hier fragt. Wer
27
+ * eine dritte Fassung schreibt, muss diese Datei umgehen — und das faellt
28
+ * auf.
29
+ *
30
+ * DIE REGEL, in einem Satz: Untangle benutzt seinen EIGENEN verwalteten
31
+ * Speicher, es sei denn, der Nutzer hat eine Adresse ausdruecklich benannt.
32
+ * Ein Zurueckfallen auf eine fremde Vorgabeadresse gibt es nicht.
33
+ */
34
+ import type { QdrantConfig } from "@untangle-code/config";
35
+ /**
36
+ * Der verwaltete Qdrant-REST-Port (spec.md §3.1). Dieser Dienst gehoert
37
+ * Untangle: eigener Container, eigenes Volume. Auf ihn darf geschrieben
38
+ * werden.
39
+ */
40
+ export declare const MANAGED_QDRANT_URL = "http://127.0.0.1:16333";
41
+ /**
42
+ * Adressen, die Untangle von sich aus NIEMALS annimmt.
43
+ *
44
+ * `6333` ist der Vorgabeport von Qdrant selbst und damit genau der Port, auf
45
+ * dem auf einem Entwicklungsrechner die Instanz von JEMAND ANDEREM liegt —
46
+ * mit den Daten von jemand anderem. spec.md §3.2 verbietet, in fremde
47
+ * Infrastruktur einzugreifen. Eine Konfiguration, die diesen Port
48
+ * stillschweigend uebernaehme, wuerde beim naechsten Befehl hineinschreiben.
49
+ */
50
+ export declare const FOREIGN_DEFAULT_QDRANT_URLS: readonly {
51
+ readonly url: string;
52
+ readonly reason: string;
53
+ }[];
54
+ /** Woher die Adresse kommt — das ist der ganze Unterschied. */
55
+ export type VectorStoreOrigin = "embedded"
56
+ /** Aus `qdrant.url` einer Konfigurationsdatei. Der Nutzer hat sie hingeschrieben. */
57
+ | "configured"
58
+ /** Aus `UNTANGLE_QDRANT_URL`. Der Nutzer hat sie benannt. */
59
+ | "environment"
60
+ /** Untangles eigener verwalteter Speicher (spec.md §3.1). */
61
+ | "managed";
62
+ export interface VectorStoreDecision {
63
+ /** Die Adresse, die benutzt werden darf — oder die abgelehnte. */
64
+ readonly url: string;
65
+ readonly origin: VectorStoreOrigin;
66
+ readonly allowed: boolean;
67
+ /** Bei `allowed === false`: warum nicht. Sonst: wie die Adresse zustande kam. */
68
+ readonly reason: string;
69
+ /** Bei `allowed === false` Pflicht: GENAU EIN naechster Schritt. */
70
+ readonly nextStep?: string;
71
+ }
72
+ /** Steht diese Adresse auf der Liste der fremden Vorgabeadressen? */
73
+ export declare function foreignDefaultFor(url: string): {
74
+ url: string;
75
+ reason: string;
76
+ } | undefined;
77
+ /**
78
+ * Die Entscheidung.
79
+ *
80
+ * Warum das Feld `qdrant.url` als „ausdrueckliche Nennung" zaehlt: es hat
81
+ * KEINE Produktvorgabe (`DEFAULT_QDRANT_CONFIG` setzt nur `mode`). Steht dort
82
+ * etwas, dann hat es eine Nutzerebene hingeschrieben — eine Datei, die
83
+ * Umgebung oder ein Argument. Genau das ist die Zustimmung, die spec.md §3.2
84
+ * verlangt, bevor Untangle eine fremde Instanz anfasst.
85
+ */
86
+ export declare function decideVectorStore(input: {
87
+ qdrant: QdrantConfig;
88
+ env: Readonly<Record<string, string | undefined>>;
89
+ }): VectorStoreDecision;
90
+ /**
91
+ * Der Riegel.
92
+ *
93
+ * Er sitzt hinter der Entscheidung, weil eine Adresse auch auf anderem Wege
94
+ * dort landen kann — ein kuenftiger Adapter mit eigener Vorgabe, eine
95
+ * Migration, ein Tippfehler in einer Vorgabekonstanten. Wird eine fremde
96
+ * Vorgabeadresse benutzt, OHNE dass sie jemand benannt hat, bricht der
97
+ * Befehl ab statt hineinzuschreiben.
98
+ */
99
+ export declare function assertVectorStoreAllowed(decision: VectorStoreDecision, resolvedUrl: string): void;
100
+ /**
101
+ * Welche Adressen `init` ueberhaupt anfassen darf — dieselbe Regel, von der
102
+ * anderen Seite gelesen.
103
+ *
104
+ * `probe` sind die Adressen, an die eine (ausschliesslich lesende) Anfrage
105
+ * gehen darf. `skipped` sind die bewusst ausgelassenen, JEWEILS MIT GRUND:
106
+ * eine ausgelassene Pruefung ohne Begruendung waere ein stilles
107
+ * Ueberspringen (E4), und genau dieses Schweigen hat `doctor` gefehlt.
108
+ */
109
+ export declare function qdrantProbePlan(env: Readonly<Record<string, string | undefined>>): {
110
+ probe: string[];
111
+ skipped: {
112
+ url: string;
113
+ reason: string;
114
+ }[];
115
+ };
116
+ //# sourceMappingURL=vector-store-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store-policy.d.ts","sourceRoot":"","sources":["../../src/cli/vector-store-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS;IACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,EAQA,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GACzB,UAAU;AACZ,qFAAqF;GACnF,YAAY;AACd,6DAA6D;GAC3D,aAAa;AACf,6DAA6D;GAC3D,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAMD,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAG1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACnD,GAAG,mBAAmB,CA6CtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAiBjG;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG;IAClF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5C,CAeA"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * WP-222 — DIE EINE STELLE, DIE ENTSCHEIDET, WELCHER VEKTORSPEICHER BENUTZT
3
+ * WERDEN DARF.
4
+ *
5
+ * Vorher stand diese Regel zweimal im Werkzeug, und die zwei Fassungen
6
+ * widersprachen sich in einer Sicherheitsfrage:
7
+ *
8
+ * `untangle init` kannte spec.md §3.2 und prueft den ueblichen
9
+ * Standardport eines fremden Vektorspeichers
10
+ * ABSICHTLICH NICHT. Es schrieb den Grund sogar in die
11
+ * erzeugte Konfiguration.
12
+ * `untangle doctor` kannte die Regel nicht. Es liess `qdrant.mode =
13
+ * "managed"` vom Speicheradapter aufloesen, der ohne
14
+ * `url` auf denselben Standardport zurueckfiel, fand
15
+ * dort eine FREMDE Instanz mit fremden Daten, meldete
16
+ * "[OK ] Qdrant — Erreichbar" und empfahl, dorthin zu
17
+ * indizieren.
18
+ *
19
+ * Zwei Befehle desselben Werkzeugs, zwei Antworten, und die gefaehrlichere
20
+ * gewann: der Nutzer folgt dem Diagnosewerkzeug, nicht dem Kommentar in
21
+ * einer Datei. Die Ursache war nicht, dass eine der beiden Fassungen falsch
22
+ * war — die Ursache war, dass es ZWEI gab.
23
+ *
24
+ * Also: hier steht sie einmal. `init` bezieht von hier, welche Adressen es
25
+ * ueberhaupt anfassen darf; `doctor` und jeder andere Befehl bekommen ihren
26
+ * Speicher ueber `cli/workspace.ts`, das vor dem Verdrahten hier fragt. Wer
27
+ * eine dritte Fassung schreibt, muss diese Datei umgehen — und das faellt
28
+ * auf.
29
+ *
30
+ * DIE REGEL, in einem Satz: Untangle benutzt seinen EIGENEN verwalteten
31
+ * Speicher, es sei denn, der Nutzer hat eine Adresse ausdruecklich benannt.
32
+ * Ein Zurueckfallen auf eine fremde Vorgabeadresse gibt es nicht.
33
+ */
34
+ import { OperationalError } from "./exit.js";
35
+ /**
36
+ * Der verwaltete Qdrant-REST-Port (spec.md §3.1). Dieser Dienst gehoert
37
+ * Untangle: eigener Container, eigenes Volume. Auf ihn darf geschrieben
38
+ * werden.
39
+ */
40
+ export const MANAGED_QDRANT_URL = "http://127.0.0.1:16333";
41
+ /**
42
+ * Adressen, die Untangle von sich aus NIEMALS annimmt.
43
+ *
44
+ * `6333` ist der Vorgabeport von Qdrant selbst und damit genau der Port, auf
45
+ * dem auf einem Entwicklungsrechner die Instanz von JEMAND ANDEREM liegt —
46
+ * mit den Daten von jemand anderem. spec.md §3.2 verbietet, in fremde
47
+ * Infrastruktur einzugreifen. Eine Konfiguration, die diesen Port
48
+ * stillschweigend uebernaehme, wuerde beim naechsten Befehl hineinschreiben.
49
+ */
50
+ export const FOREIGN_DEFAULT_QDRANT_URLS = [
51
+ {
52
+ url: "http://127.0.0.1:6333",
53
+ reason: "Default port of a foreign instance; spec.md §3.2 prohibits modifying foreign " +
54
+ "services. Select it explicitly with UNTANGLE_QDRANT_URL; otherwise `untangle` starts " +
55
+ "an owned instance on 16333 with its own volume.",
56
+ },
57
+ ];
58
+ function normalize(url) {
59
+ return url.trim().replace(/\/+$/u, "");
60
+ }
61
+ /** Steht diese Adresse auf der Liste der fremden Vorgabeadressen? */
62
+ export function foreignDefaultFor(url) {
63
+ const wanted = normalize(url);
64
+ return FOREIGN_DEFAULT_QDRANT_URLS.find((entry) => normalize(entry.url) === wanted);
65
+ }
66
+ /**
67
+ * Die Entscheidung.
68
+ *
69
+ * Warum das Feld `qdrant.url` als „ausdrueckliche Nennung" zaehlt: es hat
70
+ * KEINE Produktvorgabe (`DEFAULT_QDRANT_CONFIG` setzt nur `mode`). Steht dort
71
+ * etwas, dann hat es eine Nutzerebene hingeschrieben — eine Datei, die
72
+ * Umgebung oder ein Argument. Genau das ist die Zustimmung, die spec.md §3.2
73
+ * verlangt, bevor Untangle eine fremde Instanz anfasst.
74
+ */
75
+ export function decideVectorStore(input) {
76
+ const fromConfig = input.qdrant.url;
77
+ if (fromConfig !== undefined && fromConfig.length > 0) {
78
+ const foreign = foreignDefaultFor(fromConfig);
79
+ return {
80
+ url: fromConfig,
81
+ origin: "configured",
82
+ allowed: true,
83
+ reason: foreign === undefined
84
+ ? "explicitly configured as `qdrant.url`"
85
+ : "explicitly configured as `qdrant.url`; selecting this foreign " +
86
+ "selecting the default address is therefore an explicit user decision (spec.md §3.2)",
87
+ };
88
+ }
89
+ const fromEnv = input.env["UNTANGLE_QDRANT_URL"];
90
+ if (fromEnv !== undefined && fromEnv.length > 0) {
91
+ return {
92
+ url: fromEnv,
93
+ origin: "environment",
94
+ allowed: true,
95
+ reason: "explicitly selected through UNTANGLE_QDRANT_URL",
96
+ };
97
+ }
98
+ if (input.qdrant.mode === "external") {
99
+ // Kein Zurueckfallen. „external" ohne Adresse ist ein Konfigurationsfehler
100
+ // und wird als solcher gemeldet, nicht durch Raten geheilt.
101
+ return {
102
+ url: "",
103
+ origin: "configured",
104
+ allowed: false,
105
+ reason: 'qdrant.mode is "external", but no `qdrant.url` is set.',
106
+ nextStep: "Set your own instance's address as `qdrant.url`, or set " + 'qdrant.mode to "managed".',
107
+ };
108
+ }
109
+ return {
110
+ url: MANAGED_QDRANT_URL,
111
+ origin: "managed",
112
+ allowed: true,
113
+ reason: "Untangle's owned managed store (spec.md §3.1, port 16333)",
114
+ };
115
+ }
116
+ /**
117
+ * Der Riegel.
118
+ *
119
+ * Er sitzt hinter der Entscheidung, weil eine Adresse auch auf anderem Wege
120
+ * dort landen kann — ein kuenftiger Adapter mit eigener Vorgabe, eine
121
+ * Migration, ein Tippfehler in einer Vorgabekonstanten. Wird eine fremde
122
+ * Vorgabeadresse benutzt, OHNE dass sie jemand benannt hat, bricht der
123
+ * Befehl ab statt hineinzuschreiben.
124
+ */
125
+ export function assertVectorStoreAllowed(decision, resolvedUrl) {
126
+ if (!decision.allowed) {
127
+ throw new OperationalError(decision.reason, decision.nextStep ?? "See `untangle init`.");
128
+ }
129
+ if (decision.origin !== "managed") {
130
+ return;
131
+ }
132
+ const foreign = foreignDefaultFor(resolvedUrl);
133
+ if (foreign === undefined) {
134
+ return;
135
+ }
136
+ throw new OperationalError(`${resolvedUrl} is the default port of a foreign Qdrant instance and was not explicitly ` +
137
+ `selected; Untangle will not take it over automatically. ${foreign.reason}`, `Set UNTANGLE_QDRANT_URL=${resolvedUrl} if this instance is yours; ` +
138
+ `otherwise start an owned instance on ${MANAGED_QDRANT_URL}.`);
139
+ }
140
+ /**
141
+ * Welche Adressen `init` ueberhaupt anfassen darf — dieselbe Regel, von der
142
+ * anderen Seite gelesen.
143
+ *
144
+ * `probe` sind die Adressen, an die eine (ausschliesslich lesende) Anfrage
145
+ * gehen darf. `skipped` sind die bewusst ausgelassenen, JEWEILS MIT GRUND:
146
+ * eine ausgelassene Pruefung ohne Begruendung waere ein stilles
147
+ * Ueberspringen (E4), und genau dieses Schweigen hat `doctor` gefehlt.
148
+ */
149
+ export function qdrantProbePlan(env) {
150
+ const configured = env["UNTANGLE_QDRANT_URL"];
151
+ const probe = configured === undefined || configured.length === 0
152
+ ? [MANAGED_QDRANT_URL]
153
+ : normalize(configured) === normalize(MANAGED_QDRANT_URL)
154
+ ? [MANAGED_QDRANT_URL]
155
+ : [configured, MANAGED_QDRANT_URL];
156
+ const probing = new Set(probe.map(normalize));
157
+ const skipped = FOREIGN_DEFAULT_QDRANT_URLS.filter((entry) => !probing.has(normalize(entry.url))).map((entry) => ({ ...entry }));
158
+ return { probe, skipped };
159
+ }
160
+ //# sourceMappingURL=vector-store-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store-policy.js","sourceRoot":"","sources":["../../src/cli/vector-store-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Package version shared by the CLI and its MCP entry point. */
2
+ export declare const CLI_VERSION = "0.1.1";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,WAAW,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Package version shared by the CLI and its MCP entry point. */
2
+ export const CLI_VERSION = "0.1.1";
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Die Verdrahtung, die fast jeder Befehl braucht: von der Konfiguration im
3
+ * Projekt zu den fertigen Adaptern.
4
+ *
5
+ * Diese Datei ist bewusst die EINZIGE Stelle, an der die Oberflaeche
6
+ * Adapterklassen anfasst. Jeder Befehl bekommt danach nur noch Ports zu
7
+ * sehen. Das ist keine Kosmetik: es ist der Grund, warum sich `query` gegen
8
+ * den In-Memory-Speicher des testkits genauso testen laesst wie gegen ein
9
+ * echtes Qdrant.
10
+ */
11
+ import { type ConfigIssue, type EffectiveUntangleConfigV1, type LoadConfigResult } from "@untangle-code/config";
12
+ import { type EmbeddingProfile, type EmbeddingProvider, type VectorStore, type MetadataStore, type GraphStore } from "@untangle-code/domain";
13
+ import { type HybridSearchEngine, type SearchGraphEnrichmentPort } from "@untangle-code/search";
14
+ import { type QdrantStorageConfig } from "@untangle-code/storage-qdrant";
15
+ import type { IndexStateScope, IndexStateV1 } from "./index-state.js";
16
+ import { decideVectorStore } from "./vector-store-policy.js";
17
+ /** Die aufgeloeste Sicht des Projekts, wie sie jeder Befehl sieht. */
18
+ export interface WorkspaceView {
19
+ readonly root: string;
20
+ readonly config: EffectiveUntangleConfigV1;
21
+ readonly load: LoadConfigResult;
22
+ readonly workspaceId: string;
23
+ readonly profile: EmbeddingProfile;
24
+ readonly profileId: string;
25
+ readonly profileShortId: string;
26
+ /** Repository-IDs aus der Konfiguration, codepoint-sortiert. */
27
+ readonly repoIds: readonly string[];
28
+ }
29
+ /**
30
+ * Laedt die Konfiguration und leitet Identitaeten ab.
31
+ *
32
+ * `strict` entscheidet ueber spec.md §4.8: mit `strict` bricht ein
33
+ * Konfigurationsfehler ab (was jeder Befehl tut, der wirklich etwas tut),
34
+ * ohne `strict` kommen die Befunde als Daten zurueck (was `doctor` braucht,
35
+ * denn `doctor` soll den Fehler ja BERICHTEN statt an ihm zu sterben).
36
+ */
37
+ export declare function loadWorkspace(options: {
38
+ cwd: string;
39
+ env: Readonly<Record<string, string | undefined>>;
40
+ workspaceIdOverride?: string | undefined;
41
+ strict: boolean;
42
+ }): WorkspaceView;
43
+ /** Konfigurationsbefunde als Textzeilen — Warnungen wie Fehler, nie stumm. */
44
+ export declare function describeConfigIssues(issues: readonly ConfigIssue[]): string[];
45
+ export interface StorageWiring {
46
+ readonly qdrantConfig?: QdrantStorageConfig;
47
+ readonly backend: "lancedb" | "qdrant";
48
+ readonly storeUrl: string;
49
+ readonly storagePath?: string;
50
+ readonly collectionPrefix: string;
51
+ readonly storage: {
52
+ vectorStore: VectorStore;
53
+ metadataStore: MetadataStore;
54
+ graphStore: GraphStore;
55
+ close?: () => Promise<void>;
56
+ };
57
+ readonly vectorStore: VectorStore;
58
+ readonly codeCollection: string;
59
+ /** Woher die benutzte Adresse kommt — `doctor` zeigt das dem Nutzer. */
60
+ readonly decision: ReturnType<typeof decideVectorStore>;
61
+ }
62
+ /**
63
+ * Build the selected storage adapter from the resolved configuration.
64
+ * Local LanceDB is lazy; the service ownership policy below applies to Qdrant.
65
+ *
66
+ * WP-222: das ist der Engpass, durch den JEDER Befehl geht, der einen
67
+ * Vektorspeicher anfasst — und deshalb die Stelle, an der die Regel aus
68
+ * `vector-store-policy.ts` durchgesetzt wird. Sie wird VOR dem Aufloesen
69
+ * gefragt und danach noch einmal gegen das Ergebnis geprueft: die
70
+ * Entscheidung bestimmt die Adresse, statt eine Adapter-Vorgabe hinterher zu
71
+ * segnen. Vorher fiel `mode: "managed"` ohne `url` im Adapter auf den
72
+ * Standardport einer fremden Instanz zurueck, und `doctor` meldete diese
73
+ * Instanz als in Ordnung.
74
+ */
75
+ export declare function wireStorage(view: WorkspaceView, env: Readonly<Record<string, string | undefined>>): StorageWiring;
76
+ /** Old Qdrant records retain their endpoint identity; embedded stores never adopt them. */
77
+ export declare function matchesStoredBackend(state: IndexStateV1, wiring: Pick<StorageWiring, "backend" | "storeUrl">): boolean;
78
+ export declare function storageIndexScope(wiring: Pick<StorageWiring, "backend" | "storeUrl">): Pick<IndexStateScope, "storageBackend" | "storeUrl">;
79
+ /** Baut den Ollama-Embedder aus der aufgeloesten Konfiguration. */
80
+ export declare function wireEmbedder(view: WorkspaceView): EmbeddingProvider;
81
+ /**
82
+ * Baut den Abrufkern.
83
+ *
84
+ * Ein Ziel je Embedding-Profil (spec.md §13.4). Diese Fassung kennt genau ein
85
+ * Profil — das der Konfiguration. Mehrere Profile in einem Workspace sind im
86
+ * Abrufkern vorgesehen, hier aber noch nicht konfigurierbar; das steht so in
87
+ * der README unter „Bekannte Grenzen".
88
+ */
89
+ export declare function wireSearchEngine(input: {
90
+ view: WorkspaceView;
91
+ vectorStore: VectorStore;
92
+ collection: string;
93
+ embedder: EmbeddingProvider;
94
+ indexContexts?: readonly {
95
+ repoId: string;
96
+ refId: string;
97
+ generationId: string;
98
+ corpusRevisionFingerprint?: string;
99
+ outcome: "running" | "completed" | "cancelled" | "failed";
100
+ }[];
101
+ graphEnrichment?: SearchGraphEnrichmentPort;
102
+ }): HybridSearchEngine;
103
+ /** Die Botschaft eines unbekannten Wurfs, ohne je `[object Object]` zu zeigen. */
104
+ export declare function errorMessage(error: unknown): string;
105
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/cli/workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Die Verdrahtung, die fast jeder Befehl braucht: von der Konfiguration im
3
+ * Projekt zu den fertigen Adaptern.
4
+ *
5
+ * Diese Datei ist bewusst die EINZIGE Stelle, an der die Oberflaeche
6
+ * Adapterklassen anfasst. Jeder Befehl bekommt danach nur noch Ports zu
7
+ * sehen. Das ist keine Kosmetik: es ist der Grund, warum sich `query` gegen
8
+ * den In-Memory-Speicher des testkits genauso testen laesst wie gegen ein
9
+ * echtes Qdrant.
10
+ */
11
+ import { realpathSync } from "node:fs";
12
+ import path from "node:path";
13
+ import { pathToFileURL } from "node:url";
14
+ import { assertConfigValid, deriveEmbeddingProfile, loadConfig, } from "@untangle-code/config";
15
+ import { buildEmbeddingProfileId, compareCodepoints, embeddingProfileShortId, } from "@untangle-code/domain";
16
+ import { OllamaEmbeddingProvider } from "@untangle-code/embeddings-ollama";
17
+ import { createHybridSearchEngine, } from "@untangle-code/search";
18
+ import { createLanceDbStorage } from "@untangle-code/storage-lancedb";
19
+ import { FetchQdrantTransport, codeCollectionName, createQdrantStorage, resolveQdrantStorageConfig, textToBm25SparseVector, QDRANT_STORAGE_DEFAULTS, } from "@untangle-code/storage-qdrant";
20
+ import { OperationalError } from "./exit.js";
21
+ import { systemClock, systemRandom } from "./system.js";
22
+ import { assertVectorStoreAllowed, decideVectorStore } from "./vector-store-policy.js";
23
+ /**
24
+ * Laedt die Konfiguration und leitet Identitaeten ab.
25
+ *
26
+ * `strict` entscheidet ueber spec.md §4.8: mit `strict` bricht ein
27
+ * Konfigurationsfehler ab (was jeder Befehl tut, der wirklich etwas tut),
28
+ * ohne `strict` kommen die Befunde als Daten zurueck (was `doctor` braucht,
29
+ * denn `doctor` soll den Fehler ja BERICHTEN statt an ihm zu sterben).
30
+ */
31
+ export function loadWorkspace(options) {
32
+ const load = loadConfig({
33
+ cwd: options.cwd,
34
+ env: options.env,
35
+ });
36
+ if (options.strict)
37
+ assertConfigValid(load.errors);
38
+ const profile = deriveEmbeddingProfile(load.effectiveConfig);
39
+ const profileId = buildEmbeddingProfileId(profile);
40
+ const repoIds = (load.effectiveConfig.repositories ?? [])
41
+ .map((repo) => repo.id)
42
+ .sort(compareCodepoints);
43
+ return {
44
+ root: load.sources.projectRoot ?? load.sources.configBaseDir,
45
+ config: load.effectiveConfig,
46
+ load,
47
+ workspaceId: options.workspaceIdOverride ?? load.workspaceId,
48
+ profile,
49
+ profileId,
50
+ profileShortId: embeddingProfileShortId(profileId),
51
+ repoIds,
52
+ };
53
+ }
54
+ /** Konfigurationsbefunde als Textzeilen — Warnungen wie Fehler, nie stumm. */
55
+ export function describeConfigIssues(issues) {
56
+ return issues
57
+ .map((issue) => `${issue.path || "(root)"}: ${issue.message} [${issue.code}]`)
58
+ .sort(compareCodepoints);
59
+ }
60
+ /**
61
+ * Build the selected storage adapter from the resolved configuration.
62
+ * Local LanceDB is lazy; the service ownership policy below applies to Qdrant.
63
+ *
64
+ * WP-222: das ist der Engpass, durch den JEDER Befehl geht, der einen
65
+ * Vektorspeicher anfasst — und deshalb die Stelle, an der die Regel aus
66
+ * `vector-store-policy.ts` durchgesetzt wird. Sie wird VOR dem Aufloesen
67
+ * gefragt und danach noch einmal gegen das Ergebnis geprueft: die
68
+ * Entscheidung bestimmt die Adresse, statt eine Adapter-Vorgabe hinterher zu
69
+ * segnen. Vorher fiel `mode: "managed"` ohne `url` im Adapter auf den
70
+ * Standardport einer fremden Instanz zurueck, und `doctor` meldete diese
71
+ * Instanz als in Ordnung.
72
+ */
73
+ export function wireStorage(view, env) {
74
+ if (view.config.storage.backend === "lancedb")
75
+ return wireLanceDbStorage(view);
76
+ if (view.config.storage.backend !== "qdrant") {
77
+ throw new OperationalError("Invalid storage backend.", "Set storage.backend to lancedb or qdrant.");
78
+ }
79
+ const decision = decideVectorStore({ qdrant: view.config.qdrant, env });
80
+ if (!decision.allowed) {
81
+ throw new OperationalError(decision.reason, decision.nextStep ?? "See `untangle init --help`.");
82
+ }
83
+ let qdrantConfig;
84
+ try {
85
+ qdrantConfig = resolveQdrantStorageConfig({ ...view.config.qdrant, url: decision.url }, env);
86
+ }
87
+ catch (error) {
88
+ throw new OperationalError(`Cannot resolve Qdrant configuration: ${errorMessage(error)}`, 'Check your configuration\'s `qdrant` section; mode "external" requires `url`.', { cause: error });
89
+ }
90
+ assertVectorStoreAllowed(decision, qdrantConfig.url);
91
+ const transport = new FetchQdrantTransport({
92
+ url: qdrantConfig.url,
93
+ ...(qdrantConfig.apiKey === undefined ? {} : { apiKey: qdrantConfig.apiKey }),
94
+ requestTimeoutMs: qdrantConfig.requestTimeoutMs,
95
+ });
96
+ const storage = createQdrantStorage({ config: qdrantConfig, clock: systemClock, transport });
97
+ return {
98
+ backend: "qdrant",
99
+ storeUrl: qdrantConfig.url,
100
+ collectionPrefix: qdrantConfig.collectionPrefix,
101
+ qdrantConfig,
102
+ storage,
103
+ vectorStore: storage.vectorStore,
104
+ codeCollection: codeCollectionName(qdrantConfig.collectionPrefix, view.profileShortId),
105
+ decision,
106
+ };
107
+ }
108
+ /** Local storage is lazy: wiring and missing-index reads create no directories. */
109
+ function wireLanceDbStorage(view) {
110
+ const storagePath = canonicalLocalPath(path.resolve(view.root, view.config.storage.path ?? ".untangle/index/lancedb"));
111
+ const storeUrl = pathToFileURL(storagePath).href;
112
+ const config = QDRANT_STORAGE_DEFAULTS;
113
+ const storage = createLanceDbStorage({
114
+ path: storagePath,
115
+ clock: systemClock,
116
+ collectionPrefix: config.collectionPrefix,
117
+ upsertMaxPoints: config.upsertMaxPoints,
118
+ upsertBudgetBytes: config.upsertBudgetBytes,
119
+ graphPartBudgetBytes: config.graphPartBudgetBytes,
120
+ });
121
+ return {
122
+ backend: "lancedb",
123
+ storeUrl,
124
+ storagePath,
125
+ collectionPrefix: config.collectionPrefix,
126
+ storage,
127
+ vectorStore: storage.vectorStore,
128
+ codeCollection: codeCollectionName(config.collectionPrefix, view.profileShortId),
129
+ decision: {
130
+ url: storeUrl,
131
+ origin: "embedded",
132
+ allowed: true,
133
+ reason: "project-local LanceDB; no database server required",
134
+ },
135
+ };
136
+ }
137
+ function canonicalLocalPath(selected) {
138
+ try {
139
+ return realpathSync(selected);
140
+ }
141
+ catch (error) {
142
+ if (error.code !== "ENOENT")
143
+ throw error;
144
+ const parent = path.dirname(selected);
145
+ if (parent === selected)
146
+ throw error;
147
+ return path.join(canonicalLocalPath(parent), path.basename(selected));
148
+ }
149
+ }
150
+ /** Old Qdrant records retain their endpoint identity; embedded stores never adopt them. */
151
+ export function matchesStoredBackend(state, wiring) {
152
+ return ((state.storageBackend ?? "qdrant") === wiring.backend &&
153
+ (state.storeUrl ?? state.qdrantUrl) === wiring.storeUrl);
154
+ }
155
+ export function storageIndexScope(wiring) {
156
+ return { storageBackend: wiring.backend, storeUrl: wiring.storeUrl };
157
+ }
158
+ /** Baut den Ollama-Embedder aus der aufgeloesten Konfiguration. */
159
+ export function wireEmbedder(view) {
160
+ const embeddings = view.config.embeddings;
161
+ return new OllamaEmbeddingProvider({
162
+ profile: view.profile,
163
+ mode: embeddings.mode,
164
+ url: embeddings.url,
165
+ apiKeyEnv: embeddings.apiKeyEnv,
166
+ contextLength: embeddings.contextLength,
167
+ batchSize: embeddings.batchSize,
168
+ maxConnections: embeddings.maxConnections,
169
+ requestTimeoutMs: embeddings.requestTimeoutMs,
170
+ }, { clock: systemClock, random: systemRandom });
171
+ }
172
+ /**
173
+ * Baut den Abrufkern.
174
+ *
175
+ * Ein Ziel je Embedding-Profil (spec.md §13.4). Diese Fassung kennt genau ein
176
+ * Profil — das der Konfiguration. Mehrere Profile in einem Workspace sind im
177
+ * Abrufkern vorgesehen, hier aber noch nicht konfigurierbar; das steht so in
178
+ * der README unter „Bekannte Grenzen".
179
+ */
180
+ export function wireSearchEngine(input) {
181
+ const target = {
182
+ embeddingProfileId: input.view.profileId,
183
+ collection: input.collection,
184
+ repoIds: [...input.view.repoIds],
185
+ embedder: input.embedder,
186
+ ...(input.indexContexts === undefined ? {} : { indexContexts: input.indexContexts }),
187
+ };
188
+ return createHybridSearchEngine({
189
+ vectorStore: input.vectorStore,
190
+ targets: [target],
191
+ defaults: {
192
+ workspaceId: input.view.workspaceId,
193
+ limit: input.view.config.search.defaultLimit,
194
+ candidateLimit: input.view.config.search.defaultCandidateLimit,
195
+ },
196
+ searchConfig: input.view.config.search,
197
+ clock: systemClock,
198
+ sparseVectorizer: textToBm25SparseVector,
199
+ ...(input.graphEnrichment === undefined ? {} : { graphEnrichment: input.graphEnrichment }),
200
+ });
201
+ }
202
+ /** Die Botschaft eines unbekannten Wurfs, ohne je `[object Object]` zu zeigen. */
203
+ export function errorMessage(error) {
204
+ if (error instanceof Error)
205
+ return error.message;
206
+ if (typeof error === "string")
207
+ return error;
208
+ try {
209
+ return JSON.stringify(error);
210
+ }
211
+ catch {
212
+ return String(error);
213
+ }
214
+ }
215
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/cli/workspace.ts"],"names":[],"mappings":"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"}