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,59 +1,63 @@
1
1
  // Turns an LLM's raw answer into trustworthy Mermaid source.
2
2
  // Models wrap, apologize, and explain — this strips all of that back to the
3
3
  // diagram itself plus the one-line caption we ask for.
4
-
5
4
  // Pulls `{ caption, body }` out of `text`; returns null when there is no
6
5
  // flowchart to be found. `body` starts at the `flowchart`/`graph` line and
7
6
  // has trailing prose trimmed away.
8
7
  export function extractAIDiagram(text) {
9
- if (!text || typeof text !== 'string') return null;
10
-
11
- // Fences gone first — ```mermaid and plain ``` alike.
12
- const unfenced = text.replace(/```(?:mermaid)?/gi, '\n');
13
-
14
- const capMatch = unfenced.match(/^%%\s*caption:\s*(.+)$/m);
15
- const caption = capMatch ? capMatch[1].trim() : '';
16
-
17
- const start = unfenced.search(/^\s*(flowchart|graph)\b/m);
18
- if (start === -1) return null;
19
-
20
- const lines = unfenced.slice(start).split('\n');
21
- // Trim trailing prose: walk back past anything that doesn't look like
22
- // Mermaid. Labels, edges, subgraph blocks and classDefs all survive.
23
- const MERMAID_HINT = /-->|---|\[|\]|\(|\)|\bsubgraph\b|\bend\b|classDef|^class\b|%%|:::|^\s*[\w$]+\s*:/;
24
- while (lines.length) {
25
- const tail = lines[lines.length - 1].trim();
26
- if (!tail) {
27
- lines.pop();
28
- continue;
8
+ if (!text || typeof text !== 'string')
9
+ return null;
10
+ // Fences gone first — ```mermaid and plain ``` alike.
11
+ const unfenced = text.replace(/```(?:mermaid)?/gi, '\n');
12
+ const capMatch = unfenced.match(/^%%\s*caption:\s*(.+)$/m);
13
+ const caption = capMatch ? capMatch[1].trim() : '';
14
+ const start = unfenced.search(/^\s*(flowchart|graph)\b/m);
15
+ if (start === -1)
16
+ return null;
17
+ const lines = unfenced.slice(start).split('\n');
18
+ // Trim trailing prose: walk back past anything that doesn't look like
19
+ // Mermaid. Labels, edges, subgraph blocks and classDefs all survive.
20
+ const MERMAID_HINT = /-->|---|\[|\]|\(|\)|\bsubgraph\b|\bend\b|classDef|^class\b|%%|:::|^\s*[\w$]+\s*:/;
21
+ while (lines.length) {
22
+ const tail = lines[lines.length - 1].trim();
23
+ if (!tail) {
24
+ lines.pop();
25
+ continue;
26
+ }
27
+ if (MERMAID_HINT.test(tail))
28
+ break;
29
+ lines.pop(); // a sentence, not a diagram line
29
30
  }
30
- if (MERMAID_HINT.test(tail)) break;
31
- lines.pop(); // a sentence, not a diagram line
32
- }
33
-
34
- const body = lines.join('\n').trim();
35
- const meaningful = lines.filter((l) => l.trim() && !l.trim().startsWith('%%')).length;
36
- if (meaningful < 2) return null;
37
-
38
- return { caption, body };
31
+ const body = lines.join('\n').trim();
32
+ const meaningful = lines.filter((l) => l.trim() && !l.trim().startsWith('%%')).length;
33
+ if (meaningful < 2)
34
+ return null;
35
+ return { caption, body };
39
36
  }
40
-
41
37
  // AI nodes carry no stable ids, so clicks are matched by their text: a full
42
38
  // path hit first, then a unique-basename hit. Imperfect and honest about it.
