codebase-onboarder 0.6.0 → 1.0.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 (526) hide show
  1. package/README.md +284 -53
  2. package/bin/build-if-source.js +23 -0
  3. package/bin/onboarder.js +0 -0
  4. package/cli/agent/command.d.ts +71 -0
  5. package/cli/agent/command.js +177 -0
  6. package/cli/agent/command.js.map +1 -0
  7. package/cli/agent/config.d.ts +31 -0
  8. package/cli/agent/config.js +98 -0
  9. package/cli/agent/config.js.map +1 -0
  10. package/cli/agent/contracts.d.ts +77 -0
  11. package/cli/agent/contracts.js +2 -0
  12. package/cli/agent/contracts.js.map +1 -0
  13. package/cli/agent/files.d.ts +19 -0
  14. package/cli/agent/files.js +109 -0
  15. package/cli/agent/files.js.map +1 -0
  16. package/cli/agent/gitSource.d.ts +18 -0
  17. package/cli/agent/gitSource.js +69 -0
  18. package/cli/agent/gitSource.js.map +1 -0
  19. package/cli/agent/github.d.ts +21 -0
  20. package/cli/agent/github.js +94 -0
  21. package/cli/agent/github.js.map +1 -0
  22. package/cli/agent/mcp.d.ts +15 -0
  23. package/cli/agent/mcp.js +78 -0
  24. package/cli/agent/mcp.js.map +1 -0
  25. package/cli/agent/process.d.ts +18 -0
  26. package/cli/agent/process.js +118 -0
  27. package/cli/agent/process.js.map +1 -0
  28. package/cli/agent/protocol.d.ts +3 -0
  29. package/cli/agent/protocol.js +26 -0
  30. package/cli/agent/protocol.js.map +1 -0
  31. package/cli/agent/runner.d.ts +34 -0
  32. package/cli/agent/runner.js +152 -0
  33. package/cli/agent/runner.js.map +1 -0
  34. package/cli/agent/stdio.d.ts +1 -0
  35. package/cli/agent/stdio.js +62 -0
  36. package/cli/agent/stdio.js.map +1 -0
  37. package/cli/agent/tools.d.ts +7 -0
  38. package/cli/agent/tools.js +201 -0
  39. package/cli/agent/tools.js.map +1 -0
  40. package/cli/chat/app.d.ts +16 -0
  41. package/cli/chat/app.js +345 -0
  42. package/cli/chat/app.js.map +1 -0
  43. package/cli/chat/commands.d.ts +11 -0
  44. package/cli/chat/commands.js +120 -0
  45. package/cli/chat/commands.js.map +1 -0
  46. package/cli/chat/composer.d.ts +75 -0
  47. package/cli/chat/composer.js +467 -0
  48. package/cli/chat/composer.js.map +1 -0
  49. package/cli/chat/controller.d.ts +60 -0
  50. package/cli/chat/controller.js +393 -0
  51. package/cli/chat/controller.js.map +1 -0
  52. package/cli/chat/logo.d.ts +3 -0
  53. package/cli/chat/logo.js +14 -0
  54. package/cli/chat/logo.js.map +1 -0
  55. package/cli/chat/models.d.ts +18 -0
  56. package/cli/chat/models.js +88 -0
  57. package/cli/chat/models.js.map +1 -0
  58. package/cli/chat/profile.d.ts +5 -0
  59. package/cli/chat/profile.js +98 -0
  60. package/cli/chat/profile.js.map +1 -0
  61. package/cli/chat/render.d.ts +40 -0
  62. package/cli/chat/render.js +259 -0
  63. package/cli/chat/render.js.map +1 -0
  64. package/cli/chat/screen.d.ts +26 -0
  65. package/cli/chat/screen.js +117 -0
  66. package/cli/chat/screen.js.map +1 -0
  67. package/cli/chat/source.d.ts +29 -0
  68. package/cli/chat/source.js +116 -0
  69. package/cli/chat/source.js.map +1 -0
  70. package/cli/chat/store.d.ts +43 -0
  71. package/cli/chat/store.js +94 -0
  72. package/cli/chat/store.js.map +1 -0
  73. package/cli/chat/text.d.ts +4 -0
  74. package/cli/chat/text.js +27 -0
  75. package/cli/chat/text.js.map +1 -0
  76. package/cli/commands.d.ts +26 -0
  77. package/cli/commands.js +836 -811
  78. package/cli/commands.js.map +1 -0
  79. package/cli/explorer/advanced.d.ts +14 -0
  80. package/cli/explorer/advanced.js +321 -329
  81. package/cli/explorer/advanced.js.map +1 -0
  82. package/cli/explorer/app.d.ts +2 -0
  83. package/cli/explorer/app.js +404 -314
  84. package/cli/explorer/app.js.map +1 -0
  85. package/cli/explorer/assistant.d.ts +9 -0
  86. package/cli/explorer/assistant.js +58 -0
  87. package/cli/explorer/assistant.js.map +1 -0
  88. package/cli/explorer/commands.d.ts +17 -0
  89. package/cli/explorer/commands.js +373 -302
  90. package/cli/explorer/commands.js.map +1 -0
  91. package/cli/explorer/featureViews.d.ts +124 -0
  92. package/cli/explorer/featureViews.js +179 -0
  93. package/cli/explorer/featureViews.js.map +1 -0
  94. package/cli/explorer/github.d.ts +21 -0
  95. package/cli/explorer/github.js +42 -44
  96. package/cli/explorer/github.js.map +1 -0
  97. package/cli/explorer/graphs.d.ts +7 -0
  98. package/cli/explorer/graphs.js +90 -95
  99. package/cli/explorer/graphs.js.map +1 -0
  100. package/cli/explorer/picker.d.ts +22 -0
  101. package/cli/explorer/picker.js +150 -0
  102. package/cli/explorer/picker.js.map +1 -0
  103. package/cli/explorer/report.d.ts +85 -0
  104. package/cli/explorer/report.js +60 -0
  105. package/cli/explorer/report.js.map +1 -0
  106. package/cli/explorer/session.d.ts +449 -0
  107. package/cli/explorer/session.js +143 -144
  108. package/cli/explorer/session.js.map +1 -0
  109. package/cli/explorer/views.d.ts +19 -0
  110. package/cli/explorer/views.js +465 -482
  111. package/cli/explorer/views.js.map +1 -0
  112. package/cli/explorer/wrap.d.ts +1 -0
  113. package/cli/explorer/wrap.js +28 -44
  114. package/cli/explorer/wrap.js.map +1 -0
  115. package/cli/main.d.ts +1 -0
  116. package/cli/main.js +251 -164
  117. package/cli/main.js.map +1 -0
  118. package/cli/prompt.d.ts +5 -0
  119. package/cli/prompt.js +84 -80
  120. package/cli/prompt.js.map +1 -0
  121. package/cli/scanOptions.d.ts +2 -0
  122. package/cli/scanOptions.js +11 -0
  123. package/cli/scanOptions.js.map +1 -0
  124. package/cli/ui.d.ts +33 -0
  125. package/cli/ui.js +35 -44
  126. package/cli/ui.js.map +1 -0
  127. package/cli/wizard.d.ts +187 -0
  128. package/cli/wizard.js +304 -284
  129. package/cli/wizard.js.map +1 -0
  130. package/docs/HERMES_RESEARCH.md +51 -0
  131. package/package.json +16 -4
  132. package/public/app.d.ts +1 -0
  133. package/public/app.js +1133 -1011
  134. package/public/app.js.map +1 -0
  135. package/public/assets/onboarder-mark.svg +11 -0
  136. package/public/browser.d.ts +71 -0
  137. package/public/browser.js +2 -0
  138. package/public/browser.js.map +1 -0
  139. package/public/index.html +54 -20
  140. package/public/js/about.d.ts +6 -0
  141. package/public/js/about.js +152 -172
  142. package/public/js/about.js.map +1 -0
  143. package/public/js/aiDraft.d.ts +4 -0
  144. package/public/js/aiDraft.js +166 -125
  145. package/public/js/aiDraft.js.map +1 -0
  146. package/public/js/analysisPanel.d.ts +7 -0
  147. package/public/js/analysisPanel.js +166 -166
  148. package/public/js/analysisPanel.js.map +1 -0
  149. package/public/js/analysisReport.d.ts +38 -0
  150. package/public/js/analysisReport.js +105 -110
  151. package/public/js/analysisReport.js.map +1 -0
  152. package/public/js/api.d.ts +29 -0
  153. package/public/js/api.js +198 -166
  154. package/public/js/api.js.map +1 -0
  155. package/public/js/atlas.d.ts +6 -0
  156. package/public/js/atlas.js +50 -58
  157. package/public/js/atlas.js.map +1 -0
  158. package/public/js/blameView.d.ts +2 -0
  159. package/public/js/blameView.js +36 -37
  160. package/public/js/blameView.js.map +1 -0
  161. package/public/js/codeTab.d.ts +3 -0
  162. package/public/js/codeTab.js +175 -180
  163. package/public/js/codeTab.js.map +1 -0
  164. package/public/js/codeViewer.d.ts +5 -0
  165. package/public/js/codeViewer.js +162 -150
  166. package/public/js/codeViewer.js.map +1 -0
  167. package/public/js/components/FileChip.d.ts +9 -0
  168. package/public/js/components/FileChip.js +45 -49
  169. package/public/js/components/FileChip.js.map +1 -0
  170. package/public/js/components/MetricSparkline.d.ts +7 -0
  171. package/public/js/components/MetricSparkline.js +35 -44
  172. package/public/js/components/MetricSparkline.js.map +1 -0
  173. package/public/js/components/RiskBadge.d.ts +9 -0
  174. package/public/js/components/RiskBadge.js +55 -63
  175. package/public/js/components/RiskBadge.js.map +1 -0
  176. package/public/js/deepAnalysisView.d.ts +99 -0
  177. package/public/js/deepAnalysisView.js +282 -302
  178. package/public/js/deepAnalysisView.js.map +1 -0
  179. package/public/js/diagramPane.d.ts +9 -0
  180. package/public/js/diagramPane.js +138 -135
  181. package/public/js/diagramPane.js.map +1 -0
  182. package/public/js/diffView.d.ts +6 -0
  183. package/public/js/diffView.js +222 -209
  184. package/public/js/diffView.js.map +1 -0
  185. package/public/js/docsView.d.ts +2 -0
  186. package/public/js/docsView.js +441 -442
  187. package/public/js/docsView.js.map +1 -0
  188. package/public/js/dom.d.ts +197 -0
  189. package/public/js/dom.js +5 -0
  190. package/public/js/dom.js.map +1 -0
  191. package/public/js/fileSourceBrowser.d.ts +5 -0
  192. package/public/js/fileSourceBrowser.js +33 -41
  193. package/public/js/fileSourceBrowser.js.map +1 -0
  194. package/public/js/flameGraph.d.ts +5 -0
  195. package/public/js/flameGraph.js +62 -72
  196. package/public/js/flameGraph.js.map +1 -0
  197. package/public/js/forceGraph.d.ts +10 -0
  198. package/public/js/forceGraph.js +581 -556
  199. package/public/js/forceGraph.js.map +1 -0
  200. package/public/js/heatmap.d.ts +4 -0
  201. package/public/js/heatmap.js +142 -164
  202. package/public/js/heatmap.js.map +1 -0
  203. package/public/js/highlight.d.ts +2 -0
  204. package/public/js/highlight.js +116 -107
  205. package/public/js/highlight.js.map +1 -0
  206. package/public/js/html.d.ts +2 -0
  207. package/public/js/html.js +14 -44
  208. package/public/js/html.js.map +1 -0
  209. package/public/js/insightsView.d.ts +5 -0
  210. package/public/js/insightsView.js +93 -111
  211. package/public/js/insightsView.js.map +1 -0
  212. package/public/js/inspector.d.ts +37 -0
  213. package/public/js/inspector.js +416 -445
  214. package/public/js/inspector.js.map +1 -0
  215. package/public/js/llm.d.ts +115 -0
  216. package/public/js/llm.js +246 -278
  217. package/public/js/llm.js.map +1 -0
  218. package/public/js/mapView.d.ts +3 -0
  219. package/public/js/mapView.js +121 -120
  220. package/public/js/mapView.js.map +1 -0
  221. package/public/js/markdown.d.ts +3 -0
  222. package/public/js/markdown.js +84 -91
  223. package/public/js/markdown.js.map +1 -0
  224. package/public/js/mindmap.d.ts +32 -0
  225. package/public/js/mindmap.js +244 -259
  226. package/public/js/mindmap.js.map +1 -0
  227. package/public/js/mobilePanels.d.ts +5 -0
  228. package/public/js/mobilePanels.js +50 -0
  229. package/public/js/mobilePanels.js.map +1 -0
  230. package/public/js/repoFiles.d.ts +12 -0
  231. package/public/js/repoFiles.js +29 -28
  232. package/public/js/repoFiles.js.map +1 -0
  233. package/public/js/reviewView.d.ts +28 -0
  234. package/public/js/reviewView.js +256 -0
  235. package/public/js/reviewView.js.map +1 -0
  236. package/public/js/sbomView.d.ts +3 -0
  237. package/public/js/sbomView.js +59 -67
  238. package/public/js/sbomView.js.map +1 -0
  239. package/public/js/scanCache.d.ts +16 -0
  240. package/public/js/scanCache.js +67 -65
  241. package/public/js/scanCache.js.map +1 -0
  242. package/public/js/search.d.ts +7 -0
  243. package/public/js/search.js +868 -800
  244. package/public/js/search.js.map +1 -0
  245. package/public/js/searchLocal.d.ts +42 -0
  246. package/public/js/searchLocal.js +87 -0
  247. package/public/js/searchLocal.js.map +1 -0
  248. package/public/js/serverSettings.d.ts +5 -0
  249. package/public/js/serverSettings.js +153 -164
  250. package/public/js/serverSettings.js.map +1 -0
  251. package/public/js/state.d.ts +798 -0
  252. package/public/js/state.js +114 -122
  253. package/public/js/state.js.map +1 -0
  254. package/public/js/tour.d.ts +6 -0
  255. package/public/js/tour.js +5 -7
  256. package/public/js/tour.js.map +1 -0
  257. package/public/js/transitions.d.ts +2 -0
  258. package/public/js/transitions.js +9 -10
  259. package/public/js/transitions.js.map +1 -0
  260. package/public/js/tree.d.ts +12 -0
  261. package/public/js/tree.js +157 -154
  262. package/public/js/tree.js.map +1 -0
  263. package/public/js/workflowsView.d.ts +3 -0
  264. package/public/js/workflowsView.js +15 -22
  265. package/public/js/workflowsView.js.map +1 -0
  266. package/public/search.css +495 -0
  267. package/public/styles.css +188 -346
  268. package/public/workbench.css +166 -0
  269. package/server/apiAuth.d.ts +3 -0
  270. package/server/apiAuth.js +18 -20
  271. package/server/apiAuth.js.map +1 -0
  272. package/server/apiDiff.d.ts +2 -0
  273. package/server/apiDiff.js +20 -18
  274. package/server/apiDiff.js.map +1 -0
  275. package/server/apiDocs.d.ts +2 -0
  276. package/server/apiDocs.js +38 -40
  277. package/server/apiDocs.js.map +1 -0
  278. package/server/apiFile.d.ts +1 -0
  279. package/server/apiFile.js +14 -17
  280. package/server/apiFile.js.map +1 -0
  281. package/server/apiGitBlame.d.ts +2 -0
  282. package/server/apiGitBlame.js +50 -51
  283. package/server/apiGitBlame.js.map +1 -0
  284. package/server/apiMcp.d.ts +4 -0
  285. package/server/apiMcp.js +64 -66
  286. package/server/apiMcp.js.map +1 -0
  287. package/server/apiReview.d.ts +2 -0
  288. package/server/apiReview.js +45 -0
  289. package/server/apiReview.js.map +1 -0
  290. package/server/apiScan.d.ts +5 -0
  291. package/server/apiScan.js +90 -71
  292. package/server/apiScan.js.map +1 -0
  293. package/server/apiSearch.d.ts +33 -0
  294. package/server/apiSearch.js +184 -200
  295. package/server/apiSearch.js.map +1 -0
  296. package/server/apiSettings.d.ts +4 -0
  297. package/server/apiSettings.js +84 -85
  298. package/server/apiSettings.js.map +1 -0
  299. package/server/apiTools.d.ts +3 -0
  300. package/server/apiTools.js +55 -56
  301. package/server/apiTools.js.map +1 -0
  302. package/server/auth.d.ts +5 -0
  303. package/server/auth.js +54 -51
  304. package/server/auth.js.map +1 -0
  305. package/server/config.d.ts +42 -0
  306. package/server/config.js +189 -194
  307. package/server/config.js.map +1 -0
  308. package/server/daemon.d.ts +12 -0
  309. package/server/daemon.js +124 -114
  310. package/server/daemon.js.map +1 -0
  311. package/server/fileSourceNode.d.ts +2 -0
  312. package/server/fileSourceNode.js +34 -36
  313. package/server/fileSourceNode.js.map +1 -0
  314. package/server/gitClone.d.ts +9 -0
  315. package/server/gitClone.js +59 -61
  316. package/server/gitClone.js.map +1 -0
  317. package/server/gitDiff.d.ts +36 -0
  318. package/server/gitDiff.js +271 -169
  319. package/server/gitDiff.js.map +1 -0
  320. package/server/gitHistory.d.ts +12 -0
  321. package/server/gitHistory.js +80 -80
  322. package/server/gitHistory.js.map +1 -0
  323. package/server/gitRemote.d.ts +12 -0
  324. package/server/gitRemote.js +37 -38
  325. package/server/gitRemote.js.map +1 -0
  326. package/server/hermesChat.d.ts +13 -0
  327. package/server/hermesChat.js +145 -0
  328. package/server/hermesChat.js.map +1 -0
  329. package/server/htmlText.d.ts +4 -0
  330. package/server/htmlText.js +16 -23
  331. package/server/htmlText.js.map +1 -0
  332. package/server/http.d.ts +6 -0
  333. package/server/http.js +27 -34
  334. package/server/http.js.map +1 -0
  335. package/server/httpGuards.d.ts +2 -0
  336. package/server/httpGuards.js +47 -43
  337. package/server/httpGuards.js.map +1 -0
  338. package/server/https.d.ts +34 -0
  339. package/server/https.js +121 -111
  340. package/server/https.js.map +1 -0
  341. package/server/index.d.ts +40 -0
  342. package/server/index.js +139 -147
  343. package/server/index.js.map +1 -0
  344. package/server/layout.d.ts +26 -0
  345. package/server/layout.js +59 -64
  346. package/server/layout.js.map +1 -0
  347. package/server/llmProxy.d.ts +3 -0
  348. package/server/llmProxy.js +137 -135
  349. package/server/llmProxy.js.map +1 -0
  350. package/server/logger.d.ts +38 -0
  351. package/server/logger.js +198 -211
  352. package/server/logger.js.map +1 -0
  353. package/server/mcp/analysis.d.ts +29 -0
  354. package/server/mcp/analysis.js +99 -120
  355. package/server/mcp/analysis.js.map +1 -0
  356. package/server/mcp/http.d.ts +9 -0
  357. package/server/mcp/http.js +128 -137
  358. package/server/mcp/http.js.map +1 -0
  359. package/server/mcp/runner.d.ts +68 -0
  360. package/server/mcp/runner.js +208 -218
  361. package/server/mcp/runner.js.map +1 -0
  362. package/server/mcp/server.d.ts +29 -0
  363. package/server/mcp/server.js +167 -180
  364. package/server/mcp/server.js.map +1 -0
  365. package/server/mcp/standalone.d.ts +1 -0
  366. package/server/mcp/standalone.js +8 -10
  367. package/server/mcp/standalone.js.map +1 -0
  368. package/server/mcp/tools.d.ts +2020 -0
  369. package/server/mcp/tools.js +523 -574
  370. package/server/mcp/tools.js.map +1 -0
  371. package/server/paths.d.ts +3 -0
  372. package/server/paths.js +17 -15
  373. package/server/paths.js.map +1 -0
  374. package/server/pidfile.d.ts +9 -0
  375. package/server/pidfile.js +43 -45
  376. package/server/pidfile.js.map +1 -0
  377. package/server/review.d.ts +5 -0
  378. package/server/review.js +35 -0
  379. package/server/review.js.map +1 -0
  380. package/server/router.d.ts +33 -0
  381. package/server/router.js +195 -197
  382. package/server/router.js.map +1 -0
  383. package/server/scanRequest.d.ts +3 -0
  384. package/server/scanRequest.js +36 -0
  385. package/server/scanRequest.js.map +1 -0
  386. package/server/searchIndex.d.ts +17 -0
  387. package/server/searchIndex.js +83 -80
  388. package/server/searchIndex.js.map +1 -0
  389. package/server/sessions.d.ts +14 -0
  390. package/server/sessions.js +62 -70
  391. package/server/sessions.js.map +1 -0
  392. package/server/startup.d.ts +118 -0
  393. package/server/startup.js +143 -148
  394. package/server/startup.js.map +1 -0
  395. package/server/static.d.ts +6 -0
  396. package/server/static.js +28 -31
  397. package/server/static.js.map +1 -0
  398. package/server/tools/install.d.ts +4 -0
  399. package/server/tools/install.js +176 -185
  400. package/server/tools/install.js.map +1 -0
  401. package/server/tools/parse.d.ts +8 -0
  402. package/server/tools/parse.js +112 -114
  403. package/server/tools/parse.js.map +1 -0
  404. package/server/tools/platform.d.ts +9 -0
  405. package/server/tools/platform.js +49 -47
  406. package/server/tools/platform.js.map +1 -0
  407. package/server/tools/registry.d.ts +137 -0
  408. package/server/tools/registry.js +173 -172
  409. package/server/tools/registry.js.map +1 -0
  410. package/server/tools/scan.d.ts +34 -0
  411. package/server/tools/scan.js +89 -98
  412. package/server/tools/scan.js.map +1 -0
  413. package/server/tools.d.ts +34 -0
  414. package/server/tools.js +94 -107
  415. package/server/tools.js.map +1 -0
  416. package/server/tunnel.d.ts +29 -0
  417. package/server/tunnel.js +61 -66
  418. package/server/tunnel.js.map +1 -0
  419. package/shared/analyzer/docs.d.ts +16 -0
  420. package/shared/analyzer/docs.js +99 -93
  421. package/shared/analyzer/docs.js.map +1 -0
  422. package/shared/analyzer/explainLocal.d.ts +4 -0
  423. package/shared/analyzer/explainLocal.js +122 -142
  424. package/shared/analyzer/explainLocal.js.map +1 -0
  425. package/shared/analyzer/github.d.ts +37 -0
  426. package/shared/analyzer/github.js +41 -43
  427. package/shared/analyzer/github.js.map +1 -0
  428. package/shared/analyzer/graph.d.ts +41 -0
  429. package/shared/analyzer/graph.js +393 -400
  430. package/shared/analyzer/graph.js.map +1 -0
  431. package/shared/analyzer/health.d.ts +33 -0
  432. package/shared/analyzer/health.js +197 -193
  433. package/shared/analyzer/health.js.map +1 -0
  434. package/shared/analyzer/history.d.ts +29 -0
  435. package/shared/analyzer/history.js +110 -111
  436. package/shared/analyzer/history.js.map +1 -0
  437. package/shared/analyzer/jsonConfig.d.ts +2 -0
  438. package/shared/analyzer/jsonConfig.js +61 -0
  439. package/shared/analyzer/jsonConfig.js.map +1 -0
  440. package/shared/analyzer/languages/csharp.d.ts +26 -0
  441. package/shared/analyzer/languages/csharp.js +83 -88
  442. package/shared/analyzer/languages/csharp.js.map +1 -0
  443. package/shared/analyzer/languages/generic.d.ts +23 -0
  444. package/shared/analyzer/languages/generic.js +94 -105
  445. package/shared/analyzer/languages/generic.js.map +1 -0
  446. package/shared/analyzer/languages/go.d.ts +24 -0
  447. package/shared/analyzer/languages/go.js +45 -54
  448. package/shared/analyzer/languages/go.js.map +1 -0
  449. package/shared/analyzer/languages/index.d.ts +6 -0
  450. package/shared/analyzer/languages/index.js +19 -20
  451. package/shared/analyzer/languages/index.js.map +1 -0
  452. package/shared/analyzer/languages/java.d.ts +20 -0
  453. package/shared/analyzer/languages/java.js +73 -78
  454. package/shared/analyzer/languages/java.js.map +1 -0
  455. package/shared/analyzer/languages/javascript.d.ts +12 -0
  456. package/shared/analyzer/languages/javascript.js +258 -209
  457. package/shared/analyzer/languages/javascript.js.map +1 -0
  458. package/shared/analyzer/languages/python.d.ts +23 -0
  459. package/shared/analyzer/languages/python.js +92 -100
  460. package/shared/analyzer/languages/python.js.map +1 -0
  461. package/shared/analyzer/languages/rust.d.ts +17 -0
  462. package/shared/analyzer/languages/rust.js +96 -98
  463. package/shared/analyzer/languages/rust.js.map +1 -0
  464. package/shared/analyzer/languages/typescript.d.ts +11 -0
  465. package/shared/analyzer/languages/typescript.js +117 -116
  466. package/shared/analyzer/languages/typescript.js.map +1 -0
  467. package/shared/analyzer/licenses.d.ts +18 -0
  468. package/shared/analyzer/licenses.js +130 -133
  469. package/shared/analyzer/licenses.js.map +1 -0
  470. package/shared/analyzer/metrics.d.ts +20 -0
  471. package/shared/analyzer/metrics.js +112 -104
  472. package/shared/analyzer/metrics.js.map +1 -0
  473. package/shared/analyzer/pathUtil.d.ts +10 -0
  474. package/shared/analyzer/pathUtil.js +29 -35
  475. package/shared/analyzer/pathUtil.js.map +1 -0
  476. package/shared/analyzer/patterns.d.ts +11 -0
  477. package/shared/analyzer/patterns.js +231 -253
  478. package/shared/analyzer/patterns.js.map +1 -0
  479. package/shared/analyzer/scan.d.ts +62 -0
  480. package/shared/analyzer/scan.js +451 -442
  481. package/shared/analyzer/scan.js.map +1 -0
  482. package/shared/analyzer/scanControl.d.ts +11 -0
  483. package/shared/analyzer/scanControl.js +62 -0
  484. package/shared/analyzer/scanControl.js.map +1 -0
  485. package/shared/analyzer/security.d.ts +18 -0
  486. package/shared/analyzer/security.js +159 -159
  487. package/shared/analyzer/security.js.map +1 -0
  488. package/shared/analyzer/services.d.ts +5 -0
  489. package/shared/analyzer/services.js +141 -138
  490. package/shared/analyzer/services.js.map +1 -0
  491. package/shared/analyzer/stack.d.ts +6 -0
  492. package/shared/analyzer/stack.js +134 -141
  493. package/shared/analyzer/stack.js.map +1 -0
  494. package/shared/analyzer/tour.d.ts +2 -0
  495. package/shared/analyzer/tour.js +45 -53
  496. package/shared/analyzer/tour.js.map +1 -0
  497. package/shared/analyzer/util.d.ts +8 -0
  498. package/shared/analyzer/util.js +130 -76
  499. package/shared/analyzer/util.js.map +1 -0
  500. package/shared/analyzer/workflows.d.ts +8 -0
  501. package/shared/analyzer/workflows.js +139 -134
  502. package/shared/analyzer/workflows.js.map +1 -0
  503. package/shared/contracts.d.ts +250 -0
  504. package/shared/contracts.js +2 -0
  505. package/shared/contracts.js.map +1 -0
  506. package/shared/diagram/aiFacts.d.ts +35 -0
  507. package/shared/diagram/aiFacts.js +102 -105
  508. package/shared/diagram/aiFacts.js.map +1 -0
  509. package/shared/diagram/aiMermaid.d.ts +5 -0
  510. package/shared/diagram/aiMermaid.js +50 -46
  511. package/shared/diagram/aiMermaid.js.map +1 -0
  512. package/shared/diagram/atlas.d.ts +16 -0
  513. package/shared/diagram/atlas.js +51 -60
  514. package/shared/diagram/atlas.js.map +1 -0
  515. package/shared/diagram/mermaid.d.ts +43 -0
  516. package/shared/diagram/mermaid.js +348 -370
  517. package/shared/diagram/mermaid.js.map +1 -0
  518. package/shared/review/contracts.d.ts +95 -0
  519. package/shared/review/contracts.js +2 -0
  520. package/shared/review/contracts.js.map +1 -0
  521. package/shared/review/review.d.ts +10 -0
  522. package/shared/review/review.js +184 -0
  523. package/shared/review/review.js.map +1 -0
  524. package/shared/search/query.d.ts +32 -0
  525. package/shared/search/query.js +395 -388
  526. package/shared/search/query.js.map +1 -0
