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
@@ -13,142 +13,137 @@
13
13
  // * What survives a filter? Severity, engine and free text, applied as one
14
14
  // predicate so the counts above and the table below can never disagree
15
15
  // about what is being shown.
16
-
17
16
  export const SEV_ORDER = ['critical', 'high', 'medium', 'low', 'info'];
18
-
19
17
  export function sevRank(severity) {
20
- const at = SEV_ORDER.indexOf(severity);
21
- return at === -1 ? SEV_ORDER.length : at;
18
+ const at = SEV_ORDER.indexOf(severity);
19
+ return at === -1 ? SEV_ORDER.length : at;
22
20
  }
23
-
24
21
  export const BUILTIN_TOOL = 'built-in';
25
-
26
22
  // One flat list of findings, worst first. `security` is the roll-up from
27
23
  // `summarizeSecurity`, which is also what the Security panel draws.
28
24
  export function findingsFromSecurity(security) {
29
- const rows = [];
30
- // The parenthesised default is hoisted rather than inlined: `for (const x of
31
- // (a || []))` reads as a call to a function named `of` to the front end's
32
- // dangling-call lint, and the lint is right to be suspicious of that shape.
33
- const files = (security && security.files) || [];
34
- for (const file of files) {
35
- for (const finding of file.findings || []) {
36
- rows.push({
37
- path: file.path,
38
- name: file.name || String(file.path || '').split('/').pop(),
39
- line: finding.line || 1,
40
- severity: SEV_ORDER.includes(finding.severity) ? finding.severity : 'info',
41
- rule: finding.rule || 'unknown',
42
- category: finding.category || 'other',
43
- message: finding.message || '',
44
- excerpt: finding.excerpt || '',
45
- tool: finding.source === 'external' ? (finding.tool || 'external') : BUILTIN_TOOL,
46
- });
25
+ const rows = [];
26
+ // The parenthesised default is hoisted rather than inlined: `for (const x of
27
+ // (a || []))` reads as a call to a function named `of` to the front end's
28
+ // dangling-call lint, and the lint is right to be suspicious of that shape.
29
+ const files = (security && security.files) || [];
30
+ for (const file of files) {
31
+ for (const finding of file.findings || []) {
32
+ rows.push({
33
+ path: file.path,
34
+ name: file.name || String(file.path || '').split('/').pop(),
35
+ line: finding.line || 1,
36
+ severity: SEV_ORDER.includes(finding.severity) ? finding.severity : 'info',
37
+ rule: finding.rule || 'unknown',
38
+ category: finding.category || 'other',
39
+ message: finding.message || '',
40
+ excerpt: finding.excerpt || '',
41
+ tool: finding.source === 'external' ? (finding.tool || 'external') : BUILTIN_TOOL,
42
+ });
43
+ }
47
44
  }
48
- }
49
- return rows.sort((a, b) => sevRank(a.severity) - sevRank(b.severity)
50
- || a.path.localeCompare(b.path)
51
- || a.line - b.line);
45
+ return rows.sort((a, b) => sevRank(a.severity) - sevRank(b.severity)
46
+ || a.path.localeCompare(b.path)
47
+ || a.line - b.line);
52
48
  }
53
-
54
49
  // Counts for the header and the prompt. `external` vs `builtin` is kept because
55
50
  // "the built-in regex scanner said so" and "Semgrep said so" carry different
56
51
  // weight, and the UI should be able to say which.
57
52
  export function tabulate(rows) {
58
- const bySeverity = {};
59
- const byTool = {};
60
- const byCategory = {};
61
- for (const row of rows) {
62
- bySeverity[row.severity] = (bySeverity[row.severity] || 0) + 1;
63
- byTool[row.tool] = (byTool[row.tool] || 0) + 1;
64
- byCategory[row.category] = (byCategory[row.category] || 0) + 1;
65
- }
66
- const external = rows.filter((r) => r.tool !== BUILTIN_TOOL).length;
67
- return {
68
- total: rows.length,
69
- bySeverity,
70
- byTool,
71
- byCategory,
72
- external,
73
- builtin: rows.length - external,
74
- critical: bySeverity.critical || 0,
75
- high: bySeverity.high || 0,
76
- medium: bySeverity.medium || 0,
77
- low: (bySeverity.low || 0) + (bySeverity.info || 0),
78
- };
53
+ const bySeverity = {};
54
+ const byTool = {};
55
+ const byCategory = {};
56
+ for (const row of rows) {
57
+ bySeverity[row.severity] = (bySeverity[row.severity] || 0) + 1;
58
+ byTool[row.tool] = (byTool[row.tool] || 0) + 1;
59
+ byCategory[row.category] = (byCategory[row.category] || 0) + 1;
60
+ }
61
+ const external = rows.filter((r) => r.tool !== BUILTIN_TOOL).length;
62
+ return {
63
+ total: rows.length,
64
+ bySeverity,
65
+ byTool,
66
+ byCategory,
67
+ external,
68
+ builtin: rows.length - external,
69
+ critical: bySeverity.critical || 0,
70
+ high: bySeverity.high || 0,
71
+ medium: bySeverity.medium || 0,
72
+ low: (bySeverity.low || 0) + (bySeverity.info || 0),
73
+ };
79
74
  }
80
-
81
75
  // The filter is one predicate over three independent axes. `all` on an axis
82
76
  // means "do not filter on this", which is why the default object is usable as-is.
83
77
  export function filterFindings(rows, { severity = 'all', tool = 'all', q = '' } = {}) {
84
- const needle = String(q || '').trim().toLowerCase();
85
- return rows.filter((row) => {
86
- if (severity !== 'all' && row.severity !== severity) return false;
87
- if (tool !== 'all' && row.tool !== tool) return false;
88
- if (!needle) return true;
89
- return row.path.toLowerCase().includes(needle)
90
- || row.message.toLowerCase().includes(needle)
91
- || row.rule.toLowerCase().includes(needle)
92
- || row.category.toLowerCase().includes(needle);
93
- });
78
+ const needle = String(q || '').trim().toLowerCase();
79
+ return rows.filter((row) => {
80
+ if (severity !== 'all' && row.severity !== severity)
81
+ return false;
82
+ if (tool !== 'all' && row.tool !== tool)
83
+ return false;
84
+ if (!needle)
85
+ return true;
86
+ return row.path.toLowerCase().includes(needle)
87
+ || row.message.toLowerCase().includes(needle)
88
+ || row.rule.toLowerCase().includes(needle)
89
+ || row.category.toLowerCase().includes(needle);
90
+ });
94
91
  }
95
-
96
92
  // The engine table: what each tool is, whether it is installed, and what it did
97
93
  // last time it ran. `status` comes from `GET /api/tools`, `report` from the last
98
94
  // `POST /api/tools/run` — they are joined here so the view has one list to draw
99
95
  // instead of two to reconcile.
100
96
  export function engineRows(status, report) {
101
- const passes = (report && report.passes) || [];
102
- return Object.keys(status || {}).map((id) => {
103
- const meta = status[id] || {};
104
- const pass = passes.find((p) => p.id === id) || null;
105
- return {
106
- id,
107
- label: meta.label || id,
108
- kind: meta.kind || 'security',
109
- purpose: meta.purpose || '',
110
- available: !!meta.available,
111
- how: meta.how || null,
112
- reason: meta.reason || null,
113
- // The option schema and its defaults, for the Configure form; `installable`
114
- // is whether the server knows how to install this engine from the GUI.
115
- options: Array.isArray(meta.options) ? meta.options : [],
116
- defaults: meta.defaults || {},
117
- installable: meta.installable !== false,
118
- ran: !!(pass && pass.ok),
119
- failed: !!(pass && !pass.ok && pass.available),
120
- findings: pass && pass.ok ? (pass.findings || []).length : 0,
121
- ms: pass && pass.ok ? pass.ms : null,
122
- failure: pass && !pass.ok && pass.available ? pass.reason : null,
123
- };
124
- });
97
+ const passes = (report && report.passes) || [];
98
+ return Object.keys(status || {}).map((id) => {
99
+ const meta = status[id] || {};
100
+ const pass = passes.find((p) => p.id === id) || null;
101
+ return {
102
+ id,
103
+ label: meta.label || id,
104
+ kind: meta.kind || 'security',
105
+ purpose: meta.purpose || '',
106
+ available: !!meta.available,
107
+ how: meta.how || null,
108
+ reason: meta.reason || null,
109
+ // The option schema and its defaults, for the Configure form; `installable`
110
+ // is whether the server knows how to install this engine from the GUI.
111
+ options: Array.isArray(meta.options) ? meta.options : [],
112
+ defaults: meta.defaults || {},
113
+ installable: meta.installable !== false,
114
+ ran: !!(pass && pass.ok),
115
+ failed: !!(pass && !pass.ok && pass.available),
116
+ findings: pass && pass.ok ? (pass.findings || []).length : 0,
117
+ ms: pass && pass.ok ? pass.ms : null,
118
+ failure: pass && !pass.ok && pass.available ? pass.reason : null,
119
+ };
120
+ });
125
121
  }
126
-
127
122
  // The one-line verdict under the engine list. Written here rather than in the
128
123
  // view because "nothing ran" and "nothing found" must never be confused, and
129
124
  // that distinction is the whole point of the panel.
130
125
  export function engineSummary(report, rows) {
131
- if (!report) {
132
- return { tone: 'idle', text: 'No run yet. The built-in scanner is the whole story until you run an engine.' };
133
- }
134
- const ran = rows.filter((r) => r.ran).length;
135
- const missing = rows.filter((r) => !r.available).length;
136
- const failed = rows.filter((r) => r.failed).length;
137
-
138
- if (!ran) {
139
- return {
140
- tone: 'none',
141
- text: missing === rows.length && rows.length
142
- ? 'No engine is installed on this machine. Install any of the ones below and run again — the built-in scan still stands.'
143
- : 'No engine managed to run. The reasons are listed above.',
144
- };
145
- }
146
-
147
- const findings = (report.findings || []).length;
148
- const parts = [`${ran} of ${rows.length} engines ran in ${report.ms}ms`];
149
- parts.push(findings ? `${findings} finding${findings === 1 ? '' : 's'} came back` : 'none of them found anything');
150
- if (failed) parts.push(`${failed} failed`);
151
- if (missing) parts.push(`${missing} not installed`);
152
- return { tone: findings ? 'found' : 'clean', text: parts.join(' · ') + '.' };
126
+ if (!report) {
127
+ return { tone: 'idle', text: 'No run yet. The built-in scanner is the whole story until you run an engine.' };
128
+ }
129
+ const ran = rows.filter((r) => r.ran).length;
130
+ const missing = rows.filter((r) => !r.available).length;
131
+ const failed = rows.filter((r) => r.failed).length;
132
+ if (!ran) {
133
+ return {
134
+ tone: 'none',
135
+ text: missing === rows.length && rows.length
136
+ ? 'No engine is installed on this machine. Install any of the ones below and run again — the built-in scan still stands.'
137
+ : 'No engine managed to run. The reasons are listed above.',
138
+ };
139
+ }
140
+ const findings = (report.findings || []).length;
141
+ const parts = [`${ran} of ${rows.length} engines ran in ${report.ms}ms`];
142
+ parts.push(findings ? `${findings} finding${findings === 1 ? '' : 's'} came back` : 'none of them found anything');
143
+ if (failed)
144
+ parts.push(`${failed} failed`);
145
+ if (missing)
146
+ parts.push(`${missing} not installed`);
147
+ return { tone: findings ? 'found' : 'clean', text: parts.join(' · ') + '.' };
153
148
  }
154
-
149
+ //# sourceMappingURL=analysisReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysisReport.js","sourceRoot":"","sources":["../../src/public/js/analysisReport.ts"],"names":[],"mappings":"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","sourcesContent":["// Shaping an analysis report for the Deep Analysis view — pure, DOM-free, and\n// therefore testable in Node.\n//\n// Three questions get answered here, and nowhere else:\n//\n// * What findings do we actually have? The built-in scanner's findings live\n// under `security.files[].findings`; the external engines' findings are\n// merged into the same place, tagged `source: 'external'`. Flattening them\n// into rows is the only place that difference is spelled out, so every view\n// downstream can stop caring which engine answered.\n// * What is the shape of the report? Counts by severity, by tool and by\n// category are what the header chips and the AI prompt both run on.\n// * What survives a filter? Severity, engine and free text, applied as one\n// predicate so the counts above and the table below can never disagree\n// about what is being shown.\n\nexport const SEV_ORDER = ['critical', 'high', 'medium', 'low', 'info'];\n\nexport function sevRank(severity) {\n const at = SEV_ORDER.indexOf(severity);\n return at === -1 ? SEV_ORDER.length : at;\n}\n\nexport const BUILTIN_TOOL = 'built-in';\n\n// One flat list of findings, worst first. `security` is the roll-up from\n// `summarizeSecurity`, which is also what the Security panel draws.\nexport function findingsFromSecurity(security) {\n const rows = [];\n // The parenthesised default is hoisted rather than inlined: `for (const x of\n // (a || []))` reads as a call to a function named `of` to the front end's\n // dangling-call lint, and the lint is right to be suspicious of that shape.\n const files = (security && security.files) || [];\n for (const file of files) {\n for (const finding of file.findings || []) {\n rows.push({\n path: file.path,\n name: file.name || String(file.path || '').split('/').pop(),\n line: finding.line || 1,\n severity: SEV_ORDER.includes(finding.severity) ? finding.severity : 'info',\n rule: finding.rule || 'unknown',\n category: finding.category || 'other',\n message: finding.message || '',\n excerpt: finding.excerpt || '',\n tool: finding.source === 'external' ? (finding.tool || 'external') : BUILTIN_TOOL,\n });\n }\n }\n return rows.sort((a, b) => sevRank(a.severity) - sevRank(b.severity)\n || a.path.localeCompare(b.path)\n || a.line - b.line);\n}\n\n// Counts for the header and the prompt. `external` vs `builtin` is kept because\n// \"the built-in regex scanner said so\" and \"Semgrep said so\" carry different\n// weight, and the UI should be able to say which.\nexport function tabulate(rows) {\n const bySeverity: Record<string, any> = {};\n const byTool: Record<string, any> = {};\n const byCategory: Record<string, any> = {};\n for (const row of rows) {\n bySeverity[row.severity] = (bySeverity[row.severity] || 0) + 1;\n byTool[row.tool] = (byTool[row.tool] || 0) + 1;\n byCategory[row.category] = (byCategory[row.category] || 0) + 1;\n }\n const external = rows.filter((r) => r.tool !== BUILTIN_TOOL).length;\n return {\n total: rows.length,\n bySeverity,\n byTool,\n byCategory,\n external,\n builtin: rows.length - external,\n critical: bySeverity.critical || 0,\n high: bySeverity.high || 0,\n medium: bySeverity.medium || 0,\n low: (bySeverity.low || 0) + (bySeverity.info || 0),\n };\n}\n\n// The filter is one predicate over three independent axes. `all` on an axis\n// means \"do not filter on this\", which is why the default object is usable as-is.\nexport function filterFindings(rows, { severity = 'all', tool = 'all', q = '' }: Record<string, any> = {}) {\n const needle = String(q || '').trim().toLowerCase();\n return rows.filter((row) => {\n if (severity !== 'all' && row.severity !== severity) return false;\n if (tool !== 'all' && row.tool !== tool) return false;\n if (!needle) return true;\n return row.path.toLowerCase().includes(needle)\n || row.message.toLowerCase().includes(needle)\n || row.rule.toLowerCase().includes(needle)\n || row.category.toLowerCase().includes(needle);\n });\n}\n\n// The engine table: what each tool is, whether it is installed, and what it did\n// last time it ran. `status` comes from `GET /api/tools`, `report` from the last\n// `POST /api/tools/run` — they are joined here so the view has one list to draw\n// instead of two to reconcile.\nexport function engineRows(status, report) {\n const passes = (report && report.passes) || [];\n return Object.keys(status || {}).map((id) => {\n const meta = status[id] || {};\n const pass = passes.find((p) => p.id === id) || null;\n return {\n id,\n label: meta.label || id,\n kind: meta.kind || 'security',\n purpose: meta.purpose || '',\n available: !!meta.available,\n how: meta.how || null,\n reason: meta.reason || null,\n // The option schema and its defaults, for the Configure form; `installable`\n // is whether the server knows how to install this engine from the GUI.\n options: Array.isArray(meta.options) ? meta.options : [],\n defaults: meta.defaults || {},\n installable: meta.installable !== false,\n ran: !!(pass && pass.ok),\n failed: !!(pass && !pass.ok && pass.available),\n findings: pass && pass.ok ? (pass.findings || []).length : 0,\n ms: pass && pass.ok ? pass.ms : null,\n failure: pass && !pass.ok && pass.available ? pass.reason : null,\n };\n });\n}\n\n// The one-line verdict under the engine list. Written here rather than in the\n// view because \"nothing ran\" and \"nothing found\" must never be confused, and\n// that distinction is the whole point of the panel.\nexport function engineSummary(report, rows) {\n if (!report) {\n return { tone: 'idle', text: 'No run yet. The built-in scanner is the whole story until you run an engine.' };\n }\n const ran = rows.filter((r) => r.ran).length;\n const missing = rows.filter((r) => !r.available).length;\n const failed = rows.filter((r) => r.failed).length;\n\n if (!ran) {\n return {\n tone: 'none',\n text: missing === rows.length && rows.length\n ? 'No engine is installed on this machine. Install any of the ones below and run again — the built-in scan still stands.'\n : 'No engine managed to run. The reasons are listed above.',\n };\n }\n\n const findings = (report.findings || []).length;\n const parts = [`${ran} of ${rows.length} engines ran in ${report.ms}ms`];\n parts.push(findings ? `${findings} finding${findings === 1 ? '' : 's'} came back` : 'none of them found anything');\n if (failed) parts.push(`${failed} failed`);\n if (missing) parts.push(`${missing} not installed`);\n return { tone: findings ? 'found' : 'clean', text: parts.join(' · ') + '.' };\n}\n\n"]}
@@ -0,0 +1,29 @@
1
+ import type { ScanRequest } from '../../shared/contracts.js';
2
+ export declare function scanOnServer(payload: ScanRequest, options?: {
3
+ signal?: AbortSignal;
4
+ }): Promise<any>;
5
+ export declare function cleanupClone(cloneId: any): Promise<void>;
6
+ export declare function fetchFileText(scanId: any, path: any): Promise<string>;
7
+ export declare function fetchToolsStatus(): Promise<any>;
8
+ export declare function runAnalysisTools(scanId: any, options?: Record<string, any>): Promise<any>;
9
+ export declare function streamToolInstall(tool: any, onEvent: any): Promise<any>;
10
+ export declare function fetchMcpStatus(): Promise<any>;
11
+ export declare function startMcpServer(): Promise<any>;
12
+ export declare function stopMcpServer(): Promise<any>;
13
+ export declare function fetchMcpCommand(): Promise<any>;
14
+ export declare function streamExplain({ connection, baseUrl, apiKey, model, messages, maxTokens, providerOptions, purpose, signal }: {
15
+ apiKey?: string;
16
+ baseUrl?: string;
17
+ connection?: string;
18
+ maxTokens?: number;
19
+ messages: any;
20
+ model?: string;
21
+ providerOptions?: {};
22
+ purpose?: string;
23
+ signal?: AbortSignal;
24
+ }): AsyncGenerator<string, void, unknown>;
25
+ export declare function fetchHermesStatus(signal?: AbortSignal): Promise<any>;
26
+ export declare function fetchServerSettings(): Promise<any>;
27
+ export declare function updateServerSettings(patch: any): Promise<any>;
28
+ export declare function rotateServerAccessKey(): Promise<any>;
29
+ export declare function logoutRemoteSession(): Promise<any>;