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
@@ -6,184 +6,173 @@
6
6
  // app.js is the drawer choreography — one scrim at a time, Escape to close —
7
7
  // which is why it returns open/close/isOpen instead of wiring the topbar
8
8
  // button itself.
9
-
10
9
  import { fetchServerSettings, updateServerSettings, rotateServerAccessKey, logoutRemoteSession } from '/js/api.js';
11
-
12
10
  // A function declaration, not a const arrow: the import-time DOM check in
13
11
  // tests/frontend.test.js blanks top-level function bodies but reads const
14
12
  // bodies, and this module must stay importable from Node.
15
13
  function $(id) {
16
- return document.getElementById(id);
14
+ return document.getElementById(id);
17
15
  }
18
-
19
16
  const MODE_NOTES = {
20
- local: 'Local mode answers only this machine. No key, no network — the safe default.',
21
- 'self-hosted': 'Self-hosted answers whoever can reach the port, so every API call needs the access key below.',
17
+ local: 'Local mode answers only this machine. No key, no network — the safe default.',
18
+ 'self-hosted': 'Self-hosted answers whoever can reach the port, so every API call needs the access key below.',
22
19
  };
23
-
24
20
  export function createServerDrawer(options = {}) {
25
- // Pulled out of the parameter list on purpose: the front-end static check
26
- // in tests/frontend.test.js only understands plain params, and `toast` must
27
- // show up as a declaration, not a dangling call.
28
- const toast = typeof options.toast === 'function' ? options.toast : () => {};
29
- const dom = {};
30
- [
31
- 'serverDrawer', 'serverScrim', 'serverClose', 'serverModeNote', 'srvMode', 'srvHost', 'srvPort',
32
- 'srvDomain', 'srvDomainField', 'srvHttps', 'srvHttpsField', 'srvHttpsStatus', 'srvAutoOpen', 'srvKeySection', 'srvKeyMasked', 'srvRotate', 'srvLogout',
33
- 'srvFreshKeyRow', 'srvFreshKey', 'srvCopyKey', 'srvKeyHint', 'srvName', 'srvEmail',
34
- 'srvTunnelCloudflare', 'srvTunnelCloudflareStatus', 'srvTunnelTailscale', 'srvTunnelTailscaleStatus',
35
- 'srvSave', 'srvStatus', 'srvConfigPath',
36
- ].forEach((id) => (dom[id] = $(id)));
37
-
38
- let current = null; // the last settings body the server sent
39
-
40
- function status(text, cls = '') {
41
- dom.srvStatus.className = 'drawer-status' + (cls ? ' ' + cls : '');
42
- dom.srvStatus.textContent = text;
43
- }
44
-
45
- function tunnelLine(el, t) {
46
- if (!t) { el.textContent = ''; return; }
47
- if (!t.enabled) {
48
- el.textContent = t.installed ? 'Off.' : `Off — and ${t.install || 'the binary is not installed'}.`;
49
- return;
21
+ // Pulled out of the parameter list on purpose: the front-end static check
22
+ // in tests/frontend.test.js only understands plain params, and `toast` must
23
+ // show up as a declaration, not a dangling call.
24
+ const toast = typeof options.toast === 'function' ? options.toast : (..._args) => { };
25
+ const dom = {};
26
+ [
27
+ 'serverDrawer', 'serverScrim', 'serverClose', 'serverModeNote', 'srvMode', 'srvHost', 'srvPort',
28
+ 'srvDomain', 'srvDomainField', 'srvHttps', 'srvHttpsField', 'srvHttpsStatus', 'srvAutoOpen', 'srvKeySection', 'srvKeyMasked', 'srvRotate', 'srvLogout',
29
+ 'srvFreshKeyRow', 'srvFreshKey', 'srvCopyKey', 'srvKeyHint', 'srvName', 'srvEmail',
30
+ 'srvTunnelCloudflare', 'srvTunnelCloudflareStatus', 'srvTunnelTailscale', 'srvTunnelTailscaleStatus',
31
+ 'srvSave', 'srvStatus', 'srvConfigPath',
32
+ ].forEach((id) => (dom[id] = $(id)));
33
+ let current = null; // the last settings body the server sent
34
+ function status(text, cls = '') {
35
+ dom.srvStatus.className = 'drawer-status' + (cls ? ' ' + cls : '');
36
+ dom.srvStatus.textContent = text;
50
37
  }
51
- el.textContent = t.installed
52
- ? `On. Start it with: ${t.command}`
53
- : `On, but the binary is missing — ${t.install || 'install it first'}.`;
54
- }
55
-
56
- function render(data) {
57
- current = data;
58
- const s = data.settings;
59
- dom.srvMode.value = s.mode;
60
- dom.serverModeNote.textContent = MODE_NOTES[s.mode] || '';
61
- dom.srvHost.value = s.host;
62
- dom.srvPort.value = s.port;
63
- dom.srvDomain.value = s.domain || '';
64
- dom.srvHttps.checked = Boolean(s.https);
65
- dom.srvHttpsStatus.textContent = data.https?.caddyInstalled
66
- ? `Caddy ${data.https.caddyVersion || 'installed'}. ${s.https ? 'Run `onboarder https setup` after saving.' : 'Enable HTTPS above, save, then run the command.'}`
67
- : 'Caddy is not installed. Ubuntu: sudo apt install caddy; macOS: brew install caddy.';
68
- dom.srvAutoOpen.checked = Boolean(s.autoOpen);
69
- dom.srvName.value = s.account?.name || '';
70
- dom.srvEmail.value = s.account?.email || '';
71
- dom.srvTunnelCloudflare.checked = Boolean(s.tunnel?.cloudflare);
72
- dom.srvTunnelTailscale.checked = Boolean(s.tunnel?.tailscale);
73
- tunnelLine(dom.srvTunnelCloudflareStatus, data.tunnels?.cloudflare);
74
- tunnelLine(dom.srvTunnelTailscaleStatus, data.tunnels?.tailscale);
75
- dom.srvConfigPath.textContent = `Config file: ${data.configFile}`;
76
- dom.srvKeyMasked.value = s.accessKeyMasked || (s.hasAccessKey ? '' : '(none set — the API refuses every call)');
77
- dom.srvKeyHint.textContent = s.hasAccessKey
78
- ? 'Remote browsers sign in once; the key is exchanged for a secure HTTP-only session.'
79
- : 'No key is set. Generate one before remote access is possible.';
80
- applyModeVisibility();
81
- }
82
-
83
- // Mode drives which rows even make sense: local wipes the network/security
84
- // fields in the schema, so asking for them here would be collecting lies.
85
- function applyModeVisibility() {
86
- const remote = dom.srvMode.value === 'self-hosted';
87
- dom.srvKeySection.hidden = !remote;
88
- dom.srvDomainField.hidden = !remote;
89
- dom.srvHttpsField.hidden = !remote || !dom.srvDomain.value.trim();
90
- dom.serverModeNote.textContent = MODE_NOTES[dom.srvMode.value] || '';
91
- }
92
-
93
- async function open() {
94
- dom.serverDrawer.hidden = false;
95
- dom.serverScrim.hidden = false;
96
- dom.srvFreshKeyRow.hidden = true;
97
- status('Reading the server…');
98
- try {
99
- render(await fetchServerSettings());
100
- status('');
101
- } catch (err) {
102
- status(err.message, 'err');
38
+ function tunnelLine(el, t) {
39
+ if (!t) {
40
+ el.textContent = '';
41
+ return;
42
+ }
43
+ if (!t.enabled) {
44
+ el.textContent = t.installed ? 'Off.' : `Off — and ${t.install || 'the binary is not installed'}.`;
45
+ return;
46
+ }
47
+ el.textContent = t.installed
48
+ ? `On. Start it with: ${t.command}`
49
+ : `On, but the binary is missing — ${t.install || 'install it first'}.`;
103
50
  }
104
- }
105
-
106
- function close() {
107
- dom.serverDrawer.hidden = true;
108
- dom.serverScrim.hidden = true;
109
- }
110
-
111
-
112
- async function save() {
113
- const patch = {
114
- mode: dom.srvMode.value,
115
- host: dom.srvHost.value.trim() || '127.0.0.1',
116
- port: Number(dom.srvPort.value),
117
- autoOpen: dom.srvAutoOpen.checked,
118
- account: { name: dom.srvName.value.trim(), email: dom.srvEmail.value.trim() },
119
- tunnel: { cloudflare: dom.srvTunnelCloudflare.checked, tailscale: dom.srvTunnelTailscale.checked },
120
- };
121
- if (patch.mode === 'self-hosted') {
122
- patch.domain = dom.srvDomain.value.trim();
123
- patch.https = dom.srvHttps.checked;
51
+ function render(data) {
52
+ current = data;
53
+ const s = data.settings;
54
+ dom.srvMode.value = s.mode;
55
+ dom.serverModeNote.textContent = MODE_NOTES[s.mode] || '';
56
+ dom.srvHost.value = s.host;
57
+ dom.srvPort.value = s.port;
58
+ dom.srvDomain.value = s.domain || '';
59
+ dom.srvHttps.checked = Boolean(s.https);
60
+ dom.srvHttpsStatus.textContent = data.https?.caddyInstalled
61
+ ? `Caddy ${data.https.caddyVersion || 'installed'}. ${s.https ? 'Run `onboarder https setup` after saving.' : 'Enable HTTPS above, save, then run the command.'}`
62
+ : 'Caddy is not installed. Ubuntu: sudo apt install caddy; macOS: brew install caddy.';
63
+ dom.srvAutoOpen.checked = Boolean(s.autoOpen);
64
+ dom.srvName.value = s.account?.name || '';
65
+ dom.srvEmail.value = s.account?.email || '';
66
+ dom.srvTunnelCloudflare.checked = Boolean(s.tunnel?.cloudflare);
67
+ dom.srvTunnelTailscale.checked = Boolean(s.tunnel?.tailscale);
68
+ tunnelLine(dom.srvTunnelCloudflareStatus, data.tunnels?.cloudflare);
69
+ tunnelLine(dom.srvTunnelTailscaleStatus, data.tunnels?.tailscale);
70
+ dom.srvConfigPath.textContent = `Config file: ${data.configFile}`;
71
+ dom.srvKeyMasked.value = s.accessKeyMasked || (s.hasAccessKey ? '' : '(none set — the API refuses every call)');
72
+ dom.srvKeyHint.textContent = s.hasAccessKey
73
+ ? 'Remote browsers sign in once; the key is exchanged for a secure HTTP-only session.'
74
+ : 'No key is set. Generate one before remote access is possible.';
75
+ applyModeVisibility();
76
+ }
77
+ // Mode drives which rows even make sense: local wipes the network/security
78
+ // fields in the schema, so asking for them here would be collecting lies.
79
+ function applyModeVisibility() {
80
+ const remote = dom.srvMode.value === 'self-hosted';
81
+ dom.srvKeySection.hidden = !remote;
82
+ dom.srvDomainField.hidden = !remote;
83
+ dom.srvHttpsField.hidden = !remote || !dom.srvDomain.value.trim();
84
+ dom.serverModeNote.textContent = MODE_NOTES[dom.srvMode.value] || '';
124
85
  }
125
- status('Saving…');
126
- try {
127
- const data = await updateServerSettings(patch);
128
- render({ ...current, settings: data.settings });
129
- const restart = (data.restartRequired || []).join(' and ');
130
- const httpsChanged = (data.restartRequired || []).some((key) => key === 'domain' || key === 'https');
131
- status(
132
- httpsChanged
133
- ? 'Saved. Run `onboarder https setup` to validate the Caddyfile and reload TLS.'
134
- : restart
135
- ? `Saved. The ${restart} change takes effect after a restart — the running socket cannot move.`
136
- : 'Saved — live already.',
137
- 'ok',
138
- );
139
- } catch (err) {
140
- status(err.message, 'err');
86
+ async function open() {
87
+ dom.serverDrawer.hidden = false;
88
+ dom.serverScrim.hidden = false;
89
+ dom.srvFreshKeyRow.hidden = true;
90
+ status('Reading the server…');
91
+ try {
92
+ render(await fetchServerSettings());
93
+ status('');
94
+ }
95
+ catch (err) {
96
+ status(err.message, 'err');
97
+ }
141
98
  }
142
- }
143
-
144
- async function rotate() {
145
- status('Rotating…');
146
- try {
147
- const data = await rotateServerAccessKey();
148
- // The server refreshes this browser's signed session as part of rotation.
149
- // The raw key is shown once for copying elsewhere, never stored locally.
150
- render({ ...current, settings: data.settings });
151
- dom.srvFreshKey.value = data.accessKey;
152
- dom.srvFreshKeyRow.hidden = false; // render() does not know about the reveal
153
- status('Rotated. The old key is dead; update every other device.', 'ok');
154
- } catch (err) {
155
- status(err.message, 'err');
99
+ function close() {
100
+ dom.serverDrawer.hidden = true;
101
+ dom.serverScrim.hidden = true;
156
102
  }
157
- }
158
-
159
- async function signOut() {
160
- try {
161
- await logoutRemoteSession();
162
- location.replace('/');
163
- } catch (err) {
164
- status(err.message, 'err');
103
+ async function save() {
104
+ const patch = {
105
+ mode: dom.srvMode.value,
106
+ host: dom.srvHost.value.trim() || '127.0.0.1',
107
+ port: Number(dom.srvPort.value),
108
+ autoOpen: dom.srvAutoOpen.checked,
109
+ account: { name: dom.srvName.value.trim(), email: dom.srvEmail.value.trim() },
110
+ tunnel: { cloudflare: dom.srvTunnelCloudflare.checked, tailscale: dom.srvTunnelTailscale.checked },
111
+ };
112
+ if (patch.mode === 'self-hosted') {
113
+ patch.domain = dom.srvDomain.value.trim();
114
+ patch.https = dom.srvHttps.checked;
115
+ }
116
+ status('Saving…');
117
+ try {
118
+ const data = await updateServerSettings(patch);
119
+ render({ ...current, settings: data.settings });
120
+ const restart = (data.restartRequired || []).join(' and ');
121
+ const httpsChanged = (data.restartRequired || []).some((key) => key === 'domain' || key === 'https');
122
+ status(httpsChanged
123
+ ? 'Saved. Run `onboarder https setup` to validate the Caddyfile and reload TLS.'
124
+ : restart
125
+ ? `Saved. The ${restart} change takes effect after a restart — the running socket cannot move.`
126
+ : 'Saved — live already.', 'ok');
127
+ }
128
+ catch (err) {
129
+ status(err.message, 'err');
130
+ }
165
131
  }
166
- }
167
-
168
- dom.srvMode.addEventListener('change', applyModeVisibility);
169
- dom.srvDomain.addEventListener('input', applyModeVisibility);
170
- dom.srvSave.addEventListener('click', save);
171
- dom.srvRotate.addEventListener('click', rotate);
172
- dom.srvLogout.addEventListener('click', signOut);
173
- dom.serverClose.addEventListener('click', close);
174
- dom.serverScrim.addEventListener('click', close);
175
- dom.srvCopyKey.addEventListener('click', async () => {
176
- try {
177
- await navigator.clipboard.writeText(dom.srvFreshKey.value);
178
- toast('Key copied');
179
- } catch {
180
- dom.srvFreshKey.select(); // clipboard refused — select so a Ctrl+C works
132
+ async function rotate() {
133
+ status('Rotating…');
134
+ try {
135
+ const data = await rotateServerAccessKey();
136
+ // The server refreshes this browser's signed session as part of rotation.
137
+ // The raw key is shown once for copying elsewhere, never stored locally.
138
+ render({ ...current, settings: data.settings });
139
+ dom.srvFreshKey.value = data.accessKey;
140
+ dom.srvFreshKeyRow.hidden = false; // render() does not know about the reveal
141
+ status('Rotated. The old key is dead; update every other device.', 'ok');
142
+ }
143
+ catch (err) {
144
+ status(err.message, 'err');
145
+ }
181
146
  }
182
- });
183
-
184
- return {
185
- open,
186
- close,
187
- isOpen: () => !dom.serverDrawer.hidden,
188
- };
147
+ async function signOut() {
148
+ try {
149
+ await logoutRemoteSession();
150
+ location.replace('/');
151
+ }
152
+ catch (err) {
153
+ status(err.message, 'err');
154
+ }
155
+ }
156
+ dom.srvMode.addEventListener('change', applyModeVisibility);
157
+ dom.srvDomain.addEventListener('input', applyModeVisibility);
158
+ dom.srvSave.addEventListener('click', save);
159
+ dom.srvRotate.addEventListener('click', rotate);
160
+ dom.srvLogout.addEventListener('click', signOut);
161
+ dom.serverClose.addEventListener('click', close);
162
+ dom.serverScrim.addEventListener('click', close);
163
+ dom.srvCopyKey.addEventListener('click', async () => {
164
+ try {
165
+ await navigator.clipboard.writeText(dom.srvFreshKey.value);
166
+ toast('Key copied');
167
+ }
168
+ catch {
169
+ dom.srvFreshKey.select(); // clipboard refused — select so a Ctrl+C works
170
+ }
171
+ });
172
+ return {
173
+ open,
174
+ close,
175
+ isOpen: () => !dom.serverDrawer.hidden,
176
+ };
189
177
  }
178
+ //# sourceMappingURL=serverSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverSettings.js","sourceRoot":"","sources":["../../src/public/js/serverSettings.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,2EAA2E;AAC3E,qEAAqE;AACrE,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,iBAAiB;AAEjB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnH,0EAA0E;AAC1E,0EAA0E;AAC1E,0DAA0D;AAC1D,SAAS,CAAC,CAAC,EAAE;IACX,OAAO,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,8EAA8E;IACrF,aAAa,EAAE,+FAA+F;CAC/G,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAwB,EAAE;IAClE,0EAA0E;IAC1E,4EAA4E;IAC5E,iDAAiD;IACjD,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAgB,EAAE,EAAE,GAAE,CAAC,CAAC;IAChG,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC;QACE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QAC/F,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;QACtJ,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU;QAClF,qBAAqB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,0BAA0B;QACpG,SAAS,EAAE,WAAW,EAAE,eAAe;KACxC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,yCAAyC;IAE7D,SAAS,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE;QAC5B,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,GAAG,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,SAAS,UAAU,CAAC,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACxC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,IAAI,6BAA6B,GAAG,CAAC;YACnG,OAAO;QACT,CAAC;QACD,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS;YAC1B,CAAC,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE;YACnC,CAAC,CAAC,mCAAmC,CAAC,CAAC,OAAO,IAAI,kBAAkB,GAAG,CAAC;IAC5E,CAAC;IAED,SAAS,MAAM,CAAC,IAAI;QAClB,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc;YACzD,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,WAAW,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,iDAAiD,EAAE;YACjK,CAAC,CAAC,oFAAoF,CAAC;QACzF,GAAG,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9C,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;QAC1C,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QAC5C,GAAG,CAAC,mBAAmB,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChE,GAAG,CAAC,kBAAkB,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9D,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpE,UAAU,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,GAAG,CAAC,aAAa,CAAC,WAAW,GAAG,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClE,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC;QAChH,GAAG,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY;YACzC,CAAC,CAAC,oFAAoF;YACtF,CAAC,CAAC,+DAA+D,CAAC;QACpE,mBAAmB,EAAE,CAAC;IACxB,CAAC;IAED,2EAA2E;IAC3E,0EAA0E;IAC1E,SAAS,mBAAmB;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,aAAa,CAAC;QACnD,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;QACnC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;QACpC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClE,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;QAChC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;QACjC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,SAAS,KAAK;QACZ,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;IAChC,CAAC;IAGD,KAAK,UAAU,IAAI;QACjB,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK;YACvB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,WAAW;YAC7C,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/B,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO;YACjC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YAC7E,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;SACnG,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC;YACrG,MAAM,CACJ,YAAY;gBACV,CAAC,CAAC,8EAA8E;gBAChF,CAAC,CAAC,OAAO;oBACP,CAAC,CAAC,cAAc,OAAO,wEAAwE;oBAC/F,CAAC,CAAC,uBAAuB,EAC7B,IAAI,CACL,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,UAAU,MAAM;QACnB,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,qBAAqB,EAAE,CAAC;YAC3C,0EAA0E;YAC1E,yEAAyE;YACzE,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChD,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YACvC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,0CAA0C;YAC7E,MAAM,CAAC,0DAA0D,EAAE,IAAI,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,IAAI,CAAC;YACH,MAAM,mBAAmB,EAAE,CAAC;YAC5B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC5D,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC7D,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAClD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC3D,KAAK,CAAC,YAAY,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,+CAA+C;QAC3E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM;KACvC,CAAC;AACJ,CAAC","sourcesContent":["import type { SettingsInput } from '../../shared/contracts.js';\nimport type { AppElements } from '/js/dom.js';\n// The Server drawer: the web face of the same config file the CLI wizard\n// writes. Reads come back with the key masked; saves send only the changed\n// keys; rotation reveals the new key once and signs this browser in.\n//\n// The module owns its own DOM and its own round-trips. What it borrows from\n// app.js is the drawer choreography — one scrim at a time, Escape to close —\n// which is why it returns open/close/isOpen instead of wiring the topbar\n// button itself.\n\nimport { fetchServerSettings, updateServerSettings, rotateServerAccessKey, logoutRemoteSession } from '/js/api.js';\n\n// A function declaration, not a const arrow: the import-time DOM check in\n// tests/frontend.test.js blanks top-level function bodies but reads const\n// bodies, and this module must stay importable from Node.\nfunction $(id) {\n return document.getElementById(id);\n}\n\nconst MODE_NOTES = {\n local: 'Local mode answers only this machine. No key, no network — the safe default.',\n 'self-hosted': 'Self-hosted answers whoever can reach the port, so every API call needs the access key below.',\n};\n\nexport function createServerDrawer(options: Record<string, any> = {}) {\n // Pulled out of the parameter list on purpose: the front-end static check\n // in tests/frontend.test.js only understands plain params, and `toast` must\n // show up as a declaration, not a dangling call.\n const toast = typeof options.toast === 'function' ? options.toast : (..._args: unknown[]) => {};\n const dom: Partial<AppElements> = {};\n [\n 'serverDrawer', 'serverScrim', 'serverClose', 'serverModeNote', 'srvMode', 'srvHost', 'srvPort',\n 'srvDomain', 'srvDomainField', 'srvHttps', 'srvHttpsField', 'srvHttpsStatus', 'srvAutoOpen', 'srvKeySection', 'srvKeyMasked', 'srvRotate', 'srvLogout',\n 'srvFreshKeyRow', 'srvFreshKey', 'srvCopyKey', 'srvKeyHint', 'srvName', 'srvEmail',\n 'srvTunnelCloudflare', 'srvTunnelCloudflareStatus', 'srvTunnelTailscale', 'srvTunnelTailscaleStatus',\n 'srvSave', 'srvStatus', 'srvConfigPath',\n ].forEach((id) => (dom[id] = $(id)));\n\n let current = null; // the last settings body the server sent\n\n function status(text, cls = '') {\n dom.srvStatus.className = 'drawer-status' + (cls ? ' ' + cls : '');\n dom.srvStatus.textContent = text;\n }\n\n function tunnelLine(el, t) {\n if (!t) { el.textContent = ''; return; }\n if (!t.enabled) {\n el.textContent = t.installed ? 'Off.' : `Off — and ${t.install || 'the binary is not installed'}.`;\n return;\n }\n el.textContent = t.installed\n ? `On. Start it with: ${t.command}`\n : `On, but the binary is missing — ${t.install || 'install it first'}.`;\n }\n\n function render(data) {\n current = data;\n const s = data.settings;\n dom.srvMode.value = s.mode;\n dom.serverModeNote.textContent = MODE_NOTES[s.mode] || '';\n dom.srvHost.value = s.host;\n dom.srvPort.value = s.port;\n dom.srvDomain.value = s.domain || '';\n dom.srvHttps.checked = Boolean(s.https);\n dom.srvHttpsStatus.textContent = data.https?.caddyInstalled\n ? `Caddy ${data.https.caddyVersion || 'installed'}. ${s.https ? 'Run `onboarder https setup` after saving.' : 'Enable HTTPS above, save, then run the command.'}`\n : 'Caddy is not installed. Ubuntu: sudo apt install caddy; macOS: brew install caddy.';\n dom.srvAutoOpen.checked = Boolean(s.autoOpen);\n dom.srvName.value = s.account?.name || '';\n dom.srvEmail.value = s.account?.email || '';\n dom.srvTunnelCloudflare.checked = Boolean(s.tunnel?.cloudflare);\n dom.srvTunnelTailscale.checked = Boolean(s.tunnel?.tailscale);\n tunnelLine(dom.srvTunnelCloudflareStatus, data.tunnels?.cloudflare);\n tunnelLine(dom.srvTunnelTailscaleStatus, data.tunnels?.tailscale);\n dom.srvConfigPath.textContent = `Config file: ${data.configFile}`;\n dom.srvKeyMasked.value = s.accessKeyMasked || (s.hasAccessKey ? '' : '(none set — the API refuses every call)');\n dom.srvKeyHint.textContent = s.hasAccessKey\n ? 'Remote browsers sign in once; the key is exchanged for a secure HTTP-only session.'\n : 'No key is set. Generate one before remote access is possible.';\n applyModeVisibility();\n }\n\n // Mode drives which rows even make sense: local wipes the network/security\n // fields in the schema, so asking for them here would be collecting lies.\n function applyModeVisibility() {\n const remote = dom.srvMode.value === 'self-hosted';\n dom.srvKeySection.hidden = !remote;\n dom.srvDomainField.hidden = !remote;\n dom.srvHttpsField.hidden = !remote || !dom.srvDomain.value.trim();\n dom.serverModeNote.textContent = MODE_NOTES[dom.srvMode.value] || '';\n }\n\n async function open() {\n dom.serverDrawer.hidden = false;\n dom.serverScrim.hidden = false;\n dom.srvFreshKeyRow.hidden = true;\n status('Reading the server…');\n try {\n render(await fetchServerSettings());\n status('');\n } catch (err) {\n status(err.message, 'err');\n }\n }\n\n function close() {\n dom.serverDrawer.hidden = true;\n dom.serverScrim.hidden = true;\n }\n\n\n async function save() {\n const patch: SettingsInput = {\n mode: dom.srvMode.value,\n host: dom.srvHost.value.trim() || '127.0.0.1',\n port: Number(dom.srvPort.value),\n autoOpen: dom.srvAutoOpen.checked,\n account: { name: dom.srvName.value.trim(), email: dom.srvEmail.value.trim() },\n tunnel: { cloudflare: dom.srvTunnelCloudflare.checked, tailscale: dom.srvTunnelTailscale.checked },\n };\n if (patch.mode === 'self-hosted') {\n patch.domain = dom.srvDomain.value.trim();\n patch.https = dom.srvHttps.checked;\n }\n status('Saving…');\n try {\n const data = await updateServerSettings(patch);\n render({ ...current, settings: data.settings });\n const restart = (data.restartRequired || []).join(' and ');\n const httpsChanged = (data.restartRequired || []).some((key) => key === 'domain' || key === 'https');\n status(\n httpsChanged\n ? 'Saved. Run `onboarder https setup` to validate the Caddyfile and reload TLS.'\n : restart\n ? `Saved. The ${restart} change takes effect after a restart — the running socket cannot move.`\n : 'Saved — live already.',\n 'ok',\n );\n } catch (err) {\n status(err.message, 'err');\n }\n }\n\n async function rotate() {\n status('Rotating…');\n try {\n const data = await rotateServerAccessKey();\n // The server refreshes this browser's signed session as part of rotation.\n // The raw key is shown once for copying elsewhere, never stored locally.\n render({ ...current, settings: data.settings });\n dom.srvFreshKey.value = data.accessKey;\n dom.srvFreshKeyRow.hidden = false; // render() does not know about the reveal\n status('Rotated. The old key is dead; update every other device.', 'ok');\n } catch (err) {\n status(err.message, 'err');\n }\n }\n\n async function signOut() {\n try {\n await logoutRemoteSession();\n location.replace('/');\n } catch (err) {\n status(err.message, 'err');\n }\n }\n\n dom.srvMode.addEventListener('change', applyModeVisibility);\n dom.srvDomain.addEventListener('input', applyModeVisibility);\n dom.srvSave.addEventListener('click', save);\n dom.srvRotate.addEventListener('click', rotate);\n dom.srvLogout.addEventListener('click', signOut);\n dom.serverClose.addEventListener('click', close);\n dom.serverScrim.addEventListener('click', close);\n dom.srvCopyKey.addEventListener('click', async () => {\n try {\n await navigator.clipboard.writeText(dom.srvFreshKey.value);\n toast('Key copied');\n } catch {\n dom.srvFreshKey.select(); // clipboard refused — select so a Ctrl+C works\n }\n });\n\n return {\n open,\n close,\n isOpen: () => !dom.serverDrawer.hidden,\n };\n}\n"]}