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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/installer/config-prompt.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Installer \u2014 configuration prompting\n */\n\nimport * as readline from 'readline';\nimport { KiroGraphConfig } from '../../config';\ntype CavemanMode = 'lite' | 'full' | 'ultra';\nimport { ask, askBool, arrowSelect, dim, reset, violet } from './prompts';\nexport type ConfigPatch = Pick<KiroGraphConfig, 'enableEmbeddings' | 'useVecIndex' | 'semanticEngine' | 'typesenseDashboard' | 'qdrantDashboard' | 'extractDocstrings' | 'trackCallSites' | 'enableArchitecture' | 'cavemanMode'> & { embeddingModel?: string; embeddingDim?: number };\nexport type SemanticEngine = KiroGraphConfig['semanticEngine'];\n\nexport const DEFAULT_EMBEDDING_MODEL = 'nomic-ai/nomic-embed-text-v1.5';\n\n/** Well-known embedding models with their output dimensions. */\nconst PRESET_MODELS = [\n {\n value: 'nomic-ai/nomic-embed-text-v1.5',\n label: 'nomic-embed-text-v1.5',\n dim: 768,\n description: '768-dim \u00B7 ~130MB \u00B7 Best quality for code search (recommended)',\n },\n {\n value: 'onnx-community/embeddinggemma-300m-ONNX',\n label: 'embeddinggemma-300m',\n dim: 768,\n description: '768-dim \u00B7 ~300MB \u00B7 Google Gemma-based, multilingual, 2048-token context',\n },\n {\n value: 'Xenova/all-MiniLM-L6-v2',\n label: 'all-MiniLM-L6-v2',\n dim: 384,\n description: '384-dim \u00B7 ~23MB \u00B7 Fast and lightweight, lower accuracy',\n },\n {\n value: 'BAAI/bge-base-en-v1.5',\n label: 'bge-base-en-v1.5',\n dim: 768,\n description: '768-dim \u00B7 ~110MB \u00B7 Strong general-purpose alternative to nomic',\n },\n {\n value: '__other__',\n label: 'Other',\n dim: 768,\n description: 'Enter a custom HuggingFace model ID and embedding dimension',\n },\n] as const;\n\nexport async function promptConfigOptions(rl: readline.Interface): Promise<ConfigPatch> {\n const enableEmbeddings = await askBool(\n rl,\n 'Enable semantic embeddings for similarity search? (requires a local embedding model)',\n 'Enables semantic/similarity-based code search. Increases indexing time; the chosen embedding model is downloaded automatically on first use.',\n );\n\n const patch: ConfigPatch = { enableEmbeddings, useVecIndex: false, semanticEngine: 'cosine', typesenseDashboard: false, qdrantDashboard: false, extractDocstrings: true, trackCallSites: true, enableArchitecture: false, cavemanMode: 'off' };\n\n if (enableEmbeddings) {\n // \u2500\u2500 Model selection \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 const modelChoice = await arrowSelect<string>(\n rl,\n 'Choose an embedding model:',\n PRESET_MODELS.map(m => ({ value: m.value, label: m.label, description: m.description })),\n );\n\n let embeddingModel: string;\n let embeddingDim: number;\n\n if (modelChoice === '__other__') {\n console.log(`\\n ${dim}Enter a HuggingFace model ID in the format org/model-name.${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Model identifier:${reset} `)).trim();\n if (raw.includes('/')) { embeddingModel = raw; break; }\n console.log(` Expected a HuggingFace model ID in the format org/model-name (e.g. nomic-ai/nomic-embed-text-v1.5).`);\n }\n console.log(`\\n ${dim}Enter the embedding output dimension for this model (check the model card on HuggingFace).${reset}`);\n while (true) {\n const raw = (await ask(rl, ` ${violet}Embedding dimension (e.g. 768, 384):${reset} `)).trim();\n const n = parseInt(raw, 10);\n if (!isNaN(n) && n > 0) { embeddingDim = n; break; }\n console.log(` Expected a positive integer (e.g. 768, 384, 1536).`);\n }\n } else {\n const preset = PRESET_MODELS.find(m => m.value === modelChoice)!;\n embeddingModel = preset.value;\n embeddingDim = preset.dim;\n }\n\n patch.embeddingModel = embeddingModel;\n patch.embeddingDim = embeddingDim;\n\n // \u2500\u2500 Engine selection \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 const semanticEngine = await arrowSelect<SemanticEngine>(rl, 'Choose the semantic search engine:', [\n { value: 'cosine', label: 'cosine', description: 'In-process cosine similarity. No extra deps. Best for small/medium projects.' },\n { value: 'sqlite-vec', label: 'sqlite-vec', description: 'ANN index. Sub-linear search. Best for large codebases. Needs: better-sqlite3, sqlite-vec (native).' },\n { value: 'orama', label: 'orama', description: 'Hybrid search (full-text + vector). Pure JS. Needs: @orama/orama, @orama/plugin-data-persistence.' },\n { value: 'pglite', label: 'pglite', description: 'Hybrid search via PostgreSQL + pgvector. Exact results. Pure WASM. Needs: @electric-sql/pglite.' },\n { value: 'lancedb', label: 'lancedb', description: 'ANN search via LanceDB (Apache Lance columnar format). Pure JS. Needs: @lancedb/lancedb.' },\n { value: 'qdrant', label: 'qdrant', description: 'ANN search via Qdrant embedded binary (HNSW index, Cosine). Needs: qdrant-local.' },\n { value: 'typesense', label: 'typesense', description: 'ANN search via Typesense (auto-downloaded binary, HNSW, Cosine). Needs: typesense.' },\n ]);\n patch.semanticEngine = semanticEngine;\n patch.useVecIndex = semanticEngine === 'sqlite-vec';\n\n if (semanticEngine === 'typesense') {\n patch.typesenseDashboard = await askBool(\n rl,\n 'Open Typesense dashboard after indexing?',\n 'Serves the Typesense Dashboard locally and opens it in your browser after indexing completes.',\n );\n }\n\n if (semanticEngine === 'qdrant') {\n patch.qdrantDashboard = await askBool(\n rl,\n 'Open Qdrant dashboard after indexing?',\n 'Downloads the Qdrant Web UI (first time only) and opens it in your browser after indexing completes.',\n );\n }\n }\n\n patch.extractDocstrings = await askBool(\n rl,\n 'Extract docstrings from source files?',\n 'Enriches symbol metadata and improves context quality. Slightly increases indexing time.',\n );\n\n patch.trackCallSites = await askBool(\n rl,\n 'Track call sites to enable caller/callee graph traversal?',\n 'Enables the kirograph_callers and kirograph_callees MCP tools for graph traversal. Increases index size.',\n );\n\n patch.enableArchitecture = await askBool(\n rl,\n 'Enable architecture analysis (package graph + layer detection)?',\n 'Detects packages from manifests (package.json, go.mod, Cargo.toml, etc.) and architectural layers (api, service, data, ui, shared) from file structure. Enables kirograph_architecture, kirograph_coupling, and kirograph_package MCP tools.',\n );\n\n const cavemanChoice = await arrowSelect(rl, 'Caveman mode \u2014 agent communication style:', [\n { value: 'off', label: 'off', description: 'Normal responses' },\n { value: 'lite', label: 'lite', description: 'Compact, no filler, full sentences' },\n { value: 'full', label: 'full', description: 'Fragments, no articles, short synonyms' },\n { value: 'ultra', label: 'ultra', description: 'Max compression, abbreviations, \u2192 for causality' },\n ]);\n patch.cavemanMode = cavemanChoice as CavemanMode | 'off';\n\n return patch;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ import * as http from 'http';
2
+ export declare function openTypesenseDashboard(projectRoot: string): Promise<http.Server | null>;
3
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAuK7B,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAwC7F"}
@@ -0,0 +1,149 @@
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
+ openTypesenseDashboard: () => openTypesenseDashboard
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_child_process = require("child_process");
38
+ var import_ui = require("../ui");
39
+ var import_archive = require("./archive");
40
+ const SERVER_STATE_FILE = "typesense-server.json";
41
+ const DASHBOARD_TARBALL = "https://github.com/bfritscher/typesense-dashboard/archive/refs/heads/gh-pages.tar.gz";
42
+ const STRIP_TAR_PREFIX = "typesense-dashboard-gh-pages/";
43
+ const STRIP_URL_PREFIX = "/typesense-dashboard";
44
+ function openBrowser(url) {
45
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
46
+ try {
47
+ (0, import_child_process.spawn)(cmd, [url], { stdio: "ignore", detached: true, shell: process.platform === "win32" }).unref();
48
+ } catch {
49
+ }
50
+ }
51
+ function downloadDashboard(cacheDir) {
52
+ return (0, import_archive.extractTarGzFromUrl)(DASHBOARD_TARBALL, cacheDir, {
53
+ stripPrefix: STRIP_TAR_PREFIX
54
+ }).then(() => {
55
+ });
56
+ }
57
+ const MIME = {
58
+ ".html": "text/html; charset=utf-8",
59
+ ".js": "application/javascript",
60
+ ".mjs": "application/javascript",
61
+ ".css": "text/css",
62
+ ".json": "application/json",
63
+ ".png": "image/png",
64
+ ".svg": "image/svg+xml",
65
+ ".ico": "image/x-icon",
66
+ ".woff": "font/woff",
67
+ ".woff2": "font/woff2",
68
+ ".ttf": "font/ttf",
69
+ ".map": "application/json"
70
+ };
71
+ function serveDashboard(cacheDir, port) {
72
+ return http.createServer((req, res) => {
73
+ let urlPath = (req.url ?? "/").split("?")[0];
74
+ if (urlPath.startsWith(STRIP_URL_PREFIX)) {
75
+ urlPath = urlPath.slice(STRIP_URL_PREFIX.length) || "/";
76
+ }
77
+ if (urlPath === "" || urlPath === "/") urlPath = "/index.html";
78
+ const filePath = path.join(cacheDir, urlPath);
79
+ if (!filePath.startsWith(cacheDir)) {
80
+ res.writeHead(403);
81
+ res.end();
82
+ return;
83
+ }
84
+ let target = filePath;
85
+ if (!fs.existsSync(target) || fs.statSync(target).isDirectory()) {
86
+ target = path.join(cacheDir, "index.html");
87
+ }
88
+ if (!fs.existsSync(target)) {
89
+ res.writeHead(404);
90
+ res.end("Not found");
91
+ return;
92
+ }
93
+ const ext = path.extname(target).toLowerCase();
94
+ const mime = MIME[ext] ?? "application/octet-stream";
95
+ res.writeHead(200, { "Content-Type": mime });
96
+ fs.createReadStream(target).pipe(res);
97
+ }).listen(port, "127.0.0.1");
98
+ }
99
+ function getFreePort() {
100
+ return new Promise((resolve, reject) => {
101
+ const srv = http.createServer().listen(0, "127.0.0.1", () => {
102
+ const port = srv.address().port;
103
+ srv.close(() => resolve(port));
104
+ }).on("error", reject);
105
+ });
106
+ }
107
+ async function openTypesenseDashboard(projectRoot) {
108
+ const kirographDir = path.join(projectRoot, ".kirograph");
109
+ const cacheDir = path.join(kirographDir, "typesense", "dashboard");
110
+ const stateFile = path.join(kirographDir, SERVER_STATE_FILE);
111
+ let apiPort = null;
112
+ try {
113
+ const state = JSON.parse(fs.readFileSync(stateFile, "utf8"));
114
+ apiPort = state.apiPort;
115
+ } catch {
116
+ }
117
+ const indexHtml = path.join(cacheDir, "index.html");
118
+ if (!fs.existsSync(indexHtml)) {
119
+ process.stdout.write(` Downloading Typesense Dashboard (first time only)\u2026
120
+ `);
121
+ try {
122
+ await downloadDashboard(cacheDir);
123
+ process.stdout.write(` Dashboard ready.
124
+ `);
125
+ } catch (err) {
126
+ process.stdout.write(` Dashboard download failed: ${String(err)}
127
+ `);
128
+ return null;
129
+ }
130
+ }
131
+ const dashboardPort = await getFreePort();
132
+ const server = serveDashboard(cacheDir, dashboardPort);
133
+ const url = `http://127.0.0.1:${dashboardPort}`;
134
+ console.log(`
135
+ ${import_ui.violet}${import_ui.bold}Typesense Dashboard${import_ui.reset} ${import_ui.dim}(local)${import_ui.reset}`);
136
+ console.log(` ${import_ui.green}\u2713${import_ui.reset} Serving at ${import_ui.violet}${url}${import_ui.reset}`);
137
+ console.log();
138
+ console.log(` Connect with:`);
139
+ console.log(` ${import_ui.dim}Node URL${import_ui.reset} ${import_ui.violet}http://127.0.0.1:${apiPort ?? "???"}${import_ui.reset}`);
140
+ console.log(` ${import_ui.dim}API Key ${import_ui.reset} ${import_ui.violet}kirograph-local${import_ui.reset}`);
141
+ console.log();
142
+ openBrowser(url);
143
+ return server;
144
+ }
145
+ // Annotate the CommonJS export names for ESM import in node:
146
+ 0 && (module.exports = {
147
+ openTypesenseDashboard
148
+ });
149
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/installer/dashboard.ts"],
4
+ "sourcesContent": ["import * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { spawn } from 'child_process';\nimport { dim, reset, violet, bold, green } from '../ui';\nimport { extractTarGzFromUrl } from './archive';\n\n// \u2500\u2500 Constants \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\u2500\n\nconst SERVER_STATE_FILE = 'typesense-server.json';\nconst DASHBOARD_TARBALL = 'https://github.com/bfritscher/typesense-dashboard/archive/refs/heads/gh-pages.tar.gz';\nconst STRIP_TAR_PREFIX = 'typesense-dashboard-gh-pages/'; // prefix inside the tarball\nconst STRIP_URL_PREFIX = '/typesense-dashboard'; // base path baked into the built app\n\ninterface ServerState { pid: number; apiPort: number; }\n\n// \u2500\u2500 Browser open \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 openBrowser(url: string): void {\n const cmd = process.platform === 'darwin' ? 'open'\n : process.platform === 'win32' ? 'start'\n : 'xdg-open';\n try {\n spawn(cmd, [url], { stdio: 'ignore', detached: true, shell: process.platform === 'win32' }).unref();\n } catch { /* best-effort */ }\n}\n\n// \u2500\u2500 Dashboard download \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 downloadDashboard(cacheDir: string): Promise<void> {\n return extractTarGzFromUrl(DASHBOARD_TARBALL, cacheDir, {\n stripPrefix: STRIP_TAR_PREFIX,\n }).then(() => {});\n}\n\n// \u2500\u2500 Local HTTP server \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\nconst MIME: Record<string, string> = {\n '.html': 'text/html; charset=utf-8',\n '.js': 'application/javascript',\n '.mjs': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.map': 'application/json',\n};\n\nfunction serveDashboard(cacheDir: string, port: number): http.Server {\n return http.createServer((req, res) => {\n let urlPath = (req.url ?? '/').split('?')[0]!;\n\n // Strip the GitHub Pages base path baked into the built app\n if (urlPath.startsWith(STRIP_URL_PREFIX)) {\n urlPath = urlPath.slice(STRIP_URL_PREFIX.length) || '/';\n }\n if (urlPath === '' || urlPath === '/') urlPath = '/index.html';\n\n const filePath = path.join(cacheDir, urlPath);\n\n // Prevent path traversal\n if (!filePath.startsWith(cacheDir)) {\n res.writeHead(403); res.end(); return;\n }\n\n let target = filePath;\n if (!fs.existsSync(target) || fs.statSync(target).isDirectory()) {\n // SPA fallback\n target = path.join(cacheDir, 'index.html');\n }\n\n if (!fs.existsSync(target)) {\n res.writeHead(404); res.end('Not found'); return;\n }\n\n const ext = path.extname(target).toLowerCase();\n const mime = MIME[ext] ?? 'application/octet-stream';\n\n res.writeHead(200, { 'Content-Type': mime });\n fs.createReadStream(target).pipe(res);\n }).listen(port, '127.0.0.1');\n}\n\nfunction getFreePort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const srv = http.createServer().listen(0, '127.0.0.1', () => {\n const port = (srv.address() as { port: number }).port;\n srv.close(() => resolve(port));\n }).on('error', reject);\n });\n}\n\n// \u2500\u2500 Public API \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\nexport async function openTypesenseDashboard(projectRoot: string): Promise<http.Server | null> {\n const kirographDir = path.join(projectRoot, '.kirograph');\n const cacheDir = path.join(kirographDir, 'typesense', 'dashboard');\n\n // Read Typesense server connection details\n const stateFile = path.join(kirographDir, SERVER_STATE_FILE);\n let apiPort: number | null = null;\n try {\n const state = JSON.parse(fs.readFileSync(stateFile, 'utf8')) as ServerState;\n apiPort = state.apiPort;\n } catch { /* server not started or state missing */ }\n\n // Download dashboard if not cached\n const indexHtml = path.join(cacheDir, 'index.html');\n if (!fs.existsSync(indexHtml)) {\n process.stdout.write(` Downloading Typesense Dashboard (first time only)\u2026\\n`);\n try {\n await downloadDashboard(cacheDir);\n process.stdout.write(` Dashboard ready.\\n`);\n } catch (err) {\n process.stdout.write(` Dashboard download failed: ${String(err)}\\n`);\n return null;\n }\n }\n\n const dashboardPort = await getFreePort();\n const server = serveDashboard(cacheDir, dashboardPort);\n\n const url = `http://127.0.0.1:${dashboardPort}`;\n\n console.log(`\\n ${violet}${bold}Typesense Dashboard${reset} ${dim}(local)${reset}`);\n console.log(` ${green}\u2713${reset} Serving at ${violet}${url}${reset}`);\n console.log();\n console.log(` Connect with:`);\n console.log(` ${dim}Node URL${reset} ${violet}http://127.0.0.1:${apiPort ?? '???'}${reset}`);\n console.log(` ${dim}API Key ${reset} ${violet}kirograph-local${reset}`);\n console.log();\n\n openBrowser(url);\n return server;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * KiroGraph Installer — Kiro hook file management
3
+ */
4
+ export declare function writeHooks(kiroDir: string): void;
5
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyGH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBhD"}
@@ -0,0 +1,155 @@
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 hooks_exports = {};
30
+ __export(hooks_exports, {
31
+ writeHooks: () => writeHooks
32
+ });
33
+ module.exports = __toCommonJS(hooks_exports);
34
+ var fs = __toESM(require("fs"));
35
+ var path = __toESM(require("path"));
36
+ var import_errors = require("../../errors");
37
+ const FILE_PATTERNS = [
38
+ "**/*.ts",
39
+ "**/*.tsx",
40
+ "**/*.js",
41
+ "**/*.jsx",
42
+ "**/*.py",
43
+ "**/*.go",
44
+ "**/*.rs",
45
+ "**/*.java",
46
+ "**/*.cs",
47
+ "**/*.rb",
48
+ "**/*.php",
49
+ "**/*.swift",
50
+ "**/*.kt",
51
+ "**/*.dart",
52
+ "**/*.ex",
53
+ "**/*.exs"
54
+ ];
55
+ const HOOKS = [
56
+ {
57
+ filename: "kirograph-mark-dirty-on-save.json",
58
+ hook: {
59
+ name: "KiroGraph Mark Dirty on Save",
60
+ version: "1.0.0",
61
+ description: "Mark the KiroGraph index as dirty when source files are saved. Sync is deferred to agent idle.",
62
+ when: { type: "fileEdited", patterns: FILE_PATTERNS },
63
+ then: { type: "runCommand", command: "kirograph mark-dirty 2>/dev/null || true" }
64
+ }
65
+ },
66
+ {
67
+ filename: "kirograph-mark-dirty-on-create.json",
68
+ hook: {
69
+ name: "KiroGraph Mark Dirty on Create",
70
+ version: "1.0.0",
71
+ description: "Mark the KiroGraph index as dirty when source files are created.",
72
+ when: { type: "fileCreated", patterns: FILE_PATTERNS },
73
+ then: { type: "runCommand", command: "kirograph mark-dirty 2>/dev/null || true" }
74
+ }
75
+ },
76
+ {
77
+ filename: "kirograph-sync-on-delete.json",
78
+ hook: {
79
+ name: "KiroGraph Sync on Delete",
80
+ version: "1.0.0",
81
+ description: "Remove deleted files from the KiroGraph index immediately.",
82
+ when: { type: "fileDeleted", patterns: FILE_PATTERNS },
83
+ then: { type: "runCommand", command: "kirograph sync-if-dirty 2>/dev/null || true" }
84
+ }
85
+ },
86
+ {
87
+ filename: "kirograph-sync-if-dirty.json",
88
+ hook: {
89
+ name: "KiroGraph Deferred Sync",
90
+ version: "1.0.0",
91
+ description: "Sync the KiroGraph index when the agent is idle and a dirty marker is present. Batches multiple rapid saves into one sync.",
92
+ when: { type: "agentStop" },
93
+ then: { type: "runCommand", command: "kirograph sync-if-dirty --quiet 2>/dev/null || true" }
94
+ }
95
+ }
96
+ ];
97
+ function ensureDir(p) {
98
+ fs.mkdirSync(p, { recursive: true });
99
+ }
100
+ function writeJson(p, data) {
101
+ fs.writeFileSync(p, JSON.stringify(data, null, 2) + "\n");
102
+ }
103
+ function migrateOnIdleHooks(hooksDir) {
104
+ if (!fs.existsSync(hooksDir)) return;
105
+ let files;
106
+ try {
107
+ files = fs.readdirSync(hooksDir).filter((f) => f.endsWith(".json"));
108
+ } catch {
109
+ return;
110
+ }
111
+ for (const file of files) {
112
+ const filePath = path.join(hooksDir, file);
113
+ let raw;
114
+ try {
115
+ raw = fs.readFileSync(filePath, "utf8");
116
+ } catch {
117
+ (0, import_errors.logWarn)(`KiroGraph installer: could not read hook file ${filePath}`);
118
+ continue;
119
+ }
120
+ let obj;
121
+ try {
122
+ obj = JSON.parse(raw);
123
+ } catch {
124
+ (0, import_errors.logWarn)(`KiroGraph installer: could not parse hook file ${filePath}`);
125
+ continue;
126
+ }
127
+ if (obj?.when?.type === "onIdle") {
128
+ obj.when.type = "agentStop";
129
+ try {
130
+ fs.writeFileSync(filePath, JSON.stringify(obj, null, 2) + "\n");
131
+ } catch {
132
+ (0, import_errors.logWarn)(`KiroGraph installer: could not write migrated hook file ${filePath}`);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ function writeHooks(kiroDir) {
138
+ const hooksDir = path.join(kiroDir, "hooks");
139
+ ensureDir(hooksDir);
140
+ migrateOnIdleHooks(hooksDir);
141
+ const oldHooks = ["kirograph-sync-on-save.json", "kirograph-sync-on-create.json"];
142
+ for (const old of oldHooks) {
143
+ const p = path.join(hooksDir, old);
144
+ if (fs.existsSync(p)) fs.unlinkSync(p);
145
+ }
146
+ for (const { filename, hook } of HOOKS) {
147
+ writeJson(path.join(hooksDir, filename), hook);
148
+ }
149
+ console.log(` \u2713 Auto-sync hooks written to ${hooksDir}`);
150
+ }
151
+ // Annotate the CommonJS export names for ESM import in node:
152
+ 0 && (module.exports = {
153
+ writeHooks
154
+ });
155
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/installer/hooks.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Installer \u2014 Kiro hook file management\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { logWarn } from '../../errors';\n\n// \u2500\u2500 Constants \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\nconst FILE_PATTERNS = [\n '**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx',\n '**/*.py', '**/*.go', '**/*.rs', '**/*.java',\n '**/*.cs', '**/*.rb', '**/*.php', '**/*.swift',\n '**/*.kt', '**/*.dart',\n '**/*.ex', '**/*.exs',\n];\n\nconst HOOKS: Array<{ filename: string; hook: object }> = [\n {\n filename: 'kirograph-mark-dirty-on-save.json',\n hook: {\n name: 'KiroGraph Mark Dirty on Save',\n version: '1.0.0',\n description: 'Mark the KiroGraph index as dirty when source files are saved. Sync is deferred to agent idle.',\n when: { type: 'fileEdited', patterns: FILE_PATTERNS },\n then: { type: 'runCommand', command: 'kirograph mark-dirty 2>/dev/null || true' },\n },\n },\n {\n filename: 'kirograph-mark-dirty-on-create.json',\n hook: {\n name: 'KiroGraph Mark Dirty on Create',\n version: '1.0.0',\n description: 'Mark the KiroGraph index as dirty when source files are created.',\n when: { type: 'fileCreated', patterns: FILE_PATTERNS },\n then: { type: 'runCommand', command: 'kirograph mark-dirty 2>/dev/null || true' },\n },\n },\n {\n filename: 'kirograph-sync-on-delete.json',\n hook: {\n name: 'KiroGraph Sync on Delete',\n version: '1.0.0',\n description: 'Remove deleted files from the KiroGraph index immediately.',\n when: { type: 'fileDeleted', patterns: FILE_PATTERNS },\n then: { type: 'runCommand', command: 'kirograph sync-if-dirty 2>/dev/null || true' },\n },\n },\n {\n filename: 'kirograph-sync-if-dirty.json',\n hook: {\n name: 'KiroGraph Deferred Sync',\n version: '1.0.0',\n description: 'Sync the KiroGraph index when the agent is idle and a dirty marker is present. Batches multiple rapid saves into one sync.',\n when: { type: 'agentStop' },\n then: { type: 'runCommand', command: 'kirograph sync-if-dirty --quiet 2>/dev/null || true' },\n },\n },\n];\n\n// \u2500\u2500 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\u2500\u2500\u2500\u2500\u2500\n\nfunction ensureDir(p: string): void {\n fs.mkdirSync(p, { recursive: true });\n}\n\nfunction writeJson(p: string, data: unknown): void {\n fs.writeFileSync(p, JSON.stringify(data, null, 2) + '\\n');\n}\n\nfunction migrateOnIdleHooks(hooksDir: string): void {\n if (!fs.existsSync(hooksDir)) return;\n let files: string[];\n try {\n files = fs.readdirSync(hooksDir).filter(f => f.endsWith('.json'));\n } catch {\n return;\n }\n for (const file of files) {\n const filePath = path.join(hooksDir, file);\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, 'utf8');\n } catch {\n logWarn(`KiroGraph installer: could not read hook file ${filePath}`);\n continue;\n }\n let obj: any;\n try {\n obj = JSON.parse(raw);\n } catch {\n logWarn(`KiroGraph installer: could not parse hook file ${filePath}`);\n continue;\n }\n if (obj?.when?.type === 'onIdle') {\n obj.when.type = 'agentStop';\n try {\n fs.writeFileSync(filePath, JSON.stringify(obj, null, 2) + '\\n');\n } catch {\n logWarn(`KiroGraph installer: could not write migrated hook file ${filePath}`);\n }\n }\n }\n}\n\n// \u2500\u2500 Public \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\u2500\u2500\u2500\n\nexport function writeHooks(kiroDir: string): void {\n const hooksDir = path.join(kiroDir, 'hooks');\n ensureDir(hooksDir);\n\n migrateOnIdleHooks(hooksDir);\n\n const oldHooks = ['kirograph-sync-on-save.json', 'kirograph-sync-on-create.json'];\n for (const old of oldHooks) {\n const p = path.join(hooksDir, old);\n if (fs.existsSync(p)) fs.unlinkSync(p);\n }\n\n for (const { filename, hook } of HOOKS) {\n writeJson(path.join(hooksDir, filename), hook);\n }\n\n console.log(` \u2713 Auto-sync hooks written to ${hooksDir}`);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * KiroGraph Installer for Kiro
3
+ *
4
+ * Wires up:
5
+ * 1. .kiro/settings/mcp.json — registers the MCP server (IDE + CLI)
6
+ * 2. .kiro/hooks/*.json — auto-sync hooks for Kiro IDE
7
+ * 3. .kiro/steering/kirograph.md — teaches Kiro to use the graph tools (IDE + CLI)
8
+ * 4. .kiro/agents/kirograph.json — custom agent config for Kiro CLI
9
+ */
10
+ export declare function runInstaller(): Promise<void>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAqJlD"}
@@ -0,0 +1,228 @@
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 installer_exports = {};
30
+ __export(installer_exports, {
31
+ runInstaller: () => runInstaller
32
+ });
33
+ module.exports = __toCommonJS(installer_exports);
34
+ var path = __toESM(require("path"));
35
+ var readline = __toESM(require("readline"));
36
+ var import_child_process = require("child_process");
37
+ var import_config = require("../../config");
38
+ var import_banner = require("../banner");
39
+ var import_progress = require("../progress");
40
+ var import_ui = require("../ui");
41
+ var import_prompts = require("./prompts");
42
+ var import_config_prompt = require("./config-prompt");
43
+ var import_mcp = require("./mcp");
44
+ var import_hooks = require("./hooks");
45
+ var import_steering = require("./steering");
46
+ var import_cli_agent = require("./cli-agent");
47
+ var import_dashboard = require("./dashboard");
48
+ var import_qdrant_dashboard = require("./qdrant-dashboard");
49
+ async function runInstaller() {
50
+ (0, import_banner.printBanner)();
51
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
52
+ try {
53
+ const cwd = process.cwd();
54
+ const kiroDir = path.join(cwd, ".kiro");
55
+ console.log(` Workspace: ${cwd}
56
+ `);
57
+ const proceed = await (0, import_prompts.ask)(rl, " Install KiroGraph for this Kiro workspace? (Y/n) ");
58
+ if (proceed.toLowerCase() === "n") {
59
+ console.log(" Cancelled.");
60
+ rl.close();
61
+ return;
62
+ }
63
+ console.log();
64
+ (0, import_mcp.writeMcpConfig)(kiroDir);
65
+ (0, import_hooks.writeHooks)(kiroDir);
66
+ const patch = await (0, import_config_prompt.promptConfigOptions)(rl);
67
+ try {
68
+ await (0, import_config.updateConfig)(cwd, patch);
69
+ console.log(`
70
+ Configuration saved to ${cwd}/.kirograph/config.json`);
71
+ console.log(` \u2022 enableEmbeddings: ${patch.enableEmbeddings}`);
72
+ if ("embeddingModel" in patch) {
73
+ console.log(` \u2022 embeddingModel: ${patch.embeddingModel} ${import_ui.dim}(${patch.embeddingDim}-dim)${import_ui.reset}`);
74
+ }
75
+ if (patch.enableEmbeddings) {
76
+ console.log(` \u2022 semanticEngine: ${patch.semanticEngine}`);
77
+ if (patch.semanticEngine === "sqlite-vec") {
78
+ console.log(`
79
+ Installing sqlite-vec dependencies...`);
80
+ const result = (0, import_child_process.spawnSync)("npm", ["install", "better-sqlite3", "sqlite-vec"], { stdio: "inherit", shell: true });
81
+ if (result.status === 0) {
82
+ console.log(` \u2713 better-sqlite3 and sqlite-vec installed`);
83
+ } else {
84
+ console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);
85
+ console.warn(` npm install better-sqlite3 sqlite-vec`);
86
+ }
87
+ } else if (patch.semanticEngine === "orama") {
88
+ console.log(`
89
+ Installing Orama dependencies...`);
90
+ const result = (0, import_child_process.spawnSync)("npm", ["install", "@orama/orama", "@orama/plugin-data-persistence"], { stdio: "inherit", shell: true });
91
+ if (result.status === 0) {
92
+ console.log(` \u2713 @orama/orama and @orama/plugin-data-persistence installed`);
93
+ } else {
94
+ console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);
95
+ console.warn(` npm install @orama/orama @orama/plugin-data-persistence`);
96
+ }
97
+ } else if (patch.semanticEngine === "pglite") {
98
+ console.log(`
99
+ Installing PGlite dependencies...`);
100
+ const result = (0, import_child_process.spawnSync)("npm", ["install", "@electric-sql/pglite"], { stdio: "inherit", shell: true });
101
+ if (result.status === 0) {
102
+ console.log(` \u2713 @electric-sql/pglite installed`);
103
+ } else {
104
+ console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);
105
+ console.warn(` npm install @electric-sql/pglite`);
106
+ }
107
+ } else if (patch.semanticEngine === "lancedb") {
108
+ console.log(`
109
+ Installing LanceDB dependencies...`);
110
+ const result = (0, import_child_process.spawnSync)("npm", ["install", "@lancedb/lancedb"], { stdio: "inherit", shell: true });
111
+ if (result.status === 0) {
112
+ console.log(` \u2713 @lancedb/lancedb installed`);
113
+ } else {
114
+ console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);
115
+ console.warn(` npm install @lancedb/lancedb`);
116
+ }
117
+ } else if (patch.semanticEngine === "qdrant") {
118
+ console.log(`
119
+ Installing Qdrant dependencies...`);
120
+ const result = (0, import_child_process.spawnSync)("npm", ["install", "qdrant-local"], { stdio: "inherit", shell: true });
121
+ if (result.status === 0) {
122
+ console.log(` \u2713 qdrant-local installed`);
123
+ } else {
124
+ console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);
125
+ console.warn(` npm install qdrant-local`);
126
+ }
127
+ } else if (patch.semanticEngine === "typesense") {
128
+ console.log(`
129
+ Installing Typesense dependencies...`);
130
+ const result = (0, import_child_process.spawnSync)("npm", ["install", "typesense"], { stdio: "inherit", shell: true });
131
+ if (result.status === 0) {
132
+ console.log(` \u2713 typesense installed`);
133
+ console.log(` \u2139 The Typesense binary (~37MB) will be auto-downloaded on first index run.`);
134
+ } else {
135
+ console.warn(` \u2717 npm install failed (exit ${result.status}). Run manually:`);
136
+ console.warn(` npm install typesense`);
137
+ }
138
+ }
139
+ }
140
+ console.log(` \u2022 extractDocstrings: ${patch.extractDocstrings}`);
141
+ console.log(` \u2022 trackCallSites: ${patch.trackCallSites}`);
142
+ console.log(` \u2022 enableArchitecture: ${patch.enableArchitecture}`);
143
+ console.log(` \u2022 cavemanMode: ${patch.cavemanMode ?? "off"}`);
144
+ (0, import_steering.writeSteering)(kiroDir, patch.cavemanMode ?? "off");
145
+ (0, import_cli_agent.writeCliAgent)(kiroDir);
146
+ } catch (err) {
147
+ const reason = err instanceof Error ? err.message : String(err);
148
+ console.error(`
149
+ \u2717 Failed to write configuration: ${reason}`);
150
+ process.exit(1);
151
+ }
152
+ if (patch.qdrantDashboard) {
153
+ await (0, import_qdrant_dashboard.ensureQdrantUI)(cwd);
154
+ }
155
+ const doIndex = await (0, import_prompts.ask)(rl, "\n Initialize and index this project now? (Y/n) ");
156
+ if (doIndex.toLowerCase() !== "n") {
157
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
158
+ const fileBytes = /* @__PURE__ */ new Map();
159
+ const modelProgress = (file, loaded, total, done) => {
160
+ const entry = fileBytes.get(file) ?? { loaded: 0, total: 0 };
161
+ if (total > 0) entry.total = total;
162
+ entry.loaded = done ? entry.total : loaded;
163
+ fileBytes.set(file, entry);
164
+ const knownFiles = Array.from(fileBytes.values()).filter((f) => f.total > 0);
165
+ const totalLoaded = knownFiles.reduce((s, f) => s + f.loaded, 0);
166
+ const totalBytes = knownFiles.reduce((s, f) => s + f.total, 0);
167
+ const pct = totalBytes > 0 ? Math.min(totalLoaded / totalBytes * 100, 100) : 0;
168
+ const filled = Math.round(pct / 5);
169
+ const bar = "\u2588".repeat(filled) + "\u2591".repeat(20 - filled);
170
+ const mb = (totalLoaded / 1024 / 1024).toFixed(1);
171
+ const totalMb = (totalBytes / 1024 / 1024).toFixed(1);
172
+ process.stdout.write(`\r [${bar}] ${pct.toFixed(0).padStart(3)}% ${mb} / ${totalMb} MB `);
173
+ };
174
+ const originalStderrWrite = process.stderr.write.bind(process.stderr);
175
+ const stderrFilter = (chunk, ...args) => {
176
+ const str = typeof chunk === "string" ? chunk : String(chunk);
177
+ if (str.includes("content-length") || str.includes("dtype not specified")) return true;
178
+ return originalStderrWrite(chunk, ...args);
179
+ };
180
+ process.stderr.write = stderrFilter;
181
+ let cg;
182
+ try {
183
+ if (!KiroGraph.isInitialized(cwd)) {
184
+ process.stdout.write(" Downloading embedding model\u2026\n");
185
+ cg = await KiroGraph.init(cwd, void 0, modelProgress);
186
+ process.stdout.write("\n");
187
+ console.log(" \u2713 Created .kirograph/");
188
+ } else {
189
+ cg = await KiroGraph.open(cwd, modelProgress);
190
+ if (fileBytes.size > 0) process.stdout.write("\n");
191
+ }
192
+ } finally {
193
+ process.stderr.write = originalStderrWrite;
194
+ }
195
+ console.log(" Indexing...");
196
+ const result = await cg.indexAll({ onProgress: import_progress.renderIndexProgress });
197
+ process.stdout.write("\n");
198
+ console.log(` \u2713 Indexed ${result.filesIndexed} files, ${result.nodesCreated} symbols, ${result.edgesCreated} edges`);
199
+ cg.close();
200
+ if (patch.typesenseDashboard) {
201
+ const dashboardServer = await (0, import_dashboard.openTypesenseDashboard)(cwd);
202
+ console.log(` ${import_ui.dim}Press Ctrl+C to stop the dashboard server when done.${import_ui.reset}`);
203
+ await new Promise((resolve) => {
204
+ process.on("SIGINT", () => {
205
+ if (dashboardServer) {
206
+ dashboardServer.close(() => resolve());
207
+ } else {
208
+ resolve();
209
+ }
210
+ });
211
+ });
212
+ return;
213
+ }
214
+ if (patch.qdrantDashboard) {
215
+ await (0, import_qdrant_dashboard.openQdrantDashboard)(cwd);
216
+ }
217
+ }
218
+ console.log("\n Done! Restart Kiro IDE for the MCP server to load.");
219
+ console.log(' For Kiro CLI, use the "kirograph" agent: kiro-cli --agent kirograph\n');
220
+ } finally {
221
+ rl.close();
222
+ }
223
+ }
224
+ // Annotate the CommonJS export names for ESM import in node:
225
+ 0 && (module.exports = {
226
+ runInstaller
227
+ });
228
+ //# sourceMappingURL=index.js.map