codebase-onboarder 0.6.0 → 0.7.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 (448) hide show
  1. package/README.md +174 -46
  2. package/bin/build-if-source.js +23 -0
  3. package/cli/commands.d.ts +26 -0
  4. package/cli/commands.js +836 -811
  5. package/cli/commands.js.map +1 -0
  6. package/cli/explorer/advanced.d.ts +14 -0
  7. package/cli/explorer/advanced.js +321 -329
  8. package/cli/explorer/advanced.js.map +1 -0
  9. package/cli/explorer/app.d.ts +1 -0
  10. package/cli/explorer/app.js +384 -313
  11. package/cli/explorer/app.js.map +1 -0
  12. package/cli/explorer/assistant.d.ts +9 -0
  13. package/cli/explorer/assistant.js +58 -0
  14. package/cli/explorer/assistant.js.map +1 -0
  15. package/cli/explorer/commands.d.ts +17 -0
  16. package/cli/explorer/commands.js +368 -302
  17. package/cli/explorer/commands.js.map +1 -0
  18. package/cli/explorer/featureViews.d.ts +124 -0
  19. package/cli/explorer/featureViews.js +179 -0
  20. package/cli/explorer/featureViews.js.map +1 -0
  21. package/cli/explorer/github.d.ts +21 -0
  22. package/cli/explorer/github.js +42 -44
  23. package/cli/explorer/github.js.map +1 -0
  24. package/cli/explorer/graphs.d.ts +7 -0
  25. package/cli/explorer/graphs.js +90 -95
  26. package/cli/explorer/graphs.js.map +1 -0
  27. package/cli/explorer/picker.d.ts +22 -0
  28. package/cli/explorer/picker.js +150 -0
  29. package/cli/explorer/picker.js.map +1 -0
  30. package/cli/explorer/report.d.ts +85 -0
  31. package/cli/explorer/report.js +60 -0
  32. package/cli/explorer/report.js.map +1 -0
  33. package/cli/explorer/session.d.ts +449 -0
  34. package/cli/explorer/session.js +143 -144
  35. package/cli/explorer/session.js.map +1 -0
  36. package/cli/explorer/views.d.ts +19 -0
  37. package/cli/explorer/views.js +465 -482
  38. package/cli/explorer/views.js.map +1 -0
  39. package/cli/explorer/wrap.d.ts +1 -0
  40. package/cli/explorer/wrap.js +28 -44
  41. package/cli/explorer/wrap.js.map +1 -0
  42. package/cli/main.d.ts +1 -0
  43. package/cli/main.js +214 -161
  44. package/cli/main.js.map +1 -0
  45. package/cli/prompt.d.ts +5 -0
  46. package/cli/prompt.js +84 -80
  47. package/cli/prompt.js.map +1 -0
  48. package/cli/scanOptions.d.ts +2 -0
  49. package/cli/scanOptions.js +11 -0
  50. package/cli/scanOptions.js.map +1 -0
  51. package/cli/ui.d.ts +33 -0
  52. package/cli/ui.js +35 -44
  53. package/cli/ui.js.map +1 -0
  54. package/cli/wizard.d.ts +187 -0
  55. package/cli/wizard.js +304 -284
  56. package/cli/wizard.js.map +1 -0
  57. package/package.json +15 -4
  58. package/public/app.d.ts +1 -0
  59. package/public/app.js +1057 -1009
  60. package/public/app.js.map +1 -0
  61. package/public/browser.d.ts +68 -0
  62. package/public/browser.js +2 -0
  63. package/public/browser.js.map +1 -0
  64. package/public/index.html +30 -13
  65. package/public/js/about.d.ts +6 -0
  66. package/public/js/about.js +152 -172
  67. package/public/js/about.js.map +1 -0
  68. package/public/js/aiDraft.d.ts +3 -0
  69. package/public/js/aiDraft.js +116 -124
  70. package/public/js/aiDraft.js.map +1 -0
  71. package/public/js/analysisPanel.d.ts +7 -0
  72. package/public/js/analysisPanel.js +166 -166
  73. package/public/js/analysisPanel.js.map +1 -0
  74. package/public/js/analysisReport.d.ts +38 -0
  75. package/public/js/analysisReport.js +105 -110
  76. package/public/js/analysisReport.js.map +1 -0
  77. package/public/js/api.d.ts +26 -0
  78. package/public/js/api.js +176 -167
  79. package/public/js/api.js.map +1 -0
  80. package/public/js/atlas.d.ts +6 -0
  81. package/public/js/atlas.js +50 -58
  82. package/public/js/atlas.js.map +1 -0
  83. package/public/js/blameView.d.ts +2 -0
  84. package/public/js/blameView.js +36 -37
  85. package/public/js/blameView.js.map +1 -0
  86. package/public/js/codeTab.d.ts +3 -0
  87. package/public/js/codeTab.js +175 -180
  88. package/public/js/codeTab.js.map +1 -0
  89. package/public/js/codeViewer.d.ts +5 -0
  90. package/public/js/codeViewer.js +162 -150
  91. package/public/js/codeViewer.js.map +1 -0
  92. package/public/js/components/FileChip.d.ts +9 -0
  93. package/public/js/components/FileChip.js +45 -49
  94. package/public/js/components/FileChip.js.map +1 -0
  95. package/public/js/components/MetricSparkline.d.ts +7 -0
  96. package/public/js/components/MetricSparkline.js +35 -44
  97. package/public/js/components/MetricSparkline.js.map +1 -0
  98. package/public/js/components/RiskBadge.d.ts +9 -0
  99. package/public/js/components/RiskBadge.js +55 -63
  100. package/public/js/components/RiskBadge.js.map +1 -0
  101. package/public/js/deepAnalysisView.d.ts +99 -0
  102. package/public/js/deepAnalysisView.js +282 -302
  103. package/public/js/deepAnalysisView.js.map +1 -0
  104. package/public/js/diagramPane.d.ts +8 -0
  105. package/public/js/diagramPane.js +133 -135
  106. package/public/js/diagramPane.js.map +1 -0
  107. package/public/js/diffView.d.ts +6 -0
  108. package/public/js/diffView.js +222 -209
  109. package/public/js/diffView.js.map +1 -0
  110. package/public/js/docsView.d.ts +2 -0
  111. package/public/js/docsView.js +441 -442
  112. package/public/js/docsView.js.map +1 -0
  113. package/public/js/dom.d.ts +189 -0
  114. package/public/js/dom.js +5 -0
  115. package/public/js/dom.js.map +1 -0
  116. package/public/js/fileSourceBrowser.d.ts +5 -0
  117. package/public/js/fileSourceBrowser.js +33 -41
  118. package/public/js/fileSourceBrowser.js.map +1 -0
  119. package/public/js/flameGraph.d.ts +5 -0
  120. package/public/js/flameGraph.js +62 -72
  121. package/public/js/flameGraph.js.map +1 -0
  122. package/public/js/forceGraph.d.ts +10 -0
  123. package/public/js/forceGraph.js +581 -556
  124. package/public/js/forceGraph.js.map +1 -0
  125. package/public/js/heatmap.d.ts +4 -0
  126. package/public/js/heatmap.js +142 -164
  127. package/public/js/heatmap.js.map +1 -0
  128. package/public/js/highlight.d.ts +2 -0
  129. package/public/js/highlight.js +116 -107
  130. package/public/js/highlight.js.map +1 -0
  131. package/public/js/html.d.ts +2 -0
  132. package/public/js/html.js +14 -44
  133. package/public/js/html.js.map +1 -0
  134. package/public/js/insightsView.d.ts +5 -0
  135. package/public/js/insightsView.js +93 -111
  136. package/public/js/insightsView.js.map +1 -0
  137. package/public/js/inspector.d.ts +37 -0
  138. package/public/js/inspector.js +416 -445
  139. package/public/js/inspector.js.map +1 -0
  140. package/public/js/llm.d.ts +113 -0
  141. package/public/js/llm.js +233 -272
  142. package/public/js/llm.js.map +1 -0
  143. package/public/js/mapView.d.ts +3 -0
  144. package/public/js/mapView.js +121 -120
  145. package/public/js/mapView.js.map +1 -0
  146. package/public/js/markdown.d.ts +3 -0
  147. package/public/js/markdown.js +84 -91
  148. package/public/js/markdown.js.map +1 -0
  149. package/public/js/mindmap.d.ts +32 -0
  150. package/public/js/mindmap.js +244 -259
  151. package/public/js/mindmap.js.map +1 -0
  152. package/public/js/mobilePanels.d.ts +5 -0
  153. package/public/js/mobilePanels.js +50 -0
  154. package/public/js/mobilePanels.js.map +1 -0
  155. package/public/js/repoFiles.d.ts +12 -0
  156. package/public/js/repoFiles.js +28 -27
  157. package/public/js/repoFiles.js.map +1 -0
  158. package/public/js/reviewView.d.ts +28 -0
  159. package/public/js/reviewView.js +256 -0
  160. package/public/js/reviewView.js.map +1 -0
  161. package/public/js/sbomView.d.ts +3 -0
  162. package/public/js/sbomView.js +59 -67
  163. package/public/js/sbomView.js.map +1 -0
  164. package/public/js/scanCache.d.ts +16 -0
  165. package/public/js/scanCache.js +67 -65
  166. package/public/js/scanCache.js.map +1 -0
  167. package/public/js/search.d.ts +7 -0
  168. package/public/js/search.js +868 -800
  169. package/public/js/search.js.map +1 -0
  170. package/public/js/searchLocal.d.ts +42 -0
  171. package/public/js/searchLocal.js +87 -0
  172. package/public/js/searchLocal.js.map +1 -0
  173. package/public/js/serverSettings.d.ts +5 -0
  174. package/public/js/serverSettings.js +153 -164
  175. package/public/js/serverSettings.js.map +1 -0
  176. package/public/js/state.d.ts +798 -0
  177. package/public/js/state.js +114 -122
  178. package/public/js/state.js.map +1 -0
  179. package/public/js/tour.d.ts +6 -0
  180. package/public/js/tour.js +5 -7
  181. package/public/js/tour.js.map +1 -0
  182. package/public/js/transitions.d.ts +2 -0
  183. package/public/js/transitions.js +9 -10
  184. package/public/js/transitions.js.map +1 -0
  185. package/public/js/tree.d.ts +12 -0
  186. package/public/js/tree.js +157 -154
  187. package/public/js/tree.js.map +1 -0
  188. package/public/js/workflowsView.d.ts +3 -0
  189. package/public/js/workflowsView.js +15 -22
  190. package/public/js/workflowsView.js.map +1 -0
  191. package/public/search.css +495 -0
  192. package/public/styles.css +163 -346
  193. package/public/workbench.css +166 -0
  194. package/server/apiAuth.d.ts +3 -0
  195. package/server/apiAuth.js +18 -20
  196. package/server/apiAuth.js.map +1 -0
  197. package/server/apiDiff.d.ts +2 -0
  198. package/server/apiDiff.js +20 -18
  199. package/server/apiDiff.js.map +1 -0
  200. package/server/apiDocs.d.ts +2 -0
  201. package/server/apiDocs.js +38 -40
  202. package/server/apiDocs.js.map +1 -0
  203. package/server/apiFile.d.ts +1 -0
  204. package/server/apiFile.js +14 -17
  205. package/server/apiFile.js.map +1 -0
  206. package/server/apiGitBlame.d.ts +2 -0
  207. package/server/apiGitBlame.js +50 -51
  208. package/server/apiGitBlame.js.map +1 -0
  209. package/server/apiMcp.d.ts +4 -0
  210. package/server/apiMcp.js +64 -66
  211. package/server/apiMcp.js.map +1 -0
  212. package/server/apiReview.d.ts +2 -0
  213. package/server/apiReview.js +45 -0
  214. package/server/apiReview.js.map +1 -0
  215. package/server/apiScan.d.ts +5 -0
  216. package/server/apiScan.js +90 -71
  217. package/server/apiScan.js.map +1 -0
  218. package/server/apiSearch.d.ts +33 -0
  219. package/server/apiSearch.js +184 -200
  220. package/server/apiSearch.js.map +1 -0
  221. package/server/apiSettings.d.ts +4 -0
  222. package/server/apiSettings.js +84 -85
  223. package/server/apiSettings.js.map +1 -0
  224. package/server/apiTools.d.ts +3 -0
  225. package/server/apiTools.js +55 -56
  226. package/server/apiTools.js.map +1 -0
  227. package/server/auth.d.ts +5 -0
  228. package/server/auth.js +54 -51
  229. package/server/auth.js.map +1 -0
  230. package/server/config.d.ts +42 -0
  231. package/server/config.js +189 -194
  232. package/server/config.js.map +1 -0
  233. package/server/daemon.d.ts +12 -0
  234. package/server/daemon.js +124 -114
  235. package/server/daemon.js.map +1 -0
  236. package/server/fileSourceNode.d.ts +2 -0
  237. package/server/fileSourceNode.js +34 -36
  238. package/server/fileSourceNode.js.map +1 -0
  239. package/server/gitClone.d.ts +9 -0
  240. package/server/gitClone.js +59 -61
  241. package/server/gitClone.js.map +1 -0
  242. package/server/gitDiff.d.ts +36 -0
  243. package/server/gitDiff.js +271 -169
  244. package/server/gitDiff.js.map +1 -0
  245. package/server/gitHistory.d.ts +12 -0
  246. package/server/gitHistory.js +80 -80
  247. package/server/gitHistory.js.map +1 -0
  248. package/server/gitRemote.d.ts +12 -0
  249. package/server/gitRemote.js +37 -38
  250. package/server/gitRemote.js.map +1 -0
  251. package/server/htmlText.d.ts +4 -0
  252. package/server/htmlText.js +16 -23
  253. package/server/htmlText.js.map +1 -0
  254. package/server/http.d.ts +5 -0
  255. package/server/http.js +27 -30
  256. package/server/http.js.map +1 -0
  257. package/server/httpGuards.d.ts +2 -0
  258. package/server/httpGuards.js +47 -43
  259. package/server/httpGuards.js.map +1 -0
  260. package/server/https.d.ts +34 -0
  261. package/server/https.js +121 -111
  262. package/server/https.js.map +1 -0
  263. package/server/index.d.ts +40 -0
  264. package/server/index.js +139 -147
  265. package/server/index.js.map +1 -0
  266. package/server/layout.d.ts +26 -0
  267. package/server/layout.js +59 -64
  268. package/server/layout.js.map +1 -0
  269. package/server/llmProxy.d.ts +3 -0
  270. package/server/llmProxy.js +137 -135
  271. package/server/llmProxy.js.map +1 -0
  272. package/server/logger.d.ts +38 -0
  273. package/server/logger.js +198 -211
  274. package/server/logger.js.map +1 -0
  275. package/server/mcp/analysis.d.ts +29 -0
  276. package/server/mcp/analysis.js +99 -120
  277. package/server/mcp/analysis.js.map +1 -0
  278. package/server/mcp/http.d.ts +9 -0
  279. package/server/mcp/http.js +128 -137
  280. package/server/mcp/http.js.map +1 -0
  281. package/server/mcp/runner.d.ts +68 -0
  282. package/server/mcp/runner.js +208 -218
  283. package/server/mcp/runner.js.map +1 -0
  284. package/server/mcp/server.d.ts +29 -0
  285. package/server/mcp/server.js +166 -179
  286. package/server/mcp/server.js.map +1 -0
  287. package/server/mcp/standalone.d.ts +1 -0
  288. package/server/mcp/standalone.js +8 -10
  289. package/server/mcp/standalone.js.map +1 -0
  290. package/server/mcp/tools.d.ts +2020 -0
  291. package/server/mcp/tools.js +523 -574
  292. package/server/mcp/tools.js.map +1 -0
  293. package/server/paths.d.ts +3 -0
  294. package/server/paths.js +17 -15
  295. package/server/paths.js.map +1 -0
  296. package/server/pidfile.d.ts +9 -0
  297. package/server/pidfile.js +43 -45
  298. package/server/pidfile.js.map +1 -0
  299. package/server/review.d.ts +5 -0
  300. package/server/review.js +35 -0
  301. package/server/review.js.map +1 -0
  302. package/server/router.d.ts +33 -0
  303. package/server/router.js +191 -197
  304. package/server/router.js.map +1 -0
  305. package/server/scanRequest.d.ts +3 -0
  306. package/server/scanRequest.js +36 -0
  307. package/server/scanRequest.js.map +1 -0
  308. package/server/searchIndex.d.ts +17 -0
  309. package/server/searchIndex.js +83 -80
  310. package/server/searchIndex.js.map +1 -0
  311. package/server/sessions.d.ts +14 -0
  312. package/server/sessions.js +62 -70
  313. package/server/sessions.js.map +1 -0
  314. package/server/startup.d.ts +118 -0
  315. package/server/startup.js +143 -148
  316. package/server/startup.js.map +1 -0
  317. package/server/static.d.ts +6 -0
  318. package/server/static.js +28 -31
  319. package/server/static.js.map +1 -0
  320. package/server/tools/install.d.ts +4 -0
  321. package/server/tools/install.js +176 -185
  322. package/server/tools/install.js.map +1 -0
  323. package/server/tools/parse.d.ts +8 -0
  324. package/server/tools/parse.js +112 -114
  325. package/server/tools/parse.js.map +1 -0
  326. package/server/tools/platform.d.ts +9 -0
  327. package/server/tools/platform.js +49 -47
  328. package/server/tools/platform.js.map +1 -0
  329. package/server/tools/registry.d.ts +137 -0
  330. package/server/tools/registry.js +173 -172
  331. package/server/tools/registry.js.map +1 -0
  332. package/server/tools/scan.d.ts +34 -0
  333. package/server/tools/scan.js +89 -98
  334. package/server/tools/scan.js.map +1 -0
  335. package/server/tools.d.ts +34 -0
  336. package/server/tools.js +94 -107
  337. package/server/tools.js.map +1 -0
  338. package/server/tunnel.d.ts +29 -0
  339. package/server/tunnel.js +61 -66
  340. package/server/tunnel.js.map +1 -0
  341. package/shared/analyzer/docs.d.ts +16 -0
  342. package/shared/analyzer/docs.js +99 -93
  343. package/shared/analyzer/docs.js.map +1 -0
  344. package/shared/analyzer/explainLocal.d.ts +4 -0
  345. package/shared/analyzer/explainLocal.js +122 -142
  346. package/shared/analyzer/explainLocal.js.map +1 -0
  347. package/shared/analyzer/github.d.ts +37 -0
  348. package/shared/analyzer/github.js +41 -43
  349. package/shared/analyzer/github.js.map +1 -0
  350. package/shared/analyzer/graph.d.ts +41 -0
  351. package/shared/analyzer/graph.js +393 -400
  352. package/shared/analyzer/graph.js.map +1 -0
  353. package/shared/analyzer/health.d.ts +33 -0
  354. package/shared/analyzer/health.js +197 -193
  355. package/shared/analyzer/health.js.map +1 -0
  356. package/shared/analyzer/history.d.ts +29 -0
  357. package/shared/analyzer/history.js +110 -111
  358. package/shared/analyzer/history.js.map +1 -0
  359. package/shared/analyzer/jsonConfig.d.ts +2 -0
  360. package/shared/analyzer/jsonConfig.js +61 -0
  361. package/shared/analyzer/jsonConfig.js.map +1 -0
  362. package/shared/analyzer/languages/csharp.d.ts +26 -0
  363. package/shared/analyzer/languages/csharp.js +83 -88
  364. package/shared/analyzer/languages/csharp.js.map +1 -0
  365. package/shared/analyzer/languages/generic.d.ts +23 -0
  366. package/shared/analyzer/languages/generic.js +94 -105
  367. package/shared/analyzer/languages/generic.js.map +1 -0
  368. package/shared/analyzer/languages/go.d.ts +24 -0
  369. package/shared/analyzer/languages/go.js +45 -54
  370. package/shared/analyzer/languages/go.js.map +1 -0
  371. package/shared/analyzer/languages/index.d.ts +6 -0
  372. package/shared/analyzer/languages/index.js +19 -20
  373. package/shared/analyzer/languages/index.js.map +1 -0
  374. package/shared/analyzer/languages/java.d.ts +20 -0
  375. package/shared/analyzer/languages/java.js +73 -78
  376. package/shared/analyzer/languages/java.js.map +1 -0
  377. package/shared/analyzer/languages/javascript.d.ts +12 -0
  378. package/shared/analyzer/languages/javascript.js +258 -209
  379. package/shared/analyzer/languages/javascript.js.map +1 -0
  380. package/shared/analyzer/languages/python.d.ts +23 -0
  381. package/shared/analyzer/languages/python.js +92 -100
  382. package/shared/analyzer/languages/python.js.map +1 -0
  383. package/shared/analyzer/languages/rust.d.ts +17 -0
  384. package/shared/analyzer/languages/rust.js +96 -98
  385. package/shared/analyzer/languages/rust.js.map +1 -0
  386. package/shared/analyzer/languages/typescript.d.ts +11 -0
  387. package/shared/analyzer/languages/typescript.js +117 -116
  388. package/shared/analyzer/languages/typescript.js.map +1 -0
  389. package/shared/analyzer/licenses.d.ts +18 -0
  390. package/shared/analyzer/licenses.js +130 -133
  391. package/shared/analyzer/licenses.js.map +1 -0
  392. package/shared/analyzer/metrics.d.ts +20 -0
  393. package/shared/analyzer/metrics.js +112 -104
  394. package/shared/analyzer/metrics.js.map +1 -0
  395. package/shared/analyzer/pathUtil.d.ts +10 -0
  396. package/shared/analyzer/pathUtil.js +29 -35
  397. package/shared/analyzer/pathUtil.js.map +1 -0
  398. package/shared/analyzer/patterns.d.ts +11 -0
  399. package/shared/analyzer/patterns.js +231 -253
  400. package/shared/analyzer/patterns.js.map +1 -0
  401. package/shared/analyzer/scan.d.ts +62 -0
  402. package/shared/analyzer/scan.js +451 -442
  403. package/shared/analyzer/scan.js.map +1 -0
  404. package/shared/analyzer/scanControl.d.ts +11 -0
  405. package/shared/analyzer/scanControl.js +62 -0
  406. package/shared/analyzer/scanControl.js.map +1 -0
  407. package/shared/analyzer/security.d.ts +18 -0
  408. package/shared/analyzer/security.js +159 -159
  409. package/shared/analyzer/security.js.map +1 -0
  410. package/shared/analyzer/services.d.ts +5 -0
  411. package/shared/analyzer/services.js +141 -138
  412. package/shared/analyzer/services.js.map +1 -0
  413. package/shared/analyzer/stack.d.ts +6 -0
  414. package/shared/analyzer/stack.js +134 -141
  415. package/shared/analyzer/stack.js.map +1 -0
  416. package/shared/analyzer/tour.d.ts +2 -0
  417. package/shared/analyzer/tour.js +45 -53
  418. package/shared/analyzer/tour.js.map +1 -0
  419. package/shared/analyzer/util.d.ts +8 -0
  420. package/shared/analyzer/util.js +130 -76
  421. package/shared/analyzer/util.js.map +1 -0
  422. package/shared/analyzer/workflows.d.ts +8 -0
  423. package/shared/analyzer/workflows.js +139 -134
  424. package/shared/analyzer/workflows.js.map +1 -0
  425. package/shared/contracts.d.ts +250 -0
  426. package/shared/contracts.js +2 -0
  427. package/shared/contracts.js.map +1 -0
  428. package/shared/diagram/aiFacts.d.ts +35 -0
  429. package/shared/diagram/aiFacts.js +102 -105
  430. package/shared/diagram/aiFacts.js.map +1 -0
  431. package/shared/diagram/aiMermaid.d.ts +5 -0
  432. package/shared/diagram/aiMermaid.js +46 -45
  433. package/shared/diagram/aiMermaid.js.map +1 -0
  434. package/shared/diagram/atlas.d.ts +16 -0
  435. package/shared/diagram/atlas.js +51 -60
  436. package/shared/diagram/atlas.js.map +1 -0
  437. package/shared/diagram/mermaid.d.ts +43 -0
  438. package/shared/diagram/mermaid.js +348 -370
  439. package/shared/diagram/mermaid.js.map +1 -0
  440. package/shared/review/contracts.d.ts +95 -0
  441. package/shared/review/contracts.js +2 -0
  442. package/shared/review/contracts.js.map +1 -0
  443. package/shared/review/review.d.ts +10 -0
  444. package/shared/review/review.js +184 -0
  445. package/shared/review/review.js.map +1 -0
  446. package/shared/search/query.d.ts +32 -0
  447. package/shared/search/query.js +395 -388
  448. package/shared/search/query.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/public/js/inspector.ts"],"names":[],"mappings":"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","sourcesContent":["import { eventElement } from '/js/dom.js';\nimport type { AppElements } from '/js/dom.js';\n// The inspector: everything we know about the thing you clicked, written up\n// like margin notes. Explanations come from the static graph; the AI button\n// hands off to the LLM when one is configured.\n\nimport { roleOf, scanIndex } from '/shared/analyzer/graph.js';\nimport { explainFile, explainFolder, explainOverview } from '/shared/analyzer/explainLocal.js';\nimport { baseName } from '/shared/analyzer/pathUtil.js';\nimport { languageLabel } from '/shared/analyzer/languages/index.js';\nimport { escapeHtml } from './html.js';\nimport { mdLite, mdInline } from './markdown.js';\nimport { renderAnalysisPanel } from './analysisPanel.js';\n\nconst el: Partial<AppElements> = {};\n['inspectorEmpty', 'inspectorBody', 'inspTitle', 'inspRole', 'inspPath', 'inspStats', 'inspExplain', 'inspLists', 'aiExplainBtn', 'askInput', 'inspBack']\n .forEach((id) => (el[id] = document.getElementById(id)));\n\nlet askAIHandler = null;\nlet clearFocusHandler = null;\nlet inspHooks = {\n onOpenCode: (..._args: unknown[]) => {},\n onDeepDive: (..._args: unknown[]) => {},\n onToast: (..._args: unknown[]) => {},\n};\n\nexport function initInspector(options: Record<string, any> = {}) {\n const { onAskAI, onClearFocus, ...rest } = options;\n askAIHandler = onAskAI;\n clearFocusHandler = onClearFocus;\n inspHooks = { ...inspHooks, ...rest };\n el.aiExplainBtn.addEventListener('click', () => askAIHandler?.());\n el.inspBack.addEventListener('click', () => clearFocusHandler?.());\n\n el.inspectorBody.addEventListener('click', (e) => {\n const btn = eventElement(e)?.closest<HTMLElement>('button[data-insp-action]');\n if (!btn) return;\n const action = btn.dataset.inspAction;\n const targetPath = btn.dataset.path || el.inspPath.textContent;\n if (action === 'code') {\n inspHooks.onOpenCode?.(targetPath);\n } else if (action === 'dive') {\n inspHooks.onDeepDive?.(targetPath);\n } else if (action === 'copy') {\n if (navigator.clipboard) {\n navigator.clipboard.writeText(targetPath)\n .then(() => inspHooks.onToast?.('Path copied to clipboard'))\n .catch(() => inspHooks.onToast?.('Failed to copy path'));\n }\n }\n });\n}\n\n// Show/hide the small \"‹ back\" control that returns to the view's own panel.\nfunction setBack(label?: any) {\n if (label) {\n el.inspBack.hidden = false;\n el.inspBack.textContent = '‹ ' + label;\n } else {\n el.inspBack.hidden = true;\n }\n}\n\nexport function clearInspector() {\n el.inspectorEmpty.hidden = false;\n el.inspectorBody.hidden = true;\n}\n\nexport function showFile(path, state) {\n const { scan, facts, history, backLabel } = state;\n const file = scanIndex(scan).fileAt(path);\n const role = roleOf(path, facts);\n setBack(backLabel);\n\n el.inspTitle.textContent = baseName(path);\n el.inspRole.textContent = role;\n el.inspRole.className = 'role-chip is-' + role;\n el.inspPath.textContent = path;\n el.askInput.placeholder = `Ask about ${baseName(path)}…`;\n\n const fin = facts.fanIn[path] || 0;\n const fout = facts.fanOut[path] || 0;\n const hist = history?.byPath?.[path];\n \n const actionsHtml = `\n <div class=\"insp-actions\" style=\"display:flex; gap:6px; margin: 6px 0 10px;\">\n <button class=\"btn btn-ghost btn-sm\" data-insp-action=\"code\" data-path=\"${escapeHtml(path)}\" title=\"Open file in Code view\">Code</button>\n <button class=\"btn btn-ghost btn-sm\" data-insp-action=\"dive\" data-path=\"${escapeHtml(path)}\" title=\"Open Deep Dive flowchart\">Deep Dive →</button>\n <button class=\"btn btn-ghost btn-sm\" data-insp-action=\"copy\" data-path=\"${escapeHtml(path)}\" title=\"Copy relative path\">Copy Path</button>\n </div>\n `;\n\n el.inspStats.innerHTML = [\n chip(`<b>${fin}</b> dependents`),\n chip(`<b>${fout}</b> imports`),\n hist ? chip(`<b>${hist.churn}</b> commit${hist.churn === 1 ? '' : 's'}`) : '',\n hist?.hotspot ? chip(`hotspot <b>${hist.hotspot}</b>`) : '',\n hist?.solo && hist.churn >= 2 ? chip(`<b>solo</b> author`) : '',\n file ? chip(`<b>${file.functions.length}</b> functions`) : '',\n file ? chip(`<b>${(file.size / 1024).toFixed(1)}</b> kb`) : '',\n file ? chip(langName(file.lang)) : '',\n file && file.cognitive !== undefined ? chip(`<b>${file.cognitive}</b> cognitive cx`) : '',\n file && file.maintainability !== undefined ? chip(`<b>${file.maintainability}</b> MI`) : '',\n facts.communities && facts.communities[path] ? chip(`community <b>${facts.communities[path]}</b>`) : '',\n ].join('');\n\n if (file && state && state.health) {\n const riskData = state.health.perFile?.find(x => x.path === path);\n if (riskData) {\n el.inspStats.innerHTML += ` <risk-badge score=\"${riskData.risk}\" style=\"vertical-align: middle; margin-left: 8px; --risk-size: 32px;\"></risk-badge>`;\n }\n }\n\n setExplain(actionsHtml + mdLite(explainFile(path, file, facts)), 'From the static analysis — no AI involved.');\n\n el.inspLists.innerHTML = '';\n addPathList('Imports', facts.importsOf[path] || [], scan);\n addPathList('Imported by', facts.importers[path] || [], scan);\n if (file?.exports.length) {\n addList('Exports', file.exports.map((e) => ({ text: e.name, kind: e.kind })));\n }\n if (file?.functions.length) {\n addList('Functions', file.functions.map((f) => ({ text: f.name + '()', kind: f.kind + ' · line ' + f.line })));\n }\n\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\nexport function showFolder(folder, { scan, facts, backLabel }) {\n setBack(backLabel);\n el.inspTitle.textContent = (folder || '(repo root)') + '/';\n el.inspRole.textContent = 'folder';\n el.inspRole.className = 'role-chip is-test';\n el.inspPath.textContent = folder || '(the top of the repository)';\n el.askInput.placeholder = folder ? `Ask about ${folder}/…` : 'Ask anything about this repo…';\n const here = scanIndex(scan).filesIn(folder);\n const count = here.length;\n el.inspStats.innerHTML = chip(`<b>${count}</b> parsed files`);\n setExplain(mdLite(explainFolder(folder, scan, facts)), 'From the static analysis — no AI involved.');\n el.inspLists.innerHTML = '';\n addPathList('Files here', here.map((f) => f.path), scan);\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\nexport function showOverview({ scan, facts, manifest, history }) {\n setBack();\n el.inspTitle.textContent = scan.name;\n el.inspRole.textContent = 'repo';\n el.inspRole.className = 'role-chip is-entry';\n el.inspPath.textContent = scan.root;\n el.askInput.placeholder = 'Ask anything about this repo…';\n const conf = scan.stats.imports?.confidence;\n el.inspStats.innerHTML = [\n chip(`<b>${scan.stats.filesParsed}</b> files${scan.stats.truncated ? ' (partial)' : ''}`),\n chip(`<b>${scan.stats.edgeCount}</b> connections`),\n chip(`<b>${facts.entries.length}</b> entries`),\n chip(`<b>${facts.hubs.length}</b> hubs`),\n history?.available ? chip(`<b>${history.commitCount}</b> commits`) : '',\n // How much of the import graph we actually placed. Worth a permanent slot:\n // every other number on this page is downstream of it.\n typeof conf === 'number' ? chip(`<b>${conf}%</b> of imports placed`) : '',\n ].join('');\n setExplain(mdLite(explainOverview(scan, facts, manifest)), 'From the static analysis — no AI involved.');\n el.inspLists.innerHTML = '';\n addPathList('Entry points', facts.entries, scan);\n addList('Load-bearing files', facts.hubs.slice(0, 8).map((h) => ({ text: h.path, kind: h.fanIn + ' dependents', path: h.path })), scan);\n if (history?.available) {\n if (history.perFile?.length) {\n const topHotspots = history.perFile.filter((f) => f.hotspot > 10).slice(0, 6);\n if (topHotspots.length) {\n addList('Hotspots (churn × complexity)', topHotspots.map((f) => ({ text: f.path, kind: `hotspot ${f.hotspot} · ${f.churn} commits`, path: f.path })));\n }\n }\n if (history.coChanged?.length) {\n addList('Co-changed pairs', history.coChanged.slice(0, 5).map((p) => ({ text: `${p.a} + ${p.b}`, kind: `${p.count} joint commits` })));\n }\n }\n if (scan.externals.length) {\n addList('Outside packages', scan.externals.slice(0, 10).map((x) => ({ text: x.name, kind: 'used by ' + x.usedBy.length })));\n }\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\n// The Patterns view panel: written observations plus the folder-traffic grid.\nexport function showPatterns({ scan, patterns }) {\n setBack();\n const { layersInfo, findings, coupling } = patterns;\n el.inspTitle.textContent = 'The shape of it';\n el.inspRole.textContent = 'patterns';\n el.inspRole.className = 'role-chip is-entry';\n el.inspPath.textContent = `${scan.name} — ${layersInfo.layers.length} layers deep from the door`;\n el.askInput.placeholder = 'Ask about the architecture…';\n el.inspStats.innerHTML = [\n chip(`<b>${layersInfo.layers.length}</b> layers`),\n chip(`<b>${layersInfo.unreachable.length}</b> off the path`),\n chip(`<b>${findings.length}</b> observations`),\n ].join('');\n\n el.inspExplain.innerHTML =\n findings.map((f) => `\n <div class=\"finding is-${f.tone}\">\n <h4>${escapeHtml(f.title)}</h4>\n <p>${mdInline(f.detail)}</p>\n ${f.paths && f.paths.length ? `<div style=\"margin-top:6px;display:flex;flex-wrap:wrap;gap:4px;\">${f.paths.slice(0, 4).map((p) => `<button class=\"role-chip\" data-goto=\"${escapeHtml(p)}\" style=\"cursor:pointer;font-size:11px;\">${escapeHtml(p)}</button>`).join('')}${f.paths.length > 4 ? `<span style=\"font-size:11px;color:var(--faint);align-self:center;\">+${f.paths.length - 4} more</span>` : ''}</div>` : ''}\n </div>`).join('') +\n '<p class=\"explain-src\">Read straight from the import graph — no AI involved.</p>';\n\n el.inspLists.innerHTML = '';\n if (coupling.folders.length) {\n const h = document.createElement('h3');\n h.className = 'inspector-h';\n h.textContent = 'Folder traffic';\n el.inspLists.appendChild(h);\n el.inspLists.appendChild(heatGrid(coupling));\n const note = document.createElement('p');\n note.className = 'explain-src';\n note.textContent = 'Rows pull in columns; darker means more.';\n el.inspLists.appendChild(note);\n }\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\n// The Health view panel: the repo's grade and score with an itemized\n// breakdown, a legend for the metrics, and the riskiest files — clickable.\nexport function showHealth({ scan, health }) {\n setBack();\n const t = health.totals;\n el.inspTitle.textContent = 'Health';\n el.inspRole.textContent = 'grade ' + health.grade;\n el.inspRole.className = 'role-chip is-' + (health.score >= 70 ? 'entry' : health.score >= 60 ? 'hub' : 'cycle');\n el.inspPath.textContent = `${scan.name} — ${health.score}/100`;\n el.askInput.placeholder = 'Ask about the riskiest files…';\n el.inspStats.innerHTML = [\n chip(`<b>${health.score}</b> / 100`),\n chip(`<b>${t.crit}</b> critical`),\n chip(`<b>${t.high}</b> high risk`),\n chip(`avg cx <b>${t.avgCx}</b>`),\n ].join('');\n\n const top = health.perFile[0];\n let note = `<b>${escapeHtml(scan.name)}</b> grades <b>${health.grade}</b> (${health.score}/100).`;\n if (health.score >= 90) note += ' Clean dependency shape — keep it that way.';\n if (t.crit) note += ` ${t.crit} file${t.crit === 1 ? ' sits' : 's sit'} in the critical band — change those with care.`;\n else if (t.high) note += ` ${t.high} file${t.high === 1 ? '' : 's'} in the high band.`;\n if (top) note += ` The single riskiest file is <b>${escapeHtml(top.name)}</b> (risk ${top.risk}${top.inCycle ? ', in a cycle' : ''}, ${top.fanIn} dependents, complexity ${top.complexity}).`;\n\n const breakdownHtml = health.breakdown.length\n ? `<div class=\"score-bd\"><h4>Why ${health.score}/100</h4><ul>`\n + health.breakdown.map((b) => `<li><span>${escapeHtml(b.label)}</span><b>${b.points}</b></li>`).join('')\n + '</ul></div>'\n : '<p class=\"explain-src\">A perfect run — nothing was deducted.</p>';\n\n const legendHtml = `<div class=\"score-bd\"><h4>How the risk score works</h4><ul class=\"legend\">`\n + `<li><b>centrality</b> — how much of the repo flows through a file (PageRank)</li>`\n + (health.blastExact === false\n ? `<li><b>blast radius</b> — direct dependents only: this repo is over 2,500 files, where the transitive walk is too slow to run</li>`\n : `<li><b>blast radius</b> — how many files break if it does</li>`)\n + `<li><b>complexity</b> — decision points; how hard it is to change safely</li>`\n + `<li><b>cycles</b> — circular dependencies, the sharpest edge</li>`\n + '</ul></div>';\n\n el.inspExplain.innerHTML = `<p>${note}</p>` + breakdownHtml + legendHtml\n + '<p class=\"explain-src\">Scored from centrality, blast radius, complexity and cycles — no AI involved.</p>';\n el.inspLists.innerHTML = '';\n addList('Riskiest files', health.perFile.map((f) => ({ text: f.name, kind: `risk ${f.risk} · blast ${f.blast} · cx ${f.complexity}`, path: f.path })), scan);\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\n// The Security view panel: severity counts, a written summary, and the\n// findings list — each one clickable into its file's deep-dive.\nexport function showSecurity({ scan, security }) {\n setBack();\n const c = security.counts;\n el.inspTitle.textContent = 'Security';\n el.inspRole.textContent = 'grade ' + security.grade;\n el.inspRole.className = 'role-chip is-' + (security.score >= 75 ? 'entry' : security.score >= 60 ? 'hub' : 'cycle');\n el.inspPath.textContent = `${scan.name} — ${security.score}/100 · ${security.total} findings`;\n el.askInput.placeholder = 'Ask about the security findings…';\n el.inspStats.innerHTML = [\n chip(`<b>${c.critical}</b> critical`),\n chip(`<b>${c.high}</b> high`),\n chip(`<b>${c.medium}</b> medium`),\n chip(`<b>${c.low + c.info}</b> low/info`),\n ].join('');\n\n let note = `<b>${escapeHtml(scan.name)}</b> grades <b>${security.grade}</b> for security (${security.score}/100) — ${security.total} finding${security.total === 1 ? '' : 's'} across ${security.files.length} file${security.files.length === 1 ? '' : 's'}.`;\n if (!security.total) note += ' The rule engine found nothing to flag — a clean bill.';\n else {\n const worst = security.files[0];\n note += ` The loudest file is <b>${escapeHtml(worst.name)}</b> (${worst.count} finding${worst.count === 1 ? '' : 's'}, worst: ${worst.worst}).`;\n if (c.critical) note += ` ${c.critical} critical — fix those first.`;\n else if (c.high) note += ` ${c.high} high — worth a pass soon.`;\n }\n\n const sevLegend = `<div class=\"score-bd\"><h4>What the severities mean</h4><ul class=\"legend\">`\n + `<li><b class=\"sev-critical\">critical</b> — secrets &amp; keys committed; fix now</li>`\n + `<li><b class=\"sev-high\">high</b> — injection &amp; unsafe deserialization; sanitize, parameterize</li>`\n + `<li><b class=\"sev-medium\">medium</b> — XSS sinks, weak crypto, open redirects, swallowed errors</li>`\n + `<li><b class=\"sev-low\">low / info</b> — config, debug leftovers, style — tidy-up</li>`\n + '</ul></div>';\n\n const catEntries = Object.entries(security.byCat).sort((a, b) => Number(b[1]) - Number(a[1]));\n const catHtml = catEntries.length\n ? `<div class=\"score-bd\"><h4>By category</h4><ul>`\n + catEntries.map(([cat, n]) => `<li><span>${escapeHtml(cat)}</span><b>${n}</b></li>`).join('')\n + '</ul></div>'\n : '';\n\n // Attribution: the security story should say which engine told it. Built-in\n // findings carry no `source`; external ones carry the tool's name.\n const externalCount = security.files.reduce((n, f) => n + f.findings.filter((x) => x.source === 'external').length, 0);\n const sourceLine = externalCount\n ? `From the built-in rule engine plus ${externalCount} finding${externalCount === 1 ? '' : 's'} from external engines (see the list below).`\n : 'From the built-in rule engine — no external scanner, no AI.';\n\n el.inspExplain.innerHTML = `<p>${note}</p>` + catHtml + sevLegend\n + `<p class=\"explain-src\">${sourceLine}</p>`;\n\n // The deep-analysis panel: which engines are installed, and the button that\n // runs them. Rendered on every pass so a finished run re-paints in place.\n renderAnalysisPanel();\n\n el.inspLists.innerHTML = '';\n const rows = security.files.flatMap((f) => f.findings.slice(0, 6).map((x) => ({ text: `${f.name}:${x.line} — ${x.message}`, kind: x.severity, path: f.path })));\n addList('Findings', rows, scan);\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\n// The History view panel: what the git log says — churn, authorship, the\n// hotspot cross-tab — with the top of each list clickable into the file's\n// deep-dive. When there is no history it says why rather than showing zeros.\nexport function showHistory({ scan, history }) {\n setBack();\n el.inspTitle.textContent = 'History';\n if (!history?.available) {\n el.inspRole.textContent = 'unavailable';\n el.inspRole.className = 'role-chip is-test';\n el.inspPath.textContent = scan.name;\n el.askInput.placeholder = 'Ask anything about this repo…';\n el.inspStats.innerHTML = '';\n el.inspExplain.innerHTML =\n `<p>${escapeHtml(history?.reason || 'No history available.')}</p>`\n + '<p class=\"explain-src\">History needs a checkout with commits — a git URL clone has one; a folder picked in the browser or a plain directory may not.</p>';\n el.inspLists.innerHTML = '';\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n return;\n }\n\n const hotspots = history.perFile.filter((f) => f.hotspot > 0);\n const top = hotspots[0];\n el.inspRole.textContent = history.truncated\n ? `${history.commitCount} of ${history.totalCommits} commits`\n : `${history.commitCount} commits`;\n el.inspRole.className = 'role-chip is-entry';\n el.inspPath.textContent = `${scan.name} — ${span(history.firstCommitAt, history.lastCommitAt)}`;\n el.askInput.placeholder = 'Ask about the hotspots…';\n el.inspStats.innerHTML = [\n chip(`<b>${history.authors.length}</b> ${history.authors.length === 1 ? 'author' : 'authors'}`),\n chip(`<b>${hotspots.length}</b> ${hotspots.length === 1 ? 'hotspot' : 'hotspots'}`),\n history.soloFiles ? chip(`<b>${history.soloFiles}</b> solo-owned`) : '',\n history.pathsGone ? chip(`<b>${history.pathsGone}</b> files gone`) : '',\n ].join('');\n\n let note = `<b>${escapeHtml(scan.name)}</b> shows ${history.commitCount} commits by ${history.authors.length} ${history.authors.length === 1 ? 'person' : 'people'}, ${span(history.firstCommitAt, history.lastCommitAt)}.`;\n if (top) {\n note += ` The sharpest hotspot is <b>${escapeHtml(top.name)}</b> — touched ${top.churn} ${top.churn === 1 ? 'time' : 'times'} at complexity ${top.complexity}`;\n note += top.solo ? ', always by the same person.' : ` by ${top.authors} ${top.authors === 1 ? 'person' : 'people'}.`;\n } else {\n note += ' Nothing stands out — no file is both complex and frequently changed.';\n }\n if (history.truncated) note += ` The window was capped at ${history.commitCount} of ${history.totalCommits} total commits.`;\n\n const legendHtml = `<div class=\"score-bd\"><h4>How the hotspot score works</h4><ul class=\"legend\">`\n + `<li><b>churn</b> — how many commits have touched the file</li>`\n + `<li><b>complexity</b> — decision points, the same number Health uses</li>`\n + `<li><b>hotspot</b> — both at once, each against the repo's own worst: where change and difficulty meet</li>`\n + `<li><b>solo</b> — only one person has ever touched it; knowledge leaves with them</li>`\n + '</ul></div>';\n\n el.inspExplain.innerHTML = `<p>${note}</p>` + legendHtml\n + '<p class=\"explain-src\">From the git log — authors keyed by email, no AI involved.</p>';\n el.inspLists.innerHTML = '';\n addList('Hotspots', hotspots.map((f) => ({\n text: f.name,\n kind: `hotspot ${f.hotspot} · ${f.churn} commits · cx ${f.complexity}${f.solo ? ' · solo' : ''}`,\n path: f.path,\n })), scan);\n if (history.coChanged?.length) {\n addList('Change together, unconnected', history.coChanged.map((p) => ({\n text: p.a.split('/').pop() + ' + ' + p.b.split('/').pop(),\n kind: p.count + '× together',\n path: p.a,\n title: p.a + ' ↔ ' + p.b,\n })), scan);\n }\n el.inspectorEmpty.hidden = true;\n el.inspectorBody.hidden = false;\n}\n\nfunction span(firstIso, lastIso) {\n const fmt = (iso) => {\n if (!iso) return '?';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso.slice(0, 10);\n return d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n };\n return fmt(firstIso) + ' → ' + fmt(lastIso);\n}\n\nfunction heatGrid(coupling) {\n const { folders, counts, max } = coupling;\n const grid = document.createElement('div');\n grid.className = 'heat';\n grid.style.gridTemplateColumns = `64px repeat(${folders.length}, 1fr)`;\n\n grid.appendChild(document.createElement('span'));\n for (const c of folders) {\n const label = document.createElement('span');\n label.className = 'heat-col-label';\n label.textContent = shortFolder(c);\n label.title = c;\n grid.appendChild(label);\n }\n for (const r of folders) {\n const label = document.createElement('span');\n label.className = 'heat-label';\n label.textContent = shortFolder(r);\n label.title = r;\n grid.appendChild(label);\n for (const c of folders) {\n const cell = document.createElement('span');\n cell.className = 'heat-cell';\n const n = counts.get(r + '->' + c) || 0;\n if (n > 0) {\n const pct = Math.max(14, Math.round((n / max) * 86));\n cell.style.background = `color-mix(in srgb, var(--accent) ${pct}%, transparent)`;\n cell.textContent = n;\n cell.title = `${r} → ${c}: ${n} ${n === 1 ? 'import' : 'imports'}`;\n }\n grid.appendChild(cell);\n }\n }\n return grid;\n}\n\nfunction shortFolder(name) {\n const clean = name === '(root)' ? 'root' : name;\n return clean.length > 9 ? clean.slice(0, 8) + '…' : clean;\n}\n\n// The AI flow reuses the same box: streaming text lands here. `headerHtml`\n// pins a line above the answer — the question being answered, for instance.\nexport function setExplain(html, sourceNote) {\n el.inspExplain.innerHTML = html + (sourceNote ? `<p class=\"explain-src\">${escapeHtml(sourceNote)}</p>` : '');\n}\n\nexport function explainStreamWriter(headerHtml = '') {\n let text = '';\n el.inspExplain.innerHTML = headerHtml + '<p><span class=\"caret\"></span></p>';\n return {\n push(delta) {\n text += delta;\n el.inspExplain.innerHTML = headerHtml + mdLite(text) + '<span class=\"caret\"></span>';\n },\n finish(note) {\n el.inspExplain.innerHTML = headerHtml + mdLite(text) + (note ? `<p class=\"explain-src\">${escapeHtml(note)}</p>` : '');\n },\n fail(message) {\n el.inspExplain.innerHTML = headerHtml + `<p style=\"color:var(--warn)\">${escapeHtml(message)}</p>`;\n },\n };\n}\n\n// ---- helpers ---------------------------------------------------------------\n\nfunction addPathList(title, paths, scan) {\n if (!paths.length) return;\n addList(title, paths.map((p) => ({ text: p, path: p })), scan);\n}\n\nfunction addList(title, items, scan?: any) {\n if (!items || !items.length) return;\n const h = document.createElement('h3');\n h.className = 'inspector-h';\n h.textContent = title;\n const ul = document.createElement('ul');\n ul.className = 'link-list';\n for (const item of items.slice(0, 14)) {\n const li = document.createElement('li');\n if (item.path) {\n const b = document.createElement('button');\n b.textContent = item.text;\n b.dataset.goto = item.path;\n if (item.title) b.title = item.title;\n li.appendChild(b);\n } else {\n li.textContent = item.text;\n }\n if (item.kind) {\n const k = document.createElement('span');\n k.className = 'fn-kind';\n k.textContent = item.kind;\n li.appendChild(k);\n }\n ul.appendChild(li);\n }\n if (items.length > 14) {\n const more = document.createElement('li');\n more.textContent = `…and ${items.length - 14} more`;\n more.style.color = 'var(--faint)';\n ul.appendChild(more);\n }\n el.inspLists.append(h, ul);\n}\n\n// Clicking a path inside the inspector navigates to it (wired in app.js).\nexport function onInspectorNavigate(handler) {\n el.inspLists.addEventListener('click', (event) => {\n const b = eventElement(event)?.closest<HTMLElement>('button[data-goto]');\n if (b) handler(b.dataset.goto);\n });\n}\n\nfunction chip(html) {\n return `<span class=\"stat-chip\">${html}</span>`;\n}\n\nfunction langName(id) {\n return languageLabel(id, { short: true });\n}\n"]}
