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,11 @@
1
+ import type { GraphDatabase } from '../db/database';
2
+ import type { KiroGraphConfig } from '../config';
3
+ import type { ArchitectureResult } from './types';
4
+ export declare class ArchitectureAnalyzer {
5
+ private readonly db;
6
+ private readonly config;
7
+ private readonly projectRoot;
8
+ constructor(db: GraphDatabase, config: KiroGraphConfig, projectRoot: string);
9
+ analyze(onProgress?: (msg: string) => void): Promise<ArchitectureResult>;
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/architecture/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAC0D,kBAAkB,EACvF,MAAM,SAAS,CAAC;AAIjB,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFX,EAAE,EAAE,aAAa,EACjB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM;IAGhC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA6N/E"}
@@ -0,0 +1,207 @@
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 architecture_exports = {};
20
+ __export(architecture_exports, {
21
+ ArchitectureAnalyzer: () => ArchitectureAnalyzer
22
+ });
23
+ module.exports = __toCommonJS(architecture_exports);
24
+ var import_manifest = require("./manifest/index");
25
+ var import_layers = require("./layers/index");
26
+ class ArchitectureAnalyzer {
27
+ constructor(db, config, projectRoot) {
28
+ this.db = db;
29
+ this.config = config;
30
+ this.projectRoot = projectRoot;
31
+ }
32
+ async analyze(onProgress) {
33
+ const log = (msg) => onProgress?.(msg);
34
+ log("architecture: parsing manifests");
35
+ const manifestPackages = await (0, import_manifest.parseAllManifests)(this.projectRoot);
36
+ const allFiles = this.db.getAllFiles().map((f) => f.path);
37
+ log("architecture: assigning files to packages");
38
+ const filePackageMap = /* @__PURE__ */ new Map();
39
+ const sortedPkgs = [...manifestPackages].sort((a, b) => b.path.length - a.path.length);
40
+ for (const file of allFiles) {
41
+ for (const pkg of sortedPkgs) {
42
+ const pkgPath = pkg.path === "." ? "" : pkg.path + "/";
43
+ if (pkg.path === "." || file.startsWith(pkgPath)) {
44
+ filePackageMap.set(file, pkg.id);
45
+ break;
46
+ }
47
+ }
48
+ }
49
+ const SUBDIR_THRESHOLD = 1;
50
+ const directoryPackages = [];
51
+ const rootManifestIds = new Set(manifestPackages.filter((p) => p.path === ".").map((p) => p.id));
52
+ const hasRootManifest = rootManifestIds.size > 0;
53
+ if (manifestPackages.length === 0) {
54
+ const topDirs = /* @__PURE__ */ new Set();
55
+ for (const file of allFiles) {
56
+ const parts = file.split("/");
57
+ if (parts.length > 1) topDirs.add(parts[0]);
58
+ }
59
+ for (const dir of topDirs) {
60
+ const pkgId = `pkg:dir:${dir}`;
61
+ directoryPackages.push({ id: pkgId, name: dir, path: dir, source: "directory", updatedAt: Date.now() });
62
+ for (const file of allFiles) {
63
+ if (file.startsWith(dir + "/")) filePackageMap.set(file, pkgId);
64
+ }
65
+ }
66
+ } else if (hasRootManifest) {
67
+ const rootOwnedFiles = allFiles.filter((f) => rootManifestIds.has(filePackageMap.get(f) ?? ""));
68
+ const subDirCounts = /* @__PURE__ */ new Map();
69
+ for (const file of rootOwnedFiles) {
70
+ const parts = file.split("/");
71
+ if (parts.length > 2) {
72
+ const dir = parts.slice(0, 2).join("/");
73
+ subDirCounts.set(dir, (subDirCounts.get(dir) ?? 0) + 1);
74
+ }
75
+ }
76
+ for (const [dir, count] of subDirCounts) {
77
+ if (count >= SUBDIR_THRESHOLD) {
78
+ const pkgId = `pkg:dir:${dir}`;
79
+ const name = dir.split("/").pop() ?? dir;
80
+ const pkg = { id: pkgId, name, path: dir, source: "directory", updatedAt: Date.now() };
81
+ directoryPackages.push(pkg);
82
+ for (const file of rootOwnedFiles) {
83
+ if (file.startsWith(dir + "/") || file === dir) {
84
+ filePackageMap.set(file, pkgId);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ } else {
90
+ const uncovered = allFiles.filter((f) => !filePackageMap.has(f));
91
+ const subDirCounts = /* @__PURE__ */ new Map();
92
+ for (const file of uncovered) {
93
+ const parts = file.split("/");
94
+ if (parts.length > 1) {
95
+ const dir = parts.slice(0, 2).join("/");
96
+ subDirCounts.set(dir, (subDirCounts.get(dir) ?? 0) + 1);
97
+ }
98
+ }
99
+ for (const [dir, count] of subDirCounts) {
100
+ if (count >= SUBDIR_THRESHOLD) {
101
+ const pkgId = `pkg:dir:${dir}`;
102
+ const name = dir.split("/").pop() ?? dir;
103
+ const pkg = { id: pkgId, name, path: dir, source: "directory", updatedAt: Date.now() };
104
+ directoryPackages.push(pkg);
105
+ for (const file of uncovered) {
106
+ if (file.startsWith(dir + "/") && !filePackageMap.has(file)) {
107
+ filePackageMap.set(file, pkgId);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+ const allPackages = [...manifestPackages, ...directoryPackages];
114
+ log("architecture: detecting layers");
115
+ const layerAssignments = [];
116
+ const fileLayerMap = /* @__PURE__ */ new Map();
117
+ if (this.config.architectureLayers !== void 0 || this.config.enableArchitecture) {
118
+ const assignments = await (0, import_layers.detectAllLayers)(allFiles, this.projectRoot, this.config.architectureLayers);
119
+ for (const a of assignments) {
120
+ layerAssignments.push(a);
121
+ fileLayerMap.set(a.filePath, a);
122
+ }
123
+ }
124
+ const allLayers = (0, import_layers.buildArchLayers)(layerAssignments, this.config.architectureLayers);
125
+ log("architecture: rolling up package dependencies");
126
+ const importPairs = this.db.getFileImportPairs();
127
+ const pkgDepCounts = /* @__PURE__ */ new Map();
128
+ for (const { sourceFile, targetFile } of importPairs) {
129
+ const sourcePkg = filePackageMap.get(sourceFile);
130
+ const targetPkg = filePackageMap.get(targetFile);
131
+ if (!sourcePkg || !targetPkg || sourcePkg === targetPkg) continue;
132
+ if (!pkgDepCounts.has(sourcePkg)) pkgDepCounts.set(sourcePkg, /* @__PURE__ */ new Map());
133
+ const inner = pkgDepCounts.get(sourcePkg);
134
+ if (!inner.has(targetPkg)) inner.set(targetPkg, { count: 0, files: [] });
135
+ const entry = inner.get(targetPkg);
136
+ entry.count++;
137
+ if (entry.files.length < 5) entry.files.push({ from: sourceFile, to: targetFile });
138
+ }
139
+ const packageDeps = [];
140
+ for (const [sourcePkg, targets] of pkgDepCounts) {
141
+ for (const [targetPkg, { count, files }] of targets) {
142
+ packageDeps.push({ sourcePkg, targetPkg, depCount: count, files });
143
+ }
144
+ }
145
+ const layerDepCounts = /* @__PURE__ */ new Map();
146
+ for (const dep of packageDeps) {
147
+ const srcFile = [...filePackageMap.entries()].find(([, pkgId]) => pkgId === dep.sourcePkg)?.[0];
148
+ const tgtFile = [...filePackageMap.entries()].find(([, pkgId]) => pkgId === dep.targetPkg)?.[0];
149
+ const srcLayer = srcFile ? fileLayerMap.get(srcFile)?.layerName : void 0;
150
+ const tgtLayer = tgtFile ? fileLayerMap.get(tgtFile)?.layerName : void 0;
151
+ if (!srcLayer || !tgtLayer || srcLayer === tgtLayer) continue;
152
+ const srcLayerId = `layer:${srcLayer}`;
153
+ const tgtLayerId = `layer:${tgtLayer}`;
154
+ if (!layerDepCounts.has(srcLayerId)) layerDepCounts.set(srcLayerId, /* @__PURE__ */ new Map());
155
+ const inner = layerDepCounts.get(srcLayerId);
156
+ inner.set(tgtLayerId, (inner.get(tgtLayerId) ?? 0) + dep.depCount);
157
+ }
158
+ const layerDeps = [];
159
+ for (const [srcLayer, targets] of layerDepCounts) {
160
+ for (const [tgtLayer, count] of targets) {
161
+ layerDeps.push({ sourceLayer: srcLayer, targetLayer: tgtLayer, depCount: count });
162
+ }
163
+ }
164
+ const afferentMap = /* @__PURE__ */ new Map();
165
+ const efferentMap = /* @__PURE__ */ new Map();
166
+ for (const dep of packageDeps) {
167
+ efferentMap.set(dep.sourcePkg, (efferentMap.get(dep.sourcePkg) ?? 0) + 1);
168
+ afferentMap.set(dep.targetPkg, (afferentMap.get(dep.targetPkg) ?? 0) + 1);
169
+ }
170
+ const coupling = allPackages.map((pkg) => {
171
+ const ca = afferentMap.get(pkg.id) ?? 0;
172
+ const ce = efferentMap.get(pkg.id) ?? 0;
173
+ const instability = ca + ce === 0 ? 0 : ce / (ca + ce);
174
+ return { packageId: pkg.id, afferent: ca, efferent: ce, instability, updatedAt: Date.now() };
175
+ });
176
+ log("architecture: persisting to database");
177
+ this.db.clearArchitecture();
178
+ for (const pkg of allPackages) this.db.upsertArchPackage(pkg);
179
+ for (const layer of allLayers) this.db.upsertArchLayer(layer);
180
+ for (const [filePath, pkgId] of filePackageMap) this.db.upsertArchFilePackage(filePath, pkgId);
181
+ for (const a of layerAssignments) {
182
+ this.db.upsertArchFileLayer(a.filePath, `layer:${a.layerName}`, a.confidence, a.matchedPattern);
183
+ }
184
+ for (const dep of packageDeps) {
185
+ this.db.upsertArchPackageDep(dep.sourcePkg, dep.targetPkg, dep.depCount, dep.files);
186
+ }
187
+ for (const dep of layerDeps) {
188
+ this.db.upsertArchLayerDep(dep.sourceLayer, dep.targetLayer, dep.depCount);
189
+ }
190
+ for (const c of coupling) this.db.upsertArchCoupling(c);
191
+ const filePackages = {};
192
+ for (const [filePath, pkgId] of filePackageMap) {
193
+ if (!filePackages[filePath]) filePackages[filePath] = [];
194
+ filePackages[filePath].push(pkgId);
195
+ }
196
+ const fileLayers = {};
197
+ for (const a of layerAssignments) {
198
+ fileLayers[a.filePath] = [{ layerId: `layer:${a.layerName}`, confidence: a.confidence, matchedPattern: a.matchedPattern }];
199
+ }
200
+ return { packages: allPackages, layers: allLayers, packageDeps, layerDeps, coupling, filePackages, fileLayers };
201
+ }
202
+ }
203
+ // Annotate the CommonJS export names for ESM import in node:
204
+ 0 && (module.exports = {
205
+ ArchitectureAnalyzer
206
+ });
207
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/architecture/index.ts"],
4
+ "sourcesContent": ["/**\n * ArchitectureAnalyzer\n *\n * Orchestrates the full architecture analysis pipeline:\n * 1. Parse manifests \u2192 packages\n * 2. Directory-based fallback for uncovered file trees\n * 3. Detect layers from file paths\n * 4. Roll up package-to-package dependencies from existing import edges\n * 5. Roll up layer-to-layer dependencies\n * 6. Compute coupling metrics (Ca, Ce, instability)\n *\n * Only runs when enableArchitecture=true. Writes to arch_* tables in kirograph.db.\n */\nimport * as path from 'path';\nimport type { GraphDatabase } from '../db/database';\nimport type { KiroGraphConfig } from '../config';\nimport type {\n ArchPackage, ArchLayer, ArchPackageDep, ArchLayerDep, ArchCoupling, ArchitectureResult,\n} from './types';\nimport { parseAllManifests } from './manifest/index';\nimport { detectAllLayers, buildArchLayers, type FileLayerAssignment } from './layers/index';\n\nexport class ArchitectureAnalyzer {\n constructor(\n private readonly db: GraphDatabase,\n private readonly config: KiroGraphConfig,\n private readonly projectRoot: string,\n ) {}\n\n async analyze(onProgress?: (msg: string) => void): Promise<ArchitectureResult> {\n const log = (msg: string) => onProgress?.(msg);\n\n // \u2500\u2500 1. Parse manifests \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 log('architecture: parsing manifests');\n const manifestPackages = await parseAllManifests(this.projectRoot);\n\n // \u2500\u2500 2. Get all indexed files \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 allFiles = this.db.getAllFiles().map(f => f.path); // relative paths\n\n // \u2500\u2500 3. Assign files to packages (manifest-based) \u2500\u2500\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 log('architecture: assigning files to packages');\n const filePackageMap = new Map<string, string>(); // filePath \u2192 packageId\n // Sort packages by path length desc so the most-specific package wins\n const sortedPkgs = [...manifestPackages].sort((a, b) => b.path.length - a.path.length);\n for (const file of allFiles) {\n for (const pkg of sortedPkgs) {\n const pkgPath = pkg.path === '.' ? '' : pkg.path + '/';\n if (pkg.path === '.' || file.startsWith(pkgPath)) {\n filePackageMap.set(file, pkg.id);\n break;\n }\n }\n }\n\n // \u2500\u2500 4. Directory-based fallback / subdivision \u2500\u2500\u2500\u2500\u2500\u2500\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 // Three cases:\n // A) No manifests at all \u2192 group by top-level directory.\n // B) Root manifest (path='.') covers everything \u2192 subdivide its files into\n // second-level directory packages so internal structure is visible.\n // C) Manifests exist but don't cover the whole tree \u2192 create directory\n // packages for uncovered subdirectories (threshold: 3 files).\n //\n const SUBDIR_THRESHOLD = 1;\n const directoryPackages: ArchPackage[] = [];\n\n const rootManifestIds = new Set(manifestPackages.filter(p => p.path === '.').map(p => p.id));\n const hasRootManifest = rootManifestIds.size > 0;\n\n if (manifestPackages.length === 0) {\n // Case A: no manifests \u2014 group by top-level directory\n const topDirs = new Set<string>();\n for (const file of allFiles) {\n const parts = file.split('/');\n if (parts.length > 1) topDirs.add(parts[0]);\n }\n for (const dir of topDirs) {\n const pkgId = `pkg:dir:${dir}`;\n directoryPackages.push({ id: pkgId, name: dir, path: dir, source: 'directory', updatedAt: Date.now() });\n for (const file of allFiles) {\n if (file.startsWith(dir + '/')) filePackageMap.set(file, pkgId);\n }\n }\n } else if (hasRootManifest) {\n // Case B: root manifest(s) cover everything \u2014 subdivide into second-level dirs.\n // Collect files owned by a root manifest, then re-assign them to more specific\n // directory packages so internal module boundaries become visible.\n const rootOwnedFiles = allFiles.filter(f => rootManifestIds.has(filePackageMap.get(f) ?? ''));\n const subDirCounts = new Map<string, number>();\n for (const file of rootOwnedFiles) {\n const parts = file.split('/');\n if (parts.length > 2) {\n // Use two-level path (e.g. src/mcp) for granularity inside a src root\n const dir = parts.slice(0, 2).join('/');\n subDirCounts.set(dir, (subDirCounts.get(dir) ?? 0) + 1);\n }\n // Files directly at one level deep (e.g. src/index.ts) stay with the\n // root manifest package \u2014 no single-level dir package is created.\n }\n for (const [dir, count] of subDirCounts) {\n if (count >= SUBDIR_THRESHOLD) {\n const pkgId = `pkg:dir:${dir}`;\n const name = dir.split('/').pop() ?? dir;\n const pkg: ArchPackage = { id: pkgId, name, path: dir, source: 'directory', updatedAt: Date.now() };\n directoryPackages.push(pkg);\n for (const file of rootOwnedFiles) {\n if (file.startsWith(dir + '/') || file === dir) {\n filePackageMap.set(file, pkgId);\n }\n }\n }\n }\n } else {\n // Case C: manifests exist but don't cover root \u2014 create dir packages for uncovered files\n const uncovered = allFiles.filter(f => !filePackageMap.has(f));\n const subDirCounts = new Map<string, number>();\n for (const file of uncovered) {\n const parts = file.split('/');\n if (parts.length > 1) {\n const dir = parts.slice(0, 2).join('/');\n subDirCounts.set(dir, (subDirCounts.get(dir) ?? 0) + 1);\n }\n }\n for (const [dir, count] of subDirCounts) {\n if (count >= SUBDIR_THRESHOLD) {\n const pkgId = `pkg:dir:${dir}`;\n const name = dir.split('/').pop() ?? dir;\n const pkg: ArchPackage = { id: pkgId, name, path: dir, source: 'directory', updatedAt: Date.now() };\n directoryPackages.push(pkg);\n for (const file of uncovered) {\n if (file.startsWith(dir + '/') && !filePackageMap.has(file)) {\n filePackageMap.set(file, pkgId);\n }\n }\n }\n }\n }\n\n const allPackages = [...manifestPackages, ...directoryPackages];\n\n // \u2500\u2500 5. Detect layers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 log('architecture: detecting layers');\n const layerAssignments: FileLayerAssignment[] = [];\n const fileLayerMap = new Map<string, FileLayerAssignment>();\n\n if (this.config.architectureLayers !== undefined || this.config.enableArchitecture) {\n const assignments = await detectAllLayers(allFiles, this.projectRoot, this.config.architectureLayers);\n for (const a of assignments) {\n layerAssignments.push(a);\n fileLayerMap.set(a.filePath, a);\n }\n }\n\n const allLayers = buildArchLayers(layerAssignments, this.config.architectureLayers);\n\n // \u2500\u2500 6. Roll up package dependencies from import edges \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n log('architecture: rolling up package dependencies');\n const importPairs = this.db.getFileImportPairs();\n const pkgDepCounts = new Map<string, Map<string, { count: number; files: Array<{ from: string; to: string }> }>>();\n\n for (const { sourceFile, targetFile } of importPairs) {\n const sourcePkg = filePackageMap.get(sourceFile);\n const targetPkg = filePackageMap.get(targetFile);\n if (!sourcePkg || !targetPkg || sourcePkg === targetPkg) continue;\n\n if (!pkgDepCounts.has(sourcePkg)) pkgDepCounts.set(sourcePkg, new Map());\n const inner = pkgDepCounts.get(sourcePkg)!;\n if (!inner.has(targetPkg)) inner.set(targetPkg, { count: 0, files: [] });\n const entry = inner.get(targetPkg)!;\n entry.count++;\n if (entry.files.length < 5) entry.files.push({ from: sourceFile, to: targetFile });\n }\n\n const packageDeps: ArchPackageDep[] = [];\n for (const [sourcePkg, targets] of pkgDepCounts) {\n for (const [targetPkg, { count, files }] of targets) {\n packageDeps.push({ sourcePkg, targetPkg, depCount: count, files });\n }\n }\n\n // \u2500\u2500 7. Roll up layer dependencies \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 layerDepCounts = new Map<string, Map<string, number>>();\n for (const dep of packageDeps) {\n const srcFile = [...filePackageMap.entries()].find(([, pkgId]) => pkgId === dep.sourcePkg)?.[0];\n const tgtFile = [...filePackageMap.entries()].find(([, pkgId]) => pkgId === dep.targetPkg)?.[0];\n const srcLayer = srcFile ? fileLayerMap.get(srcFile)?.layerName : undefined;\n const tgtLayer = tgtFile ? fileLayerMap.get(tgtFile)?.layerName : undefined;\n if (!srcLayer || !tgtLayer || srcLayer === tgtLayer) continue;\n const srcLayerId = `layer:${srcLayer}`;\n const tgtLayerId = `layer:${tgtLayer}`;\n if (!layerDepCounts.has(srcLayerId)) layerDepCounts.set(srcLayerId, new Map());\n const inner = layerDepCounts.get(srcLayerId)!;\n inner.set(tgtLayerId, (inner.get(tgtLayerId) ?? 0) + dep.depCount);\n }\n\n const layerDeps: ArchLayerDep[] = [];\n for (const [srcLayer, targets] of layerDepCounts) {\n for (const [tgtLayer, count] of targets) {\n layerDeps.push({ sourceLayer: srcLayer, targetLayer: tgtLayer, depCount: count });\n }\n }\n\n // \u2500\u2500 8. Compute coupling metrics \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 afferentMap = new Map<string, number>(); // Ca: who depends on me\n const efferentMap = new Map<string, number>(); // Ce: who I depend on\n for (const dep of packageDeps) {\n efferentMap.set(dep.sourcePkg, (efferentMap.get(dep.sourcePkg) ?? 0) + 1);\n afferentMap.set(dep.targetPkg, (afferentMap.get(dep.targetPkg) ?? 0) + 1);\n }\n const coupling: ArchCoupling[] = allPackages.map(pkg => {\n const ca = afferentMap.get(pkg.id) ?? 0;\n const ce = efferentMap.get(pkg.id) ?? 0;\n const instability = ca + ce === 0 ? 0 : ce / (ca + ce);\n return { packageId: pkg.id, afferent: ca, efferent: ce, instability, updatedAt: Date.now() };\n });\n\n // \u2500\u2500 9. Persist to DB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 log('architecture: persisting to database');\n this.db.clearArchitecture();\n\n for (const pkg of allPackages) this.db.upsertArchPackage(pkg);\n for (const layer of allLayers) this.db.upsertArchLayer(layer);\n\n for (const [filePath, pkgId] of filePackageMap) this.db.upsertArchFilePackage(filePath, pkgId);\n for (const a of layerAssignments) {\n this.db.upsertArchFileLayer(a.filePath, `layer:${a.layerName}`, a.confidence, a.matchedPattern);\n }\n\n for (const dep of packageDeps) {\n this.db.upsertArchPackageDep(dep.sourcePkg, dep.targetPkg, dep.depCount, dep.files);\n }\n for (const dep of layerDeps) {\n this.db.upsertArchLayerDep(dep.sourceLayer, dep.targetLayer, dep.depCount);\n }\n for (const c of coupling) this.db.upsertArchCoupling(c);\n\n // Build return value\n const filePackages: Record<string, string[]> = {};\n for (const [filePath, pkgId] of filePackageMap) {\n if (!filePackages[filePath]) filePackages[filePath] = [];\n filePackages[filePath].push(pkgId);\n }\n\n const fileLayers: Record<string, Array<{ layerId: string; confidence: number; matchedPattern: string }>> = {};\n for (const a of layerAssignments) {\n fileLayers[a.filePath] = [{ layerId: `layer:${a.layerName}`, confidence: a.confidence, matchedPattern: a.matchedPattern }];\n }\n\n return { packages: allPackages, layers: allLayers, packageDeps, layerDeps, coupling, filePackages, fileLayers };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Layer detector for C# / .NET projects.
3
+ */
4
+ import type { LayerDetector } from '../types';
5
+ export declare const csharpLayerDetector: LayerDetector;
6
+ //# sourceMappingURL=csharp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/csharp.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AA2B9D,eAAO,MAAM,mBAAmB,EAAE,aAwBjC,CAAC"}
@@ -0,0 +1,100 @@
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 csharp_exports = {};
30
+ __export(csharp_exports, {
31
+ csharpLayerDetector: () => csharpLayerDetector
32
+ });
33
+ module.exports = __toCommonJS(csharp_exports);
34
+ var import_picomatch = __toESM(require("picomatch"));
35
+ const LAYER_PATTERNS = [
36
+ ["api", "**/Controllers/**", 0.95],
37
+ ["api", "**/*Controller.cs", 0.95],
38
+ ["api", "**/Endpoints/**", 0.9],
39
+ ["api", "**/MinimalApis/**", 0.9],
40
+ ["service", "**/Services/**", 0.9],
41
+ ["service", "**/*Service.cs", 0.9],
42
+ ["service", "**/Application/**", 0.8],
43
+ ["service", "**/UseCases/**", 0.85],
44
+ ["data", "**/Repositories/**", 0.95],
45
+ ["data", "**/*Repository.cs", 0.95],
46
+ ["data", "**/Data/**", 0.85],
47
+ ["data", "**/Entities/**", 0.9],
48
+ ["data", "**/Models/**", 0.8],
49
+ ["data", "**/Migrations/**", 0.9],
50
+ ["ui", "**/Views/**", 0.9],
51
+ ["ui", "**/Pages/**", 0.9],
52
+ ["shared", "**/Helpers/**", 0.85],
53
+ ["shared", "**/Extensions/**", 0.8],
54
+ ["shared", "**/Common/**", 0.8],
55
+ ["shared", "**/Infrastructure/**", 0.8],
56
+ ["shared", "**/Middleware/**", 0.85]
57
+ ];
58
+ const csharpLayerDetector = {
59
+ language: "csharp",
60
+ async detect(files, _projectRoot, configLayers) {
61
+ const results = [];
62
+ const configMatchers = _buildConfigMatchers(configLayers ?? {});
63
+ for (const file of files) {
64
+ if (!file.endsWith(".cs")) continue;
65
+ const configMatch = _matchConfig(file, configMatchers);
66
+ if (configMatch) {
67
+ results.push({ ...configMatch, filePath: file });
68
+ continue;
69
+ }
70
+ let best = null;
71
+ for (const [layerName, pattern, confidence] of LAYER_PATTERNS) {
72
+ if ((0, import_picomatch.default)(pattern)(file)) {
73
+ if (!best || confidence > best.confidence) {
74
+ best = { layerName, filePath: file, confidence, matchedPattern: pattern };
75
+ }
76
+ }
77
+ }
78
+ if (best) results.push(best);
79
+ }
80
+ return results;
81
+ }
82
+ };
83
+ function _buildConfigMatchers(configLayers) {
84
+ return Object.entries(configLayers).flatMap(
85
+ ([layerName, patterns]) => patterns.map(
86
+ (pattern) => [layerName, (0, import_picomatch.default)(pattern), pattern]
87
+ )
88
+ );
89
+ }
90
+ function _matchConfig(file, matchers) {
91
+ for (const [layerName, matcher, pattern] of matchers) {
92
+ if (matcher(file)) return { layerName, confidence: 1, matchedPattern: `config:${pattern}` };
93
+ }
94
+ return null;
95
+ }
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ csharpLayerDetector
99
+ });
100
+ //# sourceMappingURL=csharp.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/architecture/layers/csharp.ts"],
4
+ "sourcesContent": ["/**\n * Layer detector for C# / .NET projects.\n */\nimport type { LayerDetector, ArchLayerMatch } from '../types';\nimport picomatch from 'picomatch';\n\nconst LAYER_PATTERNS: Array<[string, string, number]> = [\n ['api', '**/Controllers/**', 0.95],\n ['api', '**/*Controller.cs', 0.95],\n ['api', '**/Endpoints/**', 0.9],\n ['api', '**/MinimalApis/**', 0.9],\n ['service', '**/Services/**', 0.9],\n ['service', '**/*Service.cs', 0.9],\n ['service', '**/Application/**', 0.8],\n ['service', '**/UseCases/**', 0.85],\n ['data', '**/Repositories/**', 0.95],\n ['data', '**/*Repository.cs', 0.95],\n ['data', '**/Data/**', 0.85],\n ['data', '**/Entities/**', 0.9],\n ['data', '**/Models/**', 0.8],\n ['data', '**/Migrations/**', 0.9],\n ['ui', '**/Views/**', 0.9],\n ['ui', '**/Pages/**', 0.9],\n ['shared', '**/Helpers/**', 0.85],\n ['shared', '**/Extensions/**', 0.8],\n ['shared', '**/Common/**', 0.8],\n ['shared', '**/Infrastructure/**', 0.8],\n ['shared', '**/Middleware/**', 0.85],\n];\n\nexport const csharpLayerDetector: LayerDetector = {\n language: 'csharp',\n\n async detect(files: string[], _projectRoot: string, configLayers?: Record<string, string[]>): Promise<ArchLayerMatch[]> {\n const results: ArchLayerMatch[] = [];\n const configMatchers = _buildConfigMatchers(configLayers ?? {});\n\n for (const file of files) {\n if (!file.endsWith('.cs')) continue;\n const configMatch = _matchConfig(file, configMatchers);\n if (configMatch) { results.push({ ...configMatch, filePath: file }); continue; }\n\n let best: ArchLayerMatch | null = null;\n for (const [layerName, pattern, confidence] of LAYER_PATTERNS) {\n if (picomatch(pattern)(file)) {\n if (!best || confidence > best.confidence) {\n best = { layerName, filePath: file, confidence, matchedPattern: pattern };\n }\n }\n }\n if (best) results.push(best);\n }\n return results;\n },\n};\n\nfunction _buildConfigMatchers(configLayers: Record<string, string[]>): Array<[string, ReturnType<typeof picomatch>, string]> {\n return Object.entries(configLayers).flatMap(([layerName, patterns]) =>\n patterns.map((pattern): [string, ReturnType<typeof picomatch>, string] =>\n [layerName, picomatch(pattern), pattern]\n )\n );\n}\nfunction _matchConfig(file: string, matchers: Array<[string, ReturnType<typeof picomatch>, string]>): Omit<ArchLayerMatch, 'filePath'> | null {\n for (const [layerName, matcher, pattern] of matchers) {\n if (matcher(file)) return { layerName, confidence: 1.0, matchedPattern: `config:${pattern}` };\n }\n return null;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,uBAAsB;AAEtB,MAAM,iBAAkD;AAAA,EACtD,CAAC,OAAO,qBAAqB,IAAI;AAAA,EACjC,CAAC,OAAO,qBAAqB,IAAI;AAAA,EACjC,CAAC,OAAO,mBAAmB,GAAG;AAAA,EAC9B,CAAC,OAAO,qBAAqB,GAAG;AAAA,EAChC,CAAC,WAAW,kBAAkB,GAAG;AAAA,EACjC,CAAC,WAAW,kBAAkB,GAAG;AAAA,EACjC,CAAC,WAAW,qBAAqB,GAAG;AAAA,EACpC,CAAC,WAAW,kBAAkB,IAAI;AAAA,EAClC,CAAC,QAAQ,sBAAsB,IAAI;AAAA,EACnC,CAAC,QAAQ,qBAAqB,IAAI;AAAA,EAClC,CAAC,QAAQ,cAAc,IAAI;AAAA,EAC3B,CAAC,QAAQ,kBAAkB,GAAG;AAAA,EAC9B,CAAC,QAAQ,gBAAgB,GAAG;AAAA,EAC5B,CAAC,QAAQ,oBAAoB,GAAG;AAAA,EAChC,CAAC,MAAM,eAAe,GAAG;AAAA,EACzB,CAAC,MAAM,eAAe,GAAG;AAAA,EACzB,CAAC,UAAU,iBAAiB,IAAI;AAAA,EAChC,CAAC,UAAU,oBAAoB,GAAG;AAAA,EAClC,CAAC,UAAU,gBAAgB,GAAG;AAAA,EAC9B,CAAC,UAAU,wBAAwB,GAAG;AAAA,EACtC,CAAC,UAAU,oBAAoB,IAAI;AACrC;AAEO,MAAM,sBAAqC;AAAA,EAChD,UAAU;AAAA,EAEV,MAAM,OAAO,OAAiB,cAAsB,cAAoE;AACtH,UAAM,UAA4B,CAAC;AACnC,UAAM,iBAAiB,qBAAqB,gBAAgB,CAAC,CAAC;AAE9D,eAAW,QAAQ,OAAO;AACxB,UAAI,CAAC,KAAK,SAAS,KAAK,EAAG;AAC3B,YAAM,cAAc,aAAa,MAAM,cAAc;AACrD,UAAI,aAAa;AAAE,gBAAQ,KAAK,EAAE,GAAG,aAAa,UAAU,KAAK,CAAC;AAAG;AAAA,MAAU;AAE/E,UAAI,OAA8B;AAClC,iBAAW,CAAC,WAAW,SAAS,UAAU,KAAK,gBAAgB;AAC7D,gBAAI,iBAAAA,SAAU,OAAO,EAAE,IAAI,GAAG;AAC5B,cAAI,CAAC,QAAQ,aAAa,KAAK,YAAY;AACzC,mBAAO,EAAE,WAAW,UAAU,MAAM,YAAY,gBAAgB,QAAQ;AAAA,UAC1E;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAM,SAAQ,KAAK,IAAI;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,cAA+F;AAC3H,SAAO,OAAO,QAAQ,YAAY,EAAE;AAAA,IAAQ,CAAC,CAAC,WAAW,QAAQ,MAC/D,SAAS;AAAA,MAAI,CAAC,YACZ,CAAC,eAAW,iBAAAA,SAAU,OAAO,GAAG,OAAO;AAAA,IACzC;AAAA,EACF;AACF;AACA,SAAS,aAAa,MAAc,UAA0G;AAC5I,aAAW,CAAC,WAAW,SAAS,OAAO,KAAK,UAAU;AACpD,QAAI,QAAQ,IAAI,EAAG,QAAO,EAAE,WAAW,YAAY,GAAK,gBAAgB,UAAU,OAAO,GAAG;AAAA,EAC9F;AACA,SAAO;AACT;",
6
+ "names": ["picomatch"]
7
+ }
@@ -0,0 +1,116 @@
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 elixir_exports = {};
30
+ __export(elixir_exports, {
31
+ elixirLayerDetector: () => elixirLayerDetector
32
+ });
33
+ module.exports = __toCommonJS(elixir_exports);
34
+ var import_picomatch = __toESM(require("picomatch"));
35
+ const LAYER_PATTERNS = [
36
+ // API / web layer
37
+ ["api", "**/controllers/**", 0.95],
38
+ ["api", "**/*_controller.ex", 0.95],
39
+ ["api", "**/channels/**", 0.9],
40
+ ["api", "**/*_channel.ex", 0.9],
41
+ ["api", "**/router.ex", 0.95],
42
+ ["api", "**/endpoint.ex", 0.85],
43
+ ["api", "**/plugs/**", 0.8],
44
+ ["api", "**/*_plug.ex", 0.8],
45
+ // Service / context layer (Phoenix contexts)
46
+ ["service", "**/contexts/**", 0.95],
47
+ ["service", "**/context/**", 0.9],
48
+ ["service", "**/workers/**", 0.85],
49
+ ["service", "**/jobs/**", 0.85],
50
+ ["service", "**/*_worker.ex", 0.85],
51
+ // Data layer
52
+ ["data", "**/schemas/**", 0.95],
53
+ ["data", "**/*_schema.ex", 0.95],
54
+ ["data", "**/repo.ex", 0.9],
55
+ ["data", "**/migrations/**", 0.9],
56
+ ["data", "**/priv/repo/migrations/**", 0.95],
57
+ ["data", "**/models/**", 0.85],
58
+ // UI / LiveView layer
59
+ ["ui", "**/live/**", 0.95],
60
+ ["ui", "**/*_live.ex", 0.95],
61
+ ["ui", "**/*_live_view.ex", 0.95],
62
+ ["ui", "**/components/**", 0.9],
63
+ ["ui", "**/*_component.ex", 0.9],
64
+ ["ui", "**/views/**", 0.85],
65
+ ["ui", "**/*_view.ex", 0.85],
66
+ ["ui", "**/templates/**", 0.8],
67
+ // Shared / infrastructure
68
+ ["shared", "**/helpers/**", 0.8],
69
+ ["shared", "**/lib/**", 0.75],
70
+ ["shared", "**/config/**", 0.75],
71
+ ["shared", "**/mailers/**", 0.8],
72
+ ["shared", "**/*_mailer.ex", 0.8]
73
+ ];
74
+ const elixirLayerDetector = {
75
+ language: "elixir",
76
+ async detect(files, _projectRoot, configLayers) {
77
+ const results = [];
78
+ const configMatchers = _buildConfigMatchers(configLayers ?? {});
79
+ for (const file of files) {
80
+ if (!file.endsWith(".ex") && !file.endsWith(".exs")) continue;
81
+ const configMatch = _matchConfig(file, configMatchers);
82
+ if (configMatch) {
83
+ results.push({ ...configMatch, filePath: file });
84
+ continue;
85
+ }
86
+ let best = null;
87
+ for (const [layerName, pattern, confidence] of LAYER_PATTERNS) {
88
+ if ((0, import_picomatch.default)(pattern)(file)) {
89
+ if (!best || confidence > best.confidence) {
90
+ best = { layerName, filePath: file, confidence, matchedPattern: pattern };
91
+ }
92
+ }
93
+ }
94
+ if (best) results.push(best);
95
+ }
96
+ return results;
97
+ }
98
+ };
99
+ function _buildConfigMatchers(configLayers) {
100
+ return Object.entries(configLayers).flatMap(
101
+ ([layerName, patterns]) => patterns.map(
102
+ (pattern) => [layerName, (0, import_picomatch.default)(pattern), pattern]
103
+ )
104
+ );
105
+ }
106
+ function _matchConfig(file, matchers) {
107
+ for (const [layerName, matcher, pattern] of matchers) {
108
+ if (matcher(file)) return { layerName, confidence: 1, matchedPattern: `config:${pattern}` };
109
+ }
110
+ return null;
111
+ }
112
+ // Annotate the CommonJS export names for ESM import in node:
113
+ 0 && (module.exports = {
114
+ elixirLayerDetector
115
+ });
116
+ //# sourceMappingURL=elixir.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/architecture/layers/elixir.ts"],
4
+ "sourcesContent": ["/**\n * Layer detector for Elixir / Phoenix projects.\n */\nimport type { LayerDetector, ArchLayerMatch } from '../types';\nimport picomatch from 'picomatch';\n\nconst LAYER_PATTERNS: Array<[string, string, number]> = [\n // API / web layer\n ['api', '**/controllers/**', 0.95],\n ['api', '**/*_controller.ex', 0.95],\n ['api', '**/channels/**', 0.9],\n ['api', '**/*_channel.ex', 0.9],\n ['api', '**/router.ex', 0.95],\n ['api', '**/endpoint.ex', 0.85],\n ['api', '**/plugs/**', 0.8],\n ['api', '**/*_plug.ex', 0.8],\n // Service / context layer (Phoenix contexts)\n ['service', '**/contexts/**', 0.95],\n ['service', '**/context/**', 0.9],\n ['service', '**/workers/**', 0.85],\n ['service', '**/jobs/**', 0.85],\n ['service', '**/*_worker.ex', 0.85],\n // Data layer\n ['data', '**/schemas/**', 0.95],\n ['data', '**/*_schema.ex', 0.95],\n ['data', '**/repo.ex', 0.9],\n ['data', '**/migrations/**', 0.9],\n ['data', '**/priv/repo/migrations/**', 0.95],\n ['data', '**/models/**', 0.85],\n // UI / LiveView layer\n ['ui', '**/live/**', 0.95],\n ['ui', '**/*_live.ex', 0.95],\n ['ui', '**/*_live_view.ex', 0.95],\n ['ui', '**/components/**', 0.9],\n ['ui', '**/*_component.ex', 0.9],\n ['ui', '**/views/**', 0.85],\n ['ui', '**/*_view.ex', 0.85],\n ['ui', '**/templates/**', 0.8],\n // Shared / infrastructure\n ['shared', '**/helpers/**', 0.8],\n ['shared', '**/lib/**', 0.75],\n ['shared', '**/config/**', 0.75],\n ['shared', '**/mailers/**', 0.8],\n ['shared', '**/*_mailer.ex', 0.8],\n];\n\nexport const elixirLayerDetector: LayerDetector = {\n language: 'elixir',\n\n async detect(files: string[], _projectRoot: string, configLayers?: Record<string, string[]>): Promise<ArchLayerMatch[]> {\n const results: ArchLayerMatch[] = [];\n const configMatchers = _buildConfigMatchers(configLayers ?? {});\n\n for (const file of files) {\n if (!file.endsWith('.ex') && !file.endsWith('.exs')) continue;\n\n const configMatch = _matchConfig(file, configMatchers);\n if (configMatch) { results.push({ ...configMatch, filePath: file }); continue; }\n\n let best: ArchLayerMatch | null = null;\n for (const [layerName, pattern, confidence] of LAYER_PATTERNS) {\n if (picomatch(pattern)(file)) {\n if (!best || confidence > best.confidence) {\n best = { layerName, filePath: file, confidence, matchedPattern: pattern };\n }\n }\n }\n if (best) results.push(best);\n }\n return results;\n },\n};\n\nfunction _buildConfigMatchers(configLayers: Record<string, string[]>): Array<[string, ReturnType<typeof picomatch>, string]> {\n return Object.entries(configLayers).flatMap(([layerName, patterns]) =>\n patterns.map((pattern): [string, ReturnType<typeof picomatch>, string] =>\n [layerName, picomatch(pattern), pattern]\n )\n );\n}\n\nfunction _matchConfig(file: string, matchers: Array<[string, ReturnType<typeof picomatch>, string]>): Omit<ArchLayerMatch, 'filePath'> | null {\n for (const [layerName, matcher, pattern] of matchers) {\n if (matcher(file)) return { layerName, confidence: 1.0, matchedPattern: `config:${pattern}` };\n }\n return null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["picomatch"]
7
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Layer detector for Go projects.
3
+ * Detects patterns common in Go service layouts (standard, Clean Architecture, DDD).
4
+ */
5
+ import type { LayerDetector } from '../types';
6
+ export declare const goLayerDetector: LayerDetector;
7
+ //# sourceMappingURL=go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/architecture/layers/go.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,UAAU,CAAC;AA+C9D,eAAO,MAAM,eAAe,EAAE,aA6B7B,CAAC"}