43
39
  export function matchNodeText(text, files) {
44
- const t = String(text || '').trim();
45
- if (!t) return null;
46
- const exact = files.find((f) => t === f.path || t.endsWith('/' + f.path) || t === f.name && false);
47
- if (exact) return exact.path;
48
- let hit = null;
49
- for (const f of files) {
50
- if (!t.includes(f.name)) continue;
51
- if (hit && hit !== f.path) {
52
- // same basename twice — ambiguous only if the paths differ
53
- const dup = files.filter((x) => x.name === f.name);
54
- if (dup.length > 1) return null;
55
- }
56
- hit = f.path;
57
- }
58
- return hit;
40
+ const t = String(text || '').trim();
41
+ if (!t)
42
+ return null;
43
+ const exact = files.find((f) => t === f.path || t.endsWith('/' + f.path));
44
+ if (exact)
45
+ return exact.path;
46
+ const containsLabel = (label) => {
47
+ let at = t.indexOf(label);
48
+ while (at !== -1) {
49
+ if (!/[\w./-]/.test(t[at - 1] || '') && !/[\w./-]/.test(t[at + label.length] || ''))
50
+ return true;
51
+ at = t.indexOf(label, at + 1);
52
+ }
53
+ return false;
54
+ };
55
+ // Models often annotate the full path with a role or dependency count.
56
+ // Prefer that path before considering potentially duplicated basenames.
57
+ const paths = files.filter(f => containsLabel(f.path));
58
+ if (paths.length)
59
+ return paths.length === 1 ? paths[0].path : null;
60
+ const names = files.filter(f => containsLabel(f.name));
61
+ return names.length === 1 ? names[0].path : null;
59
62
  }
63
+ //# sourceMappingURL=aiMermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiMermaid.js","sourceRoot":"","sources":["../../src/shared/diagram/aiMermaid.ts"],"names":[],"mappings":"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","sourcesContent":["// Turns an LLM's raw answer into trustworthy Mermaid source.\n// Models wrap, apologize, and explain — this strips all of that back to the\n// diagram itself plus the one-line caption we ask for.\n\n// Pulls `{ caption, body }` out of `text`; returns null when there is no\n// flowchart to be found. `body` starts at the `flowchart`/`graph` line and\n// has trailing prose trimmed away.\nexport function extractAIDiagram(text) {\n if (!text || typeof text !== 'string') return null;\n\n // Fences gone first — ```mermaid and plain ``` alike.\n const unfenced = text.replace(/```(?:mermaid)?/gi, '\\n');\n\n const capMatch = unfenced.match(/^%%\\s*caption:\\s*(.+)$/m);\n const caption = capMatch ? capMatch[1].trim() : '';\n\n const start = unfenced.search(/^\\s*(flowchart|graph)\\b/m);\n if (start === -1) return null;\n\n const lines = unfenced.slice(start).split('\\n');\n // Trim trailing prose: walk back past anything that doesn't look like\n // Mermaid. Labels, edges, subgraph blocks and classDefs all survive.\n const MERMAID_HINT = /-->|---|\\[|\\]|\\(|\\)|\\bsubgraph\\b|\\bend\\b|classDef|^class\\b|%%|:::|^\\s*[\\w$]+\\s*:/;\n while (lines.length) {\n const tail = lines[lines.length - 1].trim();\n if (!tail) {\n lines.pop();\n continue;\n }\n if (MERMAID_HINT.test(tail)) break;\n lines.pop(); // a sentence, not a diagram line\n }\n\n const body = lines.join('\\n').trim();\n const meaningful = lines.filter((l) => l.trim() && !l.trim().startsWith('%%')).length;\n if (meaningful < 2) return null;\n\n return { caption, body };\n}\n\n// AI nodes carry no stable ids, so clicks are matched by their text: a full\n// path hit first, then a unique-basename hit. Imperfect and honest about it.\nexport function matchNodeText(text, files) {\n const t = String(text || '').trim();\n if (!t) return null;\n const exact = files.find((f) => t === f.path || t.endsWith('/' + f.path));\n if (exact) return exact.path;\n const containsLabel = (label: string) => {\n let at = t.indexOf(label);\n while (at !== -1) {\n if (!/[\\w./-]/.test(t[at - 1] || '') && !/[\\w./-]/.test(t[at + label.length] || '')) return true;\n at = t.indexOf(label, at + 1);\n }\n return false;\n };\n // Models often annotate the full path with a role or dependency count.\n // Prefer that path before considering potentially duplicated basenames.\n const paths = files.filter(f => containsLabel(f.path));\n if (paths.length) return paths.length === 1 ? paths[0].path : null;\n const names = files.filter(f => containsLabel(f.name));\n return names.length === 1 ? names[0].path : null;\n}\n"]}
@@ -0,0 +1,16 @@
1
+ export declare function atlasSpecs(scan: any, facts: any, manifest: any, patterns: any): {
2
+ kind: string;
3
+ path: string;
4
+ title: string;
5
+ sub: string;
6
+ }[];
7
+ export declare function atlasDiagram(spec: any, { scan, facts, manifest, patterns }: {
8
+ facts: any;
9
+ manifest: any;
10
+ patterns: any;
11
+ scan: any;
12
+ }): {
13
+ source: string;
14
+ nodes: {};
15
+ };
16
+ export declare function filterAtlasItems(specs: any, { text, showTests }?: Record<string, any>): any;
@@ -9,85 +9,76 @@
9
9
  // reader will use one card's worth of.