@@ -0,0 +1,113 @@
1
+ export declare const DEFAULT_SETTINGS: {
2
+ baseUrl: string;
3
+ apiKey: string;
4
+ model: string;
5
+ };
6
+ export declare function getSettings(): any;
7
+ export declare function saveSettings(settings: any): void;
8
+ export declare function isConfigured(): boolean;
9
+ export declare function isAzureHost(baseUrl: any): boolean;
10
+ export declare function fileMessages({ repoName, overview, path, role, fanIn, fanOut, importers, imports, functions, exports_, source }: {
11
+ exports_: any;
12
+ fanIn: any;
13
+ fanOut: any;
14
+ functions: any;
15
+ importers: any;
16
+ imports: any;
17
+ overview: any;
18
+ path: any;
19
+ repoName: any;
20
+ role: any;
21
+ source: any;
22
+ }): {
23
+ role: string;
24
+ content: string;
25
+ }[];
26
+ export declare function overviewMessages({ repoName, overview, entries, hubs, services, cycles, orphans, languages }: {
27
+ cycles: any;
28
+ entries: any;
29
+ hubs: any;
30
+ languages: any;
31
+ orphans: any;
32
+ overview: any;
33
+ repoName: any;
34
+ services: any;
35
+ }): {
36
+ role: string;
37
+ content: string;
38
+ }[];
39
+ export declare function diagramMessages({ repoName, kind, facts }: {
40
+ facts: any;
41
+ kind: any;
42
+ repoName: any;
43
+ }): {
44
+ role: string;
45
+ content: string;
46
+ }[];
47
+ export declare function fileDocMessages({ repoName, overview, file }: {
48
+ file: any;
49
+ overview: any;
50
+ repoName: any;
51
+ }): {
52
+ role: string;
53
+ content: string;
54
+ }[];
55
+ export declare function folderDocDetailedMessages({ repoName, folder, subfolders, files }: {
56
+ files: any;
57
+ folder: any;
58
+ repoName: any;
59
+ subfolders: any;
60
+ }): {
61
+ role: string;
62
+ content: string;
63
+ }[];
64
+ export declare function repoDocMessages({ repoName, overview, readmeExcerpt, entries, hubs }: {
65
+ entries: any;
66
+ hubs: any;
67
+ overview: any;
68
+ readmeExcerpt: any;
69
+ repoName: any;
70
+ }): {
71
+ role: string;
72
+ content: string;
73
+ }[];
74
+ export declare function folderDocMessages({ repoName, folder, subfolders, files }: {
75
+ files: any;
76
+ folder: any;
77
+ repoName: any;
78
+ subfolders: any;
79
+ }): {
80
+ role: string;
81
+ content: string;
82
+ }[];
83
+ export declare function questionMessages({ repoName, overview, question, file }: {
84
+ file: any;
85
+ overview: any;
86
+ question: any;
87
+ repoName: any;
88
+ }): {
89
+ role: string;
90
+ content: string;
91
+ }[];
92
+ export declare function stackSummaryMessages({ repoName, item, docsText, repoNote }: {
93
+ docsText: any;
94
+ item: any;
95
+ repoName: any;
96
+ repoNote: any;
97
+ }): {
98
+ role: string;
99
+ content: string;
100
+ }[];
101
+ export declare function analysisMessages({ repoName, grade, score, counts, engines, findings, question }: {
102
+ counts: any;
103
+ engines: any;
104
+ findings: any;
105
+ grade: any;
106
+ question: any;
107
+ repoName: any;
108
+ score: any;
109
+ }): {
110
+ role: string;
111
+ content: string;
112
+ }[];
113
+ export declare function streamTokens(container: any, text: any): Promise<void>;