@@ -0,0 +1,23 @@
1
+ export declare const extensions: string[];
2
+ export declare function analyze(source: any, path: any): {
3
+ imports: any[];
4
+ exports: any[];
5
+ functions: any[];
6
+ classes: any[];
7
+ calls: any[];
8
+ hasMain: boolean;
9
+ };
10
+ export declare function packageNameOf(spec: any): any;
11
+ export declare function resolveImport(spec: any, fromPath: any, has: any, context?: Record<string, any>, meta?: Record<string, any>): {
12
+ unresolved?: undefined;
13
+ external: any;
14
+ path?: undefined;
15
+ } | {
16
+ unresolved?: undefined;
17
+ external?: undefined;
18
+ path: any;
19
+ } | {
20
+ external?: undefined;
21
+ path?: undefined;
22
+ unresolved: any;
23
+ };
@@ -9,123 +9,112 @@
9
9
  // include/import/require/use lines plus the obvious function and class
10
10
  // shapes. It is enough to place these files on the map; treating it as more
11
11
  // than that would be lying.
12
-
13
12
  import { blankComments, lineCounter, uniqueBy } from '../util.js';
14
13
  import { dirOf, joinPath, baseName } from '../pathUtil.js';
15
-
16
14
  export const extensions = ['.c', '.h', '.cc', '.cpp', '.hpp', '.rb', '.php'];