10
10
  //
11
11
  // Pure, like everything under shared/: no DOM, no app state, no network.
12
-
13
- import {
14
- overviewDiagram, folderDiagram, fileDetailDiagram, servicesDiagram, layersDiagram,
15
- } from './mermaid.js';
12
+ import { overviewDiagram, folderDiagram, fileDetailDiagram, servicesDiagram, layersDiagram, } from './mermaid.js';
16
13
  import { isTestPath } from '../analyzer/pathUtil.js';
17
-
18
14
  // Both caps exist to keep the card list scrollable rather than endless. Files
19
15
  // are ranked by fan-in first, so the 200 that survive are the ones the rest of
20
16
  // the repo actually depends on — the cap trims the leaves, not the hubs.
21
17
  const MAX_FOLDERS = 120;
22
18
  const MAX_FILES = 200;
23
-
24
19
  const plural = (n, word) => `${n} ${n === 1 ? word : word + 's'}`;
25
-
26
20
  const strata = (patterns) => {
27
- const n = patterns.layersInfo.layers.length;
28
- return `${n} ${n === 1 ? 'stratum' : 'strata'}`;
21
+ const n = patterns.layersInfo.layers.length;
22
+ return `${n} ${n === 1 ? 'stratum' : 'strata'}`;
29
23
  };
30
-
31
24
  // The catalogue, in the order it is shown: the whole-repo maps first, then one
32
25
  // card per folder, then one per file.
33
26
  export function atlasSpecs(scan, facts, manifest, patterns) {
34
- const specs = [
35
- { kind: 'overview', path: '', title: 'Overview map', sub: plural(scan.stats.filesParsed, 'file') },
36
- { kind: 'layers', path: '', title: 'Architecture layers', sub: strata(patterns) },
37
- ];
38
-
39
- // A services map only means something once a manifest declared some.
40
- if (manifest?.services?.length) {
41
- specs.push({
42
- kind: 'services', path: '', title: 'Services',
43
- sub: `${manifest.services.length} declared`,
44
- });
45
- }
46
-
47
- const counts = new Map();
48
- for (const f of scan.files) counts.set(f.dir, (counts.get(f.dir) || 0) + 1);
49
- for (const folder of [...counts.keys()].sort().slice(0, MAX_FOLDERS)) {
50
- specs.push({
51
- kind: 'folder', path: folder,
52
- title: (folder || '(repo root)') + '/',
53
- sub: plural(counts.get(folder), 'file'),
54
- });
55
- }
56
-
57
- const ranked = scan.files.slice()
58
- .sort((a, b) => (facts.fanIn[b.path] || 0) - (facts.fanIn[a.path] || 0)
59
- || a.path.localeCompare(b.path))
60
- .slice(0, MAX_FILES);
61
- for (const f of ranked) {
62
- specs.push({
63
- kind: 'file', path: f.path, title: f.path,
64
- sub: plural(facts.fanIn[f.path] || 0, 'dependent'),
65
- });
66
- }
67
-
68
- return specs;
27
+ const specs = [
28
+ { kind: 'overview', path: '', title: 'Overview map', sub: plural(scan.stats.filesParsed, 'file') },
29
+ { kind: 'layers', path: '', title: 'Architecture layers', sub: strata(patterns) },
30
+ ];
31
+ // A services map only means something once a manifest declared some.
32
+ if (manifest?.services?.length) {
33
+ specs.push({
34
+ kind: 'services', path: '', title: 'Services',
35
+ sub: `${manifest.services.length} declared`,
36
+ });
37
+ }
38
+ const counts = new Map();
39
+ for (const f of scan.files)
40
+ counts.set(f.dir, (counts.get(f.dir) || 0) + 1);
41
+ for (const folder of [...counts.keys()].sort().slice(0, MAX_FOLDERS)) {
42
+ specs.push({
43
+ kind: 'folder', path: folder,
44
+ title: (folder || '(repo root)') + '/',
45
+ sub: plural(counts.get(folder), 'file'),
46
+ });
47
+ }
48
+ const ranked = scan.files.slice()
49
+ .sort((a, b) => (facts.fanIn[b.path] || 0) - (facts.fanIn[a.path] || 0)
50
+ || a.path.localeCompare(b.path))
51
+ .slice(0, MAX_FILES);
52
+ for (const f of ranked) {
53
+ specs.push({
54
+ kind: 'file', path: f.path, title: f.path,
55
+ sub: plural(facts.fanIn[f.path] || 0, 'dependent'),
56
+ });
57
+ }
58
+ return specs;
69
59
  }
