@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,36 @@
1
+ import type { AiClient, AiCompletionRequest, AiCompletionResult, AiDeltaHandler } from "./types.js";
2
+ export declare const DEFAULT_AI_MODELS: {
3
+ readonly analyze: "openai/gpt-oss-20b";
4
+ readonly flowNarration: "openai/gpt-oss-20b";
5
+ readonly explain: "openai/gpt-oss-20b";
6
+ readonly fallback: "openai/gpt-oss-20b";
7
+ };
8
+ export declare const DEFAULT_AI_FALLBACKS: {
9
+ readonly analyze: readonly ["qwen/qwen3.6-27b", "openai/gpt-oss-120b"];
10
+ readonly flowNarration: readonly ["openai/gpt-oss-120b"];
11
+ readonly explain: readonly ["qwen/qwen3.6-27b", "openai/gpt-oss-120b"];
12
+ };
13
+ export type GroqClientDependencies = {
14
+ fetch?: typeof fetch;
15
+ sleep?: (milliseconds: number) => Promise<void>;
16
+ };
17
+ export type GroqProviderInspection = {
18
+ reachable: true;
19
+ modelAvailable: boolean;
20
+ };
21
+ export declare class GroqClient implements AiClient {
22
+ private readonly apiKey;
23
+ private readonly fetchImplementation;
24
+ private readonly sleep;
25
+ constructor(apiKey: string, dependencies?: GroqClientDependencies);
26
+ complete(request: AiCompletionRequest): Promise<AiCompletionResult>;
27
+ stream(request: AiCompletionRequest, onDelta: AiDeltaHandler): Promise<AiCompletionResult>;
28
+ private requestModel;
29
+ private requestModelStream;
30
+ private sendWithRateLimitRetries;
31
+ private sendRequest;
32
+ }
33
+ export declare function validateGroqApiKey(apiKey: string): Promise<void>;
34
+ export declare function listGroqModels(apiKey: string, dependencies?: Pick<GroqClientDependencies, "fetch">): Promise<string[]>;
35
+ export declare function inspectGroqProvider(apiKey: string, model?: string, dependencies?: Pick<GroqClientDependencies, "fetch">): Promise<GroqProviderInspection>;
36
+ //# sourceMappingURL=groq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.d.ts","sourceRoot":"","sources":["../../src/ai/groq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EAEf,MAAM,YAAY,CAAC;AAQpB,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;CAYvB,CAAC;AAqBX,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qBAAa,UAAW,YAAW,QAAQ;IAKvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAe;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;gBAG7C,MAAM,EAAE,MAAM,EAC/B,YAAY,GAAE,sBAA2B;IAMrC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkBnE,MAAM,CACV,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,kBAAkB,CAAC;YAkBhB,YAAY;YA2BZ,kBAAkB;YA0BlB,wBAAwB;YAuBxB,WAAW;CA8B1B;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAM,GACvD,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,GAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAM,GACvD,OAAO,CAAC,sBAAsB,CAAC,CAsBjC"}
@@ -0,0 +1,368 @@
1
+ import { DevmapError } from "../utils/errors.js";
2
+ const GROQ_MODELS_URL = "https://api.groq.com/openai/v1/models";
3
+ const GROQ_CHAT_COMPLETIONS_URL = "https://api.groq.com/openai/v1/chat/completions";
4
+ const DEFAULT_RATE_LIMIT_DELAY_MS = 1000;
5
+ const MAX_RATE_LIMIT_DELAY_MS = 10_000;
6
+ const MAX_RATE_LIMIT_RETRIES = 3;
7
+ export const DEFAULT_AI_MODELS = {
8
+ analyze: "openai/gpt-oss-20b",
9
+ flowNarration: "openai/gpt-oss-20b",
10
+ explain: "openai/gpt-oss-20b",
11
+ fallback: "openai/gpt-oss-20b"
12
+ };
13
+ export const DEFAULT_AI_FALLBACKS = {
14
+ analyze: [
15
+ "qwen/qwen3.6-27b",
16
+ "openai/gpt-oss-120b"
17
+ ],
18
+ flowNarration: [
19
+ "openai/gpt-oss-120b"
20
+ ],
21
+ explain: [
22
+ "qwen/qwen3.6-27b",
23
+ "openai/gpt-oss-120b"
24
+ ]
25
+ };
26
+ const EXCLUDED_MODEL_PATTERNS = [
27
+ /whisper/i, // speech-to-text models (whisper-large-v3, distil-whisper-*)
28
+ /prompt-guard/i, // content moderation (llama-prompt-guard-*)
29
+ /\bguard\b/i, // safety classifier models (llama-guard-3-8b, etc.)
30
+ /compound/i, // compound-beta orchestration models — not plain chat completions
31
+ /\btts\b/i, // text-to-speech (playai-tts, playai-tts-arabic)
32
+ /\bvision\b/i, // vision-only models
33
+ /llava/i, // LLaVA multimodal vision family
34
+ /\bembed\b/i, // embedding models — no chat completions API
35
+ /\bspeculative\b/i, // speculative decoding variants
36
+ /\brerank\b/i, // reranking models
37
+ ];
38
+ const PREFERRED_MODELS = [
39
+ "openai/gpt-oss-120b",
40
+ "openai/gpt-oss-20b",
41
+ "qwen/qwen3.6-27b",
42
+ ];
43
+ export class GroqClient {
44
+ apiKey;
45
+ fetchImplementation;
46
+ sleep;
47
+ constructor(apiKey, dependencies = {}) {
48
+ this.apiKey = apiKey;
49
+ this.fetchImplementation = dependencies.fetch ?? fetch;
50
+ this.sleep = dependencies.sleep ?? wait;
51
+ }
52
+ async complete(request) {
53
+ let lastError;
54
+ for (const model of resolveModelChain(request)) {
55
+ const result = await this.requestModel(request, model);
56
+ if (result.ok) {
57
+ return result.result;
58
+ }
59
+ lastError = result.error;
60
+ if (!result.canFallback) {
61
+ throw result.error;
62
+ }
63
+ }
64
+ throw lastError ?? new DevmapError("No Groq model was configured.");
65
+ }
66
+ async stream(request, onDelta) {
67
+ let lastError;
68
+ for (const model of resolveModelChain(request)) {
69
+ const result = await this.requestModelStream(request, model, onDelta);
70
+ if (result.ok) {
71
+ return result.result;
72
+ }
73
+ lastError = result.error;
74
+ if (!result.canFallback) {
75
+ throw result.error;
76
+ }
77
+ }
78
+ throw lastError ?? new DevmapError("No Groq model was configured.");
79
+ }
80
+ async requestModel(request, model) {
81
+ const response = await this.sendWithRateLimitRetries(request, model, false);
82
+ if (!response.ok) {
83
+ return readFailedRequest(response);
84
+ }
85
+ const payload = await readCompletionPayload(response);
86
+ const content = payload.choices[0]?.message?.content?.trim();
87
+ if (!content) {
88
+ return emptyResponseResult();
89
+ }
90
+ return {
91
+ ok: true,
92
+ result: {
93
+ content,
94
+ model: payload.model || model,
95
+ ...(payload.usage ? { usage: normalizeUsage(payload.usage) } : {})
96
+ }
97
+ };
98
+ }
99
+ async requestModelStream(request, model, onDelta) {
100
+ const response = await this.sendWithRateLimitRetries(request, model, true);
101
+ if (!response.ok) {
102
+ return readFailedRequest(response);
103
+ }
104
+ const payload = await readCompletionStream(response, model, onDelta);
105
+ if (!payload.content.trim()) {
106
+ return emptyResponseResult();
107
+ }
108
+ return {
109
+ ok: true,
110
+ result: {
111
+ content: payload.content.trim(),
112
+ model: payload.model,
113
+ ...(payload.usage ? { usage: payload.usage } : {})
114
+ }
115
+ };
116
+ }
117
+ async sendWithRateLimitRetries(request, model, stream) {
118
+ let response = await this.sendRequest(request, model, stream);
119
+ for (let retryAttempt = 0; response.status === 429 && retryAttempt < MAX_RATE_LIMIT_RETRIES; retryAttempt += 1) {
120
+ const delay = Math.min(readRetryDelay(response) * (2 ** retryAttempt), MAX_RATE_LIMIT_DELAY_MS);
121
+ await this.sleep(delay);
122
+ response = await this.sendRequest(request, model, stream);
123
+ }
124
+ return response;
125
+ }
126
+ async sendRequest(request, model, stream = false) {
127
+ try {
128
+ return await this.fetchImplementation(GROQ_CHAT_COMPLETIONS_URL, {
129
+ method: "POST",
130
+ headers: {
131
+ Authorization: `Bearer ${this.apiKey}`,
132
+ "Content-Type": "application/json"
133
+ },
134
+ body: JSON.stringify({
135
+ model,
136
+ messages: request.messages,
137
+ max_completion_tokens: request.maxCompletionTokens ?? 1200,
138
+ temperature: request.temperature ?? 0.2,
139
+ ...(stream ? {
140
+ stream: true,
141
+ stream_options: { include_usage: true }
142
+ } : {})
143
+ })
144
+ });
145
+ }
146
+ catch {
147
+ throw new DevmapError("Could not connect to Groq.", "Check your internet connection and run devmap doctor.");
148
+ }
149
+ }
150
+ }
151
+ export async function validateGroqApiKey(apiKey) {
152
+ await inspectGroqProvider(apiKey);
153
+ }
154
+ export async function listGroqModels(apiKey, dependencies = {}) {
155
+ const response = await fetchGroqModels(apiKey, dependencies);
156
+ if (response.status === 401 || response.status === 403) {
157
+ throw new DevmapError("The Groq API key is invalid.", "Create or copy a valid key from https://console.groq.com/keys.");
158
+ }
159
+ if (!response.ok) {
160
+ throw new DevmapError(`Groq model lookup failed with HTTP ${response.status}.`, "Try again shortly or check https://status.groq.com.");
161
+ }
162
+ return readModelIds(response);
163
+ }
164
+ export async function inspectGroqProvider(apiKey, model, dependencies = {}) {
165
+ const response = await fetchGroqModels(apiKey, dependencies);
166
+ if (response.status === 401 || response.status === 403) {
167
+ throw new DevmapError("The Groq API key is invalid.", "Create or copy a valid key from https://console.groq.com/keys.");
168
+ }
169
+ if (!response.ok) {
170
+ throw new DevmapError(`Groq validation failed with HTTP ${response.status}.`, "Try again shortly or check https://status.groq.com.");
171
+ }
172
+ const modelIds = await readModelIds(response);
173
+ return {
174
+ reachable: true,
175
+ modelAvailable: !model || modelIds.includes(model)
176
+ };
177
+ }
178
+ async function fetchGroqModels(apiKey, dependencies = {}) {
179
+ const fetchImplementation = dependencies.fetch ?? fetch;
180
+ try {
181
+ return await fetchImplementation(GROQ_MODELS_URL, {
182
+ headers: {
183
+ Authorization: `Bearer ${apiKey}`
184
+ }
185
+ });
186
+ }
187
+ catch {
188
+ throw new DevmapError("Could not connect to Groq.", "Check your internet connection and run devmap init again.");
189
+ }
190
+ }
191
+ async function readFailedRequest(response) {
192
+ const providerMessage = await readProviderError(response);
193
+ return {
194
+ ok: false,
195
+ canFallback: shouldTryFallback(response.status, providerMessage),
196
+ error: mapGroqError(response.status, providerMessage)
197
+ };
198
+ }
199
+ function emptyResponseResult() {
200
+ return {
201
+ ok: false,
202
+ canFallback: false,
203
+ error: new DevmapError("Groq returned an empty response.", "Try the question again or run devmap doctor.")
204
+ };
205
+ }
206
+ async function readCompletionPayload(response) {
207
+ try {
208
+ const payload = await response.json();
209
+ return {
210
+ model: payload.model,
211
+ choices: Array.isArray(payload.choices) ? payload.choices : [],
212
+ usage: payload.usage
213
+ };
214
+ }
215
+ catch {
216
+ throw new DevmapError("Groq returned an unreadable response.", "Try again shortly or check https://status.groq.com.");
217
+ }
218
+ }
219
+ async function readProviderError(response) {
220
+ try {
221
+ const payload = await response.json();
222
+ return typeof payload.error?.message === "string"
223
+ ? payload.error.message
224
+ : `HTTP ${response.status}`;
225
+ }
226
+ catch {
227
+ return `HTTP ${response.status}`;
228
+ }
229
+ }
230
+ async function readCompletionStream(response, requestedModel, onDelta) {
231
+ if (!response.body) {
232
+ throw new DevmapError("Groq returned an unreadable streaming response.", "Try again shortly or run devmap doctor.");
233
+ }
234
+ const reader = response.body.getReader();
235
+ const decoder = new TextDecoder();
236
+ let buffer = "";
237
+ let content = "";
238
+ let model = requestedModel;
239
+ let usage;
240
+ const consumeEvent = (event) => {
241
+ const data = event
242
+ .split(/\r?\n/)
243
+ .filter((line) => line.startsWith("data:"))
244
+ .map((line) => line.slice(5).trimStart())
245
+ .join("\n");
246
+ if (!data)
247
+ return false;
248
+ if (data.trim() === "[DONE]")
249
+ return true;
250
+ let payload;
251
+ try {
252
+ payload = JSON.parse(data);
253
+ }
254
+ catch {
255
+ throw new DevmapError("Groq returned an unreadable streaming response.", "Try again shortly or check https://status.groq.com.");
256
+ }
257
+ model = payload.model || model;
258
+ const delta = payload.choices?.[0]?.delta?.content;
259
+ if (delta) {
260
+ content += delta;
261
+ onDelta(delta);
262
+ }
263
+ const rawUsage = payload.usage ?? payload.x_groq?.usage;
264
+ if (rawUsage) {
265
+ usage = normalizeUsage(rawUsage);
266
+ }
267
+ return false;
268
+ };
269
+ try {
270
+ let done = false;
271
+ while (!done) {
272
+ const readResult = await reader.read();
273
+ buffer += decoder.decode(readResult.value, { stream: !readResult.done });
274
+ const events = buffer.split(/\r?\n\r?\n/);
275
+ buffer = events.pop() ?? "";
276
+ for (const event of events) {
277
+ if (consumeEvent(event)) {
278
+ done = true;
279
+ break;
280
+ }
281
+ }
282
+ if (readResult.done) {
283
+ if (!done && buffer.trim()) {
284
+ consumeEvent(buffer);
285
+ }
286
+ break;
287
+ }
288
+ }
289
+ }
290
+ catch (error) {
291
+ if (error instanceof DevmapError) {
292
+ throw error;
293
+ }
294
+ throw new DevmapError("The Groq response stream ended unexpectedly.", "Try again or run devmap doctor if the problem continues.");
295
+ }
296
+ return {
297
+ content,
298
+ model,
299
+ ...(usage ? { usage } : {})
300
+ };
301
+ }
302
+ function mapGroqError(status, providerMessage) {
303
+ if (status === 401 || status === 403) {
304
+ return new DevmapError("The Groq API key is invalid or no longer authorized.", "Run devmap init again with a valid Groq API key.");
305
+ }
306
+ if (status === 429) {
307
+ return new DevmapError("Groq rate limit reached after retrying.", "Wait briefly, ask a narrower question, or try again later.");
308
+ }
309
+ if (status >= 500) {
310
+ return new DevmapError("Groq is temporarily unavailable.", "Try again shortly or check https://status.groq.com.");
311
+ }
312
+ return new DevmapError(`Groq could not complete the request (${providerMessage}).`, "Run devmap doctor and verify the selected model.");
313
+ }
314
+ function shouldTryFallback(status, message) {
315
+ return status === 429
316
+ || status >= 500
317
+ || (status === 404
318
+ || (status === 400
319
+ && /model|decommissioned|not available|not found|permission/i.test(message)));
320
+ }
321
+ function resolveModelChain(request) {
322
+ return Array.from(new Set([
323
+ request.model,
324
+ ...(request.fallbackModels ?? []),
325
+ ...(request.fallbackModel ? [request.fallbackModel] : [])
326
+ ].filter((model) => model.trim().length > 0)));
327
+ }
328
+ function readRetryDelay(response) {
329
+ const seconds = Number(response.headers.get("retry-after"));
330
+ if (!Number.isFinite(seconds) || seconds <= 0) {
331
+ return DEFAULT_RATE_LIMIT_DELAY_MS;
332
+ }
333
+ return Math.min(seconds * 1000, MAX_RATE_LIMIT_DELAY_MS);
334
+ }
335
+ function normalizeUsage(usage) {
336
+ return {
337
+ promptTokens: usage.prompt_tokens ?? 0,
338
+ completionTokens: usage.completion_tokens ?? 0,
339
+ totalTokens: usage.total_tokens ?? 0
340
+ };
341
+ }
342
+ function wait(milliseconds) {
343
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
344
+ }
345
+ async function readModelIds(response) {
346
+ try {
347
+ const payload = await response.json();
348
+ return (payload.data ?? [])
349
+ .map((model) => model.id)
350
+ .filter((id) => typeof id === "string")
351
+ .filter((id) => !EXCLUDED_MODEL_PATTERNS.some((pattern) => pattern.test(id)))
352
+ .sort((a, b) => {
353
+ const aIndex = PREFERRED_MODELS.indexOf(a);
354
+ const bIndex = PREFERRED_MODELS.indexOf(b);
355
+ if (aIndex !== -1 && bIndex !== -1)
356
+ return aIndex - bIndex;
357
+ if (aIndex !== -1)
358
+ return -1;
359
+ if (bIndex !== -1)
360
+ return 1;
361
+ return a.localeCompare(b);
362
+ });
363
+ }
364
+ catch {
365
+ throw new DevmapError("Groq returned an unreadable model list.", "Try again shortly or check https://status.groq.com.");
366
+ }
367
+ }
368
+ //# sourceMappingURL=groq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/ai/groq.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AiClient, AiCompletionRequest, AiCompletionResult, AiDeltaHandler } from "./types.js";
2
+ export declare const OPENROUTER_FREE_MODEL = "openrouter/free";
3
+ export type OpenRouterClientDependencies = {
4
+ fetch?: typeof fetch;
5
+ };
6
+ export type OpenRouterProviderInspection = {
7
+ reachable: true;
8
+ modelAvailable: boolean;
9
+ };
10
+ export declare class OpenRouterClient implements AiClient {
11
+ private readonly apiKey;
12
+ private readonly fetchImplementation;
13
+ constructor(apiKey: string, dependencies?: OpenRouterClientDependencies);
14
+ complete(request: AiCompletionRequest): Promise<AiCompletionResult>;
15
+ stream(request: AiCompletionRequest, onDelta: AiDeltaHandler): Promise<AiCompletionResult>;
16
+ private sendRequest;
17
+ }
18
+ export declare function validateOpenRouterApiKey(apiKey: string, dependencies?: OpenRouterClientDependencies): Promise<void>;
19
+ export declare function inspectOpenRouterProvider(apiKey: string, _model?: string, dependencies?: OpenRouterClientDependencies): Promise<OpenRouterProviderInspection>;
20
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/ai/openrouter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EAEf,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qBAAa,gBAAiB,YAAW,QAAQ;IAI7C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAe;gBAGhC,MAAM,EAAE,MAAM,EAC/B,YAAY,GAAE,4BAAiC;IAK3C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoBnE,MAAM,CACV,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,kBAAkB,CAAC;YAMhB,WAAW;CA6B1B;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,4BAAiC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,GAAE,4BAAiC,GAC9C,OAAO,CAAC,4BAA4B,CAAC,CA4BvC"}
@@ -0,0 +1,187 @@
1
+ import { DevmapError } from "../utils/errors.js";
2
+ const OPENROUTER_CHAT_URL = "https://openrouter.ai/api/v1/chat/completions";
3
+ const OPENROUTER_KEY_URL = "https://openrouter.ai/api/v1/auth/key";
4
+ export const OPENROUTER_FREE_MODEL = "openrouter/free";
5
+ export class OpenRouterClient {
6
+ apiKey;
7
+ fetchImplementation;
8
+ constructor(apiKey, dependencies = {}) {
9
+ this.apiKey = apiKey;
10
+ this.fetchImplementation = dependencies.fetch ?? fetch;
11
+ }
12
+ async complete(request) {
13
+ const response = await this.sendRequest(request, false);
14
+ if (!response.ok)
15
+ throw await mapOpenRouterResponseError(response);
16
+ const payload = await readCompletionPayload(response);
17
+ const content = payload.choices[0]?.message?.content?.trim();
18
+ if (!content) {
19
+ throw new DevmapError("OpenRouter returned an empty response.", "Try again or choose another model.");
20
+ }
21
+ return {
22
+ content,
23
+ model: payload.model || request.model,
24
+ ...(payload.usage ? { usage: normalizeUsage(payload.usage) } : {})
25
+ };
26
+ }
27
+ async stream(request, onDelta) {
28
+ const response = await this.sendRequest(request, true);
29
+ if (!response.ok)
30
+ throw await mapOpenRouterResponseError(response);
31
+ return readCompletionStream(response, request.model, onDelta);
32
+ }
33
+ async sendRequest(request, stream) {
34
+ const models = resolveModels(request);
35
+ try {
36
+ return await this.fetchImplementation(OPENROUTER_CHAT_URL, {
37
+ method: "POST",
38
+ headers: {
39
+ Authorization: `Bearer ${this.apiKey}`,
40
+ "Content-Type": "application/json",
41
+ "HTTP-Referer": "https://github.com/itsflaid/devmap",
42
+ "X-OpenRouter-Title": "DevMap"
43
+ },
44
+ body: JSON.stringify({
45
+ ...(models.length > 1 ? { models } : { model: models[0] }),
46
+ messages: request.messages,
47
+ max_tokens: request.maxCompletionTokens ?? 1200,
48
+ temperature: request.temperature ?? 0.2,
49
+ ...(stream ? { stream: true } : {})
50
+ })
51
+ });
52
+ }
53
+ catch {
54
+ throw new DevmapError("Could not connect to OpenRouter.", "Check your internet connection and run devmap doctor.");
55
+ }
56
+ }
57
+ }
58
+ export async function validateOpenRouterApiKey(apiKey, dependencies = {}) {
59
+ await inspectOpenRouterProvider(apiKey, undefined, dependencies);
60
+ }
61
+ export async function inspectOpenRouterProvider(apiKey, _model, dependencies = {}) {
62
+ const fetchImplementation = dependencies.fetch ?? fetch;
63
+ let response;
64
+ try {
65
+ response = await fetchImplementation(OPENROUTER_KEY_URL, {
66
+ headers: { Authorization: `Bearer ${apiKey}` }
67
+ });
68
+ }
69
+ catch {
70
+ throw new DevmapError("Could not connect to OpenRouter.", "Check your internet connection and run devmap init again.");
71
+ }
72
+ if (response.status === 401 || response.status === 403) {
73
+ throw new DevmapError("The OpenRouter API key is invalid.", "Create or copy a valid key from https://openrouter.ai/keys.");
74
+ }
75
+ if (!response.ok) {
76
+ throw new DevmapError(`OpenRouter validation failed with HTTP ${response.status}.`, "Try again shortly or check https://openrouter.ai/status.");
77
+ }
78
+ return { reachable: true, modelAvailable: true };
79
+ }
80
+ function resolveModels(request) {
81
+ return Array.from(new Set([
82
+ request.model,
83
+ ...(request.fallbackModels ?? []),
84
+ ...(request.fallbackModel ? [request.fallbackModel] : [])
85
+ ].filter((model) => model.trim().length > 0)));
86
+ }
87
+ async function readCompletionPayload(response) {
88
+ try {
89
+ const payload = await response.json();
90
+ return {
91
+ model: payload.model,
92
+ choices: Array.isArray(payload.choices) ? payload.choices : [],
93
+ usage: payload.usage
94
+ };
95
+ }
96
+ catch {
97
+ throw unreadableResponseError();
98
+ }
99
+ }
100
+ async function readCompletionStream(response, requestedModel, onDelta) {
101
+ if (!response.body)
102
+ throw unreadableResponseError();
103
+ const reader = response.body.getReader();
104
+ const decoder = new TextDecoder();
105
+ let buffer = "";
106
+ let content = "";
107
+ let model = requestedModel;
108
+ let usage;
109
+ const consume = (event) => {
110
+ const data = event
111
+ .split(/\r?\n/)
112
+ .filter((line) => line.startsWith("data:"))
113
+ .map((line) => line.slice(5).trimStart())
114
+ .join("\n");
115
+ if (!data)
116
+ return false;
117
+ if (data.trim() === "[DONE]")
118
+ return true;
119
+ try {
120
+ const payload = JSON.parse(data);
121
+ model = payload.model || model;
122
+ const delta = payload.choices?.[0]?.delta?.content;
123
+ if (delta) {
124
+ content += delta;
125
+ onDelta(delta);
126
+ }
127
+ if (payload.usage)
128
+ usage = normalizeUsage(payload.usage);
129
+ return false;
130
+ }
131
+ catch {
132
+ throw unreadableResponseError();
133
+ }
134
+ };
135
+ try {
136
+ let done = false;
137
+ while (!done) {
138
+ const chunk = await reader.read();
139
+ buffer += decoder.decode(chunk.value, { stream: !chunk.done });
140
+ const events = buffer.split(/\r?\n\r?\n/);
141
+ buffer = events.pop() ?? "";
142
+ for (const event of events) {
143
+ if (consume(event)) {
144
+ done = true;
145
+ break;
146
+ }
147
+ }
148
+ if (chunk.done) {
149
+ if (!done && buffer.trim())
150
+ consume(buffer);
151
+ break;
152
+ }
153
+ }
154
+ }
155
+ catch (error) {
156
+ if (error instanceof DevmapError)
157
+ throw error;
158
+ throw unreadableResponseError();
159
+ }
160
+ if (!content.trim()) {
161
+ throw new DevmapError("OpenRouter returned an empty response.", "Try again or choose another model.");
162
+ }
163
+ return { content: content.trim(), model, ...(usage ? { usage } : {}) };
164
+ }
165
+ async function mapOpenRouterResponseError(response) {
166
+ if (response.status === 401 || response.status === 403) {
167
+ return new DevmapError("The OpenRouter API key is invalid or no longer authorized.", "Run devmap init again with a valid OpenRouter API key.");
168
+ }
169
+ if (response.status === 429) {
170
+ return new DevmapError("OpenRouter rate limit reached.", "Wait briefly or choose another model.");
171
+ }
172
+ if (response.status >= 500) {
173
+ return new DevmapError("OpenRouter is temporarily unavailable.", "Try again shortly or check https://openrouter.ai/status.");
174
+ }
175
+ return new DevmapError(`OpenRouter could not complete the request (HTTP ${response.status}).`, "Run devmap doctor and verify the selected model.");
176
+ }
177
+ function unreadableResponseError() {
178
+ return new DevmapError("OpenRouter returned an unreadable response.", "Try again shortly or choose another model.");
179
+ }
180
+ function normalizeUsage(usage) {
181
+ return {
182
+ promptTokens: usage.prompt_tokens ?? 0,
183
+ completionTokens: usage.completion_tokens ?? 0,
184
+ totalTokens: usage.total_tokens ?? 0
185
+ };
186
+ }
187
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/ai/openrouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { FlowInfo, ProjectMap } from "../analyzers/pipeline/index.js";
2
+ import type { QuestionContext } from "./contextBuilder.js";
3
+ import type { AiMessage } from "./types.js";
4
+ export declare function buildAnalyzeMessages(snapshot: ProjectMap): AiMessage[];
5
+ export declare function buildFlowNarrationMessages(flow: FlowInfo): AiMessage[];
6
+ export declare function buildExplainMessages(targetLabel: string, context: QuestionContext): AiMessage[];
7
+ //# sourceMappingURL=prompts.d.ts.map