@flaid/devmap 0.2.0

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 (391) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +168 -0
  3. package/dist/ai/completion.d.ts +7 -0
  4. package/dist/ai/completion.d.ts.map +1 -0
  5. package/dist/ai/completion.js +27 -0
  6. package/dist/ai/completion.js.map +1 -0
  7. package/dist/ai/contextBuilder.d.ts +42 -0
  8. package/dist/ai/contextBuilder.d.ts.map +1 -0
  9. package/dist/ai/contextBuilder.js +632 -0
  10. package/dist/ai/contextBuilder.js.map +1 -0
  11. package/dist/ai/groq.d.ts +36 -0
  12. package/dist/ai/groq.d.ts.map +1 -0
  13. package/dist/ai/groq.js +368 -0
  14. package/dist/ai/groq.js.map +1 -0
  15. package/dist/ai/openrouter.d.ts +20 -0
  16. package/dist/ai/openrouter.d.ts.map +1 -0
  17. package/dist/ai/openrouter.js +187 -0
  18. package/dist/ai/openrouter.js.map +1 -0
  19. package/dist/ai/prompts.d.ts +7 -0
  20. package/dist/ai/prompts.d.ts.map +1 -0
  21. package/dist/ai/prompts.js +88 -0
  22. package/dist/ai/prompts.js.map +1 -0
  23. package/dist/ai/provider.d.ts +15 -0
  24. package/dist/ai/provider.d.ts.map +1 -0
  25. package/dist/ai/provider.js +28 -0
  26. package/dist/ai/provider.js.map +1 -0
  27. package/dist/ai/snapshotEnrichment.d.ts +4 -0
  28. package/dist/ai/snapshotEnrichment.d.ts.map +1 -0
  29. package/dist/ai/snapshotEnrichment.js +188 -0
  30. package/dist/ai/snapshotEnrichment.js.map +1 -0
  31. package/dist/ai/types.d.ts +29 -0
  32. package/dist/ai/types.d.ts.map +1 -0
  33. package/dist/ai/types.js +2 -0
  34. package/dist/ai/types.js.map +1 -0
  35. package/dist/analyzers/analysis/extractors/fallbackExtractor.d.ts +30 -0
  36. package/dist/analyzers/analysis/extractors/fallbackExtractor.d.ts.map +1 -0
  37. package/dist/analyzers/analysis/extractors/fallbackExtractor.js +114 -0
  38. package/dist/analyzers/analysis/extractors/fallbackExtractor.js.map +1 -0
  39. package/dist/analyzers/analysis/extractors/index.d.ts +16 -0
  40. package/dist/analyzers/analysis/extractors/index.d.ts.map +1 -0
  41. package/dist/analyzers/analysis/extractors/index.js +135 -0
  42. package/dist/analyzers/analysis/extractors/index.js.map +1 -0
  43. package/dist/analyzers/analysis/extractors/prismaExtractor.d.ts +15 -0
  44. package/dist/analyzers/analysis/extractors/prismaExtractor.d.ts.map +1 -0
  45. package/dist/analyzers/analysis/extractors/prismaExtractor.js +183 -0
  46. package/dist/analyzers/analysis/extractors/prismaExtractor.js.map +1 -0
  47. package/dist/analyzers/analysis/extractors/sqlExtractor.d.ts +14 -0
  48. package/dist/analyzers/analysis/extractors/sqlExtractor.d.ts.map +1 -0
  49. package/dist/analyzers/analysis/extractors/sqlExtractor.js +163 -0
  50. package/dist/analyzers/analysis/extractors/sqlExtractor.js.map +1 -0
  51. package/dist/analyzers/analysis/extractors/types.d.ts +76 -0
  52. package/dist/analyzers/analysis/extractors/types.d.ts.map +1 -0
  53. package/dist/analyzers/analysis/extractors/types.js +2 -0
  54. package/dist/analyzers/analysis/extractors/types.js.map +1 -0
  55. package/dist/analyzers/analysis/fileAnalysis.d.ts +36 -0
  56. package/dist/analyzers/analysis/fileAnalysis.d.ts.map +1 -0
  57. package/dist/analyzers/analysis/fileAnalysis.js +2 -0
  58. package/dist/analyzers/analysis/fileAnalysis.js.map +1 -0
  59. package/dist/analyzers/analysis/fileRole.d.ts +30 -0
  60. package/dist/analyzers/analysis/fileRole.d.ts.map +1 -0
  61. package/dist/analyzers/analysis/fileRole.js +242 -0
  62. package/dist/analyzers/analysis/fileRole.js.map +1 -0
  63. package/dist/analyzers/analysis/fileScanner.d.ts +10 -0
  64. package/dist/analyzers/analysis/fileScanner.d.ts.map +1 -0
  65. package/dist/analyzers/analysis/fileScanner.js +44 -0
  66. package/dist/analyzers/analysis/fileScanner.js.map +1 -0
  67. package/dist/analyzers/analysis/filterEngine.d.ts +2 -0
  68. package/dist/analyzers/analysis/filterEngine.d.ts.map +1 -0
  69. package/dist/analyzers/analysis/filterEngine.js +110 -0
  70. package/dist/analyzers/analysis/filterEngine.js.map +1 -0
  71. package/dist/analyzers/analysis/index.d.ts +12 -0
  72. package/dist/analyzers/analysis/index.d.ts.map +1 -0
  73. package/dist/analyzers/analysis/index.js +8 -0
  74. package/dist/analyzers/analysis/index.js.map +1 -0
  75. package/dist/analyzers/analysis/preprocessors/astroPreprocessor.d.ts +23 -0
  76. package/dist/analyzers/analysis/preprocessors/astroPreprocessor.d.ts.map +1 -0
  77. package/dist/analyzers/analysis/preprocessors/astroPreprocessor.js +40 -0
  78. package/dist/analyzers/analysis/preprocessors/astroPreprocessor.js.map +1 -0
  79. package/dist/analyzers/analysis/preprocessors/index.d.ts +5 -0
  80. package/dist/analyzers/analysis/preprocessors/index.d.ts.map +1 -0
  81. package/dist/analyzers/analysis/preprocessors/index.js +4 -0
  82. package/dist/analyzers/analysis/preprocessors/index.js.map +1 -0
  83. package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.d.ts +27 -0
  84. package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.d.ts.map +1 -0
  85. package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.js +50 -0
  86. package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.js.map +1 -0
  87. package/dist/analyzers/analysis/preprocessors/types.d.ts +45 -0
  88. package/dist/analyzers/analysis/preprocessors/types.d.ts.map +1 -0
  89. package/dist/analyzers/analysis/preprocessors/types.js +2 -0
  90. package/dist/analyzers/analysis/preprocessors/types.js.map +1 -0
  91. package/dist/analyzers/analysis/preprocessors/vuePreprocessor.d.ts +21 -0
  92. package/dist/analyzers/analysis/preprocessors/vuePreprocessor.d.ts.map +1 -0
  93. package/dist/analyzers/analysis/preprocessors/vuePreprocessor.js +44 -0
  94. package/dist/analyzers/analysis/preprocessors/vuePreprocessor.js.map +1 -0
  95. package/dist/analyzers/analysis/tsMorphAnalyzer.d.ts +10 -0
  96. package/dist/analyzers/analysis/tsMorphAnalyzer.d.ts.map +1 -0
  97. package/dist/analyzers/analysis/tsMorphAnalyzer.js +190 -0
  98. package/dist/analyzers/analysis/tsMorphAnalyzer.js.map +1 -0
  99. package/dist/analyzers/detectors/capabilityDetector.d.ts +28 -0
  100. package/dist/analyzers/detectors/capabilityDetector.d.ts.map +1 -0
  101. package/dist/analyzers/detectors/capabilityDetector.js +288 -0
  102. package/dist/analyzers/detectors/capabilityDetector.js.map +1 -0
  103. package/dist/analyzers/detectors/databaseDetector.d.ts +7 -0
  104. package/dist/analyzers/detectors/databaseDetector.d.ts.map +1 -0
  105. package/dist/analyzers/detectors/databaseDetector.js +71 -0
  106. package/dist/analyzers/detectors/databaseDetector.js.map +1 -0
  107. package/dist/analyzers/detectors/frameworkDetector.d.ts +22 -0
  108. package/dist/analyzers/detectors/frameworkDetector.d.ts.map +1 -0
  109. package/dist/analyzers/detectors/frameworkDetector.js +160 -0
  110. package/dist/analyzers/detectors/frameworkDetector.js.map +1 -0
  111. package/dist/analyzers/detectors/frontendFeatureDetector.d.ts +26 -0
  112. package/dist/analyzers/detectors/frontendFeatureDetector.d.ts.map +1 -0
  113. package/dist/analyzers/detectors/frontendFeatureDetector.js +269 -0
  114. package/dist/analyzers/detectors/frontendFeatureDetector.js.map +1 -0
  115. package/dist/analyzers/detectors/index.d.ts +11 -0
  116. package/dist/analyzers/detectors/index.d.ts.map +1 -0
  117. package/dist/analyzers/detectors/index.js +7 -0
  118. package/dist/analyzers/detectors/index.js.map +1 -0
  119. package/dist/analyzers/detectors/nestRouteDetector.d.ts +13 -0
  120. package/dist/analyzers/detectors/nestRouteDetector.d.ts.map +1 -0
  121. package/dist/analyzers/detectors/nestRouteDetector.js +69 -0
  122. package/dist/analyzers/detectors/nestRouteDetector.js.map +1 -0
  123. package/dist/analyzers/detectors/routeDetector.d.ts +22 -0
  124. package/dist/analyzers/detectors/routeDetector.d.ts.map +1 -0
  125. package/dist/analyzers/detectors/routeDetector.js +368 -0
  126. package/dist/analyzers/detectors/routeDetector.js.map +1 -0
  127. package/dist/analyzers/detectors/serviceDetector.d.ts +3 -0
  128. package/dist/analyzers/detectors/serviceDetector.d.ts.map +1 -0
  129. package/dist/analyzers/detectors/serviceDetector.js +81 -0
  130. package/dist/analyzers/detectors/serviceDetector.js.map +1 -0
  131. package/dist/analyzers/features/featureDetector.d.ts +22 -0
  132. package/dist/analyzers/features/featureDetector.d.ts.map +1 -0
  133. package/dist/analyzers/features/featureDetector.js +821 -0
  134. package/dist/analyzers/features/featureDetector.js.map +1 -0
  135. package/dist/analyzers/features/featureMerge.d.ts +65 -0
  136. package/dist/analyzers/features/featureMerge.d.ts.map +1 -0
  137. package/dist/analyzers/features/featureMerge.js +168 -0
  138. package/dist/analyzers/features/featureMerge.js.map +1 -0
  139. package/dist/analyzers/features/featureSimilarity.d.ts +152 -0
  140. package/dist/analyzers/features/featureSimilarity.d.ts.map +1 -0
  141. package/dist/analyzers/features/featureSimilarity.js +264 -0
  142. package/dist/analyzers/features/featureSimilarity.js.map +1 -0
  143. package/dist/analyzers/features/index.d.ts +6 -0
  144. package/dist/analyzers/features/index.d.ts.map +1 -0
  145. package/dist/analyzers/features/index.js +4 -0
  146. package/dist/analyzers/features/index.js.map +1 -0
  147. package/dist/analyzers/graph/dependencyGraph.d.ts +5 -0
  148. package/dist/analyzers/graph/dependencyGraph.d.ts.map +1 -0
  149. package/dist/analyzers/graph/dependencyGraph.js +88 -0
  150. package/dist/analyzers/graph/dependencyGraph.js.map +1 -0
  151. package/dist/analyzers/graph/dependencyMap.d.ts +43 -0
  152. package/dist/analyzers/graph/dependencyMap.d.ts.map +1 -0
  153. package/dist/analyzers/graph/dependencyMap.js +85 -0
  154. package/dist/analyzers/graph/dependencyMap.js.map +1 -0
  155. package/dist/analyzers/graph/entryPoints.d.ts +3 -0
  156. package/dist/analyzers/graph/entryPoints.d.ts.map +1 -0
  157. package/dist/analyzers/graph/entryPoints.js +21 -0
  158. package/dist/analyzers/graph/entryPoints.js.map +1 -0
  159. package/dist/analyzers/graph/index.d.ts +7 -0
  160. package/dist/analyzers/graph/index.d.ts.map +1 -0
  161. package/dist/analyzers/graph/index.js +5 -0
  162. package/dist/analyzers/graph/index.js.map +1 -0
  163. package/dist/analyzers/graph/sourceScope.d.ts +2 -0
  164. package/dist/analyzers/graph/sourceScope.d.ts.map +1 -0
  165. package/dist/analyzers/graph/sourceScope.js +30 -0
  166. package/dist/analyzers/graph/sourceScope.js.map +1 -0
  167. package/dist/analyzers/inference/domainInference.d.ts +58 -0
  168. package/dist/analyzers/inference/domainInference.d.ts.map +1 -0
  169. package/dist/analyzers/inference/domainInference.js +234 -0
  170. package/dist/analyzers/inference/domainInference.js.map +1 -0
  171. package/dist/analyzers/inference/index.d.ts +5 -0
  172. package/dist/analyzers/inference/index.d.ts.map +1 -0
  173. package/dist/analyzers/inference/index.js +3 -0
  174. package/dist/analyzers/inference/index.js.map +1 -0
  175. package/dist/analyzers/inference/ownershipTopology.d.ts +8 -0
  176. package/dist/analyzers/inference/ownershipTopology.d.ts.map +1 -0
  177. package/dist/analyzers/inference/ownershipTopology.js +65 -0
  178. package/dist/analyzers/inference/ownershipTopology.js.map +1 -0
  179. package/dist/analyzers/pipeline/analyzerRegistry.d.ts +9 -0
  180. package/dist/analyzers/pipeline/analyzerRegistry.d.ts.map +1 -0
  181. package/dist/analyzers/pipeline/analyzerRegistry.js +35 -0
  182. package/dist/analyzers/pipeline/analyzerRegistry.js.map +1 -0
  183. package/dist/analyzers/pipeline/heuristicAnalyzer.d.ts +12 -0
  184. package/dist/analyzers/pipeline/heuristicAnalyzer.d.ts.map +1 -0
  185. package/dist/analyzers/pipeline/heuristicAnalyzer.js +150 -0
  186. package/dist/analyzers/pipeline/heuristicAnalyzer.js.map +1 -0
  187. package/dist/analyzers/pipeline/index.d.ts +7 -0
  188. package/dist/analyzers/pipeline/index.d.ts.map +1 -0
  189. package/dist/analyzers/pipeline/index.js +5 -0
  190. package/dist/analyzers/pipeline/index.js.map +1 -0
  191. package/dist/analyzers/pipeline/projectMap.d.ts +120 -0
  192. package/dist/analyzers/pipeline/projectMap.d.ts.map +1 -0
  193. package/dist/analyzers/pipeline/projectMap.js +726 -0
  194. package/dist/analyzers/pipeline/projectMap.js.map +1 -0
  195. package/dist/analyzers/pipeline/projectMetadata.d.ts +19 -0
  196. package/dist/analyzers/pipeline/projectMetadata.d.ts.map +1 -0
  197. package/dist/analyzers/pipeline/projectMetadata.js +149 -0
  198. package/dist/analyzers/pipeline/projectMetadata.js.map +1 -0
  199. package/dist/analyzers/pipeline/reasonTags.d.ts +6 -0
  200. package/dist/analyzers/pipeline/reasonTags.d.ts.map +1 -0
  201. package/dist/analyzers/pipeline/reasonTags.js +6 -0
  202. package/dist/analyzers/pipeline/reasonTags.js.map +1 -0
  203. package/dist/analyzers/registry/ai-providers.d.ts +3 -0
  204. package/dist/analyzers/registry/ai-providers.d.ts.map +1 -0
  205. package/dist/analyzers/registry/ai-providers.js +94 -0
  206. package/dist/analyzers/registry/ai-providers.js.map +1 -0
  207. package/dist/analyzers/registry/analytics.d.ts +3 -0
  208. package/dist/analyzers/registry/analytics.d.ts.map +1 -0
  209. package/dist/analyzers/registry/analytics.js +15 -0
  210. package/dist/analyzers/registry/analytics.js.map +1 -0
  211. package/dist/analyzers/registry/auth.d.ts +3 -0
  212. package/dist/analyzers/registry/auth.d.ts.map +1 -0
  213. package/dist/analyzers/registry/auth.js +18 -0
  214. package/dist/analyzers/registry/auth.js.map +1 -0
  215. package/dist/analyzers/registry/background-jobs.d.ts +3 -0
  216. package/dist/analyzers/registry/background-jobs.d.ts.map +1 -0
  217. package/dist/analyzers/registry/background-jobs.js +14 -0
  218. package/dist/analyzers/registry/background-jobs.js.map +1 -0
  219. package/dist/analyzers/registry/caching.d.ts +3 -0
  220. package/dist/analyzers/registry/caching.d.ts.map +1 -0
  221. package/dist/analyzers/registry/caching.js +13 -0
  222. package/dist/analyzers/registry/caching.js.map +1 -0
  223. package/dist/analyzers/registry/cms-content.d.ts +3 -0
  224. package/dist/analyzers/registry/cms-content.d.ts.map +1 -0
  225. package/dist/analyzers/registry/cms-content.js +15 -0
  226. package/dist/analyzers/registry/cms-content.js.map +1 -0
  227. package/dist/analyzers/registry/database.d.ts +3 -0
  228. package/dist/analyzers/registry/database.d.ts.map +1 -0
  229. package/dist/analyzers/registry/database.js +13 -0
  230. package/dist/analyzers/registry/database.js.map +1 -0
  231. package/dist/analyzers/registry/email.d.ts +3 -0
  232. package/dist/analyzers/registry/email.d.ts.map +1 -0
  233. package/dist/analyzers/registry/email.js +19 -0
  234. package/dist/analyzers/registry/email.js.map +1 -0
  235. package/dist/analyzers/registry/file-upload.d.ts +3 -0
  236. package/dist/analyzers/registry/file-upload.d.ts.map +1 -0
  237. package/dist/analyzers/registry/file-upload.js +19 -0
  238. package/dist/analyzers/registry/file-upload.js.map +1 -0
  239. package/dist/analyzers/registry/firebase.d.ts +3 -0
  240. package/dist/analyzers/registry/firebase.d.ts.map +1 -0
  241. package/dist/analyzers/registry/firebase.js +8 -0
  242. package/dist/analyzers/registry/firebase.js.map +1 -0
  243. package/dist/analyzers/registry/index.d.ts +16 -0
  244. package/dist/analyzers/registry/index.d.ts.map +1 -0
  245. package/dist/analyzers/registry/index.js +88 -0
  246. package/dist/analyzers/registry/index.js.map +1 -0
  247. package/dist/analyzers/registry/internationalization.d.ts +3 -0
  248. package/dist/analyzers/registry/internationalization.d.ts.map +1 -0
  249. package/dist/analyzers/registry/internationalization.js +13 -0
  250. package/dist/analyzers/registry/internationalization.js.map +1 -0
  251. package/dist/analyzers/registry/logging-monitoring.d.ts +3 -0
  252. package/dist/analyzers/registry/logging-monitoring.d.ts.map +1 -0
  253. package/dist/analyzers/registry/logging-monitoring.js +14 -0
  254. package/dist/analyzers/registry/logging-monitoring.js.map +1 -0
  255. package/dist/analyzers/registry/notifications.d.ts +3 -0
  256. package/dist/analyzers/registry/notifications.d.ts.map +1 -0
  257. package/dist/analyzers/registry/notifications.js +14 -0
  258. package/dist/analyzers/registry/notifications.js.map +1 -0
  259. package/dist/analyzers/registry/payments.d.ts +3 -0
  260. package/dist/analyzers/registry/payments.d.ts.map +1 -0
  261. package/dist/analyzers/registry/payments.js +23 -0
  262. package/dist/analyzers/registry/payments.js.map +1 -0
  263. package/dist/analyzers/registry/rate-limiting.d.ts +3 -0
  264. package/dist/analyzers/registry/rate-limiting.d.ts.map +1 -0
  265. package/dist/analyzers/registry/rate-limiting.js +13 -0
  266. package/dist/analyzers/registry/rate-limiting.js.map +1 -0
  267. package/dist/analyzers/registry/search.d.ts +3 -0
  268. package/dist/analyzers/registry/search.d.ts.map +1 -0
  269. package/dist/analyzers/registry/search.js +15 -0
  270. package/dist/analyzers/registry/search.js.map +1 -0
  271. package/dist/analyzers/registry/testing.d.ts +3 -0
  272. package/dist/analyzers/registry/testing.d.ts.map +1 -0
  273. package/dist/analyzers/registry/testing.js +13 -0
  274. package/dist/analyzers/registry/testing.js.map +1 -0
  275. package/dist/analyzers/registry/types.d.ts +14 -0
  276. package/dist/analyzers/registry/types.d.ts.map +1 -0
  277. package/dist/analyzers/registry/types.js +2 -0
  278. package/dist/analyzers/registry/types.js.map +1 -0
  279. package/dist/cache/agentNavigation.d.ts +7 -0
  280. package/dist/cache/agentNavigation.d.ts.map +1 -0
  281. package/dist/cache/agentNavigation.js +253 -0
  282. package/dist/cache/agentNavigation.js.map +1 -0
  283. package/dist/cache/fileHash.d.ts +2 -0
  284. package/dist/cache/fileHash.d.ts.map +1 -0
  285. package/dist/cache/fileHash.js +5 -0
  286. package/dist/cache/fileHash.js.map +1 -0
  287. package/dist/cache/snapshot.d.ts +20 -0
  288. package/dist/cache/snapshot.d.ts.map +1 -0
  289. package/dist/cache/snapshot.js +184 -0
  290. package/dist/cache/snapshot.js.map +1 -0
  291. package/dist/commands/analyze.d.ts +12 -0
  292. package/dist/commands/analyze.d.ts.map +1 -0
  293. package/dist/commands/analyze.js +201 -0
  294. package/dist/commands/analyze.js.map +1 -0
  295. package/dist/commands/config.d.ts +10 -0
  296. package/dist/commands/config.d.ts.map +1 -0
  297. package/dist/commands/config.js +65 -0
  298. package/dist/commands/config.js.map +1 -0
  299. package/dist/commands/doctor.d.ts +11 -0
  300. package/dist/commands/doctor.d.ts.map +1 -0
  301. package/dist/commands/doctor.js +141 -0
  302. package/dist/commands/doctor.js.map +1 -0
  303. package/dist/commands/explain.d.ts +37 -0
  304. package/dist/commands/explain.d.ts.map +1 -0
  305. package/dist/commands/explain.js +101 -0
  306. package/dist/commands/explain.js.map +1 -0
  307. package/dist/commands/flow.d.ts +34 -0
  308. package/dist/commands/flow.d.ts.map +1 -0
  309. package/dist/commands/flow.js +151 -0
  310. package/dist/commands/flow.js.map +1 -0
  311. package/dist/commands/init.d.ts +16 -0
  312. package/dist/commands/init.d.ts.map +1 -0
  313. package/dist/commands/init.js +197 -0
  314. package/dist/commands/init.js.map +1 -0
  315. package/dist/commands/map.d.ts +24 -0
  316. package/dist/commands/map.d.ts.map +1 -0
  317. package/dist/commands/map.js +282 -0
  318. package/dist/commands/map.js.map +1 -0
  319. package/dist/commands/onboarding.d.ts +36 -0
  320. package/dist/commands/onboarding.d.ts.map +1 -0
  321. package/dist/commands/onboarding.js +226 -0
  322. package/dist/commands/onboarding.js.map +1 -0
  323. package/dist/index.d.ts +3 -0
  324. package/dist/index.d.ts.map +1 -0
  325. package/dist/index.js +104 -0
  326. package/dist/index.js.map +1 -0
  327. package/dist/onboarding/model.d.ts +27 -0
  328. package/dist/onboarding/model.d.ts.map +1 -0
  329. package/dist/onboarding/model.js +2 -0
  330. package/dist/onboarding/model.js.map +1 -0
  331. package/dist/onboarding/modelBuilder.d.ts +4 -0
  332. package/dist/onboarding/modelBuilder.d.ts.map +1 -0
  333. package/dist/onboarding/modelBuilder.js +330 -0
  334. package/dist/onboarding/modelBuilder.js.map +1 -0
  335. package/dist/utils/agentsFile.d.ts +6 -0
  336. package/dist/utils/agentsFile.d.ts.map +1 -0
  337. package/dist/utils/agentsFile.js +85 -0
  338. package/dist/utils/agentsFile.js.map +1 -0
  339. package/dist/utils/config.d.ts +20 -0
  340. package/dist/utils/config.d.ts.map +1 -0
  341. package/dist/utils/config.js +88 -0
  342. package/dist/utils/config.js.map +1 -0
  343. package/dist/utils/devmapFile.d.ts +3 -0
  344. package/dist/utils/devmapFile.d.ts.map +1 -0
  345. package/dist/utils/devmapFile.js +43 -0
  346. package/dist/utils/devmapFile.js.map +1 -0
  347. package/dist/utils/errors.d.ts +8 -0
  348. package/dist/utils/errors.d.ts.map +1 -0
  349. package/dist/utils/errors.js +92 -0
  350. package/dist/utils/errors.js.map +1 -0
  351. package/dist/utils/gitignore.d.ts +2 -0
  352. package/dist/utils/gitignore.d.ts.map +1 -0
  353. package/dist/utils/gitignore.js +22 -0
  354. package/dist/utils/gitignore.js.map +1 -0
  355. package/dist/utils/help.d.ts +3 -0
  356. package/dist/utils/help.d.ts.map +1 -0
  357. package/dist/utils/help.js +19 -0
  358. package/dist/utils/help.js.map +1 -0
  359. package/dist/utils/mapRenderer.d.ts +39 -0
  360. package/dist/utils/mapRenderer.d.ts.map +1 -0
  361. package/dist/utils/mapRenderer.js +90 -0
  362. package/dist/utils/mapRenderer.js.map +1 -0
  363. package/dist/utils/markdownTerminal.d.ts +6 -0
  364. package/dist/utils/markdownTerminal.d.ts.map +1 -0
  365. package/dist/utils/markdownTerminal.js +153 -0
  366. package/dist/utils/markdownTerminal.js.map +1 -0
  367. package/dist/utils/output.d.ts +29 -0
  368. package/dist/utils/output.d.ts.map +1 -0
  369. package/dist/utils/output.js +108 -0
  370. package/dist/utils/output.js.map +1 -0
  371. package/dist/utils/packageMetadata.d.ts +2 -0
  372. package/dist/utils/packageMetadata.d.ts.map +1 -0
  373. package/dist/utils/packageMetadata.js +5 -0
  374. package/dist/utils/packageMetadata.js.map +1 -0
  375. package/dist/utils/prompt.d.ts +11 -0
  376. package/dist/utils/prompt.d.ts.map +1 -0
  377. package/dist/utils/prompt.js +81 -0
  378. package/dist/utils/prompt.js.map +1 -0
  379. package/dist/utils/slug.d.ts +2 -0
  380. package/dist/utils/slug.d.ts.map +1 -0
  381. package/dist/utils/slug.js +8 -0
  382. package/dist/utils/slug.js.map +1 -0
  383. package/dist/utils/targetResolver.d.ts +7 -0
  384. package/dist/utils/targetResolver.d.ts.map +1 -0
  385. package/dist/utils/targetResolver.js +15 -0
  386. package/dist/utils/targetResolver.js.map +1 -0
  387. package/dist/utils/welcome.d.ts +10 -0
  388. package/dist/utils/welcome.d.ts.map +1 -0
  389. package/dist/utils/welcome.js +80 -0
  390. package/dist/utils/welcome.js.map +1 -0
  391. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQ/D;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAuBnC;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACxE,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAM9B"}
