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
@@ -1,26 +1,22 @@
1
1
  // Software Bill of Materials (SBOM) & License Compliance View.
2
2
  // Renders dependency inventory, license classification, and copyleft compliance audit.
3
-
4
3
  import { escapeHtml } from './html.js';
5
-
6
4
  export function renderSbom(container, { scan }) {
7
- if (!container) return;
8
-
9
- const report = scan?.licenseReport || {
10
- projectLicense: scan?.license || { id: 'UNKNOWN', name: 'Unknown', type: 'unknown' },
11
- sbom: scan?.sbom || [],
12
- counts: { permissive: 0, copyleft: 0, weakCopyleft: 0, unknown: 0, total: 0 },
13
- complianceStatus: 'clean',
14
- };
15
-
16
- const sbom = report.sbom || [];
17
- const counts = report.counts || { permissive: 0, copyleft: 0, weakCopyleft: 0, unknown: 0, total: sbom.length };
18
- const projectLicense = report.projectLicense || { id: 'UNKNOWN', name: 'Unknown' };
19
-
20
- // The filter bar is pointless when there is nothing to filter.
21
- // Built as a separate template — nesting backticks inline breaks the
22
- // dangling-call lint (nested template literals defeat its string blanking).
23
- const filterBar = sbom.length ? `
5
+ if (!container)
6
+ return;
7
+ const report = scan?.licenseReport || {
8
+ projectLicense: scan?.license || { id: 'UNKNOWN', name: 'Unknown', type: 'unknown' },
9
+ sbom: scan?.sbom || [],
10
+ counts: { permissive: 0, copyleft: 0, weakCopyleft: 0, unknown: 0, total: 0 },
11
+ complianceStatus: 'clean',
12
+ };
13
+ const sbom = report.sbom || [];
14
+ const counts = report.counts || { permissive: 0, copyleft: 0, weakCopyleft: 0, unknown: 0, total: sbom.length };
15
+ const projectLicense = report.projectLicense || { id: 'UNKNOWN', name: 'Unknown' };
16
+ // The filter bar is pointless when there is nothing to filter.
17
+ // Built as a separate template — nesting backticks inline breaks the
18
+ // dangling-call lint (nested template literals defeat its string blanking).
19
+ const filterBar = sbom.length ? `
24
20
  <div class="sbom-filter-bar">
25
21
  <input type="text" class="text-input sbom-search-input" id="sbomSearchInput" placeholder="Filter dependencies or licenses…">
26
22
  <div class="sbom-filter-chips">
@@ -30,8 +26,7 @@ export function renderSbom(container, { scan }) {
30
26
  <button class="btn btn-ghost btn-sm" data-filter="copyleft">Copyleft (${counts.copyleft})</button>
31
27
  </div>
32
28
  </div>` : '';
33
-
34
- container.innerHTML = `
29
+ container.innerHTML = `
35
30
  <div class="sbom-layout">
36
31
  <!-- License Header & Summary -->
37
32
  <header class="sbom-header">
@@ -81,55 +76,51 @@ export function renderSbom(container, { scan }) {
81
76
  </div>
82
77
  </div>
83
78
  `;
84
-
85
- // Wire search & filtering
86
- const searchInput = container.querySelector('#sbomSearchInput');
87
- const tableBody = container.querySelector('#sbomTableBody');
88
- const filterBtns = container.querySelectorAll('.sbom-filter-chips button');
89
-
90
- let activeFilter = 'all';
91
-
92
- function applyFilter() {
93
- const q = (searchInput?.value || '').toLowerCase().trim();
94
- const filtered = sbom.filter((item) => {
95
- if (activeFilter === 'prod' && item.isDev) return false;
96
- if (activeFilter === 'dev' && !item.isDev) return false;
97
- if (activeFilter === 'copyleft' && item.license?.type !== 'copyleft') return false;
98
-
99
- if (!q) return true;
100
- return item.name.toLowerCase().includes(q)
101
- || item.ecosystem.toLowerCase().includes(q)
102
- || String(item.license?.id || '').toLowerCase().includes(q);
103
- });
104
-
105
- if (tableBody) tableBody.innerHTML = renderSbomRows(filtered, { filtered: true });
106
- }
107
-
108
- searchInput?.addEventListener('input', applyFilter);
109
-
110
- filterBtns.forEach((btn) => {
111
- btn.addEventListener('click', () => {
112
- filterBtns.forEach((b) => b.classList.remove('is-active'));
113
- btn.classList.add('is-active');
114
- activeFilter = btn.dataset.filter;
115
- applyFilter();
79
+ // Wire search & filtering
80
+ const searchInput = container.querySelector('#sbomSearchInput');
81
+ const tableBody = container.querySelector('#sbomTableBody');
82
+ const filterBtns = container.querySelectorAll('.sbom-filter-chips button');
83
+ let activeFilter = 'all';
84
+ function applyFilter() {
85
+ const q = (searchInput?.value || '').toLowerCase().trim();
86
+ const filtered = sbom.filter((item) => {
87
+ if (activeFilter === 'prod' && item.isDev)
88
+ return false;
89
+ if (activeFilter === 'dev' && !item.isDev)
90
+ return false;
91
+ if (activeFilter === 'copyleft' && item.license?.type !== 'copyleft')
92
+ return false;
93
+ if (!q)
94
+ return true;
95
+ return item.name.toLowerCase().includes(q)
96
+ || item.ecosystem.toLowerCase().includes(q)
97
+ || String(item.license?.id || '').toLowerCase().includes(q);
98
+ });
99
+ if (tableBody)
100
+ tableBody.innerHTML = renderSbomRows(filtered, { filtered: true });
101
+ }
102
+ searchInput?.addEventListener('input', applyFilter);
103
+ filterBtns.forEach((btn) => {
104
+ btn.addEventListener('click', () => {
105
+ filterBtns.forEach((b) => b.classList.remove('is-active'));
106
+ btn.classList.add('is-active');
107
+ activeFilter = btn.dataset.filter;
108
+ applyFilter();
109
+ });
116
110
  });
117
- });
118
111
  }
119
-
120
112
  function renderSbomRows(items, { filtered } = {}) {
121
- if (!items.length) {
122
- // Distinguish "nothing matched your filter" from "this project simply
123
- // declares no dependencies" — the latter is a finding, not a dead end.
124
- if (!filtered) {
125
- return '<tr><td colspan="5" class="sbom-no-results">No dependency manifests found — this project declares no npm, pip, Go, or Cargo dependencies.</td></tr>';
113
+ if (!items.length) {
114
+ // Distinguish "nothing matched your filter" from "this project simply
115
+ // declares no dependencies" — the latter is a finding, not a dead end.
116
+ if (!filtered) {
117
+ return '<tr><td colspan="5" class="sbom-no-results">No dependency manifests found — this project declares no npm, pip, Go, or Cargo dependencies.</td></tr>';
118
+ }
119
+ return '<tr><td colspan="5" class="sbom-no-results">No packages match the current filter.</td></tr>';
126
120
  }
127
- return '<tr><td colspan="5" class="sbom-no-results">No packages match the current filter.</td></tr>';
128
- }
129
-
130
- return items.map((item) => {
131
- const lic = item.license || { id: 'Unknown', type: 'unknown' };
132
- return `
121
+ return items.map((item) => {
122
+ const lic = item.license || { id: 'Unknown', type: 'unknown' };
123
+ return `
133
124
  <tr>
134
125
  <td class="sbom-cell-pkg"><b>${escapeHtml(item.name)}</b></td>
135
126
  <td class="sbom-cell-ver"><code>${escapeHtml(item.version)}</code></td>
@@ -138,5 +129,6 @@ function renderSbomRows(items, { filtered } = {}) {
138
129
  <td class="sbom-cell-lic"><span class="sbom-badge is-${lic.type}">${escapeHtml(lic.id)}</span></td>
139
130
  </tr>
140
131
  `;
141
- }).join('');
132
+ }).join('');
142
133
  }
134
+ //# sourceMappingURL=sbomView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sbomView.js","sourceRoot":"","sources":["../../src/public/js/sbomView.ts"],"names":[],"mappings":"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","sourcesContent":["// Software Bill of Materials (SBOM) & License Compliance View.\n// Renders dependency inventory, license classification, and copyleft compliance audit.\n\nimport { escapeHtml } from './html.js';\n\nexport function renderSbom(container, { scan }) {\n if (!container) return;\n\n const report = scan?.licenseReport || {\n projectLicense: scan?.license || { id: 'UNKNOWN', name: 'Unknown', type: 'unknown' },\n sbom: scan?.sbom || [],\n counts: { permissive: 0, copyleft: 0, weakCopyleft: 0, unknown: 0, total: 0 },\n complianceStatus: 'clean',\n };\n\n const sbom = report.sbom || [];\n const counts = report.counts || { permissive: 0, copyleft: 0, weakCopyleft: 0, unknown: 0, total: sbom.length };\n const projectLicense = report.projectLicense || { id: 'UNKNOWN', name: 'Unknown' };\n\n // The filter bar is pointless when there is nothing to filter.\n // Built as a separate template — nesting backticks inline breaks the\n // dangling-call lint (nested template literals defeat its string blanking).\n const filterBar = sbom.length ? `\n <div class=\"sbom-filter-bar\">\n <input type=\"text\" class=\"text-input sbom-search-input\" id=\"sbomSearchInput\" placeholder=\"Filter dependencies or licenses…\">\n <div class=\"sbom-filter-chips\">\n <button class=\"btn btn-ghost btn-sm is-active\" data-filter=\"all\">All (${sbom.length})</button>\n <button class=\"btn btn-ghost btn-sm\" data-filter=\"prod\">Production</button>\n <button class=\"btn btn-ghost btn-sm\" data-filter=\"dev\">Development</button>\n <button class=\"btn btn-ghost btn-sm\" data-filter=\"copyleft\">Copyleft (${counts.copyleft})</button>\n </div>\n </div>` : '';\n\n container.innerHTML = `\n <div class=\"sbom-layout\">\n <!-- License Header & Summary -->\n <header class=\"sbom-header\">\n <div class=\"sbom-lic-card\">\n <span class=\"sbom-lic-label\">Project License</span>\n <div class=\"sbom-lic-val\">\n <span class=\"sbom-badge is-${projectLicense.type || 'permissive'}\">${escapeHtml(projectLicense.id)}</span>\n <span class=\"sbom-lic-name\">${escapeHtml(projectLicense.name)}</span>\n </div>\n </div>\n\n <div class=\"sbom-stat-cards\">\n <div class=\"sbom-stat-chip\">\n <b>${counts.total}</b> Total Packages\n </div>\n <div class=\"sbom-stat-chip is-permissive\">\n <b>${counts.permissive}</b> Permissive\n </div>\n <div class=\"sbom-stat-chip is-copyleft\">\n <b>${counts.copyleft}</b> Copyleft\n </div>\n <div class=\"sbom-stat-chip is-weak\">\n <b>${counts.weakCopyleft}</b> Weak Copyleft\n </div>\n </div>\n </header>\n\n <!-- Search & Filter Controls (only useful with packages to filter) -->\n ${filterBar}\n\n <!-- Dependencies Inventory Table -->\n <div class=\"sbom-table-wrap\">\n <table class=\"sbom-table\" id=\"sbomTable\">\n <thead>\n <tr>\n <th>Package Name</th>\n <th>Version</th>\n <th>Ecosystem</th>\n <th>Type</th>\n <th>License</th>\n </tr>\n </thead>\n <tbody id=\"sbomTableBody\">\n ${renderSbomRows(sbom)}\n </tbody>\n </table>\n </div>\n </div>\n `;\n\n // Wire search & filtering\n const searchInput = container.querySelector('#sbomSearchInput');\n const tableBody = container.querySelector('#sbomTableBody');\n const filterBtns = container.querySelectorAll('.sbom-filter-chips button');\n\n let activeFilter = 'all';\n\n function applyFilter() {\n const q = (searchInput?.value || '').toLowerCase().trim();\n const filtered = sbom.filter((item) => {\n if (activeFilter === 'prod' && item.isDev) return false;\n if (activeFilter === 'dev' && !item.isDev) return false;\n if (activeFilter === 'copyleft' && item.license?.type !== 'copyleft') return false;\n\n if (!q) return true;\n return item.name.toLowerCase().includes(q)\n || item.ecosystem.toLowerCase().includes(q)\n || String(item.license?.id || '').toLowerCase().includes(q);\n });\n\n if (tableBody) tableBody.innerHTML = renderSbomRows(filtered, { filtered: true });\n }\n\n searchInput?.addEventListener('input', applyFilter);\n\n filterBtns.forEach((btn) => {\n btn.addEventListener('click', () => {\n filterBtns.forEach((b) => b.classList.remove('is-active'));\n btn.classList.add('is-active');\n activeFilter = btn.dataset.filter;\n applyFilter();\n });\n });\n}\n\nfunction renderSbomRows(items, { filtered }: Record<string, any> = {}) {\n if (!items.length) {\n // Distinguish \"nothing matched your filter\" from \"this project simply\n // declares no dependencies\" — the latter is a finding, not a dead end.\n if (!filtered) {\n return '<tr><td colspan=\"5\" class=\"sbom-no-results\">No dependency manifests found — this project declares no npm, pip, Go, or Cargo dependencies.</td></tr>';\n }\n return '<tr><td colspan=\"5\" class=\"sbom-no-results\">No packages match the current filter.</td></tr>';\n }\n\n return items.map((item) => {\n const lic = item.license || { id: 'Unknown', type: 'unknown' };\n return `\n <tr>\n <td class=\"sbom-cell-pkg\"><b>${escapeHtml(item.name)}</b></td>\n <td class=\"sbom-cell-ver\"><code>${escapeHtml(item.version)}</code></td>\n <td class=\"sbom-cell-eco\"><span class=\"eco-tag eco-${item.ecosystem}\">${escapeHtml(item.ecosystem)}</span></td>\n <td class=\"sbom-cell-dev\"><span class=\"dep-type-chip ${item.isDev ? 'is-dev' : 'is-prod'}\">${item.isDev ? 'dev' : 'prod'}</span></td>\n <td class=\"sbom-cell-lic\"><span class=\"sbom-badge is-${lic.type}\">${escapeHtml(lic.id)}</span></td>\n </tr>\n `;\n }).join('');\n}\n"]}
@@ -0,0 +1,16 @@
1
+ export declare function hashString(str: any): string;
2
+ export declare function repoCacheKey(scan: any): string;
3
+ export declare function compareScans(prev: any, curr: any): {
4
+ scoreDiff: number;
5
+ filesDiff: number;
6
+ trend: string;
7
+ summary: string;
8
+ };
9
+ export declare class ScanCache {
10
+ storage: any;
11
+ memory: Map<string, any>;
12
+ constructor(storage?: Storage);
13
+ get(key: any): any;
14
+ set(key: any, val: any): void;
15
+ clear(): void;
16
+ }
@@ -1,76 +1,78 @@
1
1
  // Scan caching & trend analysis. Pure logic so it is unit-tested without a browser.
2
-
3
2
  export function hashString(str) {
4
- let h = 2166136261 >>> 0;
5
- for (let i = 0; i < str.length; i++) {
6
- h ^= str.charCodeAt(i);
7
- h = Math.imul(h, 16777619) >>> 0;
8
- }
9
- return h.toString(16);
3
+ let h = 2166136261 >>> 0;
4
+ for (let i = 0; i < str.length; i++) {
5
+ h ^= str.charCodeAt(i);
6
+ h = Math.imul(h, 16777619) >>> 0;
7
+ }
8
+ return h.toString(16);
10
9
  }
11
-
12
10
  export function repoCacheKey(scan) {
13
- if (!scan) return '';
14
- const id = scan.gitUrl || scan.root || scan.name || '';
15
- const summary = (scan.files || [])
16
- .slice(0, 100)
17
- .map((f) => `${f.path}:${f.size}:${f.loc}`)
18
- .join('|');
19
- return `onboarder.cache.${hashString(id)}.${hashString(summary)}`;
11
+ if (!scan)
12
+ return '';
13
+ const id = scan.gitUrl || scan.root || scan.name || '';
14
+ const summary = (scan.files || [])
15
+ .map((f) => JSON.stringify([f.path, f.size, f.loc, f.imports, f.exports, f.findings]))
16
+ .join('|');
17
+ return `onboarder.cache.${hashString(id)}.${hashString(summary)}`;
20
18
  }
21
-
22
19
  export function compareScans(prev, curr) {
23
- if (!prev || !curr) return null;
24
- const prevScore = prev.health?.score ?? prev.score ?? 100;
25
- const currScore = curr.health?.score ?? curr.score ?? 100;
26
- const scoreDiff = currScore - prevScore;
27
- const prevFiles = prev.scan?.files?.length ?? prev.files?.length ?? 0;
28
- const currFiles = curr.scan?.files?.length ?? curr.files?.length ?? 0;
29
- const filesDiff = currFiles - prevFiles;
30
-
31
- return {
32
- scoreDiff,
33
- filesDiff,
34
- trend: scoreDiff > 0 ? 'improving' : scoreDiff < 0 ? 'degrading' : 'stable',
35
- summary: scoreDiff > 0
36
- ? `Health improved by +${scoreDiff} pts since last scan.`
37
- : scoreDiff < 0
38
- ? `Health decreased by ${scoreDiff} pts since last scan.`
39
- : 'Health score matches previous scan.',
40
- };
20
+ if (!prev || !curr)
21
+ return null;
22
+ const prevScore = prev.health?.score ?? prev.score ?? 100;
23
+ const currScore = curr.health?.score ?? curr.score ?? 100;
24
+ const scoreDiff = currScore - prevScore;
25
+ const prevFiles = prev.scan?.files?.length ?? prev.files?.length ?? 0;
26
+ const currFiles = curr.scan?.files?.length ?? curr.files?.length ?? 0;
27
+ const filesDiff = currFiles - prevFiles;
28
+ return {
29
+ scoreDiff,
30
+ filesDiff,
31
+ trend: scoreDiff > 0 ? 'improving' : scoreDiff < 0 ? 'degrading' : 'stable',
32
+ summary: scoreDiff > 0
33
+ ? `Health improved by +${scoreDiff} pts since last scan.`
34
+ : scoreDiff < 0
35
+ ? `Health decreased by ${scoreDiff} pts since last scan.`
36
+ : 'Health score matches previous scan.',
37
+ };
41
38
  }
42
-
43
39
  export class ScanCache {
44
- constructor(storage = typeof localStorage !== 'undefined' ? localStorage : null) {
45
- this.storage = storage;
46
- this.memory = new Map();
47
- }
48
-
49
- get(key) {
50
- if (this.memory.has(key)) return this.memory.get(key);
51
- if (!this.storage) return null;
52
- try {
53
- const raw = this.storage.getItem(key);
54
- if (!raw) return null;
55
- const parsed = JSON.parse(raw);
56
- this.memory.set(key, parsed);
57
- return parsed;
58
- } catch {
59
- return null;
40
+ storage;
41
+ memory;
42
+ constructor(storage = typeof localStorage !== 'undefined' ? localStorage : null) {
43
+ this.storage = storage;
44
+ this.memory = new Map();
45
+ }
46
+ get(key) {
47
+ if (this.memory.has(key))
48
+ return this.memory.get(key);
49
+ if (!this.storage)
50
+ return null;
51
+ try {
52
+ const raw = this.storage.getItem(key);
53
+ if (!raw)
54
+ return null;
55
+ const parsed = JSON.parse(raw);
56
+ this.memory.set(key, parsed);
57
+ return parsed;
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ set(key, val) {
64
+ this.memory.set(key, val);
65
+ if (!this.storage)
66
+ return;
67
+ try {
68
+ this.storage.setItem(key, JSON.stringify(val));
69
+ }
70
+ catch {
71
+ // Quota exceeded or disabled
72
+ }
60
73
  }
61
- }
62
-
63
- set(key, val) {
64
- this.memory.set(key, val);
65
- if (!this.storage) return;
66
- try {
67
- this.storage.setItem(key, JSON.stringify(val));
68
- } catch {
69
- // Quota exceeded or disabled
74
+ clear() {
75
+ this.memory.clear();
70
76
  }
71
- }
72
-
73
- clear() {
74
- this.memory.clear();
75
- }
76
77
  }
78
+ //# sourceMappingURL=scanCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanCache.js","sourceRoot":"","sources":["../../src/public/js/scanCache.ts"],"names":[],"mappings":"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","sourcesContent":["// Scan caching & trend analysis. Pure logic so it is unit-tested without a browser.\n\nexport function hashString(str) {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return h.toString(16);\n}\n\nexport function repoCacheKey(scan) {\n if (!scan) return '';\n const id = scan.gitUrl || scan.root || scan.name || '';\n const summary = (scan.files || [])\n .map((f) => JSON.stringify([f.path, f.size, f.loc, f.imports, f.exports, f.findings]))\n .join('|');\n return `onboarder.cache.${hashString(id)}.${hashString(summary)}`;\n}\n\nexport function compareScans(prev, curr) {\n if (!prev || !curr) return null;\n const prevScore = prev.health?.score ?? prev.score ?? 100;\n const currScore = curr.health?.score ?? curr.score ?? 100;\n const scoreDiff = currScore - prevScore;\n const prevFiles = prev.scan?.files?.length ?? prev.files?.length ?? 0;\n const currFiles = curr.scan?.files?.length ?? curr.files?.length ?? 0;\n const filesDiff = currFiles - prevFiles;\n\n return {\n scoreDiff,\n filesDiff,\n trend: scoreDiff > 0 ? 'improving' : scoreDiff < 0 ? 'degrading' : 'stable',\n summary: scoreDiff > 0\n ? `Health improved by +${scoreDiff} pts since last scan.`\n : scoreDiff < 0\n ? `Health decreased by ${scoreDiff} pts since last scan.`\n : 'Health score matches previous scan.',\n };\n}\n\nexport class ScanCache {\n storage: any;\n memory: Map<string, any>;\n\n constructor(storage = typeof localStorage !== 'undefined' ? localStorage : null) {\n this.storage = storage;\n this.memory = new Map();\n }\n\n get(key) {\n if (this.memory.has(key)) return this.memory.get(key);\n if (!this.storage) return null;\n try {\n const raw = this.storage.getItem(key);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n this.memory.set(key, parsed);\n return parsed;\n } catch {\n return null;\n }\n }\n\n set(key, val) {\n this.memory.set(key, val);\n if (!this.storage) return;\n try {\n this.storage.setItem(key, JSON.stringify(val));\n } catch {\n // Quota exceeded or disabled\n }\n }\n\n clear() {\n this.memory.clear();\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare function initSearch(files: any[], options: any): {
2
+ show: (opener?: HTMLElement) => void;
3
+ hide: (restoreFocus?: boolean) => void;
4
+ destroy: () => void;
5
+ updateFiles: (newFiles: any, newScanId: any) => void;
6
+ isShowing: () => boolean;
7
+ };