17
-
18
15
  const BY_EXT = {
19
- c: 'c', h: 'c', cc: 'c', cpp: 'c', hpp: 'c',
20
- rb: 'ruby', php: 'php',
16
+ c: 'c', h: 'c', cc: 'c', cpp: 'c', hpp: 'c',
17
+ rb: 'ruby', php: 'php',
21
18
  };
22
-
23
19
  const CONTROL = new Set(['if', 'for', 'while', 'switch', 'catch', 'return', 'sizeof', 'do', 'else']);
24
-
25
20
  export function analyze(source, path) {
26
- const family = BY_EXT[path.slice(path.lastIndexOf('.') + 1)] || 'c';
27
- const clean = blankComments(source, { lineChar: family === 'ruby' ? '#' : '//' });
28
- const lineAt = lineCounter(clean);
29
-
30
- const imports = [];
31
- const functions = [];
32
- const classes = [];
33
-
34
- if (family === 'c') {
35
- for (const m of clean.matchAll(/^[ \t]*#[ \t]*include[ \t]*"([^"]+)"/gm)) {
36
- imports.push({ spec: m[1], local: true, line: lineAt(m.index) });
21
+ const family = BY_EXT[path.slice(path.lastIndexOf('.') + 1)] || 'c';
22
+ const clean = blankComments(source, { lineChar: family === 'ruby' ? '#' : '//' });
23
+ const lineAt = lineCounter(clean);
24
+ const imports = [];
25
+ const functions = [];
26
+ const classes = [];
27
+ if (family === 'c') {
28
+ for (const m of clean.matchAll(/^[ \t]*#[ \t]*include[ \t]*"([^"]+)"/gm)) {
29
+ imports.push({ spec: m[1], local: true, line: lineAt(m.index) });
30
+ }
31
+ for (const m of clean.matchAll(/^[ \t]*#[ \t]*include[ \t]*<([^>]+)>/gm)) {
32
+ imports.push({ spec: m[1], local: false, line: lineAt(m.index) });
33
+ }
34
+ for (const m of clean.matchAll(/^[A-Za-z_][\w\s\*]*?\s+([\w]+)\s*\([^;{}]*\)\s*\{/gm)) {
35
+ if (!CONTROL.has(m[1]))
36
+ functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });
37
+ }
37
38
  }
38
- for (const m of clean.matchAll(/^[ \t]*#[ \t]*include[ \t]*<([^>]+)>/gm)) {
39
- imports.push({ spec: m[1], local: false, line: lineAt(m.index) });
39
+ if (family === 'ruby') {
40
+ for (const m of clean.matchAll(/^[ \t]*require_relative\s+['"]([^'"]+)['"]/gm)) {
41
+ imports.push({ spec: m[1], kind: 'require_relative', line: lineAt(m.index) });
42
+ }
43
+ for (const m of clean.matchAll(/^[ \t]*require\s+['"]([^'"]+)['"]/gm)) {
44
+ imports.push({ spec: m[1], kind: 'require', line: lineAt(m.index) });
45
+ }
46
+ for (const m of clean.matchAll(/^[ \t]*def\s+([\w!?]+)/gm)) {
47
+ functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });
48
+ }
49
+ for (const m of clean.matchAll(/^[ \t]*(?:class|module)\s+([\w:]+)/gm)) {
50
+ classes.push({ name: m[1], line: lineAt(m.index) });
51
+ }
40
52
  }
41
- for (const m of clean.matchAll(/^[A-Za-z_][\w\s\*]*?\s+([\w]+)\s*\([^;{}]*\)\s*\{/gm)) {
42
- if (!CONTROL.has(m[1])) functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });
53
+ if (family === 'php') {
54
+ for (const m of clean.matchAll(/\b(?:require|include)(?:_once)?\s*\(?\s*['"]([^'"]+)['"]/g)) {
55
+ imports.push({ spec: m[1], kind: 'require', line: lineAt(m.index) });
56
+ }
57
+ for (const m of clean.matchAll(/^[ \t]*use\s+([\w\\]+)\s*;/gm)) {
58
+ imports.push({ spec: m[1], kind: 'use', line: lineAt(m.index) });
59
+ }
60
+ for (const m of clean.matchAll(/\bfunction\s+([\w]+)\s*\(/g)) {
61
+ functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });
62
+ }
63
+ for (const m of clean.matchAll(/\bclass\s+([\w]+)/g)) {
64
+ classes.push({ name: m[1], line: lineAt(m.index) });
65
+ }
43
66
  }
44
- }
45
-
46
- if (family === 'ruby') {
47
- for (const m of clean.matchAll(/^[ \t]*require_relative\s+['"]([^'"]+)['"]/gm)) {
48
- imports.push({ spec: m[1], kind: 'require_relative', line: lineAt(m.index) });
49
- }
50
- for (const m of clean.matchAll(/^[ \t]*require\s+['"]([^'"]+)['"]/gm)) {
51
- imports.push({ spec: m[1], kind: 'require', line: lineAt(m.index) });
52
- }
53
- for (const m of clean.matchAll(/^[ \t]*def\s+([\w!?]+)/gm)) {
54
- functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });
55
- }
56
- for (const m of clean.matchAll(/^[ \t]*(?:class|module)\s+([\w:]+)/gm)) {
57
- classes.push({ name: m[1], line: lineAt(m.index) });
58
- }
59
- }
60
-
61
- if (family === 'php') {
62
- for (const m of clean.matchAll(/\b(?:require|include)(?:_once)?\s*\(?\s*['"]([^'"]+)['"]/g)) {
63
- imports.push({ spec: m[1], kind: 'require', line: lineAt(m.index) });
64
- }
65
- for (const m of clean.matchAll(/^[ \t]*use\s+([\w\\]+)\s*;/gm)) {
66
- imports.push({ spec: m[1], kind: 'use', line: lineAt(m.index) });
67
- }
68
- for (const m of clean.matchAll(/\bfunction\s+([\w]+)\s*\(/g)) {
69
- functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });
70
- }
71
- for (const m of clean.matchAll(/\bclass\s+([\w]+)/g)) {
72
- classes.push({ name: m[1], line: lineAt(m.index) });
73
- }
74
- }
75
-
76
- return {
77
- imports: uniqueBy(imports, (i) => i.spec + ':' + (i.kind || '')),
78
- exports: [],
79
- functions,
80
- classes,
81
- calls: [],
82
- hasMain: family === 'c' && /\bint\s+main\s*\(/.test(clean),
83
- };
67
+ return {
68
+ imports: uniqueBy(imports, (i) => i.spec + ':' + (i.kind || '')),
69
+ exports: [],
70
+ functions,
71
+ classes,
72
+ calls: [],
73
+ hasMain: family === 'c' && /\bint\s+main\s*\(/.test(clean),
74
+ };
84
75
  }
85
-
86
76
  export function packageNameOf(spec) {
87
- if (spec.endsWith('.h') || spec.endsWith('.hpp')) return spec;
88
- return spec.split(/[.:/\\]/)[0] || spec;
77
+ if (spec.endsWith('.h') || spec.endsWith('.hpp'))
78
+ return spec;
79
+ return spec.split(/[.:/\\]/)[0] || spec;
89
80
  }
90
-
91
81
  export function resolveImport(spec, fromPath, has, context = {}, meta = {}) {
92
- const fromDir = dirOf(fromPath);
93
- const { findByName = () => null } = context;
94
-
95
- // C angle-bracket includes like <stdio.h> are explicitly external
96
- if (meta.local === false && meta.kind !== 'mod' && meta.kind !== 'use' && meta.kind !== 'import') {
97
- return { external: packageNameOf(spec) };
98
- }
99
-
100
- const cleaned = spec.replace(/::/g, '/').replace(/\\/g, '/').replace(/\./g, '/');
101
- const lastDot = spec.lastIndexOf('.');
102
- const lastSlash = Math.max(spec.lastIndexOf('/'), spec.lastIndexOf('\\'));
103
- const lastColon = spec.lastIndexOf('::');
104
- const lastSep = Math.max(lastDot, lastSlash, lastColon >= 0 ? lastColon + 1 : -1);
105
- const lastSegment = lastSep >= 0 ? spec.slice(lastSep + 1) : spec;
106
-
107
- // Only the extensions this module owns. Java/Rust have their own resolvers.
108
- const candidates = [
109
- joinPath(fromDir, spec),
110
- joinPath(fromDir, spec) + '.rb',
111
- joinPath(fromDir, cleaned) + '.rb',
112
- joinPath(fromDir, cleaned) + '.php',
113
- joinPath(fromDir, spec) + '.php',
114
- ];
115
- for (const cand of candidates) {
116
- if (cand && has(cand)) return { path: cand };
117
- }
118
-
119
- // Last resort for quoted includes: match on the file name anywhere.
120
- if (lastSegment && lastSegment !== '*') {
121
- const hitPhp = findByName(lastSegment + '.php');
122
- if (hitPhp) return { path: hitPhp };
123
- }
124
- const hit = findByName(baseName(spec));
125
- if (hit) return { path: hit };
126
-
127
- if (meta.kind === 'use' || meta.kind === 'import' || meta.kind === 'require' || meta.local === false) {
128
- return { external: packageNameOf(spec) };
129
- }
130
- return { unresolved: spec };
82
+ const fromDir = dirOf(fromPath);
83
+ const { findByName = () => null } = context;
84
+ // C angle-bracket includes like <stdio.h> are explicitly external
85
+ if (meta.local === false && meta.kind !== 'mod' && meta.kind !== 'use' && meta.kind !== 'import') {
86
+ return { external: packageNameOf(spec) };
87
+ }
88
+ const cleaned = spec.replace(/::/g, '/').replace(/\\/g, '/').replace(/\./g, '/');
89
+ const lastDot = spec.lastIndexOf('.');
90
+ const lastSlash = Math.max(spec.lastIndexOf('/'), spec.lastIndexOf('\\'));
91
+ const lastColon = spec.lastIndexOf('::');
92
+ const lastSep = Math.max(lastDot, lastSlash, lastColon >= 0 ? lastColon + 1 : -1);
93
+ const lastSegment = lastSep >= 0 ? spec.slice(lastSep + 1) : spec;
94
+ // Only the extensions this module owns. Java/Rust have their own resolvers.
95
+ const candidates = [
96
+ joinPath(fromDir, spec),
97
+ joinPath(fromDir, spec) + '.rb',
98
+ joinPath(fromDir, cleaned) + '.rb',
99
+ joinPath(fromDir, cleaned) + '.php',
100
+ joinPath(fromDir, spec) + '.php',
101
+ ];
102
+ for (const cand of candidates) {
103
+ if (cand && has(cand))
104
+ return { path: cand };
105
+ }
106
+ // Last resort for quoted includes: match on the file name anywhere.
107
+ if (lastSegment && lastSegment !== '*') {
108
+ const hitPhp = findByName(lastSegment + '.php');
109
+ if (hitPhp)
110
+ return { path: hitPhp };
111
+ }
112
+ const hit = findByName(baseName(spec));
113
+ if (hit)
114
+ return { path: hit };
115
+ if (meta.kind === 'use' || meta.kind === 'import' || meta.kind === 'require' || meta.local === false) {
116
+ return { external: packageNameOf(spec) };
117
+ }
118
+ return { unresolved: spec };
131
119
  }
120
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/shared/analyzer/languages/generic.ts"],"names":[],"mappings":"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","sourcesContent":["// Generic analyzer for C/C++, Ruby, and PHP — the languages that don't have\n// a dedicated module. Java, Rust, and C# each have their own analyzer in this\n// directory and are dispatched first by `languages/index.js`; the blocks for\n// them used to live here, before they had anywhere better to go, and were\n// removed when those files landed so the dispatch table is the only place\n// that decides which family a file belongs to.\n//\n// The work this module does is deliberately cheap: a regex pass for the\n// include/import/require/use lines plus the obvious function and class\n// shapes. It is enough to place these files on the map; treating it as more\n// than that would be lying.\n\nimport { blankComments, lineCounter, uniqueBy } from '../util.js';\nimport { dirOf, joinPath, baseName } from '../pathUtil.js';\n\nexport const extensions = ['.c', '.h', '.cc', '.cpp', '.hpp', '.rb', '.php'];\n\nconst BY_EXT = {\n c: 'c', h: 'c', cc: 'c', cpp: 'c', hpp: 'c',\n rb: 'ruby', php: 'php',\n};\n\nconst CONTROL = new Set(['if', 'for', 'while', 'switch', 'catch', 'return', 'sizeof', 'do', 'else']);\n\nexport function analyze(source, path) {\n const family = BY_EXT[path.slice(path.lastIndexOf('.') + 1)] || 'c';\n const clean = blankComments(source, { lineChar: family === 'ruby' ? '#' : '//' });\n const lineAt = lineCounter(clean);\n\n const imports = [];\n const functions = [];\n const classes = [];\n\n if (family === 'c') {\n for (const m of clean.matchAll(/^[ \\t]*#[ \\t]*include[ \\t]*\"([^\"]+)\"/gm)) {\n imports.push({ spec: m[1], local: true, line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/^[ \\t]*#[ \\t]*include[ \\t]*<([^>]+)>/gm)) {\n imports.push({ spec: m[1], local: false, line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/^[A-Za-z_][\\w\\s\\*]*?\\s+([\\w]+)\\s*\\([^;{}]*\\)\\s*\\{/gm)) {\n if (!CONTROL.has(m[1])) functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });\n }\n }\n\n if (family === 'ruby') {\n for (const m of clean.matchAll(/^[ \\t]*require_relative\\s+['\"]([^'\"]+)['\"]/gm)) {\n imports.push({ spec: m[1], kind: 'require_relative', line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/^[ \\t]*require\\s+['\"]([^'\"]+)['\"]/gm)) {\n imports.push({ spec: m[1], kind: 'require', line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/^[ \\t]*def\\s+([\\w!?]+)/gm)) {\n functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/^[ \\t]*(?:class|module)\\s+([\\w:]+)/gm)) {\n classes.push({ name: m[1], line: lineAt(m.index) });\n }\n }\n\n if (family === 'php') {\n for (const m of clean.matchAll(/\\b(?:require|include)(?:_once)?\\s*\\(?\\s*['\"]([^'\"]+)['\"]/g)) {\n imports.push({ spec: m[1], kind: 'require', line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/^[ \\t]*use\\s+([\\w\\\\]+)\\s*;/gm)) {\n imports.push({ spec: m[1], kind: 'use', line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/\\bfunction\\s+([\\w]+)\\s*\\(/g)) {\n functions.push({ name: m[1], kind: 'function', line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(/\\bclass\\s+([\\w]+)/g)) {\n classes.push({ name: m[1], line: lineAt(m.index) });\n }\n }\n\n return {\n imports: uniqueBy(imports, (i) => i.spec + ':' + (i.kind || '')),\n exports: [],\n functions,\n classes,\n calls: [],\n hasMain: family === 'c' && /\\bint\\s+main\\s*\\(/.test(clean),\n };\n}\n\nexport function packageNameOf(spec) {\n if (spec.endsWith('.h') || spec.endsWith('.hpp')) return spec;\n return spec.split(/[.:/\\\\]/)[0] || spec;\n}\n\nexport function resolveImport(spec, fromPath, has, context: Record<string, any> = {}, meta: Record<string, any> = {}) {\n const fromDir = dirOf(fromPath);\n const { findByName = () => null } = context;\n\n // C angle-bracket includes like <stdio.h> are explicitly external\n if (meta.local === false && meta.kind !== 'mod' && meta.kind !== 'use' && meta.kind !== 'import') {\n return { external: packageNameOf(spec) };\n }\n\n const cleaned = spec.replace(/::/g, '/').replace(/\\\\/g, '/').replace(/\\./g, '/');\n const lastDot = spec.lastIndexOf('.');\n const lastSlash = Math.max(spec.lastIndexOf('/'), spec.lastIndexOf('\\\\'));\n const lastColon = spec.lastIndexOf('::');\n const lastSep = Math.max(lastDot, lastSlash, lastColon >= 0 ? lastColon + 1 : -1);\n const lastSegment = lastSep >= 0 ? spec.slice(lastSep + 1) : spec;\n\n // Only the extensions this module owns. Java/Rust have their own resolvers.\n const candidates = [\n joinPath(fromDir, spec),\n joinPath(fromDir, spec) + '.rb',\n joinPath(fromDir, cleaned) + '.rb',\n joinPath(fromDir, cleaned) + '.php',\n joinPath(fromDir, spec) + '.php',\n ];\n for (const cand of candidates) {\n if (cand && has(cand)) return { path: cand };\n }\n\n // Last resort for quoted includes: match on the file name anywhere.\n if (lastSegment && lastSegment !== '*') {\n const hitPhp = findByName(lastSegment + '.php');\n if (hitPhp) return { path: hitPhp };\n }\n const hit = findByName(baseName(spec));\n if (hit) return { path: hit };\n\n if (meta.kind === 'use' || meta.kind === 'import' || meta.kind === 'require' || meta.local === false) {\n return { external: packageNameOf(spec) };\n }\n return { unresolved: spec };\n}\n"]}
@@ -0,0 +1,24 @@
1
+ export declare const extensions: string[];
2
+ export declare function analyze(source: any, path: any): {
3
+ imports: any[];
4
+ exports: any[];
5
+ functions: any[];
6
+ classes: any[];
7
+ calls: any[];
8
+ hasMain: boolean;
9
+ packageName: any;
10
+ };
11
+ export declare function packageNameOf(spec: any): any;
12
+ export declare function resolveImport(spec: any, fromPath: any, has: any, context?: Record<string, any>): {
13
+ packageDir: any;
14
+ unresolved?: undefined;
15
+ external?: undefined;
16
+ } | {
17
+ packageDir?: undefined;
18
+ unresolved: any;
19
+ external?: undefined;
20
+ } | {
21
+ packageDir?: undefined;
22
+ unresolved?: undefined;
23
+ external: any;
24
+ };
@@ -1,70 +1,61 @@
1
1
  // Go. Package-oriented: imports resolve to directories, and the scanner maps
2
2
  // a directory to the Go files inside it.
3
-
4
3
  import { blankComments, lineCounter, uniqueBy } from '../util.js';
5
-
6
4
  export const extensions = ['.go'];
7
-
8
5
  const IMPORT_SINGLE_RE = /^[ \t]*import\s+(?:[\w.]+\s+)?"([^"]+)"/gm;
9
6
  const IMPORT_BLOCK_RE = /\bimport\s*\(([\s\S]*?)\)/g;
10
7
  const QUOTED_RE = /"([^"]+)"/g;