70
-
71
60
  // Draws one card. Called on open, so a card the reader never touches costs
72
61
  // nothing but its heading.
73
62
  export function atlasDiagram(spec, { scan, facts, manifest, patterns }) {
74
- switch (spec.kind) {
75
- case 'overview': return overviewDiagram(scan, facts);
76
- case 'layers': return layersDiagram(scan, facts, patterns.layersInfo);
77
- case 'services': return servicesDiagram(scan, manifest);
78
- case 'file': return fileDetailDiagram(scan, facts, spec.path);
79
- default: return folderDiagram(scan, facts, spec.path);
80
- }
63
+ switch (spec.kind) {
64
+ case 'overview': return overviewDiagram(scan, facts);
65
+ case 'layers': return layersDiagram(scan, facts, patterns.layersInfo);
66
+ case 'services': return servicesDiagram(scan, manifest);
67
+ case 'file': return fileDetailDiagram(scan, facts, spec.path);
68
+ default: return folderDiagram(scan, facts, spec.path);
69
+ }
81
70
  }
82
-
83
71
  // The stage filters, applied to the catalogue. Matching is on the title so that
84
72
  // typing "overview" finds the overview card, which has no path of its own; the
85
73
  // tests toggle is by path, and only files have one worth testing.
86
74
  export function filterAtlasItems(specs, { text = '', showTests = true } = {}) {
87
- const needle = text.trim().toLowerCase();
88
- if (!needle && showTests) return specs;
89
- return specs.filter((it) => {
90
- if (!showTests && it.kind === 'file' && isTestPath(it.path)) return false;
91
- return !needle || it.title.toLowerCase().includes(needle);
92
- });
75
+ const needle = text.trim().toLowerCase();
76
+ if (!needle && showTests)
77
+ return specs;
78
+ return specs.filter((it) => {
79
+ if (!showTests && it.kind === 'file' && isTestPath(it.path))
80
+ return false;
81
+ return !needle || it.title.toLowerCase().includes(needle);
82
+ });
93
83
  }
