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,230 @@
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 archive_exports = {};
30
+ __export(archive_exports, {
31
+ downloadFile: () => downloadFile,
32
+ extractBinaryFromTarGz: () => extractBinaryFromTarGz,
33
+ extractTarGzFromUrl: () => extractTarGzFromUrl,
34
+ extractZip: () => extractZip,
35
+ fetchJson: () => fetchJson
36
+ });
37
+ module.exports = __toCommonJS(archive_exports);
38
+ var path = __toESM(require("path"));
39
+ var fs = __toESM(require("fs"));
40
+ var http = __toESM(require("http"));
41
+ var https = __toESM(require("https"));
42
+ var zlib = __toESM(require("zlib"));
43
+ function fetchJson(url) {
44
+ return new Promise((resolve, reject) => {
45
+ const mod = url.startsWith("https") ? https : http;
46
+ mod.get(url, { headers: { "User-Agent": "kirograph" } }, (res) => {
47
+ if (res.statusCode === 301 || res.statusCode === 302) {
48
+ return resolve(fetchJson(res.headers.location));
49
+ }
50
+ if (res.statusCode !== 200) {
51
+ return reject(new Error(`HTTP ${res.statusCode}`));
52
+ }
53
+ let body = "";
54
+ res.on("data", (c) => body += c);
55
+ res.on("end", () => {
56
+ try {
57
+ resolve(JSON.parse(body));
58
+ } catch (e) {
59
+ reject(e);
60
+ }
61
+ });
62
+ }).on("error", reject);
63
+ });
64
+ }
65
+ function downloadFile(url, dest) {
66
+ return new Promise((resolve, reject) => {
67
+ function doGet(currentUrl) {
68
+ const mod = currentUrl.startsWith("https") ? https : http;
69
+ mod.get(currentUrl, { headers: { "User-Agent": "kirograph" } }, (res) => {
70
+ if (res.statusCode === 301 || res.statusCode === 302) return doGet(res.headers.location);
71
+ if (res.statusCode !== 200) return reject(new Error(`Download failed: HTTP ${res.statusCode}`));
72
+ const out = fs.createWriteStream(dest);
73
+ res.pipe(out);
74
+ out.on("finish", () => out.close(() => resolve()));
75
+ out.on("error", reject);
76
+ }).on("error", reject);
77
+ }
78
+ doGet(url);
79
+ });
80
+ }
81
+ async function extractZip(zipPath, destDir) {
82
+ const buf = await fs.promises.readFile(zipPath);
83
+ const resolvedDest = path.resolve(destDir);
84
+ let eocdOffset = -1;
85
+ for (let i = buf.length - 22; i >= 0; i--) {
86
+ if (buf.readUInt32LE(i) === 101010256) {
87
+ eocdOffset = i;
88
+ break;
89
+ }
90
+ }
91
+ if (eocdOffset === -1) throw new Error("Invalid ZIP: EOCD not found");
92
+ const cdCount = buf.readUInt16LE(eocdOffset + 10);
93
+ const cdOffset = buf.readUInt32LE(eocdOffset + 16);
94
+ let cdPos = cdOffset;
95
+ for (let i = 0; i < cdCount; i++) {
96
+ if (buf.readUInt32LE(cdPos) !== 33639248) throw new Error("Invalid ZIP: bad CD signature");
97
+ const compMethod = buf.readUInt16LE(cdPos + 10);
98
+ const compSize = buf.readUInt32LE(cdPos + 20);
99
+ const uncompSize = buf.readUInt32LE(cdPos + 24);
100
+ const fileNameLen = buf.readUInt16LE(cdPos + 28);
101
+ const extraLen = buf.readUInt16LE(cdPos + 30);
102
+ const commentLen = buf.readUInt16LE(cdPos + 32);
103
+ const localOffset = buf.readUInt32LE(cdPos + 42);
104
+ const fileName = buf.slice(cdPos + 46, cdPos + 46 + fileNameLen).toString("utf8");
105
+ cdPos += 46 + fileNameLen + extraLen + commentLen;
106
+ if (fileName.endsWith("/") || uncompSize === 0 && compSize === 0) continue;
107
+ const destPath = path.resolve(resolvedDest, fileName);
108
+ if (!destPath.startsWith(resolvedDest + path.sep) && destPath !== resolvedDest) continue;
109
+ if (buf.readUInt32LE(localOffset) !== 67324752) throw new Error("Invalid ZIP: bad LFH signature");
110
+ const localFileNameLen = buf.readUInt16LE(localOffset + 26);
111
+ const localExtraLen = buf.readUInt16LE(localOffset + 28);
112
+ const dataOffset = localOffset + 30 + localFileNameLen + localExtraLen;
113
+ const compData = buf.slice(dataOffset, dataOffset + compSize);
114
+ let fileData;
115
+ if (compMethod === 0) {
116
+ fileData = compData;
117
+ } else if (compMethod === 8) {
118
+ fileData = await new Promise((resolve, reject) => {
119
+ zlib.inflateRaw(compData, (err, result) => err ? reject(err) : resolve(result));
120
+ });
121
+ } else {
122
+ continue;
123
+ }
124
+ await fs.promises.mkdir(path.dirname(destPath), { recursive: true });
125
+ await fs.promises.writeFile(destPath, fileData);
126
+ }
127
+ }
128
+ function extractTarGzFromUrl(url, destDir, opts) {
129
+ const resolvedDest = path.resolve(destDir);
130
+ return new Promise((resolve, reject) => {
131
+ fs.mkdirSync(resolvedDest, { recursive: true });
132
+ function doGet(currentUrl) {
133
+ const mod = currentUrl.startsWith("https") ? https : http;
134
+ mod.get(currentUrl, { headers: { "User-Agent": "kirograph" } }, (res) => {
135
+ if (res.statusCode === 301 || res.statusCode === 302) {
136
+ return doGet(res.headers.location);
137
+ }
138
+ if (res.statusCode !== 200) {
139
+ return reject(new Error(`Download failed: HTTP ${res.statusCode}`));
140
+ }
141
+ const gunzip = zlib.createGunzip();
142
+ res.pipe(gunzip);
143
+ let tarBuffer = Buffer.alloc(0);
144
+ let offset = 0;
145
+ let foundFile = null;
146
+ function extractEntries(final = false) {
147
+ while (offset + 512 <= tarBuffer.length) {
148
+ const header = tarBuffer.slice(offset, offset + 512);
149
+ const nameRaw = header.slice(0, 100).toString("utf8").replace(/\0/g, "");
150
+ const sizeOctal = header.slice(124, 136).toString("utf8").replace(/\0/g, "").trim();
151
+ const typeFlag = header[156];
152
+ const size = parseInt(sizeOctal, 8) || 0;
153
+ const dataStart = offset + 512;
154
+ const dataEnd = dataStart + size;
155
+ if (nameRaw === "") {
156
+ offset += 512;
157
+ continue;
158
+ }
159
+ const relName = opts?.stripPrefix && nameRaw.startsWith(opts.stripPrefix) ? nameRaw.slice(opts.stripPrefix.length) : nameRaw;
160
+ if (opts?.findFile && path.basename(nameRaw) === opts.findFile) {
161
+ if (tarBuffer.length >= dataEnd || final) {
162
+ foundFile = tarBuffer.slice(dataStart, dataEnd);
163
+ resolve(foundFile);
164
+ return;
165
+ }
166
+ return;
167
+ }
168
+ const destPath = path.resolve(resolvedDest, relName);
169
+ if (!destPath.startsWith(resolvedDest + path.sep) && destPath !== resolvedDest) {
170
+ offset = dataStart + Math.ceil(size / 512) * 512;
171
+ continue;
172
+ }
173
+ if (typeFlag === 53 || nameRaw.endsWith("/")) {
174
+ try {
175
+ fs.mkdirSync(destPath, { recursive: true });
176
+ } catch {
177
+ }
178
+ offset = dataStart;
179
+ continue;
180
+ }
181
+ if (tarBuffer.length < dataEnd && !final) return;
182
+ if (relName && !relName.endsWith("/")) {
183
+ try {
184
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
185
+ fs.writeFileSync(destPath, tarBuffer.slice(dataStart, dataEnd));
186
+ } catch {
187
+ }
188
+ }
189
+ offset = dataStart + Math.ceil(size / 512) * 512;
190
+ }
191
+ }
192
+ gunzip.on("data", (chunk) => {
193
+ tarBuffer = Buffer.concat([tarBuffer, chunk]);
194
+ extractEntries();
195
+ });
196
+ gunzip.on("end", () => {
197
+ extractEntries(true);
198
+ if (opts?.findFile && !foundFile) {
199
+ reject(new Error(`${opts.findFile} not found in archive`));
200
+ } else {
201
+ resolve(foundFile ?? void 0);
202
+ }
203
+ });
204
+ gunzip.on("error", reject);
205
+ }).on("error", reject);
206
+ }
207
+ doGet(url);
208
+ });
209
+ }
210
+ async function extractBinaryFromTarGz(url, binaryName, destPath) {
211
+ const destDir = path.dirname(destPath);
212
+ fs.mkdirSync(destDir, { recursive: true });
213
+ const content = await extractTarGzFromUrl(url, destDir, { findFile: binaryName });
214
+ if (content && Buffer.isBuffer(content)) {
215
+ fs.writeFileSync(destPath, content);
216
+ try {
217
+ fs.chmodSync(destPath, 493);
218
+ } catch {
219
+ }
220
+ }
221
+ }
222
+ // Annotate the CommonJS export names for ESM import in node:
223
+ 0 && (module.exports = {
224
+ downloadFile,
225
+ extractBinaryFromTarGz,
226
+ extractTarGzFromUrl,
227
+ extractZip,
228
+ fetchJson
229
+ });
230
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/installer/archive.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Archive Utilities\n *\n * Shared, cross-platform archive extraction and HTTP download helpers.\n * Pure Node.js \u2014 no external binaries required (no unzip, tar, etc.).\n * Works on all platforms without CrowdStrike or antivirus interference.\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport * as https from 'https';\nimport * as zlib from 'zlib';\n\n// \u2500\u2500 HTTP 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\n/**\n * Fetch JSON from a URL, following redirects.\n */\nexport function fetchJson(url: string): Promise<any> {\n return new Promise((resolve, reject) => {\n const mod = url.startsWith('https') ? https : http;\n mod.get(url, { headers: { 'User-Agent': 'kirograph' } } as any, res => {\n if (res.statusCode === 301 || res.statusCode === 302) {\n return resolve(fetchJson(res.headers.location!));\n }\n if (res.statusCode !== 200) {\n return reject(new Error(`HTTP ${res.statusCode}`));\n }\n let body = '';\n res.on('data', (c: string) => body += c);\n res.on('end', () => { try { resolve(JSON.parse(body)); } catch (e) { reject(e); } });\n }).on('error', reject);\n });\n}\n\n/**\n * Download a file from a URL to a local path, following redirects.\n */\nexport function downloadFile(url: string, dest: string): Promise<void> {\n return new Promise((resolve, reject) => {\n function doGet(currentUrl: string) {\n const mod = currentUrl.startsWith('https') ? https : http;\n mod.get(currentUrl, { headers: { 'User-Agent': 'kirograph' } } as any, res => {\n if (res.statusCode === 301 || res.statusCode === 302) return doGet(res.headers.location!);\n if (res.statusCode !== 200) return reject(new Error(`Download failed: HTTP ${res.statusCode}`));\n const out = fs.createWriteStream(dest);\n res.pipe(out);\n out.on('finish', () => out.close(() => resolve()));\n out.on('error', reject);\n }).on('error', reject);\n }\n doGet(url);\n });\n}\n\n// \u2500\u2500 ZIP Extraction \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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\n/**\n * Pure Node.js ZIP extractor \u2014 no external binary required.\n * Reads the ZIP central directory to locate file entries, then extracts\n * each one using Node's built-in zlib (DEFLATE) or raw copy (STORE).\n * Includes path traversal protection.\n *\n * Supports: STORE (method 0) and DEFLATE (method 8) compression.\n */\nexport async function extractZip(zipPath: string, destDir: string): Promise<void> {\n const buf = await fs.promises.readFile(zipPath);\n const resolvedDest = path.resolve(destDir);\n\n // \u2500\u2500 Locate End of Central Directory record \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 eocdOffset = -1;\n for (let i = buf.length - 22; i >= 0; i--) {\n if (buf.readUInt32LE(i) === 0x06054b50) { eocdOffset = i; break; }\n }\n if (eocdOffset === -1) throw new Error('Invalid ZIP: EOCD not found');\n\n const cdCount = buf.readUInt16LE(eocdOffset + 10);\n const cdOffset = buf.readUInt32LE(eocdOffset + 16);\n\n // \u2500\u2500 Walk Central Directory entries \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 cdPos = cdOffset;\n for (let i = 0; i < cdCount; i++) {\n if (buf.readUInt32LE(cdPos) !== 0x02014b50) throw new Error('Invalid ZIP: bad CD signature');\n\n const compMethod = buf.readUInt16LE(cdPos + 10);\n const compSize = buf.readUInt32LE(cdPos + 20);\n const uncompSize = buf.readUInt32LE(cdPos + 24);\n const fileNameLen = buf.readUInt16LE(cdPos + 28);\n const extraLen = buf.readUInt16LE(cdPos + 30);\n const commentLen = buf.readUInt16LE(cdPos + 32);\n const localOffset = buf.readUInt32LE(cdPos + 42);\n const fileName = buf.slice(cdPos + 46, cdPos + 46 + fileNameLen).toString('utf8');\n\n cdPos += 46 + fileNameLen + extraLen + commentLen;\n\n // Skip directory entries\n if (fileName.endsWith('/') || (uncompSize === 0 && compSize === 0)) continue;\n\n // Prevent path traversal\n const destPath = path.resolve(resolvedDest, fileName);\n if (!destPath.startsWith(resolvedDest + path.sep) && destPath !== resolvedDest) continue;\n\n // \u2500\u2500 Read Local File Header to find data offset \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 (buf.readUInt32LE(localOffset) !== 0x04034b50) throw new Error('Invalid ZIP: bad LFH signature');\n const localFileNameLen = buf.readUInt16LE(localOffset + 26);\n const localExtraLen = buf.readUInt16LE(localOffset + 28);\n const dataOffset = localOffset + 30 + localFileNameLen + localExtraLen;\n\n const compData = buf.slice(dataOffset, dataOffset + compSize);\n\n // \u2500\u2500 Decompress \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 fileData: Buffer;\n if (compMethod === 0) {\n fileData = compData;\n } else if (compMethod === 8) {\n fileData = await new Promise<Buffer>((resolve, reject) => {\n zlib.inflateRaw(compData, (err, result) => err ? reject(err) : resolve(result));\n });\n } else {\n continue; // Unsupported compression method \u2014 skip\n }\n\n await fs.promises.mkdir(path.dirname(destPath), { recursive: true });\n await fs.promises.writeFile(destPath, fileData);\n }\n}\n\n// \u2500\u2500 Tar.gz Extraction \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 interface TarExtractOptions {\n /** Strip this prefix from entry names (e.g. 'typesense-dashboard-gh-pages/'). */\n stripPrefix?: string;\n /** Only extract this specific file (by basename). Returns the file content via callback. */\n findFile?: string;\n}\n\n/**\n * Extract a tar.gz archive from a URL directly to a destination directory.\n * Streams the download \u2192 gunzip \u2192 tar extraction without writing the archive to disk.\n * Includes path traversal protection.\n *\n * @param url - URL of the .tar.gz file\n * @param destDir - Directory to extract files into\n * @param opts - Optional: strip prefix from paths, or find a specific file\n * @returns Buffer of the found file if opts.findFile is set, otherwise void\n */\nexport function extractTarGzFromUrl(\n url: string,\n destDir: string,\n opts?: TarExtractOptions\n): Promise<Buffer | void> {\n const resolvedDest = path.resolve(destDir);\n\n return new Promise((resolve, reject) => {\n fs.mkdirSync(resolvedDest, { recursive: true });\n\n function doGet(currentUrl: string) {\n const mod = currentUrl.startsWith('https') ? https : http;\n mod.get(currentUrl, { headers: { 'User-Agent': 'kirograph' } } as any, res => {\n if (res.statusCode === 301 || res.statusCode === 302) {\n return doGet(res.headers.location!);\n }\n if (res.statusCode !== 200) {\n return reject(new Error(`Download failed: HTTP ${res.statusCode}`));\n }\n\n const gunzip = zlib.createGunzip();\n res.pipe(gunzip);\n\n let tarBuffer = Buffer.alloc(0);\n let offset = 0;\n let foundFile: Buffer | null = null;\n\n function extractEntries(final = false) {\n while (offset + 512 <= tarBuffer.length) {\n const header = tarBuffer.slice(offset, offset + 512);\n const nameRaw = header.slice(0, 100).toString('utf8').replace(/\\0/g, '');\n const sizeOctal = header.slice(124, 136).toString('utf8').replace(/\\0/g, '').trim();\n const typeFlag = header[156];\n const size = parseInt(sizeOctal, 8) || 0;\n const dataStart = offset + 512;\n const dataEnd = dataStart + size;\n\n if (nameRaw === '') { offset += 512; continue; }\n\n // Strip prefix if configured\n const relName = opts?.stripPrefix && nameRaw.startsWith(opts.stripPrefix)\n ? nameRaw.slice(opts.stripPrefix.length)\n : nameRaw;\n\n // If looking for a specific file\n if (opts?.findFile && path.basename(nameRaw) === opts.findFile) {\n if (tarBuffer.length >= dataEnd || final) {\n foundFile = tarBuffer.slice(dataStart, dataEnd);\n resolve(foundFile);\n return;\n }\n return; // Wait for more data\n }\n\n const destPath = path.resolve(resolvedDest, relName);\n\n // Prevent path traversal\n if (!destPath.startsWith(resolvedDest + path.sep) && destPath !== resolvedDest) {\n offset = dataStart + Math.ceil(size / 512) * 512;\n continue;\n }\n\n // Directory entry\n if (typeFlag === 53 || nameRaw.endsWith('/')) {\n try { fs.mkdirSync(destPath, { recursive: true }); } catch { /* ignore */ }\n offset = dataStart;\n continue;\n }\n\n // File entry \u2014 wait for full data\n if (tarBuffer.length < dataEnd && !final) return;\n\n if (relName && !relName.endsWith('/')) {\n try {\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n fs.writeFileSync(destPath, tarBuffer.slice(dataStart, dataEnd));\n } catch { /* skip unwritable entries */ }\n }\n\n offset = dataStart + Math.ceil(size / 512) * 512;\n }\n }\n\n gunzip.on('data', (chunk: Buffer) => {\n tarBuffer = Buffer.concat([tarBuffer, chunk]);\n extractEntries();\n });\n gunzip.on('end', () => {\n extractEntries(true);\n if (opts?.findFile && !foundFile) {\n reject(new Error(`${opts.findFile} not found in archive`));\n } else {\n resolve(foundFile ?? undefined);\n }\n });\n gunzip.on('error', reject);\n }).on('error', reject);\n }\n\n doGet(url);\n });\n}\n\n/**\n * Extract a single binary from a tar.gz URL and write it to destPath.\n * Useful for downloading server binaries (e.g. Typesense).\n */\nexport async function extractBinaryFromTarGz(\n url: string,\n binaryName: string,\n destPath: string\n): Promise<void> {\n const destDir = path.dirname(destPath);\n fs.mkdirSync(destDir, { recursive: true });\n\n const content = await extractTarGzFromUrl(url, destDir, { findFile: binaryName });\n if (content && Buffer.isBuffer(content)) {\n fs.writeFileSync(destPath, content);\n try { fs.chmodSync(destPath, 0o755); } catch { /* Windows doesn't support chmod */ }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var caveman_exports = {};
20
+ __export(caveman_exports, {
21
+ CAVEMAN_RULES: () => CAVEMAN_RULES
22
+ });
23
+ module.exports = __toCommonJS(caveman_exports);
24
+ const AUTO_CLARITY = `Auto-clarity exceptions: temporarily revert to normal prose for (1) security warnings, (2) confirmations of irreversible actions (delete, overwrite, force-push), and (3) multi-step sequences where fragment order could cause misunderstanding. Resume compressed style immediately after.`;
25
+ const CAVEMAN_RULES = {
26
+ lite: `## Communication style: lite
27
+
28
+ Respond concisely. Omit filler words (just, really, basically, simply, actually).
29
+ Keep full sentences and articles. Remove pleasantries and hedging.
30
+ Preserve all code blocks, technical terms, file paths, and URLs unchanged.
31
+ Pattern: state the fact, then the next step.
32
+ ${AUTO_CLARITY}`,
33
+ full: `## Communication style: full caveman
34
+
35
+ Drop articles (a, an, the). Use fragments. Short synonyms OK.
36
+ No filler (just, really, basically, simply, actually). No pleasantries.
37
+ No hedging ("I think", "it seems", "you might want to").
38
+ Preserve all code blocks, technical terms, file paths, URLs unchanged.
39
+ Pattern: [thing] [action] [reason]. [next step].
40
+ Example: "Bug in auth middleware. Token check use \`<\` not \`<=\`. Fix line 42."
41
+ ${AUTO_CLARITY}`,
42
+ ultra: `## Communication style: ultra caveman
43
+
44
+ Max compression. Drop articles, conjunctions, filler. Use fragments only.
45
+ Abbreviate: DB, auth, req, res, fn, cfg, msg, err, impl, dep.
46
+ Use \u2192 for causality. Use + for "and". Omit subject when obvious.
47
+ No pleasantries. No hedging. No explanations unless asked.
48
+ Preserve code blocks, technical terms, file paths, URLs unchanged.
49
+ Pattern: [thing] \u2192 [action]. [fix].
50
+ Example: "auth middleware \u2192 token check \`<\` not \`<=\`. Fix L42."
51
+ ${AUTO_CLARITY}`
52
+ };
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ CAVEMAN_RULES
56
+ });
57
+ //# sourceMappingURL=caveman.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/installer/caveman.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph \u2014 Caveman mode support\n *\n * Mode stored in .kirograph/config.json as `cavemanMode`.\n * Rules are injected into:\n * - .kiro/steering/kirograph.md (IDE, inclusion: always)\n * - .kiro/agents/kirograph.json (kiro-cli, inline prompt)\n * No hooks needed \u2014 steering is always included.\n */\n\nexport type CavemanMode = 'off' | 'lite' | 'full' | 'ultra';\n\n// \u2500\u2500 Rules per level \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 AUTO_CLARITY = `\\\nAuto-clarity exceptions: temporarily revert to normal prose for (1) security warnings, \\\n(2) confirmations of irreversible actions (delete, overwrite, force-push), and \\\n(3) multi-step sequences where fragment order could cause misunderstanding. \\\nResume compressed style immediately after.`;\n\nexport const CAVEMAN_RULES: Record<string, string> = {\n lite: `\\\n## Communication style: lite\n\nRespond concisely. Omit filler words (just, really, basically, simply, actually).\nKeep full sentences and articles. Remove pleasantries and hedging.\nPreserve all code blocks, technical terms, file paths, and URLs unchanged.\nPattern: state the fact, then the next step.\n${AUTO_CLARITY}`,\n\n full: `\\\n## Communication style: full caveman\n\nDrop articles (a, an, the). Use fragments. Short synonyms OK.\nNo filler (just, really, basically, simply, actually). No pleasantries.\nNo hedging (\"I think\", \"it seems\", \"you might want to\").\nPreserve all code blocks, technical terms, file paths, URLs unchanged.\nPattern: [thing] [action] [reason]. [next step].\nExample: \"Bug in auth middleware. Token check use \\`<\\` not \\`<=\\`. Fix line 42.\"\n${AUTO_CLARITY}`,\n\n ultra: `\\\n## Communication style: ultra caveman\n\nMax compression. Drop articles, conjunctions, filler. Use fragments only.\nAbbreviate: DB, auth, req, res, fn, cfg, msg, err, impl, dep.\nUse \u2192 for causality. Use + for \"and\". Omit subject when obvious.\nNo pleasantries. No hedging. No explanations unless asked.\nPreserve code blocks, technical terms, file paths, URLs unchanged.\nPattern: [thing] \u2192 [action]. [fix].\nExample: \"auth middleware \u2192 token check \\`<\\` not \\`<=\\`. Fix L42.\"\n${AUTO_CLARITY}`,\n};\n\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,MAAM,eAAe;AAMd,MAAM,gBAAwC;AAAA,EACnD,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAON,YAAY;AAAA,EAEZ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN,YAAY;AAAA,EAEZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUP,YAAY;AACd;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * KiroGraph Installer — Kiro CLI agent config
3
+ *
4
+ * Writes .kiro/agents/kirograph.json — a workspace custom agent that wires up:
5
+ * - MCP server (kirograph tools)
6
+ * - steering instructions inlined as prompt
7
+ * - hooks: sync on agentSpawn, userPromptSubmit, stop
8
+ *
9
+ * Sync strategy (CLI has no file-watch events unlike the IDE):
10
+ * - agentSpawn: sync-if-dirty — catches edits made between sessions
11
+ * - userPromptSubmit: sync-if-dirty — keeps graph fresh within a session
12
+ * - stop: sync-if-dirty --quiet — deferred flush, mirrors IDE agentStop
13
+ */
14
+ export declare function writeCliAgent(kiroDir: string): void;
15
+ //# sourceMappingURL=cli-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-agent.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/cli-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyGH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMnD"}
@@ -0,0 +1,89 @@
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 cli_agent_exports = {};
30
+ __export(cli_agent_exports, {
31
+ writeCliAgent: () => writeCliAgent
32
+ });
33
+ module.exports = __toCommonJS(cli_agent_exports);
34
+ var fs = __toESM(require("fs"));
35
+ var path = __toESM(require("path"));
36
+ const KIROGRAPH_TOOLS = [
37
+ "@kirograph/kirograph_search",
38
+ "@kirograph/kirograph_context",
39
+ "@kirograph/kirograph_callers",
40
+ "@kirograph/kirograph_callees",
41
+ "@kirograph/kirograph_impact",
42
+ "@kirograph/kirograph_node",
43
+ "@kirograph/kirograph_status",
44
+ "@kirograph/kirograph_files",
45
+ "@kirograph/kirograph_dead_code",
46
+ "@kirograph/kirograph_circular_deps",
47
+ "@kirograph/kirograph_path",
48
+ "@kirograph/kirograph_type_hierarchy",
49
+ "@kirograph/kirograph_architecture",
50
+ "@kirograph/kirograph_package",
51
+ "@kirograph/kirograph_coupling",
52
+ "@kirograph/kirograph_hotspots",
53
+ "@kirograph/kirograph_surprising",
54
+ "@kirograph/kirograph_diff"
55
+ ];
56
+ const SYNC_CMD = "kirograph sync-if-dirty --quiet 2>/dev/null || true";
57
+ function buildAgentConfig() {
58
+ return {
59
+ name: "kirograph",
60
+ description: "KiroGraph-aware agent \u2014 uses the semantic code graph for faster, smarter exploration.",
61
+ resources: ["file://.kiro/steering/kirograph.md"],
62
+ tools: ["@builtin", "@kirograph"],
63
+ allowedTools: KIROGRAPH_TOOLS,
64
+ useLegacyMcpJson: true,
65
+ hooks: {
66
+ agentSpawn: [{ command: SYNC_CMD }],
67
+ userPromptSubmit: [{ command: SYNC_CMD }],
68
+ stop: [{ command: SYNC_CMD }]
69
+ }
70
+ };
71
+ }
72
+ function ensureDir(p) {
73
+ fs.mkdirSync(p, { recursive: true });
74
+ }
75
+ function writeJson(p, data) {
76
+ fs.writeFileSync(p, JSON.stringify(data, null, 2) + "\n");
77
+ }
78
+ function writeCliAgent(kiroDir) {
79
+ const agentsDir = path.join(kiroDir, "agents");
80
+ ensureDir(agentsDir);
81
+ const agentPath = path.join(agentsDir, "kirograph.json");
82
+ writeJson(agentPath, buildAgentConfig());
83
+ console.log(` \u2713 CLI agent config written to ${agentPath}`);
84
+ }
85
+ // Annotate the CommonJS export names for ESM import in node:
86
+ 0 && (module.exports = {
87
+ writeCliAgent
88
+ });
89
+ //# sourceMappingURL=cli-agent.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/installer/cli-agent.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Installer \u2014 Kiro CLI agent config\n *\n * Writes .kiro/agents/kirograph.json \u2014 a workspace custom agent that wires up:\n * - MCP server (kirograph tools)\n * - steering file as resource (single source of truth for instructions + caveman rules)\n * - hooks: sync on agentSpawn, userPromptSubmit, stop\n *\n * Sync strategy (CLI has no file-watch events unlike the IDE):\n * - agentSpawn: sync-if-dirty \u2014 catches edits made between sessions\n * - userPromptSubmit: sync-if-dirty \u2014 keeps graph fresh within a session\n * - stop: sync-if-dirty --quiet \u2014 deferred flush, mirrors IDE agentStop\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nconst KIROGRAPH_TOOLS = [\n '@kirograph/kirograph_search',\n '@kirograph/kirograph_context',\n '@kirograph/kirograph_callers',\n '@kirograph/kirograph_callees',\n '@kirograph/kirograph_impact',\n '@kirograph/kirograph_node',\n '@kirograph/kirograph_status',\n '@kirograph/kirograph_files',\n '@kirograph/kirograph_dead_code',\n '@kirograph/kirograph_circular_deps',\n '@kirograph/kirograph_path',\n '@kirograph/kirograph_type_hierarchy',\n '@kirograph/kirograph_architecture',\n '@kirograph/kirograph_package',\n '@kirograph/kirograph_coupling',\n '@kirograph/kirograph_hotspots',\n '@kirograph/kirograph_surprising',\n '@kirograph/kirograph_diff',\n];\n\nconst SYNC_CMD = 'kirograph sync-if-dirty --quiet 2>/dev/null || true';\n\nfunction buildAgentConfig() {\n return {\n name: 'kirograph',\n description: 'KiroGraph-aware agent \u2014 uses the semantic code graph for faster, smarter exploration.',\n resources: ['file://.kiro/steering/kirograph.md'],\n tools: ['@builtin', '@kirograph'],\n allowedTools: KIROGRAPH_TOOLS,\n useLegacyMcpJson: true,\n hooks: {\n agentSpawn: [{ command: SYNC_CMD }],\n userPromptSubmit: [{ command: SYNC_CMD }],\n stop: [{ command: SYNC_CMD }],\n },\n };\n}\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\nexport function writeCliAgent(kiroDir: string): void {\n const agentsDir = path.join(kiroDir, 'agents');\n ensureDir(agentsDir);\n const agentPath = path.join(agentsDir, 'kirograph.json');\n writeJson(agentPath, buildAgentConfig());\n console.log(` \u2713 CLI agent config written to ${agentPath}`);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,SAAoB;AACpB,WAAsB;AAEtB,MAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,WAAW;AAEjB,SAAS,mBAAmB;AAC1B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,oCAAoC;AAAA,IAChD,OAAO,CAAC,YAAY,YAAY;AAAA,IAChC,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,OAAO;AAAA,MACL,YAAY,CAAC,EAAE,SAAS,SAAS,CAAC;AAAA,MAClC,kBAAkB,CAAC,EAAE,SAAS,SAAS,CAAC;AAAA,MACxC,MAAM,CAAC,EAAE,SAAS,SAAS,CAAC;AAAA,IAC9B;AAAA,EACF;AACF;AAEA,SAAS,UAAU,GAAiB;AAClC,KAAG,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AACrC;AAEA,SAAS,UAAU,GAAW,MAAqB;AACjD,KAAG,cAAc,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI;AAC1D;AAEO,SAAS,cAAc,SAAuB;AACnD,QAAM,YAAY,KAAK,KAAK,SAAS,QAAQ;AAC7C,YAAU,SAAS;AACnB,QAAM,YAAY,KAAK,KAAK,WAAW,gBAAgB;AACvD,YAAU,WAAW,iBAAiB,CAAC;AACvC,UAAQ,IAAI,wCAAmC,SAAS,EAAE;AAC5D;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * KiroGraph Installer — configuration prompting
3
+ */
4
+ import * as readline from 'readline';
5
+ import { KiroGraphConfig } from '../../config';
6
+ export type ConfigPatch = Pick<KiroGraphConfig, 'enableEmbeddings' | 'useVecIndex' | 'semanticEngine' | 'typesenseDashboard' | 'qdrantDashboard' | 'extractDocstrings' | 'trackCallSites' | 'enableArchitecture'> & {
7
+ embeddingModel?: string;
8
+ embeddingDim?: number;
9
+ };
10
+ export type SemanticEngine = KiroGraphConfig['semanticEngine'];
11
+ export declare const DEFAULT_EMBEDDING_MODEL = "nomic-ai/nomic-embed-text-v1.5";
12
+ export declare function promptConfigOptions(rl: readline.Interface): Promise<ConfigPatch>;
13
+ //# sourceMappingURL=config-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-prompt.d.ts","sourceRoot":"","sources":["../../../src/bin/installer/config-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,kBAAkB,GAAG,aAAa,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACvQ,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;AAE/D,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAoCxE,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CA4FtF"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var config_prompt_exports = {};
20
+ __export(config_prompt_exports, {
21
+ DEFAULT_EMBEDDING_MODEL: () => DEFAULT_EMBEDDING_MODEL,
22
+ promptConfigOptions: () => promptConfigOptions
23
+ });
24
+ module.exports = __toCommonJS(config_prompt_exports);
25
+ var import_prompts = require("./prompts");
26
+ const DEFAULT_EMBEDDING_MODEL = "nomic-ai/nomic-embed-text-v1.5";
27
+ const PRESET_MODELS = [
28
+ {
29
+ value: "nomic-ai/nomic-embed-text-v1.5",
30
+ label: "nomic-embed-text-v1.5",
31
+ dim: 768,
32
+ description: "768-dim \xB7 ~130MB \xB7 Best quality for code search (recommended)"
33
+ },
34
+ {
35
+ value: "onnx-community/embeddinggemma-300m-ONNX",
36
+ label: "embeddinggemma-300m",
37
+ dim: 768,
38
+ description: "768-dim \xB7 ~300MB \xB7 Google Gemma-based, multilingual, 2048-token context"
39
+ },
40
+ {
41
+ value: "Xenova/all-MiniLM-L6-v2",
42
+ label: "all-MiniLM-L6-v2",
43
+ dim: 384,
44
+ description: "384-dim \xB7 ~23MB \xB7 Fast and lightweight, lower accuracy"
45
+ },
46
+ {
47
+ value: "BAAI/bge-base-en-v1.5",
48
+ label: "bge-base-en-v1.5",
49
+ dim: 768,
50
+ description: "768-dim \xB7 ~110MB \xB7 Strong general-purpose alternative to nomic"
51
+ },
52
+ {
53
+ value: "__other__",
54
+ label: "Other",
55
+ dim: 768,
56
+ description: "Enter a custom HuggingFace model ID and embedding dimension"
57
+ }
58
+ ];
59
+ async function promptConfigOptions(rl) {
60
+ const enableEmbeddings = await (0, import_prompts.askBool)(
61
+ rl,
62
+ "Enable semantic embeddings for similarity search? (requires a local embedding model)",
63
+ "Enables semantic/similarity-based code search. Increases indexing time; the chosen embedding model is downloaded automatically on first use."
64
+ );
65
+ const patch = { enableEmbeddings, useVecIndex: false, semanticEngine: "cosine", typesenseDashboard: false, qdrantDashboard: false, extractDocstrings: true, trackCallSites: true, enableArchitecture: false, cavemanMode: "off" };
66
+ if (enableEmbeddings) {
67
+ const modelChoice = await (0, import_prompts.arrowSelect)(
68
+ rl,
69
+ "Choose an embedding model:",
70
+ PRESET_MODELS.map((m) => ({ value: m.value, label: m.label, description: m.description }))
71
+ );
72
+ let embeddingModel;
73
+ let embeddingDim;
74
+ if (modelChoice === "__other__") {
75
+ console.log(`
76
+ ${import_prompts.dim}Enter a HuggingFace model ID in the format org/model-name.${import_prompts.reset}`);
77
+ while (true) {
78
+ const raw = (await (0, import_prompts.ask)(rl, ` ${import_prompts.violet}Model identifier:${import_prompts.reset} `)).trim();
79
+ if (raw.includes("/")) {
80
+ embeddingModel = raw;
81
+ break;
82
+ }
83
+ console.log(` Expected a HuggingFace model ID in the format org/model-name (e.g. nomic-ai/nomic-embed-text-v1.5).`);
84
+ }
85
+ console.log(`
86
+ ${import_prompts.dim}Enter the embedding output dimension for this model (check the model card on HuggingFace).${import_prompts.reset}`);
87
+ while (true) {
88
+ const raw = (await (0, import_prompts.ask)(rl, ` ${import_prompts.violet}Embedding dimension (e.g. 768, 384):${import_prompts.reset} `)).trim();
89
+ const n = parseInt(raw, 10);
90
+ if (!isNaN(n) && n > 0) {
91
+ embeddingDim = n;
92
+ break;
93
+ }
94
+ console.log(` Expected a positive integer (e.g. 768, 384, 1536).`);
95
+ }
96
+ } else {
97
+ const preset = PRESET_MODELS.find((m) => m.value === modelChoice);
98
+ embeddingModel = preset.value;
99
+ embeddingDim = preset.dim;
100
+ }
101
+ patch.embeddingModel = embeddingModel;
102
+ patch.embeddingDim = embeddingDim;
103
+ const semanticEngine = await (0, import_prompts.arrowSelect)(rl, "Choose the semantic search engine:", [
104
+ { value: "cosine", label: "cosine", description: "In-process cosine similarity. No extra deps. Best for small/medium projects." },
105
+ { value: "sqlite-vec", label: "sqlite-vec", description: "ANN index. Sub-linear search. Best for large codebases. Needs: better-sqlite3, sqlite-vec (native)." },
106
+ { value: "orama", label: "orama", description: "Hybrid search (full-text + vector). Pure JS. Needs: @orama/orama, @orama/plugin-data-persistence." },
107
+ { value: "pglite", label: "pglite", description: "Hybrid search via PostgreSQL + pgvector. Exact results. Pure WASM. Needs: @electric-sql/pglite." },
108
+ { value: "lancedb", label: "lancedb", description: "ANN search via LanceDB (Apache Lance columnar format). Pure JS. Needs: @lancedb/lancedb." },
109
+ { value: "qdrant", label: "qdrant", description: "ANN search via Qdrant embedded binary (HNSW index, Cosine). Needs: qdrant-local." },
110
+ { value: "typesense", label: "typesense", description: "ANN search via Typesense (auto-downloaded binary, HNSW, Cosine). Needs: typesense." }
111
+ ]);
112
+ patch.semanticEngine = semanticEngine;
113
+ patch.useVecIndex = semanticEngine === "sqlite-vec";
114
+ if (semanticEngine === "typesense") {
115
+ patch.typesenseDashboard = await (0, import_prompts.askBool)(
116
+ rl,
117
+ "Open Typesense dashboard after indexing?",
118
+ "Serves the Typesense Dashboard locally and opens it in your browser after indexing completes."
119
+ );
120
+ }
121
+ if (semanticEngine === "qdrant") {
122
+ patch.qdrantDashboard = await (0, import_prompts.askBool)(
123
+ rl,
124
+ "Open Qdrant dashboard after indexing?",
125
+ "Downloads the Qdrant Web UI (first time only) and opens it in your browser after indexing completes."
126
+ );
127
+ }
128
+ }
129
+ patch.extractDocstrings = await (0, import_prompts.askBool)(
130
+ rl,
131
+ "Extract docstrings from source files?",
132
+ "Enriches symbol metadata and improves context quality. Slightly increases indexing time."
133
+ );
134
+ patch.trackCallSites = await (0, import_prompts.askBool)(
135
+ rl,
136
+ "Track call sites to enable caller/callee graph traversal?",
137
+ "Enables the kirograph_callers and kirograph_callees MCP tools for graph traversal. Increases index size."
138
+ );
139
+ patch.enableArchitecture = await (0, import_prompts.askBool)(
140
+ rl,
141
+ "Enable architecture analysis (package graph + layer detection)?",
142
+ "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."
143
+ );
144
+ const cavemanChoice = await (0, import_prompts.arrowSelect)(rl, "Caveman mode \u2014 agent communication style:", [
145
+ { value: "off", label: "off", description: "Normal responses" },
146
+ { value: "lite", label: "lite", description: "Compact, no filler, full sentences" },
147
+ { value: "full", label: "full", description: "Fragments, no articles, short synonyms" },
148
+ { value: "ultra", label: "ultra", description: "Max compression, abbreviations, \u2192 for causality" }
149
+ ]);
150
+ patch.cavemanMode = cavemanChoice;
151
+ return patch;
152
+ }
153
+ // Annotate the CommonJS export names for ESM import in node:
154
+ 0 && (module.exports = {
155
+ DEFAULT_EMBEDDING_MODEL,
156
+ promptConfigOptions
157
+ });
158
+ //# sourceMappingURL=config-prompt.js.map