11
8
  const FUNC_RE = /^func\s+(?:\(([^)]*)\)\s*)?([\w]+)\s*\(/gm;
12
9
  const PACKAGE_RE = /^package\s+([\w]+)/m;
13
-
14
10
  export function analyze(source, path) {
15
- const clean = blankComments(source);
16
- const lineAt = lineCounter(clean);
17
-
18
- const imports = [];
19
- for (const m of clean.matchAll(IMPORT_SINGLE_RE)) {
20
- imports.push({ spec: m[1], line: lineAt(m.index) });
21
- }
22
- for (const m of clean.matchAll(IMPORT_BLOCK_RE)) {
23
- for (const q of m[1].matchAll(QUOTED_RE)) {
24
- imports.push({ spec: q[1], line: lineAt(m.index) });
11
+ const clean = blankComments(source);
12
+ const lineAt = lineCounter(clean);
13
+ const imports = [];
14
+ for (const m of clean.matchAll(IMPORT_SINGLE_RE)) {
15
+ imports.push({ spec: m[1], line: lineAt(m.index) });
25
16
  }
26
- }
27
-
28
- const functions = [];
29
- for (const m of clean.matchAll(FUNC_RE)) {
30
- functions.push({
31
- name: m[2],
32
- kind: m[1] ? 'method' : 'function',
33
- receiver: m[1] ? m[1].replace(/[*]/g, '').trim().split(/\s+/).pop() : undefined,
34
- line: lineAt(m.index),
35
- });
36
- }
37
-
38
- const pkg = (clean.match(PACKAGE_RE) || [])[1] || '';
39
- const hasMain = pkg === 'main' && /^func\s+main\s*\(\s*\)/m.test(clean);
40
-
41
- const exports = functions
42
- .filter((f) => /^[A-Z]/.test(f.name))
43
- .map((f) => ({ name: f.name, kind: f.kind }));
44
-
45
- return {
46
- imports: uniqueBy(imports, (i) => i.spec),
47
- exports: uniqueBy(exports, (e) => e.name),
48
- functions,
49
- classes: [],
50
- calls: [],
51
- hasMain,
52
- packageName: pkg,
53
- };
17
+ for (const m of clean.matchAll(IMPORT_BLOCK_RE)) {
18
+ for (const q of m[1].matchAll(QUOTED_RE)) {
19
+ imports.push({ spec: q[1], line: lineAt(m.index) });
20
+ }
21
+ }
22
+ const functions = [];
23
+ for (const m of clean.matchAll(FUNC_RE)) {
24
+ functions.push({
25
+ name: m[2],
26
+ kind: m[1] ? 'method' : 'function',
27
+ receiver: m[1] ? m[1].replace(/[*]/g, '').trim().split(/\s+/).pop() : undefined,
28
+ line: lineAt(m.index),
29
+ });
30
+ }
31
+ const pkg = (clean.match(PACKAGE_RE) || [])[1] || '';
32
+ const hasMain = pkg === 'main' && /^func\s+main\s*\(\s*\)/m.test(clean);
33
+ const exports = functions
34
+ .filter((f) => /^[A-Z]/.test(f.name))
35
+ .map((f) => ({ name: f.name, kind: f.kind }));
36
+ return {
37
+ imports: uniqueBy(imports, (i) => i.spec),
38
+ exports: uniqueBy(exports, (e) => e.name),
39
+ functions,
40
+ classes: [],
41
+ calls: [],
42
+ hasMain,
43
+ packageName: pkg,
44
+ };
54
45
  }
55
-
56
46
  export function packageNameOf(spec) {
57
- return spec.split('/')[0].includes('.') ? spec.split('/').slice(0, 3).join('/') : spec.split('/')[0];
47
+ return spec.split('/')[0].includes('.') ? spec.split('/').slice(0, 3).join('/') : spec.split('/')[0];
58
48
  }
59
-
60
49
  export function resolveImport(spec, fromPath, has, context = {}) {
61
- const { modulePath = '', hasDir = () => false } = context;
62
- if (modulePath && (spec === modulePath || spec.startsWith(modulePath + '/'))) {
63
- const dir = spec.slice(modulePath.length).replace(/^\//, '');
64
- if (hasDir(dir)) return { packageDir: dir };
65
- return { unresolved: spec };
66
- }
67
- // Without a go.mod we guess: no dot in the first segment usually means the
68
- // standard library; anything else is treated as an external module.
69
- return { external: packageNameOf(spec) };
50
+ const { modulePath = '', hasDir = () => false } = context;
51
+ if (modulePath && (spec === modulePath || spec.startsWith(modulePath + '/'))) {
52
+ const dir = spec.slice(modulePath.length).replace(/^\//, '');
53
+ if (hasDir(dir))
54
+ return { packageDir: dir };
55
+ return { unresolved: spec };
56
+ }
57
+ // Without a go.mod we guess: no dot in the first segment usually means the
58
+ // standard library; anything else is treated as an external module.
59
+ return { external: packageNameOf(spec) };
70
60
  }
61
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/shared/analyzer/languages/go.ts"],"names":[],"mappings":"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","sourcesContent":["// Go. Package-oriented: imports resolve to directories, and the scanner maps\n// a directory to the Go files inside it.\n\nimport { blankComments, lineCounter, uniqueBy } from '../util.js';\n\nexport const extensions = ['.go'];\n\nconst IMPORT_SINGLE_RE = /^[ \\t]*import\\s+(?:[\\w.]+\\s+)?\"([^\"]+)\"/gm;\nconst IMPORT_BLOCK_RE = /\\bimport\\s*\\(([\\s\\S]*?)\\)/g;\nconst QUOTED_RE = /\"([^\"]+)\"/g;\nconst FUNC_RE = /^func\\s+(?:\\(([^)]*)\\)\\s*)?([\\w]+)\\s*\\(/gm;\nconst PACKAGE_RE = /^package\\s+([\\w]+)/m;\n\nexport function analyze(source, path) {\n const clean = blankComments(source);\n const lineAt = lineCounter(clean);\n\n const imports = [];\n for (const m of clean.matchAll(IMPORT_SINGLE_RE)) {\n imports.push({ spec: m[1], line: lineAt(m.index) });\n }\n for (const m of clean.matchAll(IMPORT_BLOCK_RE)) {\n for (const q of m[1].matchAll(QUOTED_RE)) {\n imports.push({ spec: q[1], line: lineAt(m.index) });\n }\n }\n\n const functions = [];\n for (const m of clean.matchAll(FUNC_RE)) {\n functions.push({\n name: m[2],\n kind: m[1] ? 'method' : 'function',\n receiver: m[1] ? m[1].replace(/[*]/g, '').trim().split(/\\s+/).pop() : undefined,\n line: lineAt(m.index),\n });\n }\n\n const pkg = (clean.match(PACKAGE_RE) || [])[1] || '';\n const hasMain = pkg === 'main' && /^func\\s+main\\s*\\(\\s*\\)/m.test(clean);\n\n const exports = functions\n .filter((f) => /^[A-Z]/.test(f.name))\n .map((f) => ({ name: f.name, kind: f.kind }));\n\n return {\n imports: uniqueBy(imports, (i) => i.spec),\n exports: uniqueBy(exports, (e) => e.name),\n functions,\n classes: [],\n calls: [],\n hasMain,\n packageName: pkg,\n };\n}\n\nexport function packageNameOf(spec) {\n return spec.split('/')[0].includes('.') ? spec.split('/').slice(0, 3).join('/') : spec.split('/')[0];\n}\n\nexport function resolveImport(spec, fromPath, has, context: Record<string, any> = {}) {\n const { modulePath = '', hasDir = () => false } = context;\n if (modulePath && (spec === modulePath || spec.startsWith(modulePath + '/'))) {\n const dir = spec.slice(modulePath.length).replace(/^\\//, '');\n if (hasDir(dir)) return { packageDir: dir };\n return { unresolved: spec };\n }\n // Without a go.mod we guess: no dot in the first segment usually means the\n // standard library; anything else is treated as an external module.\n return { external: packageNameOf(spec) };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { LanguageAnalyzer } from '../../contracts.js';
2
+ export declare const languages: LanguageAnalyzer[];
3
+ export declare function languageFor(path: string): LanguageAnalyzer | null;
4
+ export declare function languageLabel(id: string, { short }?: {
5
+ short?: boolean;
6
+ }): string;
@@ -1,5 +1,4 @@
1
1
  // Language registry. Order matters: the first match on extension wins.
2
-
3
2
  import * as typescript from './typescript.js';
4
3
  import * as javascript from './javascript.js';
5
4
  import * as python from './python.js';
@@ -8,36 +7,36 @@ import * as rust from './rust.js';
8
7
  import * as java from './java.js';
9
8
  import * as csharp from './csharp.js';
10
9
  import * as generic from './generic.js';
11
-
12
10
  export const languages = [
13
- { id: 'typescript', label: 'TypeScript', short: 'TS', ...typescript },
14
- { id: 'javascript', label: 'JavaScript', short: 'JS', ...javascript },
15
- { id: 'python', label: 'Python', short: 'Python', ...python },
16
- { id: 'go', label: 'Go', short: 'Go', ...go },
17
- { id: 'rust', label: 'Rust', short: 'Rust', ...rust },
18
- { id: 'java', label: 'Java', short: 'Java', ...java },
19
- { id: 'csharp', label: 'C#', short: 'C#', ...csharp },
20
- { id: 'generic', label: 'C / Ruby / PHP', short: 'C/Ruby/…', ...generic },
11
+ { id: 'typescript', label: 'TypeScript', short: 'TS', ...typescript },
12
+ { id: 'javascript', label: 'JavaScript', short: 'JS', ...javascript },
13
+ { id: 'python', label: 'Python', short: 'Python', ...python },
14
+ { id: 'go', label: 'Go', short: 'Go', ...go },
15
+ { id: 'rust', label: 'Rust', short: 'Rust', ...rust },
16
+ { id: 'java', label: 'Java', short: 'Java', ...java },
17
+ { id: 'csharp', label: 'C#', short: 'C#', ...csharp },
18
+ { id: 'generic', label: 'C / Ruby / PHP', short: 'C/Ruby/…', ...generic },
21
19
  ];
22
-
23
20
  const byExtension = new Map();
24
21
  for (const lang of languages) {
25
- for (const ext of lang.extensions) byExtension.set(ext, lang);
22
+ for (const ext of lang.extensions)
23
+ byExtension.set(ext, lang);
26
24
  }
27
-
28
25
  export function languageFor(path) {
29
- const i = path.lastIndexOf('.');
30
- if (i === -1) return null;
31
- return byExtension.get(path.slice(i).toLowerCase()) || null;
26
+ const i = path.lastIndexOf('.');
27
+ if (i === -1)
28
+ return null;
29
+ return byExtension.get(path.slice(i).toLowerCase()) || null;
32
30
  }
33
-
34
31
  // Display names for a language id. Both spellings were previously hardcoded in
35
32
  // two places that had drifted apart — a `generic` file was labelled "C/Java/…"
36
33
  // in one panel and "C/Java/Rust/Ruby/PHP" in another. The registry already knew
37
34
  // the answer; now it is the only one that does. An unknown id comes back as
38
35
  // itself, so a new language shows up as a lowercase word rather than nothing.
39
36
  export function languageLabel(id, { short = false } = {}) {
40
- const lang = languages.find((l) => l.id === id);
41
- if (!lang) return String(id);
42
- return short ? lang.short : lang.label;
37
+ const lang = languages.find((l) => l.id === id);
38
+ if (!lang)
39
+ return String(id);
40
+ return short ? lang.short : lang.label;
43
41
  }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/analyzer/languages/index.ts"],"names":[],"mappings":"AACA,uEAAuE;AAEvE,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,SAAS,GAAuB;IAC3C,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE;IACrE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE;IACrE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE;IAC7D,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;IACrD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;IACrD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE;IACrD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE;CAC1E,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;AACxD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU;QAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAC9D,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAwB,EAAE;IACnF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,CAAC","sourcesContent":["import type { LanguageAnalyzer } from '../../contracts.js';\n// Language registry. Order matters: the first match on extension wins.\n\nimport * as typescript from './typescript.js';\nimport * as javascript from './javascript.js';\nimport * as python from './python.js';\nimport * as go from './go.js';\nimport * as rust from './rust.js';\nimport * as java from './java.js';\nimport * as csharp from './csharp.js';\nimport * as generic from './generic.js';\n\nexport const languages: LanguageAnalyzer[] = [\n { id: 'typescript', label: 'TypeScript', short: 'TS', ...typescript },\n { id: 'javascript', label: 'JavaScript', short: 'JS', ...javascript },\n { id: 'python', label: 'Python', short: 'Python', ...python },\n { id: 'go', label: 'Go', short: 'Go', ...go },\n { id: 'rust', label: 'Rust', short: 'Rust', ...rust },\n { id: 'java', label: 'Java', short: 'Java', ...java },\n { id: 'csharp', label: 'C#', short: 'C#', ...csharp },\n { id: 'generic', label: 'C / Ruby / PHP', short: 'C/Ruby/…', ...generic },\n];\n\nconst byExtension = new Map<string, LanguageAnalyzer>();\nfor (const lang of languages) {\n for (const ext of lang.extensions) byExtension.set(ext, lang);\n}\n\nexport function languageFor(path: string): LanguageAnalyzer | null {\n const i = path.lastIndexOf('.');\n if (i === -1) return null;\n return byExtension.get(path.slice(i).toLowerCase()) || null;\n}\n\n// Display names for a language id. Both spellings were previously hardcoded in\n// two places that had drifted apart — a `generic` file was labelled \"C/Java/…\"\n// in one panel and \"C/Java/Rust/Ruby/PHP\" in another. The registry already knew\n// the answer; now it is the only one that does. An unknown id comes back as\n// itself, so a new language shows up as a lowercase word rather than nothing.\nexport function languageLabel(id: string, { short = false }: { short?: boolean } = {}): string {\n const lang = languages.find((l) => l.id === id);\n if (!lang) return String(id);\n return short ? lang.short : lang.label;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ export declare const extensions: string[];
2
+ export declare function analyze(source: any, path: any): {
3
+ imports: any[];
4
+ exports: {
5
+ name: any;
6
+ kind: string;
7
+ }[];
8
+ functions: any[];
9
+ classes: any[];
10
+ hasMain: boolean;
11
+ packageName: any;
12
+ };
13
+ export declare function sourceRootFor(fromPath: any, packageName: any): string;
14
+ export declare function resolveImport(spec: any, fromPath: any, has: any, context?: Record<string, any>, meta?: Record<string, any>): {
15
+ unresolved: any;
16
+ path?: undefined;
17
+ } | {
18
+ unresolved?: undefined;
19
+ path: any;
20
+ };