kirograph 0.12.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 (434) hide show
  1. package/README.md +1171 -0
  2. package/dist/architecture/index.d.ts +11 -0
  3. package/dist/architecture/index.d.ts.map +1 -0
  4. package/dist/architecture/index.js +207 -0
  5. package/dist/architecture/index.js.map +7 -0
  6. package/dist/architecture/layers/csharp.d.ts +6 -0
  7. package/dist/architecture/layers/csharp.d.ts.map +1 -0
  8. package/dist/architecture/layers/csharp.js +100 -0
  9. package/dist/architecture/layers/csharp.js.map +7 -0
  10. package/dist/architecture/layers/elixir.js +116 -0
  11. package/dist/architecture/layers/elixir.js.map +7 -0
  12. package/dist/architecture/layers/go.d.ts +7 -0
  13. package/dist/architecture/layers/go.d.ts.map +1 -0
  14. package/dist/architecture/layers/go.js +117 -0
  15. package/dist/architecture/layers/go.js.map +7 -0
  16. package/dist/architecture/layers/index.d.ts +30 -0
  17. package/dist/architecture/layers/index.d.ts.map +1 -0
  18. package/dist/architecture/layers/index.js +100 -0
  19. package/dist/architecture/layers/index.js.map +7 -0
  20. package/dist/architecture/layers/java.d.ts +7 -0
  21. package/dist/architecture/layers/java.d.ts.map +1 -0
  22. package/dist/architecture/layers/java.js +119 -0
  23. package/dist/architecture/layers/java.js.map +7 -0
  24. package/dist/architecture/layers/python.d.ts +7 -0
  25. package/dist/architecture/layers/python.d.ts.map +1 -0
  26. package/dist/architecture/layers/python.js +111 -0
  27. package/dist/architecture/layers/python.js.map +7 -0
  28. package/dist/architecture/layers/ruby.d.ts +6 -0
  29. package/dist/architecture/layers/ruby.d.ts.map +1 -0
  30. package/dist/architecture/layers/ruby.js +95 -0
  31. package/dist/architecture/layers/ruby.js.map +7 -0
  32. package/dist/architecture/layers/rust.d.ts +6 -0
  33. package/dist/architecture/layers/rust.d.ts.map +1 -0
  34. package/dist/architecture/layers/rust.js +98 -0
  35. package/dist/architecture/layers/rust.js.map +7 -0
  36. package/dist/architecture/layers/types.d.ts +2 -0
  37. package/dist/architecture/layers/types.d.ts.map +1 -0
  38. package/dist/architecture/layers/types.js +17 -0
  39. package/dist/architecture/layers/types.js.map +7 -0
  40. package/dist/architecture/layers/typescript.d.ts +9 -0
  41. package/dist/architecture/layers/typescript.d.ts.map +1 -0
  42. package/dist/architecture/layers/typescript.js +143 -0
  43. package/dist/architecture/layers/typescript.js.map +7 -0
  44. package/dist/architecture/manifest/cargo.d.ts +3 -0
  45. package/dist/architecture/manifest/cargo.d.ts.map +1 -0
  46. package/dist/architecture/manifest/cargo.js +94 -0
  47. package/dist/architecture/manifest/cargo.js.map +7 -0
  48. package/dist/architecture/manifest/csproj.d.ts +3 -0
  49. package/dist/architecture/manifest/csproj.d.ts.map +1 -0
  50. package/dist/architecture/manifest/csproj.js +75 -0
  51. package/dist/architecture/manifest/csproj.js.map +7 -0
  52. package/dist/architecture/manifest/go.d.ts +3 -0
  53. package/dist/architecture/manifest/go.d.ts.map +1 -0
  54. package/dist/architecture/manifest/go.js +85 -0
  55. package/dist/architecture/manifest/go.js.map +7 -0
  56. package/dist/architecture/manifest/gradle.d.ts +3 -0
  57. package/dist/architecture/manifest/gradle.d.ts.map +1 -0
  58. package/dist/architecture/manifest/gradle.js +80 -0
  59. package/dist/architecture/manifest/gradle.js.map +7 -0
  60. package/dist/architecture/manifest/index.d.ts +12 -0
  61. package/dist/architecture/manifest/index.d.ts.map +1 -0
  62. package/dist/architecture/manifest/index.js +130 -0
  63. package/dist/architecture/manifest/index.js.map +7 -0
  64. package/dist/architecture/manifest/maven.d.ts +3 -0
  65. package/dist/architecture/manifest/maven.d.ts.map +1 -0
  66. package/dist/architecture/manifest/maven.js +76 -0
  67. package/dist/architecture/manifest/maven.js.map +7 -0
  68. package/dist/architecture/manifest/npm.d.ts +3 -0
  69. package/dist/architecture/manifest/npm.d.ts.map +1 -0
  70. package/dist/architecture/manifest/npm.js +103 -0
  71. package/dist/architecture/manifest/npm.js.map +7 -0
  72. package/dist/architecture/manifest/python.d.ts +3 -0
  73. package/dist/architecture/manifest/python.d.ts.map +1 -0
  74. package/dist/architecture/manifest/python.js +105 -0
  75. package/dist/architecture/manifest/python.js.map +7 -0
  76. package/dist/architecture/manifest/types.d.ts +2 -0
  77. package/dist/architecture/manifest/types.d.ts.map +1 -0
  78. package/dist/architecture/manifest/types.js +17 -0
  79. package/dist/architecture/manifest/types.js.map +7 -0
  80. package/dist/architecture/types.d.ts +91 -0
  81. package/dist/architecture/types.d.ts.map +1 -0
  82. package/dist/architecture/types.js +17 -0
  83. package/dist/architecture/types.js.map +7 -0
  84. package/dist/assets/logo.png +0 -0
  85. package/dist/banner.d.ts +6 -0
  86. package/dist/banner.d.ts.map +1 -0
  87. package/dist/banner.js +67 -0
  88. package/dist/banner.js.map +1 -0
  89. package/dist/bin/banner.d.ts +6 -0
  90. package/dist/bin/banner.d.ts.map +1 -0
  91. package/dist/bin/banner.js +88 -0
  92. package/dist/bin/banner.js.map +7 -0
  93. package/dist/bin/commands/affected.d.ts +3 -0
  94. package/dist/bin/commands/affected.d.ts.map +1 -0
  95. package/dist/bin/commands/affected.js +78 -0
  96. package/dist/bin/commands/affected.js.map +7 -0
  97. package/dist/bin/commands/architecture.d.ts +3 -0
  98. package/dist/bin/commands/architecture.d.ts.map +1 -0
  99. package/dist/bin/commands/architecture.js +125 -0
  100. package/dist/bin/commands/architecture.js.map +7 -0
  101. package/dist/bin/commands/caveman.js +136 -0
  102. package/dist/bin/commands/caveman.js.map +7 -0
  103. package/dist/bin/commands/context.d.ts +3 -0
  104. package/dist/bin/commands/context.d.ts.map +1 -0
  105. package/dist/bin/commands/context.js +81 -0
  106. package/dist/bin/commands/context.js.map +7 -0
  107. package/dist/bin/commands/coupling.d.ts +3 -0
  108. package/dist/bin/commands/coupling.d.ts.map +1 -0
  109. package/dist/bin/commands/coupling.js +164 -0
  110. package/dist/bin/commands/coupling.js.map +7 -0
  111. package/dist/bin/commands/dashboard.d.ts +3 -0
  112. package/dist/bin/commands/dashboard.d.ts.map +1 -0
  113. package/dist/bin/commands/dashboard.js +209 -0
  114. package/dist/bin/commands/dashboard.js.map +7 -0
  115. package/dist/bin/commands/dead-code.js +77 -0
  116. package/dist/bin/commands/dead-code.js.map +7 -0
  117. package/dist/bin/commands/export.js +2620 -0
  118. package/dist/bin/commands/export.js.map +7 -0
  119. package/dist/bin/commands/files.d.ts +3 -0
  120. package/dist/bin/commands/files.d.ts.map +1 -0
  121. package/dist/bin/commands/files.js +104 -0
  122. package/dist/bin/commands/files.js.map +7 -0
  123. package/dist/bin/commands/help.d.ts +4 -0
  124. package/dist/bin/commands/help.d.ts.map +1 -0
  125. package/dist/bin/commands/help.js +212 -0
  126. package/dist/bin/commands/help.js.map +7 -0
  127. package/dist/bin/commands/hotspots.js +77 -0
  128. package/dist/bin/commands/hotspots.js.map +7 -0
  129. package/dist/bin/commands/index.d.ts +3 -0
  130. package/dist/bin/commands/index.d.ts.map +1 -0
  131. package/dist/bin/commands/index.js +58 -0
  132. package/dist/bin/commands/index.js.map +7 -0
  133. package/dist/bin/commands/init.d.ts +3 -0
  134. package/dist/bin/commands/init.d.ts.map +1 -0
  135. package/dist/bin/commands/init.js +68 -0
  136. package/dist/bin/commands/init.js.map +7 -0
  137. package/dist/bin/commands/install.d.ts +3 -0
  138. package/dist/bin/commands/install.d.ts.map +1 -0
  139. package/dist/bin/commands/install.js +34 -0
  140. package/dist/bin/commands/install.js.map +7 -0
  141. package/dist/bin/commands/mark-dirty.d.ts +3 -0
  142. package/dist/bin/commands/mark-dirty.d.ts.map +1 -0
  143. package/dist/bin/commands/mark-dirty.js +51 -0
  144. package/dist/bin/commands/mark-dirty.js.map +7 -0
  145. package/dist/bin/commands/package.d.ts +3 -0
  146. package/dist/bin/commands/package.d.ts.map +1 -0
  147. package/dist/bin/commands/package.js +139 -0
  148. package/dist/bin/commands/package.js.map +7 -0
  149. package/dist/bin/commands/path.js +93 -0
  150. package/dist/bin/commands/path.js.map +7 -0
  151. package/dist/bin/commands/qdrant.d.ts +3 -0
  152. package/dist/bin/commands/qdrant.d.ts.map +1 -0
  153. package/dist/bin/commands/qdrant.js +159 -0
  154. package/dist/bin/commands/qdrant.js.map +1 -0
  155. package/dist/bin/commands/query.d.ts +3 -0
  156. package/dist/bin/commands/query.d.ts.map +1 -0
  157. package/dist/bin/commands/query.js +47 -0
  158. package/dist/bin/commands/query.js.map +7 -0
  159. package/dist/bin/commands/serve.d.ts +3 -0
  160. package/dist/bin/commands/serve.d.ts.map +1 -0
  161. package/dist/bin/commands/serve.js +59 -0
  162. package/dist/bin/commands/serve.js.map +7 -0
  163. package/dist/bin/commands/snapshot.js +122 -0
  164. package/dist/bin/commands/snapshot.js.map +7 -0
  165. package/dist/bin/commands/status.d.ts +3 -0
  166. package/dist/bin/commands/status.d.ts.map +1 -0
  167. package/dist/bin/commands/status.js +107 -0
  168. package/dist/bin/commands/status.js.map +7 -0
  169. package/dist/bin/commands/stop.d.ts +3 -0
  170. package/dist/bin/commands/stop.d.ts.map +1 -0
  171. package/dist/bin/commands/stop.js +81 -0
  172. package/dist/bin/commands/stop.js.map +1 -0
  173. package/dist/bin/commands/surprising.js +79 -0
  174. package/dist/bin/commands/surprising.js.map +7 -0
  175. package/dist/bin/commands/sync-if-dirty.d.ts +3 -0
  176. package/dist/bin/commands/sync-if-dirty.d.ts.map +1 -0
  177. package/dist/bin/commands/sync-if-dirty.js +67 -0
  178. package/dist/bin/commands/sync-if-dirty.js.map +7 -0
  179. package/dist/bin/commands/sync.d.ts +3 -0
  180. package/dist/bin/commands/sync.d.ts.map +1 -0
  181. package/dist/bin/commands/sync.js +81 -0
  182. package/dist/bin/commands/sync.js.map +7 -0
  183. package/dist/bin/commands/typesense.d.ts +3 -0
  184. package/dist/bin/commands/typesense.d.ts.map +1 -0
  185. package/dist/bin/commands/typesense.js +126 -0
  186. package/dist/bin/commands/typesense.js.map +1 -0
  187. package/dist/bin/commands/uninit.d.ts +4 -0
  188. package/dist/bin/commands/uninit.d.ts.map +1 -0
  189. package/dist/bin/commands/uninit.js +123 -0
  190. package/dist/bin/commands/uninit.js.map +7 -0
  191. package/dist/bin/commands/unlock.d.ts +3 -0
  192. package/dist/bin/commands/unlock.d.ts.map +1 -0
  193. package/dist/bin/commands/unlock.js +53 -0
  194. package/dist/bin/commands/unlock.js.map +7 -0
  195. package/dist/bin/commands/utils.d.ts +12 -0
  196. package/dist/bin/commands/utils.d.ts.map +1 -0
  197. package/dist/bin/commands/utils.js +56 -0
  198. package/dist/bin/commands/utils.js.map +7 -0
  199. package/dist/bin/installer/archive.js +230 -0
  200. package/dist/bin/installer/archive.js.map +7 -0
  201. package/dist/bin/installer/caveman.js +57 -0
  202. package/dist/bin/installer/caveman.js.map +7 -0
  203. package/dist/bin/installer/cli-agent.d.ts +15 -0
  204. package/dist/bin/installer/cli-agent.d.ts.map +1 -0
  205. package/dist/bin/installer/cli-agent.js +89 -0
  206. package/dist/bin/installer/cli-agent.js.map +7 -0
  207. package/dist/bin/installer/config-prompt.d.ts +13 -0
  208. package/dist/bin/installer/config-prompt.d.ts.map +1 -0
  209. package/dist/bin/installer/config-prompt.js +158 -0
  210. package/dist/bin/installer/config-prompt.js.map +7 -0
  211. package/dist/bin/installer/dashboard.d.ts +3 -0
  212. package/dist/bin/installer/dashboard.d.ts.map +1 -0
  213. package/dist/bin/installer/dashboard.js +149 -0
  214. package/dist/bin/installer/dashboard.js.map +7 -0
  215. package/dist/bin/installer/hooks.d.ts +5 -0
  216. package/dist/bin/installer/hooks.d.ts.map +1 -0
  217. package/dist/bin/installer/hooks.js +155 -0
  218. package/dist/bin/installer/hooks.js.map +7 -0
  219. package/dist/bin/installer/index.d.ts +11 -0
  220. package/dist/bin/installer/index.d.ts.map +1 -0
  221. package/dist/bin/installer/index.js +228 -0
  222. package/dist/bin/installer/index.js.map +7 -0
  223. package/dist/bin/installer/mcp.d.ts +5 -0
  224. package/dist/bin/installer/mcp.d.ts.map +1 -0
  225. package/dist/bin/installer/mcp.js +80 -0
  226. package/dist/bin/installer/mcp.js.map +7 -0
  227. package/dist/bin/installer/prompts.d.ts +28 -0
  228. package/dist/bin/installer/prompts.d.ts.map +1 -0
  229. package/dist/bin/installer/prompts.js +134 -0
  230. package/dist/bin/installer/prompts.js.map +7 -0
  231. package/dist/bin/installer/qdrant-dashboard.d.ts +4 -0
  232. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -0
  233. package/dist/bin/installer/qdrant-dashboard.js +115 -0
  234. package/dist/bin/installer/qdrant-dashboard.js.map +7 -0
  235. package/dist/bin/installer/steering.d.ts +5 -0
  236. package/dist/bin/installer/steering.d.ts.map +1 -0
  237. package/dist/bin/installer/steering.js +283 -0
  238. package/dist/bin/installer/steering.js.map +7 -0
  239. package/dist/bin/kirograph.d.ts +6 -0
  240. package/dist/bin/kirograph.d.ts.map +1 -0
  241. package/dist/bin/kirograph.js +95 -0
  242. package/dist/bin/kirograph.js.map +7 -0
  243. package/dist/bin/progress.d.ts +14 -0
  244. package/dist/bin/progress.d.ts.map +1 -0
  245. package/dist/bin/progress.js +201 -0
  246. package/dist/bin/progress.js.map +7 -0
  247. package/dist/bin/ui.d.ts +11 -0
  248. package/dist/bin/ui.d.ts.map +1 -0
  249. package/dist/bin/ui.js +71 -0
  250. package/dist/bin/ui.js.map +7 -0
  251. package/dist/config.d.ts +48 -0
  252. package/dist/config.d.ts.map +1 -0
  253. package/dist/config.js +273 -0
  254. package/dist/config.js.map +7 -0
  255. package/dist/context/index.d.ts +61 -0
  256. package/dist/context/index.d.ts.map +1 -0
  257. package/dist/context/index.js +224 -0
  258. package/dist/context/index.js.map +7 -0
  259. package/dist/core/file-tree.d.ts +15 -0
  260. package/dist/core/file-tree.d.ts.map +1 -0
  261. package/dist/core/file-tree.js +69 -0
  262. package/dist/core/file-tree.js.map +7 -0
  263. package/dist/core/lock-manager.d.ts +20 -0
  264. package/dist/core/lock-manager.d.ts.map +1 -0
  265. package/dist/core/lock-manager.js +120 -0
  266. package/dist/core/lock-manager.js.map +7 -0
  267. package/dist/core/pipeline.d.ts +37 -0
  268. package/dist/core/pipeline.d.ts.map +1 -0
  269. package/dist/core/pipeline.js +375 -0
  270. package/dist/core/pipeline.js.map +7 -0
  271. package/dist/core/snapshot.js +141 -0
  272. package/dist/core/snapshot.js.map +7 -0
  273. package/dist/db/database.d.ts +133 -0
  274. package/dist/db/database.d.ts.map +1 -0
  275. package/dist/db/database.js +929 -0
  276. package/dist/db/database.js.map +7 -0
  277. package/dist/db/schema.sql +174 -0
  278. package/dist/errors.d.ts +49 -0
  279. package/dist/errors.d.ts.map +1 -0
  280. package/dist/errors.js +160 -0
  281. package/dist/errors.js.map +7 -0
  282. package/dist/extraction/extractor.d.ts +29 -0
  283. package/dist/extraction/extractor.d.ts.map +1 -0
  284. package/dist/extraction/extractor.js +764 -0
  285. package/dist/extraction/extractor.js.map +7 -0
  286. package/dist/extraction/grammars.d.ts +48 -0
  287. package/dist/extraction/grammars.d.ts.map +1 -0
  288. package/dist/extraction/grammars.js +166 -0
  289. package/dist/extraction/grammars.js.map +7 -0
  290. package/dist/extraction/languages.d.ts +9 -0
  291. package/dist/extraction/languages.d.ts.map +1 -0
  292. package/dist/extraction/languages.js +103 -0
  293. package/dist/extraction/languages.js.map +7 -0
  294. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  295. package/dist/frameworks/csharp.d.ts +8 -0
  296. package/dist/frameworks/csharp.d.ts.map +1 -0
  297. package/dist/frameworks/csharp.js +93 -0
  298. package/dist/frameworks/csharp.js.map +7 -0
  299. package/dist/frameworks/elixir.js +142 -0
  300. package/dist/frameworks/elixir.js.map +7 -0
  301. package/dist/frameworks/express.d.ts +8 -0
  302. package/dist/frameworks/express.d.ts.map +1 -0
  303. package/dist/frameworks/express.js +143 -0
  304. package/dist/frameworks/express.js.map +7 -0
  305. package/dist/frameworks/go.d.ts +8 -0
  306. package/dist/frameworks/go.d.ts.map +1 -0
  307. package/dist/frameworks/go.js +85 -0
  308. package/dist/frameworks/go.js.map +7 -0
  309. package/dist/frameworks/index.d.ts +30 -0
  310. package/dist/frameworks/index.d.ts.map +1 -0
  311. package/dist/frameworks/index.js +243 -0
  312. package/dist/frameworks/index.js.map +7 -0
  313. package/dist/frameworks/java.d.ts +8 -0
  314. package/dist/frameworks/java.d.ts.map +1 -0
  315. package/dist/frameworks/java.js +87 -0
  316. package/dist/frameworks/java.js.map +7 -0
  317. package/dist/frameworks/laravel.d.ts +9 -0
  318. package/dist/frameworks/laravel.d.ts.map +1 -0
  319. package/dist/frameworks/laravel.js +115 -0
  320. package/dist/frameworks/laravel.js.map +7 -0
  321. package/dist/frameworks/python.d.ts +10 -0
  322. package/dist/frameworks/python.d.ts.map +1 -0
  323. package/dist/frameworks/python.js +158 -0
  324. package/dist/frameworks/python.js.map +7 -0
  325. package/dist/frameworks/react.d.ts +9 -0
  326. package/dist/frameworks/react.d.ts.map +1 -0
  327. package/dist/frameworks/react.js +230 -0
  328. package/dist/frameworks/react.js.map +7 -0
  329. package/dist/frameworks/ruby.d.ts +8 -0
  330. package/dist/frameworks/ruby.d.ts.map +1 -0
  331. package/dist/frameworks/ruby.js +136 -0
  332. package/dist/frameworks/ruby.js.map +7 -0
  333. package/dist/frameworks/rust.d.ts +8 -0
  334. package/dist/frameworks/rust.d.ts.map +1 -0
  335. package/dist/frameworks/rust.js +82 -0
  336. package/dist/frameworks/rust.js.map +7 -0
  337. package/dist/frameworks/svelte.d.ts +8 -0
  338. package/dist/frameworks/svelte.d.ts.map +1 -0
  339. package/dist/frameworks/svelte.js +174 -0
  340. package/dist/frameworks/svelte.js.map +7 -0
  341. package/dist/frameworks/swift.d.ts +10 -0
  342. package/dist/frameworks/swift.d.ts.map +1 -0
  343. package/dist/frameworks/swift.js +151 -0
  344. package/dist/frameworks/swift.js.map +7 -0
  345. package/dist/frameworks/types.d.ts +37 -0
  346. package/dist/frameworks/types.d.ts.map +1 -0
  347. package/dist/frameworks/types.js +17 -0
  348. package/dist/frameworks/types.js.map +7 -0
  349. package/dist/graph/queries.d.ts +53 -0
  350. package/dist/graph/queries.d.ts.map +1 -0
  351. package/dist/graph/queries.js +224 -0
  352. package/dist/graph/queries.js.map +7 -0
  353. package/dist/graph/traversal.d.ts +35 -0
  354. package/dist/graph/traversal.d.ts.map +1 -0
  355. package/dist/graph/traversal.js +148 -0
  356. package/dist/graph/traversal.js.map +7 -0
  357. package/dist/index.d.ts +102 -0
  358. package/dist/index.d.ts.map +1 -0
  359. package/dist/index.js +303 -0
  360. package/dist/index.js.map +7 -0
  361. package/dist/installer/index.d.ts +10 -0
  362. package/dist/installer/index.d.ts.map +1 -0
  363. package/dist/installer/index.js +526 -0
  364. package/dist/installer/index.js.map +1 -0
  365. package/dist/mcp/server.d.ts +16 -0
  366. package/dist/mcp/server.d.ts.map +1 -0
  367. package/dist/mcp/server.js +116 -0
  368. package/dist/mcp/server.js.map +7 -0
  369. package/dist/mcp/tools.d.ts +37 -0
  370. package/dist/mcp/tools.d.ts.map +1 -0
  371. package/dist/mcp/tools.js +779 -0
  372. package/dist/mcp/tools.js.map +7 -0
  373. package/dist/mcp/transport.d.ts +29 -0
  374. package/dist/mcp/transport.d.ts.map +1 -0
  375. package/dist/mcp/transport.js +70 -0
  376. package/dist/mcp/transport.js.map +7 -0
  377. package/dist/resolution/index.d.ts +56 -0
  378. package/dist/resolution/index.d.ts.map +1 -0
  379. package/dist/resolution/index.js +384 -0
  380. package/dist/resolution/index.js.map +7 -0
  381. package/dist/resolution/name-matcher.d.ts +25 -0
  382. package/dist/resolution/name-matcher.d.ts.map +1 -0
  383. package/dist/resolution/name-matcher.js +60 -0
  384. package/dist/resolution/name-matcher.js.map +7 -0
  385. package/dist/scripts/postinstall.js +64 -0
  386. package/dist/search/query-utils.d.ts +21 -0
  387. package/dist/search/query-utils.d.ts.map +1 -0
  388. package/dist/search/query-utils.js +219 -0
  389. package/dist/search/query-utils.js.map +7 -0
  390. package/dist/search/searcher.d.ts +15 -0
  391. package/dist/search/searcher.d.ts.map +1 -0
  392. package/dist/search/searcher.js +49 -0
  393. package/dist/search/searcher.js.map +7 -0
  394. package/dist/sync/index.d.ts +33 -0
  395. package/dist/sync/index.d.ts.map +1 -0
  396. package/dist/sync/index.js +200 -0
  397. package/dist/sync/index.js.map +7 -0
  398. package/dist/types.d.ts +131 -0
  399. package/dist/types.d.ts.map +1 -0
  400. package/dist/types.js +37 -0
  401. package/dist/types.js.map +7 -0
  402. package/dist/utils.d.ts +52 -0
  403. package/dist/utils.d.ts.map +1 -0
  404. package/dist/utils.js +254 -0
  405. package/dist/utils.js.map +7 -0
  406. package/dist/vectors/index.d.ts +71 -0
  407. package/dist/vectors/index.d.ts.map +1 -0
  408. package/dist/vectors/index.js +480 -0
  409. package/dist/vectors/index.js.map +7 -0
  410. package/dist/vectors/lancedb-index.d.ts +50 -0
  411. package/dist/vectors/lancedb-index.d.ts.map +1 -0
  412. package/dist/vectors/lancedb-index.js +153 -0
  413. package/dist/vectors/lancedb-index.js.map +7 -0
  414. package/dist/vectors/orama-index.d.ts +54 -0
  415. package/dist/vectors/orama-index.d.ts.map +1 -0
  416. package/dist/vectors/orama-index.js +213 -0
  417. package/dist/vectors/orama-index.js.map +7 -0
  418. package/dist/vectors/pglite-index.d.ts +53 -0
  419. package/dist/vectors/pglite-index.d.ts.map +1 -0
  420. package/dist/vectors/pglite-index.js +194 -0
  421. package/dist/vectors/pglite-index.js.map +7 -0
  422. package/dist/vectors/qdrant-index.d.ts +70 -0
  423. package/dist/vectors/qdrant-index.d.ts.map +1 -0
  424. package/dist/vectors/qdrant-index.js +364 -0
  425. package/dist/vectors/qdrant-index.js.map +7 -0
  426. package/dist/vectors/typesense-index.d.ts +75 -0
  427. package/dist/vectors/typesense-index.d.ts.map +1 -0
  428. package/dist/vectors/typesense-index.js +453 -0
  429. package/dist/vectors/typesense-index.js.map +7 -0
  430. package/dist/vectors/vec-index.d.ts +52 -0
  431. package/dist/vectors/vec-index.d.ts.map +1 -0
  432. package/dist/vectors/vec-index.js +198 -0
  433. package/dist/vectors/vec-index.js.map +7 -0
  434. package/package.json +67 -0
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var coupling_exports = {};
30
+ __export(coupling_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(coupling_exports);
34
+ var path = __toESM(require("path"));
35
+ var import_ui = require("../ui");
36
+ const INSTABILITY_HIGH = 0.7;
37
+ const INSTABILITY_LOW = 0.3;
38
+ function instabilityBar(i) {
39
+ const pct = Math.round(i * 10);
40
+ const filled = "\u2588".repeat(pct);
41
+ const empty = "\u2591".repeat(10 - pct);
42
+ const color = i >= INSTABILITY_HIGH ? "\x1B[38;5;203m" : i <= INSTABILITY_LOW ? import_ui.green : "\x1B[33m";
43
+ return `${color}${filled}${import_ui.dim}${empty}${import_ui.reset}`;
44
+ }
45
+ function instabilityLabel(i) {
46
+ if (i >= INSTABILITY_HIGH) return `${"\x1B[38;5;203m"}unstable${import_ui.reset}`;
47
+ if (i <= INSTABILITY_LOW) return `${import_ui.green}stable${import_ui.reset}`;
48
+ return `${"\x1B[33m"}neutral${import_ui.reset}`;
49
+ }
50
+ function register(program) {
51
+ program.command("coupling [projectPath]").description("Show package coupling metrics (Ca, Ce, instability)").option("--package <id>", "Show details for a single package (ID or name fragment)").option("--sort <by>", "Sort by: instability, ca, ce, name", "instability").option("--format <fmt>", "Output format: markdown, json", "markdown").action(async (projectPath, opts) => {
52
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
53
+ const target = path.resolve(projectPath ?? process.cwd());
54
+ const cg = await KiroGraph.open(target);
55
+ if (!cg.isArchitectureEnabled()) {
56
+ console.error(`
57
+ ${"\x1B[33m"}\u26A0 Architecture analysis is disabled.${import_ui.reset}`);
58
+ console.error(` ${import_ui.dim}Enable it in .kirograph/config.json:${import_ui.reset} ${import_ui.violet}${import_ui.bold}"enableArchitecture": true${import_ui.reset}`);
59
+ console.error(` ${import_ui.dim}Then re-run:${import_ui.reset} ${import_ui.violet}${import_ui.bold}kirograph index${import_ui.reset}
60
+ `);
61
+ cg.close();
62
+ process.exit(1);
63
+ }
64
+ const arch = cg.getArchitecture();
65
+ if (opts.format === "json") {
66
+ const out = opts.package ? arch.coupling.filter((c) => c.packageId.includes(opts.package) || arch.packages.find((p) => p.id === c.packageId)?.name.includes(opts.package)) : arch.coupling;
67
+ console.log(JSON.stringify(out, null, 2));
68
+ cg.close();
69
+ return;
70
+ }
71
+ if (opts.package) {
72
+ const pkg = arch.packages.find(
73
+ (p) => p.id.includes(opts.package) || p.name.toLowerCase().includes(opts.package.toLowerCase())
74
+ );
75
+ if (!pkg) {
76
+ console.error(`
77
+ ${"\x1B[38;5;203m"}\u2717 Package not found: ${opts.package}${import_ui.reset}
78
+ `);
79
+ cg.close();
80
+ process.exit(1);
81
+ }
82
+ const c = arch.coupling.find((x) => x.packageId === pkg.id);
83
+ console.log(`
84
+ ${(0, import_ui.section)(pkg.name)} ${import_ui.dim}${pkg.path}${import_ui.reset}
85
+ `);
86
+ console.log((0, import_ui.renderTable)([
87
+ ["Afferent Ca", String(c?.afferent ?? 0)],
88
+ ["Efferent Ce", String(c?.efferent ?? 0)],
89
+ ["Instability", c ? `${(c.instability * 100).toFixed(0)}%` : "n/a"]
90
+ ]));
91
+ const incoming = arch.packageDeps.filter((d) => d.targetPkg === pkg.id);
92
+ if (incoming.length > 0) {
93
+ console.log(`
94
+ ${(0, import_ui.label)("Depended on by")} ${import_ui.dim}(${incoming.length})${import_ui.reset}
95
+ `);
96
+ for (const d of incoming) {
97
+ const name = arch.packages.find((p) => p.id === d.sourcePkg)?.name ?? d.sourcePkg;
98
+ console.log(` ${import_ui.dim}\u2190${import_ui.reset} ${import_ui.violet}${name}${import_ui.reset} ${import_ui.dim}(${d.depCount} import${d.depCount !== 1 ? "s" : ""})${import_ui.reset}`);
99
+ }
100
+ }
101
+ const outgoing = arch.packageDeps.filter((d) => d.sourcePkg === pkg.id);
102
+ if (outgoing.length > 0) {
103
+ console.log(`
104
+ ${(0, import_ui.label)("Depends on")} ${import_ui.dim}(${outgoing.length})${import_ui.reset}
105
+ `);
106
+ for (const d of outgoing) {
107
+ const name = arch.packages.find((p) => p.id === d.targetPkg)?.name ?? d.targetPkg;
108
+ console.log(` ${import_ui.dim}\u2192${import_ui.reset} ${import_ui.violet}${name}${import_ui.reset} ${import_ui.dim}(${d.depCount} import${d.depCount !== 1 ? "s" : ""})${import_ui.reset}`);
109
+ }
110
+ }
111
+ console.log();
112
+ cg.close();
113
+ return;
114
+ }
115
+ let coupling = arch.coupling.slice();
116
+ const pkgById = new Map(arch.packages.map((p) => [p.id, p]));
117
+ switch (opts.sort) {
118
+ case "ca":
119
+ coupling.sort((a, b) => b.afferent - a.afferent);
120
+ break;
121
+ case "ce":
122
+ coupling.sort((a, b) => b.efferent - a.efferent);
123
+ break;
124
+ case "name":
125
+ coupling.sort((a, b) => (pkgById.get(a.packageId)?.name ?? "").localeCompare(pkgById.get(b.packageId)?.name ?? ""));
126
+ break;
127
+ default:
128
+ coupling.sort((a, b) => b.instability - a.instability);
129
+ break;
130
+ }
131
+ console.log(`
132
+ ${(0, import_ui.section)("Coupling Metrics")} ${import_ui.dim}sorted by ${opts.sort}${import_ui.reset}
133
+ `);
134
+ if (coupling.length === 0) {
135
+ console.log(` ${import_ui.dim}No coupling data. Run ${import_ui.reset}${import_ui.violet}${import_ui.bold}kirograph index${import_ui.reset}${import_ui.dim} with enableArchitecture=true.${import_ui.reset}
136
+ `);
137
+ cg.close();
138
+ return;
139
+ }
140
+ const nameW = Math.max(...coupling.map((c) => (pkgById.get(c.packageId)?.name ?? c.packageId).length), 4);
141
+ console.log(` ${import_ui.dim}${"Package".padEnd(nameW)} Ca Ce Instability${import_ui.reset}`);
142
+ console.log(` ${import_ui.dim}${"\u2500".repeat(nameW + 26)}${import_ui.reset}`);
143
+ for (const c of coupling) {
144
+ const pkg = pkgById.get(c.packageId);
145
+ const name = (pkg?.name ?? c.packageId).padEnd(nameW);
146
+ const ca = String(c.afferent).padStart(3);
147
+ const ce = String(c.efferent).padStart(3);
148
+ const pct = `${(c.instability * 100).toFixed(0)}%`.padStart(4);
149
+ const bar = instabilityBar(c.instability);
150
+ const lbl = instabilityLabel(c.instability);
151
+ console.log(` ${import_ui.violet}${name}${import_ui.reset} ${import_ui.dim}${ca}${import_ui.reset} ${import_ui.dim}${ce}${import_ui.reset} ${bar} ${pct} ${lbl}`);
152
+ }
153
+ const avgInstability = coupling.length > 0 ? coupling.reduce((s, c) => s + c.instability, 0) / coupling.length : 0;
154
+ console.log(`
155
+ ${(0, import_ui.label)("Packages")} ${(0, import_ui.value)(String(coupling.length))} ${(0, import_ui.label)("Avg instability")} ${(0, import_ui.value)(`${(avgInstability * 100).toFixed(0)}%`)}
156
+ `);
157
+ cg.close();
158
+ });
159
+ }
160
+ // Annotate the CommonJS export names for ESM import in node:
161
+ 0 && (module.exports = {
162
+ register
163
+ });
164
+ //# sourceMappingURL=coupling.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/coupling.ts"],
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport { dim, reset, violet, bold, green, label, value, section, renderTable } from '../ui';\n\nconst INSTABILITY_HIGH = 0.7;\nconst INSTABILITY_LOW = 0.3;\n\nfunction instabilityBar(i: number): string {\n const pct = Math.round(i * 10);\n const filled = '\u2588'.repeat(pct);\n const empty = '\u2591'.repeat(10 - pct);\n const color = i >= INSTABILITY_HIGH ? '\\x1b[38;5;203m' : i <= INSTABILITY_LOW ? green : '\\x1b[33m';\n return `${color}${filled}${dim}${empty}${reset}`;\n}\n\nfunction instabilityLabel(i: number): string {\n if (i >= INSTABILITY_HIGH) return `${'\\x1b[38;5;203m'}unstable${reset}`;\n if (i <= INSTABILITY_LOW) return `${green}stable${reset}`;\n return `${'\\x1b[33m'}neutral${reset}`;\n}\n\nexport function register(program: Command): void {\n program\n .command('coupling [projectPath]')\n .description('Show package coupling metrics (Ca, Ce, instability)')\n .option('--package <id>', 'Show details for a single package (ID or name fragment)')\n .option('--sort <by>', 'Sort by: instability, ca, ce, name', 'instability')\n .option('--format <fmt>', 'Output format: markdown, json', 'markdown')\n .action(async (projectPath: string | undefined, opts: { package?: string; sort: string; format: string }) => {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const target = path.resolve(projectPath ?? process.cwd());\n const cg = await KiroGraph.open(target);\n\n if (!cg.isArchitectureEnabled()) {\n console.error(`\\n ${'\\x1b[33m'}\u26A0 Architecture analysis is disabled.${reset}`);\n console.error(` ${dim}Enable it in .kirograph/config.json:${reset} ${violet}${bold}\"enableArchitecture\": true${reset}`);\n console.error(` ${dim}Then re-run:${reset} ${violet}${bold}kirograph index${reset}\\n`);\n cg.close(); process.exit(1);\n }\n\n const arch = cg.getArchitecture();\n\n if (opts.format === 'json') {\n const out = opts.package\n ? arch.coupling.filter(c => c.packageId.includes(opts.package!) || arch.packages.find(p => p.id === c.packageId)?.name.includes(opts.package!))\n : arch.coupling;\n console.log(JSON.stringify(out, null, 2));\n cg.close(); return;\n }\n\n // \u2500\u2500 Single package detail \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (opts.package) {\n const pkg = arch.packages.find(p =>\n p.id.includes(opts.package!) || p.name.toLowerCase().includes(opts.package!.toLowerCase())\n );\n if (!pkg) {\n console.error(`\\n ${'\\x1b[38;5;203m'}\u2717 Package not found: ${opts.package}${reset}\\n`);\n cg.close(); process.exit(1);\n }\n const c = arch.coupling.find(x => x.packageId === pkg.id);\n\n console.log(`\\n ${section(pkg.name)} ${dim}${pkg.path}${reset}\\n`);\n console.log(renderTable([\n ['Afferent Ca', String(c?.afferent ?? 0)],\n ['Efferent Ce', String(c?.efferent ?? 0)],\n ['Instability', c ? `${(c.instability * 100).toFixed(0)}%` : 'n/a'],\n ]));\n\n // Incoming deps (who depends on this package)\n const incoming = arch.packageDeps.filter(d => d.targetPkg === pkg.id);\n if (incoming.length > 0) {\n console.log(`\\n ${label('Depended on by')} ${dim}(${incoming.length})${reset}\\n`);\n for (const d of incoming) {\n const name = arch.packages.find(p => p.id === d.sourcePkg)?.name ?? d.sourcePkg;\n console.log(` ${dim}\u2190${reset} ${violet}${name}${reset} ${dim}(${d.depCount} import${d.depCount !== 1 ? 's' : ''})${reset}`);\n }\n }\n\n // Outgoing deps (what this package depends on)\n const outgoing = arch.packageDeps.filter(d => d.sourcePkg === pkg.id);\n if (outgoing.length > 0) {\n console.log(`\\n ${label('Depends on')} ${dim}(${outgoing.length})${reset}\\n`);\n for (const d of outgoing) {\n const name = arch.packages.find(p => p.id === d.targetPkg)?.name ?? d.targetPkg;\n console.log(` ${dim}\u2192${reset} ${violet}${name}${reset} ${dim}(${d.depCount} import${d.depCount !== 1 ? 's' : ''})${reset}`);\n }\n }\n\n console.log();\n cg.close(); return;\n }\n\n // \u2500\u2500 All packages overview \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n let coupling = arch.coupling.slice();\n\n // Attach package name for sorting/display\n const pkgById = new Map(arch.packages.map(p => [p.id, p]));\n\n switch (opts.sort) {\n case 'ca': coupling.sort((a, b) => b.afferent - a.afferent); break;\n case 'ce': coupling.sort((a, b) => b.efferent - a.efferent); break;\n case 'name': coupling.sort((a, b) => (pkgById.get(a.packageId)?.name ?? '').localeCompare(pkgById.get(b.packageId)?.name ?? '')); break;\n default: coupling.sort((a, b) => b.instability - a.instability); break;\n }\n\n console.log(`\\n ${section('Coupling Metrics')} ${dim}sorted by ${opts.sort}${reset}\\n`);\n\n if (coupling.length === 0) {\n console.log(` ${dim}No coupling data. Run ${reset}${violet}${bold}kirograph index${reset}${dim} with enableArchitecture=true.${reset}\\n`);\n cg.close(); return;\n }\n\n const nameW = Math.max(...coupling.map(c => (pkgById.get(c.packageId)?.name ?? c.packageId).length), 4);\n\n // Header\n console.log(` ${dim}${'Package'.padEnd(nameW)} Ca Ce Instability${reset}`);\n console.log(` ${dim}${'\u2500'.repeat(nameW + 26)}${reset}`);\n\n for (const c of coupling) {\n const pkg = pkgById.get(c.packageId);\n const name = (pkg?.name ?? c.packageId).padEnd(nameW);\n const ca = String(c.afferent).padStart(3);\n const ce = String(c.efferent).padStart(3);\n const pct = `${(c.instability * 100).toFixed(0)}%`.padStart(4);\n const bar = instabilityBar(c.instability);\n const lbl = instabilityLabel(c.instability);\n console.log(` ${violet}${name}${reset} ${dim}${ca}${reset} ${dim}${ce}${reset} ${bar} ${pct} ${lbl}`);\n }\n\n // Summary\n const avgInstability = coupling.length > 0\n ? coupling.reduce((s, c) => s + c.instability, 0) / coupling.length\n : 0;\n console.log(`\\n ${label('Packages')} ${value(String(coupling.length))} ${label('Avg instability')} ${value(`${(avgInstability * 100).toFixed(0)}%`)}\\n`);\n\n cg.close();\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6HpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+B/C"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var dashboard_exports = {};
30
+ __export(dashboard_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(dashboard_exports);
34
+ var path = __toESM(require("path"));
35
+ var fs = __toESM(require("fs"));
36
+ var http = __toESM(require("http"));
37
+ var import_ui = require("../ui");
38
+ var import_config = require("../../config");
39
+ function readJson(file) {
40
+ try {
41
+ return JSON.parse(fs.readFileSync(file, "utf8"));
42
+ } catch {
43
+ return null;
44
+ }
45
+ }
46
+ function isAlive(pid) {
47
+ try {
48
+ process.kill(pid, 0);
49
+ return true;
50
+ } catch {
51
+ return false;
52
+ }
53
+ }
54
+ function killState(stateFile, pid, label_, portLabel) {
55
+ let killed = false;
56
+ if (isAlive(pid)) {
57
+ try {
58
+ process.kill(pid, "SIGTERM");
59
+ killed = true;
60
+ } catch {
61
+ }
62
+ }
63
+ try {
64
+ fs.unlinkSync(stateFile);
65
+ } catch {
66
+ }
67
+ if (killed) {
68
+ console.log(` ${import_ui.green}\u2713${import_ui.reset} ${(0, import_ui.label)("Stopped")} ${label_} ${import_ui.dim}(pid ${pid}, port ${portLabel})${import_ui.reset}`);
69
+ } else {
70
+ console.log(` ${import_ui.dim}${label_} (pid ${pid}) was not running \u2014 state file cleaned up.${import_ui.reset}`);
71
+ }
72
+ }
73
+ function qdrantDashboardReachable(port) {
74
+ return new Promise((resolve) => {
75
+ const req = http.get(`http://127.0.0.1:${port}/dashboard`, (res) => {
76
+ resolve(res.statusCode !== 404);
77
+ res.resume();
78
+ });
79
+ req.on("error", () => resolve(false));
80
+ req.setTimeout(1e3, () => {
81
+ req.destroy();
82
+ resolve(false);
83
+ });
84
+ });
85
+ }
86
+ async function startTypesense(target) {
87
+ const kirographDir = path.join(target, ".kirograph");
88
+ const stateFile = path.join(kirographDir, "typesense-server.json");
89
+ const saved = readJson(stateFile);
90
+ if (saved && isAlive(saved.pid)) {
91
+ console.log(`
92
+ ${import_ui.green}\u2713${import_ui.reset} Typesense already running ${import_ui.dim}(pid ${saved.pid}, port ${saved.apiPort})${import_ui.reset}`);
93
+ } else {
94
+ console.log();
95
+ const { TypesenseIndex } = await Promise.resolve().then(() => require("../../vectors/typesense-index.js"));
96
+ const index = new TypesenseIndex(kirographDir);
97
+ await index.initialize();
98
+ if (!index.isAvailable()) {
99
+ console.log(` Typesense failed to start.
100
+ `);
101
+ return;
102
+ }
103
+ index.close();
104
+ }
105
+ const { openTypesenseDashboard } = await Promise.resolve().then(() => require("../installer/dashboard.js"));
106
+ await openTypesenseDashboard(target);
107
+ console.log(` ${import_ui.dim}Press Ctrl+C to close the dashboard (Typesense keeps running \u2014 use ${import_ui.reset}kg dashboard stop${import_ui.dim} to shut it down).${import_ui.reset}
108
+ `);
109
+ process.on("SIGINT", () => process.exit(0));
110
+ }
111
+ async function startQdrant(target) {
112
+ const kirographDir = path.join(target, ".kirograph");
113
+ const stateFile = path.join(kirographDir, "qdrant-server.json");
114
+ const { ensureQdrantUI, openQdrantDashboard } = await Promise.resolve().then(() => require("../installer/qdrant-dashboard.js"));
115
+ const uiReady = await ensureQdrantUI(target);
116
+ if (!uiReady) {
117
+ console.log(` Could not download Qdrant Web UI.
118
+ `);
119
+ return;
120
+ }
121
+ const saved = readJson(stateFile);
122
+ if (saved && isAlive(saved.pid)) {
123
+ const hasDashboard = await qdrantDashboardReachable(saved.port);
124
+ if (hasDashboard) {
125
+ console.log(`
126
+ ${import_ui.green}\u2713${import_ui.reset} Qdrant already running with dashboard ${import_ui.dim}(pid ${saved.pid}, port ${saved.port})${import_ui.reset}`);
127
+ await openQdrantDashboard(target);
128
+ console.log(` ${import_ui.dim}Qdrant keeps running in the background \u2014 use ${import_ui.reset}kg dashboard stop${import_ui.dim} to shut it down.${import_ui.reset}
129
+ `);
130
+ return;
131
+ }
132
+ try {
133
+ process.kill(saved.pid, "SIGTERM");
134
+ } catch {
135
+ }
136
+ await new Promise((r) => setTimeout(r, 400));
137
+ try {
138
+ fs.unlinkSync(stateFile);
139
+ } catch {
140
+ }
141
+ }
142
+ console.log();
143
+ const { QdrantIndex } = await Promise.resolve().then(() => require("../../vectors/qdrant-index.js"));
144
+ const index = new QdrantIndex(kirographDir);
145
+ await index.initialize();
146
+ if (!index.isAvailable()) {
147
+ console.log(` Qdrant failed to start.
148
+ `);
149
+ return;
150
+ }
151
+ index.close();
152
+ await openQdrantDashboard(target);
153
+ console.log(` ${import_ui.dim}Qdrant keeps running in the background \u2014 use ${import_ui.reset}kg dashboard stop${import_ui.dim} to shut it down.${import_ui.reset}
154
+ `);
155
+ }
156
+ function stopTypesense(target) {
157
+ const stateFile = path.join(target, ".kirograph", "typesense-server.json");
158
+ const saved = readJson(stateFile);
159
+ if (!saved) {
160
+ console.log(` ${import_ui.dim}No running Typesense server found.${import_ui.reset}`);
161
+ return;
162
+ }
163
+ killState(stateFile, saved.pid, "Typesense server", String(saved.apiPort));
164
+ }
165
+ function stopQdrant(target) {
166
+ const stateFile = path.join(target, ".kirograph", "qdrant-server.json");
167
+ const saved = readJson(stateFile);
168
+ if (!saved) {
169
+ console.log(` ${import_ui.dim}No running Qdrant server found.${import_ui.reset}`);
170
+ return;
171
+ }
172
+ killState(stateFile, saved.pid, "Qdrant server", String(saved.port));
173
+ }
174
+ function register(program) {
175
+ const cmd = program.command("dashboard [projectPath]").description("Manage the engine dashboard (qdrant, typesense)");
176
+ cmd.command("start [projectPath]").description("Start the engine server (if not running) and open its dashboard").action(async (projectPath) => {
177
+ const target = path.resolve(projectPath ?? process.cwd());
178
+ const config = await (0, import_config.loadConfig)(target);
179
+ const engine = config.semanticEngine;
180
+ if (engine === "typesense") return startTypesense(target);
181
+ if (engine === "qdrant") return startQdrant(target);
182
+ console.log(`
183
+ ${import_ui.dim}Dashboard not available for engine "${engine}". Use qdrant or typesense.${import_ui.reset}
184
+ `);
185
+ });
186
+ cmd.command("stop [projectPath]").description("Stop the running engine server").action(async (projectPath) => {
187
+ const target = path.resolve(projectPath ?? process.cwd());
188
+ const config = await (0, import_config.loadConfig)(target);
189
+ const engine = config.semanticEngine;
190
+ console.log();
191
+ if (engine === "typesense") {
192
+ stopTypesense(target);
193
+ console.log();
194
+ return;
195
+ }
196
+ if (engine === "qdrant") {
197
+ stopQdrant(target);
198
+ console.log();
199
+ return;
200
+ }
201
+ console.log(` ${import_ui.dim}No dashboard engine active (current engine: "${engine}").${import_ui.reset}
202
+ `);
203
+ });
204
+ }
205
+ // Annotate the CommonJS export names for ESM import in node:
206
+ 0 && (module.exports = {
207
+ register
208
+ });
209
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/dashboard.ts"],
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { dim, reset, green, label } from '../ui';\nimport { loadConfig } from '../../config';\n\n// \u2500\u2500 State helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface TsState { pid: number; apiPort: number; }\ninterface QdState { pid: number; port: number; }\n\nfunction readJson<T>(file: string): T | null {\n try { return JSON.parse(fs.readFileSync(file, 'utf8')) as T; } catch { return null; }\n}\n\nfunction isAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\nfunction killState(stateFile: string, pid: number, label_: string, portLabel: string): void {\n let killed = false;\n if (isAlive(pid)) {\n try { process.kill(pid, 'SIGTERM'); killed = true; } catch { /* ignore */ }\n }\n try { fs.unlinkSync(stateFile); } catch { /* ignore */ }\n if (killed) {\n console.log(` ${green}\u2713${reset} ${label('Stopped')} ${label_} ${dim}(pid ${pid}, port ${portLabel})${reset}`);\n } else {\n console.log(` ${dim}${label_} (pid ${pid}) was not running \u2014 state file cleaned up.${reset}`);\n }\n}\n\n/** Check if the Qdrant /dashboard endpoint returns something other than 404. */\nfunction qdrantDashboardReachable(port: number): Promise<boolean> {\n return new Promise(resolve => {\n const req = http.get(`http://127.0.0.1:${port}/dashboard`, res => {\n resolve(res.statusCode !== 404);\n res.resume();\n });\n req.on('error', () => resolve(false));\n req.setTimeout(1000, () => { req.destroy(); resolve(false); });\n });\n}\n\n// \u2500\u2500 Engine-specific start logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function startTypesense(target: string): Promise<void> {\n const kirographDir = path.join(target, '.kirograph');\n const stateFile = path.join(kirographDir, 'typesense-server.json');\n const saved = readJson<TsState>(stateFile);\n\n if (saved && isAlive(saved.pid)) {\n console.log(`\\n ${green}\u2713${reset} Typesense already running ${dim}(pid ${saved.pid}, port ${saved.apiPort})${reset}`);\n } else {\n console.log();\n const { TypesenseIndex } = await Promise.resolve().then(() => require('../../vectors/typesense-index.js'));\n const index = new TypesenseIndex(kirographDir);\n await index.initialize();\n if (!index.isAvailable()) {\n console.log(` Typesense failed to start.\\n`); return;\n }\n index.close();\n }\n\n const { openTypesenseDashboard } = await Promise.resolve().then(() => require('../installer/dashboard.js'));\n await openTypesenseDashboard(target);\n console.log(` ${dim}Press Ctrl+C to close the dashboard (Typesense keeps running \u2014 use ${reset}kg dashboard stop${dim} to shut it down).${reset}\\n`);\n process.on('SIGINT', () => process.exit(0));\n // HTTP server keeps Node alive\n}\n\nasync function startQdrant(target: string): Promise<void> {\n const kirographDir = path.join(target, '.kirograph');\n const stateFile = path.join(kirographDir, 'qdrant-server.json');\n\n const { ensureQdrantUI, openQdrantDashboard } = await Promise.resolve().then(() => require('../installer/qdrant-dashboard.js'));\n\n const uiReady = await ensureQdrantUI(target);\n if (!uiReady) { console.log(` Could not download Qdrant Web UI.\\n`); return; }\n\n const saved = readJson<QdState>(stateFile);\n if (saved && isAlive(saved.pid)) {\n const hasDashboard = await qdrantDashboardReachable(saved.port);\n if (hasDashboard) {\n console.log(`\\n ${green}\u2713${reset} Qdrant already running with dashboard ${dim}(pid ${saved.pid}, port ${saved.port})${reset}`);\n await openQdrantDashboard(target);\n console.log(` ${dim}Qdrant keeps running in the background \u2014 use ${reset}kg dashboard stop${dim} to shut it down.${reset}\\n`);\n return;\n }\n // Running but without dashboard \u2014 restart\n try { process.kill(saved.pid, 'SIGTERM'); } catch { /* ignore */ }\n await new Promise(r => setTimeout(r, 400));\n try { fs.unlinkSync(stateFile); } catch { /* ignore */ }\n }\n\n console.log();\n const { QdrantIndex } = await Promise.resolve().then(() => require('../../vectors/qdrant-index.js'));\n const index = new QdrantIndex(kirographDir);\n await index.initialize();\n if (!index.isAvailable()) { console.log(` Qdrant failed to start.\\n`); return; }\n index.close();\n\n await openQdrantDashboard(target);\n console.log(` ${dim}Qdrant keeps running in the background \u2014 use ${reset}kg dashboard stop${dim} to shut it down.${reset}\\n`);\n}\n\n// \u2500\u2500 Stop logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction stopTypesense(target: string): void {\n const stateFile = path.join(target, '.kirograph', 'typesense-server.json');\n const saved = readJson<TsState>(stateFile);\n if (!saved) { console.log(` ${dim}No running Typesense server found.${reset}`); return; }\n killState(stateFile, saved.pid, 'Typesense server', String(saved.apiPort));\n}\n\nfunction stopQdrant(target: string): void {\n const stateFile = path.join(target, '.kirograph', 'qdrant-server.json');\n const saved = readJson<QdState>(stateFile);\n if (!saved) { console.log(` ${dim}No running Qdrant server found.${reset}`); return; }\n killState(stateFile, saved.pid, 'Qdrant server', String(saved.port));\n}\n\n// \u2500\u2500 Command registration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function register(program: Command): void {\n const cmd = program\n .command('dashboard [projectPath]')\n .description('Manage the engine dashboard (qdrant, typesense)');\n\n cmd.command('start [projectPath]')\n .description('Start the engine server (if not running) and open its dashboard')\n .action(async (projectPath: string | undefined) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const config = await loadConfig(target);\n const engine = config.semanticEngine;\n\n if (engine === 'typesense') return startTypesense(target);\n if (engine === 'qdrant') return startQdrant(target);\n\n console.log(`\\n ${dim}Dashboard not available for engine \"${engine}\". Use qdrant or typesense.${reset}\\n`);\n });\n\n cmd.command('stop [projectPath]')\n .description('Stop the running engine server')\n .action(async (projectPath: string | undefined) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const config = await loadConfig(target);\n const engine = config.semanticEngine;\n\n console.log();\n if (engine === 'typesense') { stopTypesense(target); console.log(); return; }\n if (engine === 'qdrant') { stopQdrant(target); console.log(); return; }\n\n console.log(` ${dim}No dashboard engine active (current engine: \"${engine}\").${reset}\\n`);\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var dead_code_exports = {};
30
+ __export(dead_code_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(dead_code_exports);
34
+ var path = __toESM(require("path"));
35
+ var import_ui = require("../ui");
36
+ function register(program) {
37
+ program.command("dead-code [projectPath]").description("Find unexported symbols with no incoming references").option("--limit <n>", "Max results (default: 50)", "50").option("--format <fmt>", "Output format: table | json", "table").action(async (projectPath, opts) => {
38
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
39
+ const target = path.resolve(projectPath ?? process.cwd());
40
+ const cg = await KiroGraph.open(target);
41
+ const limit = Math.max(1, Math.min(100, parseInt(opts.limit) || 50));
42
+ const dead = cg.findDeadCode(limit);
43
+ cg.close();
44
+ if (dead.length === 0) {
45
+ console.log(`
46
+ ${import_ui.dim}No dead code detected.${import_ui.reset}
47
+ `);
48
+ return;
49
+ }
50
+ if (opts.format === "json") {
51
+ console.log(JSON.stringify(dead, null, 2));
52
+ return;
53
+ }
54
+ console.log();
55
+ console.log(` ${import_ui.violet}${import_ui.bold}Dead Code${import_ui.reset} ${import_ui.dim}unexported symbols with no incoming references${import_ui.reset}
56
+ `);
57
+ const byFile = /* @__PURE__ */ new Map();
58
+ for (const n of dead) {
59
+ if (!byFile.has(n.filePath)) byFile.set(n.filePath, []);
60
+ byFile.get(n.filePath).push(n);
61
+ }
62
+ for (const [file, nodes] of byFile) {
63
+ console.log(` ${import_ui.dim}${file}${import_ui.reset}`);
64
+ for (const n of nodes) {
65
+ console.log(` ${import_ui.violet}${import_ui.bold}${n.name}${import_ui.reset} ${import_ui.dim}${n.kind} line ${n.startLine}${import_ui.reset}`);
66
+ }
67
+ }
68
+ console.log(`
69
+ ${import_ui.dim}${dead.length} result(s)${import_ui.reset}
70
+ `);
71
+ });
72
+ }
73
+ // Annotate the CommonJS export names for ESM import in node:
74
+ 0 && (module.exports = {
75
+ register
76
+ });
77
+ //# sourceMappingURL=dead-code.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/dead-code.ts"],
4
+ "sourcesContent": ["import * as path from 'path';\nimport { Command } from 'commander';\nimport { bold, dim, reset, violet } from '../ui';\n\nexport function register(program: Command): void {\n program\n .command('dead-code [projectPath]')\n .description('Find unexported symbols with no incoming references')\n .option('--limit <n>', 'Max results (default: 50)', '50')\n .option('--format <fmt>', 'Output format: table | json', 'table')\n .action(async (projectPath: string | undefined, opts: { limit: string; format: string }) => {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const target = path.resolve(projectPath ?? process.cwd());\n const cg = await KiroGraph.open(target);\n const limit = Math.max(1, Math.min(100, parseInt(opts.limit) || 50));\n const dead = cg.findDeadCode(limit);\n cg.close();\n\n if (dead.length === 0) {\n console.log(`\\n ${dim}No dead code detected.${reset}\\n`);\n return;\n }\n\n if (opts.format === 'json') {\n console.log(JSON.stringify(dead, null, 2));\n return;\n }\n\n console.log();\n console.log(` ${violet}${bold}Dead Code${reset} ${dim}unexported symbols with no incoming references${reset}\\n`);\n\n // Group by file for readability\n const byFile = new Map<string, typeof dead>();\n for (const n of dead) {\n if (!byFile.has(n.filePath)) byFile.set(n.filePath, []);\n byFile.get(n.filePath)!.push(n);\n }\n\n for (const [file, nodes] of byFile) {\n console.log(` ${dim}${file}${reset}`);\n for (const n of nodes) {\n console.log(` ${violet}${bold}${n.name}${reset} ${dim}${n.kind} line ${n.startLine}${reset}`);\n }\n }\n\n console.log(`\\n ${dim}${dead.length} result(s)${reset}\\n`);\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAsB;AAEtB,gBAAyC;AAElC,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,yBAAyB,EACjC,YAAY,qDAAqD,EACjE,OAAO,eAAe,6BAA6B,IAAI,EACvD,OAAO,kBAAkB,+BAA+B,OAAO,EAC/D,OAAO,OAAO,aAAiC,SAA4C;AAC1F,UAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACxD,UAAM,KAAK,MAAM,UAAU,KAAK,MAAM;AACtC,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,EAAE,CAAC;AACnE,UAAM,OAAO,GAAG,aAAa,KAAK;AAClC,OAAG,MAAM;AAET,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI;AAAA,IAAO,aAAG,yBAAyB,eAAK;AAAA,CAAI;AACxD;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,QAAQ;AAC1B,cAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AACzC;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,KAAK,gBAAM,GAAG,cAAI,YAAY,eAAK,KAAK,aAAG,iDAAiD,eAAK;AAAA,CAAI;AAGjH,UAAM,SAAS,oBAAI,IAAyB;AAC5C,eAAW,KAAK,MAAM;AACpB,UAAI,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAG,QAAO,IAAI,EAAE,UAAU,CAAC,CAAC;AACtD,aAAO,IAAI,EAAE,QAAQ,EAAG,KAAK,CAAC;AAAA,IAChC;AAEA,eAAW,CAAC,MAAM,KAAK,KAAK,QAAQ;AAClC,cAAQ,IAAI,KAAK,aAAG,GAAG,IAAI,GAAG,eAAK,EAAE;AACrC,iBAAW,KAAK,OAAO;AACrB,gBAAQ,IAAI,OAAO,gBAAM,GAAG,cAAI,GAAG,EAAE,IAAI,GAAG,eAAK,KAAK,aAAG,GAAG,EAAE,IAAI,UAAU,EAAE,SAAS,GAAG,eAAK,EAAE;AAAA,MACnG;AAAA,IACF;AAEA,YAAQ,IAAI;AAAA,IAAO,aAAG,GAAG,KAAK,MAAM,aAAa,eAAK;AAAA,CAAI;AAAA,EAC5D,CAAC;AACL;",
6
+ "names": []
7
+ }