@@ -0,0 +1,88 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { output } from "./output.js";
5
+ export function getConfigPath() {
6
+ return join(homedir(), ".devmap", "config.json");
7
+ }
8
+ export async function readConfig() {
9
+ try {
10
+ const raw = await readFile(getConfigPath(), "utf8");
11
+ const parsed = JSON.parse(raw);
12
+ return normalizeConfig(parsed);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ export async function writeConfig(config) {
19
+ const configPath = getConfigPath();
20
+ await mkdir(dirname(configPath), { recursive: true });
21
+ await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
22
+ }
23
+ export function getLocalConfigPath(projectRoot) {
24
+ return join(projectRoot, ".devmap", "config.local.json");
25
+ }
26
+ export async function readLocalConfig(projectRoot) {
27
+ try {
28
+ const raw = await readFile(getLocalConfigPath(projectRoot), "utf8");
29
+ const parsed = JSON.parse(raw);
30
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
31
+ return null;
32
+ }
33
+ const record = parsed;
34
+ if ("apiKey" in record || "provider" in record) {
35
+ output.warning("config.local.json only supports \"model\", apiKey/provider are always read from the global config and were ignored here.");
36
+ }
37
+ return typeof record.model === "string"
38
+ ? { model: record.model }
39
+ : null;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ export async function writeLocalConfig(projectRoot, config) {
46
+ const configPath = getLocalConfigPath(projectRoot);
47
+ await mkdir(dirname(configPath), { recursive: true });
48
+ await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
49
+ }
50
+ export async function resolveEffectiveConfig(projectRoot, readers = {}) {
51
+ const global = await (readers.readGlobal ?? readConfig)();
52
+ if (!global)
53
+ return null;
54
+ const local = await (readers.readLocal ?? readLocalConfig)(projectRoot);
55
+ return local?.model ? { ...global, model: local.model } : global;
56
+ }
57
+ function normalizeConfig(value) {
58
+ if (typeof value !== "object"
59
+ || value === null
60
+ || Array.isArray(value)) {
61
+ return null;
62
+ }
63
+ const record = value;
64
+ const provider = record.provider === undefined
65
+ ? "groq"
66
+ : record.provider;
67
+ const model = record.model === undefined
68
+ ? "auto"
69
+ : record.model;
70
+ if (provider !== "groq" && provider !== "openrouter") {
71
+ return null;
72
+ }
73
+ if (typeof model !== "string") {
74
+ return null;
75
+ }
76
+ const config = {
77
+ provider,
78
+ model
79
+ };
80
+ if (record.apiKey !== undefined) {
81
+ if (typeof record.apiKey !== "string") {
82
+ return null;
83
+ }
84
+ config.apiKey = record.apiKey;
85
+ }
86
+ return config;
87
+ }
88
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function ensureDevmapFile(projectRoot: string): Promise<boolean>;
2
+ export declare function buildDevmapFile(): string;
3
+ //# sourceMappingURL=devmapFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devmapFile.d.ts","sourceRoot":"","sources":["../../src/utils/devmapFile.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5E;AAED,wBAAgB,eAAe,WA6B9B"}
@@ -0,0 +1,43 @@
1
+ import { access, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export async function ensureDevmapFile(projectRoot) {
4
+ const path = join(projectRoot, "DEVMAP.md");
5
+ try {
6
+ await access(path);
7
+ return false;
8
+ }
9
+ catch {
10
+ await writeFile(path, buildDevmapFile(), "utf8");
11
+ return true;
12
+ }
13
+ }
14
+ export function buildDevmapFile() {
15
+ return `# DevMap
16
+
17
+ This repository uses DevMap to create reusable project context for developers and AI agents.
18
+
19
+ ## Project Context
20
+
21
+ - Agent navigation index: \`.devmap/index.json\`
22
+ - Feature maps: \`.devmap/features/*.json\`
23
+ - Full analysis archive: \`.devmap/snapshot.json\`
24
+ - DevMap config: \`~/.devmap/config.json\`
25
+
26
+ ## Commands
27
+
28
+ \`\`\`bash
29
+ devmap analyze
30
+ devmap analyze --fresh
31
+ devmap analyze --json
32
+ devmap doctor
33
+ devmap doctor --json
34
+ \`\`\`
35
+
36
+ ## Navigation Order
37
+
38
+ 1. \`.devmap/index.json\` — entry point, pick relevant feature
39
+ 2. \`.devmap/features/*.json\` — focused feature map
40
+ 3. \`.devmap/snapshot.json\` — full archive, only when above is insufficient
41
+ `;
42
+ }
43
+ //# sourceMappingURL=devmapFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devmapFile.js","sourceRoot":"","sources":["../../src/utils/devmapFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,CAAC,IAAI,EAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAE7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class DevmapError extends Error {
2
+ readonly hint?: string | undefined;
3
+ readonly exitCode: number;
4
+ constructor(message: string, hint?: string | undefined, exitCode?: number);
5
+ }
6
+ export declare function handleError(error: unknown, json?: boolean): number;
7
+ export declare function runSafely(action: () => Promise<void>): Promise<void>;
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,IAAI,CAAC,EAAE,MAAM;aACb,QAAQ;gBAFxB,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,SAAI;CAK/B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,UAAQ,GAAG,MAAM,CA0ChE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E"}
@@ -0,0 +1,92 @@
1
+ import { output } from "./output.js";
2
+ export class DevmapError extends Error {
3
+ hint;
4
+ exitCode;
5
+ constructor(message, hint, exitCode = 1) {
6
+ super(message);
7
+ this.hint = hint;
8
+ this.exitCode = exitCode;
9
+ this.name = "DevmapError";
10
+ }
11
+ }
12
+ export function handleError(error, json = false) {
13
+ if (json) {
14
+ const normalized = normalizeError(error);
15
+ output.json({
16
+ status: "error",
17
+ error: normalized.message,
18
+ hint: normalized.hint ?? null
19
+ });
20
+ return normalized.exitCode;
21
+ }
22
+ if (error instanceof DevmapError) {
23
+ output.error(error.message);
24
+ if (error.hint) {
25
+ output.note(`Tip: ${error.hint}`);
26
+ }
27
+ return error.exitCode;
28
+ }
29
+ if (isNodeError(error)) {
30
+ if (error.code === "ENOENT") {
31
+ output.error("The requested project path could not be found.");
32
+ output.note("Tip: Check the path and run the command again.");
33
+ return 1;
34
+ }
35
+ if (error.code === "EACCES" || error.code === "EPERM") {
36
+ output.error("DevMap does not have permission to access a required file.");
37
+ output.note("Tip: Check folder permissions or run DevMap from a writable project directory.");
38
+ return 1;
39
+ }
40
+ }
41
+ if (error instanceof Error) {
42
+ output.error("DevMap could not complete the command.");
43
+ output.note(`Reason: ${error.message}`);
44
+ }
45
+ else {
46
+ output.error("DevMap could not complete the command due to an unknown error.");
47
+ }
48
+ output.note("Tip: Run devmap doctor and include its output when reporting this issue.");
49
+ return 1;
50
+ }
51
+ export async function runSafely(action) {
52
+ try {
53
+ await action();
54
+ }
55
+ catch (error) {
56
+ process.exitCode = handleError(error, process.argv.includes("--json"));
57
+ }
58
+ }
59
+ function normalizeError(error) {
60
+ if (error instanceof DevmapError) {
61
+ return {
62
+ message: error.message,
63
+ hint: error.hint,
64
+ exitCode: error.exitCode
65
+ };
66
+ }
67
+ if (isNodeError(error) && error.code === "ENOENT") {
68
+ return {
69
+ message: "The requested project path could not be found.",
70
+ hint: "Check the path and run the command again.",
71
+ exitCode: 1
72
+ };
73
+ }
74
+ if (isNodeError(error) && (error.code === "EACCES" || error.code === "EPERM")) {
75
+ return {
76
+ message: "DevMap does not have permission to access a required file.",
77
+ hint: "Check folder permissions or run DevMap from a writable project directory.",
78
+ exitCode: 1
79
+ };
80
+ }
81
+ return {
82
+ message: error instanceof Error
83
+ ? error.message
84
+ : "DevMap could not complete the command due to an unknown error.",
85
+ hint: "Run devmap doctor --json and include its output when reporting this issue.",
86
+ exitCode: 1
87
+ };
88
+ }
89
+ function isNodeError(error) {
90
+ return error instanceof Error && "code" in error;
91
+ }
92
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ensureDevmapIgnored(projectRoot: string): Promise<boolean>;
2
+ //# sourceMappingURL=gitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/utils/gitignore.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB/E"}
@@ -0,0 +1,22 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export async function ensureDevmapIgnored(projectRoot) {
4
+ const gitignorePath = join(projectRoot, ".gitignore");
5
+ let current = "";
6
+ try {
7
+ current = await readFile(gitignorePath, "utf8");
8
+ }
9
+ catch {
10
+ current = "";
11
+ }
12
+ const lines = current.split(/\r?\n/).map((line) => line.trim());
13
+ if (lines.includes(".devmap/") || lines.includes(".devmap")) {
14
+ return false;
15
+ }
16
+ const next = current.length > 0 && !current.endsWith("\n")
17
+ ? `${current}\n.devmap/\n`
18
+ : `${current}.devmap/\n`;
19
+ await writeFile(gitignorePath, next, "utf8");
20
+ return true;
21
+ }
22
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/utils/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEtD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,GAAG,OAAO,cAAc;QAC1B,CAAC,CAAC,GAAG,OAAO,YAAY,CAAC;IAE3B,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function printHelp(program: Command): void;
3
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkBhD"}
@@ -0,0 +1,19 @@
1
+ import { theme } from "./output.js";
2
+ export function printHelp(program) {
3
+ console.log(`\n${theme.aqua}devmap${theme.reset} - Understand any codebase.\n`);
4
+ console.log(`${theme.aqua}USAGE${theme.reset}`);
5
+ console.log(` devmap <command> [options]\n`);
6
+ console.log(`${theme.aqua}COMMANDS${theme.reset}`);
7
+ for (const cmd of program.commands) {
8
+ const args = cmd.registeredArguments
9
+ .map((argument) => (argument.required ? `<${argument.name()}>` : `[${argument.name()}]`))
10
+ .join(" ");
11
+ const usage = args ? `${cmd.name()} ${args}` : cmd.name();
12
+ console.log(` ${theme.aqua}${usage.padEnd(16)}${theme.reset} ${theme.gray}${cmd.description()}${theme.reset}`);
13
+ }
14
+ console.log(`\n${theme.aqua}OPTIONS${theme.reset}`);
15
+ console.log(` ${theme.aqua}-V, --version${theme.reset} ${theme.gray}Show version number${theme.reset}`);
16
+ console.log(` ${theme.aqua}-h, --help${theme.reset} ${theme.gray}Show help message${theme.reset}`);
17
+ console.log(`\n${theme.gray}More info: ${theme.aqua}https://github.com/itsflaid/devmap${theme.reset}\n`);
18
+ }
19
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,KAAK,+BAA+B,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB;aACjC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACxF,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,sBAAsB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3G,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,KAAK,SAAS,KAAK,CAAC,IAAI,oBAAoB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,IAAI,qCAAqC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3G,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { MapTreeNode } from "../analyzers/graph/dependencyMap.js";
2
+ /**
3
+ * renderTree — render a MapTreeNode as an indented, box-drawing tree
4
+ * (same visual convention as the Unix `tree` command). Cycle-closing nodes
5
+ * are suffixed with "(cycle)" instead of being expanded further.
6
+ */
7
+ export declare function renderTree(node: MapTreeNode, prefix?: string): string;
8
+ /**
9
+ * renderFlatList — simple bullet list for cases (feature/project mode) where
10
+ * a flat "these files are involved" view reads better than a nested tree.
11
+ */
12
+ export declare function renderFlatList(paths: string[], options?: {
13
+ cap?: number;
14
+ }): string;
15
+ export type MermaidEdge = {
16
+ from: string;
17
+ to: string;
18
+ };
19
+ /**
20
+ * renderMermaid — render a set of file-to-file edges as a Mermaid
21
+ * flowchart. Mermaid node IDs can't contain slashes/dots, so each real path
22
+ * gets a sanitized ID with the real path kept as the visible label.
23
+ */
24
+ export declare function renderMermaid(edges: MermaidEdge[], options?: {
25
+ direction?: "LR" | "TD";
26
+ }): string;
27
+ /**
28
+ * buildMapMarkdown — wrap a text tree + Mermaid diagram into a single .md
29
+ * body, in the same style as the rest of DevMap's generated docs.
30
+ */
31
+ export declare function buildMapMarkdown(options: {
32
+ title: string;
33
+ sections: Array<{
34
+ heading: string;
35
+ body: string;
36
+ }>;
37
+ mermaid?: string;
38
+ }): string;
39
+ //# sourceMappingURL=mapRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapRenderer.d.ts","sourceRoot":"","sources":["../../src/utils/mapRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,SAAK,GAAG,MAAM,CAIjE;AA2BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAUtF;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAO,GACxC,MAAM,CAyBR;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAYT"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * renderTree — render a MapTreeNode as an indented, box-drawing tree
3
+ * (same visual convention as the Unix `tree` command). Cycle-closing nodes
4
+ * are suffixed with "(cycle)" instead of being expanded further.
5
+ */
6
+ export function renderTree(node, prefix = "") {
7
+ const lines = [];
8
+ renderTreeLines(node, prefix, lines);
9
+ return lines.length > 0 ? lines.join("\n") : "(no connections found)";
10
+ }
11
+ function renderTreeLines(node, prefix, lines) {
12
+ const { children, truncatedCount } = node;
13
+ const hasMore = Boolean(truncatedCount);
14
+ children.forEach((child, index) => {
15
+ const isLast = index === children.length - 1 && !hasMore;
16
+ const branch = isLast ? "└── " : "├── ";
17
+ const nextPrefix = prefix + (isLast ? " " : "│ ");
18
+ const suffix = child.isCycle ? " (cycle)" : "";
19
+ lines.push(`${prefix}${branch}${child.path}${suffix}`);
20
+ if (!child.isCycle) {
21
+ renderTreeLines(child, nextPrefix, lines);
22
+ }
23
+ });
24
+ if (hasMore) {
25
+ lines.push(`${prefix}└── … +${truncatedCount} more (truncated for readability — pass --all to see everything)`);
26
+ }
27
+ }
28
+ /**
29
+ * renderFlatList — simple bullet list for cases (feature/project mode) where
30
+ * a flat "these files are involved" view reads better than a nested tree.
31
+ */
32
+ export function renderFlatList(paths, options = {}) {
33
+ if (paths.length === 0)
34
+ return "(none)";
35
+ const cap = options.cap ?? Infinity;
36
+ const shown = paths.slice(0, cap);
37
+ const lines = shown.map((path) => ` - ${path}`);
38
+ const omitted = paths.length - shown.length;
39
+ if (omitted > 0) {
40
+ lines.push(` - … +${omitted} more (truncated for readability — pass --all to see everything)`);
41
+ }
42
+ return lines.join("\n");
43
+ }
44
+ /**
45
+ * renderMermaid — render a set of file-to-file edges as a Mermaid
46
+ * flowchart. Mermaid node IDs can't contain slashes/dots, so each real path
47
+ * gets a sanitized ID with the real path kept as the visible label.
48
+ */
49
+ export function renderMermaid(edges, options = {}) {
50
+ const direction = options.direction ?? "LR";
51
+ const ids = new Map();
52
+ const idFor = (path) => {
53
+ const existing = ids.get(path);
54
+ if (existing)
55
+ return existing;
56
+ const id = `n${ids.size}`;
57
+ ids.set(path, id);
58
+ return id;
59
+ };
60
+ const lines = [`graph ${direction}`];
61
+ const seenEdges = new Set();
62
+ for (const edge of edges) {
63
+ const key = `${edge.from}=>${edge.to}`;
64
+ if (seenEdges.has(key))
65
+ continue;
66
+ seenEdges.add(key);
67
+ const fromId = idFor(edge.from);
68
+ const toId = idFor(edge.to);
69
+ lines.push(` ${fromId}["${escapeMermaidLabel(edge.from)}"] --> ${toId}["${escapeMermaidLabel(edge.to)}"]`);
70
+ }
71
+ return lines.join("\n");
72
+ }
73
+ function escapeMermaidLabel(label) {
74
+ return label.replace(/"/g, "#quot;");
75
+ }
76
+ /**
77
+ * buildMapMarkdown — wrap a text tree + Mermaid diagram into a single .md
78
+ * body, in the same style as the rest of DevMap's generated docs.
79
+ */
80
+ export function buildMapMarkdown(options) {
81
+ const parts = [`# ${options.title}`, ""];
82
+ for (const section of options.sections) {
83
+ parts.push(`## ${section.heading}`, "", section.body, "");
84
+ }
85
+ if (options.mermaid) {
86
+ parts.push("## Diagram", "", "```mermaid", options.mermaid, "```", "");
87
+ }
88
+ return parts.join("\n").trimEnd() + "\n";
89
+ }
90
+ //# sourceMappingURL=mapRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapRenderer.js","sourceRoot":"","sources":["../../src/utils/mapRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type MarkdownRenderOptions = {
2
+ width?: number;
3
+ colors?: boolean;
4
+ };
5
+ export declare function renderTerminalMarkdown(markdown: string, options?: MarkdownRenderOptions): string;
6
+ //# sourceMappingURL=markdownTerminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownTerminal.d.ts","sourceRoot":"","sources":["../../src/utils/markdownTerminal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AASF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAiER"}
@@ -0,0 +1,153 @@
1
+ const ANSI = {
2
+ aqua: "\x1b[38;2;46;230;214m",
3
+ bold: "\x1b[1m",
4
+ gray: "\x1b[90m",
5
+ reset: "\x1b[0m"
6
+ };
7
+ export function renderTerminalMarkdown(markdown, options = {}) {
8
+ const width = Math.max(32, options.width ?? 80);
9
+ const colors = options.colors ?? true;
10
+ const lines = markdown.replace(/\r\n?/g, "\n").split("\n");
11
+ const rendered = [];
12
+ let index = 0;
13
+ let inCodeBlock = false;
14
+ while (index < lines.length) {
15
+ const line = lines[index];
16
+ if (/^\s*```/.test(line)) {
17
+ inCodeBlock = !inCodeBlock;
18
+ index += 1;
19
+ continue;
20
+ }
21
+ if (inCodeBlock) {
22
+ rendered.push(style(` ${line}`, "gray", colors));
23
+ index += 1;
24
+ continue;
25
+ }
26
+ if (isTableStart(lines, index)) {
27
+ const tableEnd = findTableEnd(lines, index);
28
+ rendered.push(...renderTable(lines.slice(index, tableEnd), width, colors));
29
+ index = tableEnd;
30
+ continue;
31
+ }
32
+ const heading = line.match(/^\s{0,3}#{1,6}\s+(.+?)\s*#*\s*$/);
33
+ if (heading) {
34
+ const title = cleanInline(heading[1]);
35
+ rendered.push(style(title, "heading", colors));
36
+ rendered.push(style("-".repeat(Math.min(width, Math.max(12, title.length))), "gray", colors));
37
+ index += 1;
38
+ continue;
39
+ }
40
+ const listItem = line.match(/^(\s*)([-+*]|\d+\.)\s+(.+)$/);
41
+ if (listItem) {
42
+ const marker = /^\d/.test(listItem[2]) ? listItem[2] : "-";
43
+ const indent = listItem[1].length + (marker === "-" ? 0 : 0);
44
+ rendered.push(...wrapWithPrefix(cleanInline(listItem[3]), `${" ".repeat(indent)}${marker} `, width));
45
+ index += 1;
46
+ continue;
47
+ }
48
+ if (line.trim() === "") {
49
+ if (rendered.at(-1) !== "") {
50
+ rendered.push("");
51
+ }
52
+ index += 1;
53
+ continue;
54
+ }
55
+ rendered.push(...wrapText(cleanInline(line.trim()), width));
56
+ index += 1;
57
+ }
58
+ return trimBlankLines(rendered).join("\n");
59
+ }
60
+ function isTableStart(lines, index) {
61
+ return (index + 1 < lines.length
62
+ && lines[index].includes("|")
63
+ && /^\s*\|?\s*:?-{3,}/.test(lines[index + 1]));
64
+ }
65
+ function findTableEnd(lines, start) {
66
+ let index = start + 2;
67
+ while (index < lines.length && lines[index].includes("|") && lines[index].trim() !== "") {
68
+ index += 1;
69
+ }
70
+ return index;
71
+ }
72
+ function renderTable(tableLines, width, colors) {
73
+ const headers = parseTableRow(tableLines[0]).map(cleanInline);
74
+ const rows = tableLines.slice(2).map((line) => parseTableRow(line).map(cleanInline));
75
+ const labelWidth = Math.min(18, Math.max(8, ...headers.slice(1).map((header) => header.length)));
76
+ const rendered = [];
77
+ for (const row of rows) {
78
+ const title = row[0] || "Item";
79
+ rendered.push(style(title, "heading", colors));
80
+ for (let index = 1; index < headers.length; index += 1) {
81
+ const label = headers[index] || `Column ${index + 1}`;
82
+ const value = row[index] || "-";
83
+ rendered.push(...wrapWithPrefix(value, ` ${label.padEnd(labelWidth)} `, width));
84
+ }
85
+ rendered.push("");
86
+ }
87
+ return trimBlankLines(rendered);
88
+ }
89
+ function parseTableRow(line) {
90
+ return line
91
+ .trim()
92
+ .replace(/^\|/, "")
93
+ .replace(/\|$/, "")
94
+ .split("|")
95
+ .map((cell) => cell.trim());
96
+ }
97
+ function cleanInline(value) {
98
+ return value
99
+ .replace(/!\[([^\]]*)]\([^)]*\)/g, "$1")
100
+ .replace(/\[([^\]]+)]\(([^)]+)\)/g, "$1 ($2)")
101
+ .replace(/(\*\*|__)(.*?)\1/g, "$2")
102
+ .replace(/\*([^*]+)\*/g, "$1")
103
+ .replace(/~~(.*?)~~/g, "$1")
104
+ .replace(/`([^`]+)`/g, "$1")
105
+ .replace(/\\([\\`*_[\]{}()#+\-.!|>])/g, "$1");
106
+ }
107
+ function wrapText(value, width) {
108
+ return wrapWithPrefix(value, "", width);
109
+ }
110
+ function wrapWithPrefix(value, prefix, width) {
111
+ const continuation = " ".repeat(prefix.length);
112
+ const available = Math.max(12, width - prefix.length);
113
+ const words = value.split(/\s+/).filter(Boolean);
114
+ const lines = [];
115
+ let current = "";
116
+ for (const word of words) {
117
+ if (!current) {
118
+ current = word;
119
+ continue;
120
+ }
121
+ if (`${current} ${word}`.length <= available) {
122
+ current = `${current} ${word}`;
123
+ continue;
124
+ }
125
+ lines.push(`${lines.length === 0 ? prefix : continuation}${current}`);
126
+ current = word;
127
+ }
128
+ if (current || lines.length === 0) {
129
+ lines.push(`${lines.length === 0 ? prefix : continuation}${current}`);
130
+ }
131
+ return lines;
132
+ }
133
+ function style(value, tone, colors) {
134
+ if (!colors) {
135
+ return value;
136
+ }
137
+ if (tone === "heading") {
138
+ return `${ANSI.bold}${ANSI.aqua}${value}${ANSI.reset}`;
139
+ }
140
+ return `${ANSI.gray}${value}${ANSI.reset}`;
141
+ }
142
+ function trimBlankLines(lines) {
143
+ let start = 0;
144
+ let end = lines.length;
145
+ while (start < end && lines[start] === "") {
146
+ start += 1;
147
+ }
148
+ while (end > start && lines[end - 1] === "") {
149
+ end -= 1;
150
+ }
151
+ return lines.slice(start, end);
152
+ }
153
+ //# sourceMappingURL=markdownTerminal.js.map