84
+ //# sourceMappingURL=atlas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../src/shared/diagram/atlas.ts"],"names":[],"mappings":"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","sourcesContent":["// The atlas: every map the app knows how to draw, listed in one place.\n//\n// The list is a catalogue of *specs* — kind, subject, title, subtitle — and\n// nothing more. Drawing is deliberately separate: `atlasDiagram` turns one spec\n// into Mermaid when a card is actually opened. The list used to carry the\n// generated source for all of its entries, which meant opening the atlas built\n// three whole-repo maps, 120 folder graphs and 200 file graphs up front, to show\n// a page of headings. On a mid-size repo that is a visible stall for work the\n// reader will use one card's worth of.\n//\n// Pure, like everything under shared/: no DOM, no app state, no network.\n\nimport {\n overviewDiagram, folderDiagram, fileDetailDiagram, servicesDiagram, layersDiagram,\n} from './mermaid.js';\nimport { isTestPath } from '../analyzer/pathUtil.js';\n\n// Both caps exist to keep the card list scrollable rather than endless. Files\n// are ranked by fan-in first, so the 200 that survive are the ones the rest of\n// the repo actually depends on — the cap trims the leaves, not the hubs.\nconst MAX_FOLDERS = 120;\nconst MAX_FILES = 200;\n\nconst plural = (n, word) => `${n} ${n === 1 ? word : word + 's'}`;\n\nconst strata = (patterns) => {\n const n = patterns.layersInfo.layers.length;\n return `${n} ${n === 1 ? 'stratum' : 'strata'}`;\n};\n\n// The catalogue, in the order it is shown: the whole-repo maps first, then one\n// card per folder, then one per file.\nexport function atlasSpecs(scan, facts, manifest, patterns) {\n const specs = [\n { kind: 'overview', path: '', title: 'Overview map', sub: plural(scan.stats.filesParsed, 'file') },\n { kind: 'layers', path: '', title: 'Architecture layers', sub: strata(patterns) },\n ];\n\n // A services map only means something once a manifest declared some.\n if (manifest?.services?.length) {\n specs.push({\n kind: 'services', path: '', title: 'Services',\n sub: `${manifest.services.length} declared`,\n });\n }\n\n const counts = new Map();\n for (const f of scan.files) counts.set(f.dir, (counts.get(f.dir) || 0) + 1);\n for (const folder of [...counts.keys()].sort().slice(0, MAX_FOLDERS)) {\n specs.push({\n kind: 'folder', path: folder,\n title: (folder || '(repo root)') + '/',\n sub: plural(counts.get(folder), 'file'),\n });\n }\n\n const ranked = scan.files.slice()\n .sort((a, b) => (facts.fanIn[b.path] || 0) - (facts.fanIn[a.path] || 0)\n || a.path.localeCompare(b.path))\n .slice(0, MAX_FILES);\n for (const f of ranked) {\n specs.push({\n kind: 'file', path: f.path, title: f.path,\n sub: plural(facts.fanIn[f.path] || 0, 'dependent'),\n });\n }\n\n return specs;\n}\n\n// Draws one card. Called on open, so a card the reader never touches costs\n// nothing but its heading.\nexport function atlasDiagram(spec, { scan, facts, manifest, patterns }) {\n switch (spec.kind) {\n case 'overview': return overviewDiagram(scan, facts);\n case 'layers': return layersDiagram(scan, facts, patterns.layersInfo);\n case 'services': return servicesDiagram(scan, manifest);\n case 'file': return fileDetailDiagram(scan, facts, spec.path);\n default: return folderDiagram(scan, facts, spec.path);\n }\n}\n\n// The stage filters, applied to the catalogue. Matching is on the title so that\n// typing \"overview\" finds the overview card, which has no path of its own; the\n// tests toggle is by path, and only files have one worth testing.\nexport function filterAtlasItems(specs, { text = '', showTests = true }: Record<string, any> = {}) {\n const needle = text.trim().toLowerCase();\n if (!needle && showTests) return specs;\n return specs.filter((it) => {\n if (!showTests && it.kind === 'file' && isTestPath(it.path)) return false;\n return !needle || it.title.toLowerCase().includes(needle);\n });\n}\n"]}
@@ -0,0 +1,43 @@
1
+ export declare function setDiagramTheme(theme: any): void;
2
+ export declare function getDiagramTheme(): string;
3
+ export declare function diagramThemeBlock(): string;
4
+ export declare function overviewDiagram(scan: any, facts: any): {
5
+ source: string;
6
+ nodes: Record<string, any>;
7
+ };
8
+ export declare function folderDiagram(scan: any, facts: any, folder: any, opts?: Record<string, any>): {
9
+ source: string;
10
+ nodes: {};
11
+ };
12
+ export declare function fileDetailDiagram(scan: any, facts: any, path: any): {
13
+ source: string;
14
+ nodes: {};
15
+ };
16
+ export declare function callsDiagram(file: any): {
17
+ source: string;
18
+ nodes: {};
19
+ };
20
+ export declare function servicesDiagram(scan: any, manifest: any): {
21
+ source: string;
22
+ nodes: {};
23
+ };
24
+ export declare function emptyDiagram(note: any): {
25
+ source: string;
26
+ nodes: {};
27
+ };
28
+ export declare function layersDiagram(scan: any, facts: any, layersInfo: any, opts?: Record<string, any>): {
29
+ source: string;
30
+ nodes: Record<string, any>;
31
+ };
32
+ export declare function healthDiagram(scan: any, facts: any, health: any, opts?: Record<string, any>): {
33
+ source: string;
34
+ nodes: Record<string, any>;
35
+ };
36
+ export declare function securityDiagram(scan: any, facts: any, security: any, opts?: Record<string, any>): {
37
+ source: string;
38
+ nodes: Record<string, any>;
39
+ };
40
+ export declare function historyDiagram(scan: any, facts: any, history: any, opts?: Record<string, any>): {
41
+ source: string;
42
+ nodes: {};
43
+ };