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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/cli/wizard.ts"],"names":[],"mappings":"AACA,+CAA+C;AAC/C,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,8DAA8D;AAE9D,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7G,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,6CAA6C,EAAE,OAAO,EAAE,EAAE,EAAE;IAC3E,mBAAmB,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,OAAO,EAAE,2BAA2B,EAAE;IACzG,MAAM,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAChF,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,8BAA8B,EAAE;IAC5E,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,EAAE;CAClD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE;IACxE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,yDAAyD,EAAE;IAC1H,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,mDAAmD,EAAE;IAC3G,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,4CAA4C,EAAE;CACrF,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,KAAK;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,iCAAiC,CAAC;IACzF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAK;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,yDAAyD;IACnF,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtG,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAK;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,CAAC,WAAW;IACpC,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2CAA2C,CAAC;AACvG,CAAC;AAED,SAAS,UAAU,CAAC,OAAO;IACzB,IAAI,CAAC,OAAO,EAAE,OAAO;QAAE,OAAO,MAAM,CAAC;IACrC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC5D,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;IACxF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAAM;IAC5B,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,SAAS;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,MAAM,EAAE,UAAU;QAAE,OAAO,YAAY,CAAC;IAC5C,IAAI,MAAM,EAAE,SAAS;QAAE,OAAO,WAAW,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,6EAA6E;AAC7E,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,OAAO,GAAa,gBAAgB;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;IAC5D,OAAO;QACL;YACE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;YAC5C,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,yDAAyD;YAC/D,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,YAAY,EAAE;SACxC;QACD;YACE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;YAC7C,QAAQ,EAAE,uBAAuB;YACjC,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC5B,QAAQ,EAAE,UAAU;SACrB;QACD;YACE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;YAC7C,QAAQ,EAAE,6BAA6B;YACvC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,8DAA8D,EAAE;gBACzH,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,sCAAsC,EAAE,IAAI,EAAE,iEAAiE,EAAE;aACjJ;YACD,OAAO,EAAE,OAAO,CAAC,IAAI;SACtB;QACD;YACE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;YAC7C,QAAQ,EAAE,iCAAiC;YAC3C,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,gDAAgD,EAAE,IAAI,EAAE,8DAA8D,EAAE;gBACrJ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,4CAA4C,EAAE,IAAI,EAAE,sDAAsD,EAAE;aACxI;YACD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;gBACjC,IAAI,OAAO,CAAC,IAAI;oBAAE,OAAO,OAAO,CAAC,IAAI,CAAC;gBACtC,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,OAAO,WAAW,CAAC;gBAC3H,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;SACtC;QACD;YACE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM;YAC3C,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM;YAC7C,QAAQ,EAAE,6CAA6C;YACvD,IAAI,EAAE,mFAAmF;YACzF,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;YAC7B,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;SACtC;QACD;YACE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;YAC9C,QAAQ,EAAE,oCAAoC;YAC9C,IAAI,EAAE,yFAAyF;YAC/F,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;SAC3D;QACD;YACE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ;YACpD,QAAQ,EAAE,0DAA0D;YACpE,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,qCAAqC,EAAE,IAAI,EAAE,kDAAkD,EAAE;gBAC7H,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/H,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE;aACpD;YACD,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;YAChD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;SACtC;QACD;YACE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;YACjD,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,6DAA6D;YACnE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;YACzF,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO;SACjE;QACD;YACE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ;YACjE,QAAQ,EAAE,+CAA+C;YACzD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3G,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;SAC7B;QACD;YACE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM;YAC9D,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9E,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1G,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;SACjD;QACD;YACE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM;YAC5D,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,4BAA4B;YAClC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;SACjD;QACD;YACE,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ;YAC5D,QAAQ,EAAE,6BAA6B;YACvC,IAAI,EAAE,kFAAkF;YACxF,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;SACtC;QACD;YACE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS;YAClD,QAAQ,EAAE,mDAAmD;YAC7D,OAAO,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK;SACpC;KACF,CAAC;AACJ,CAAC;AAGD,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,KAAK,EAAE,OAAO,GAAwB,EAAE;IACnE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,sEAAsE;AACtE,0EAA0E;AAC1E,yEAAyE;AACzE,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,KAAK,EAAE,OAAO,GAAwB,EAAE;IACtE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,SAAS,CAAC,IAAI,EAAE,OAAO;IACrC,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,oDAAoD;AACpD,MAAM,UAAU,iBAAiB,CAAC,OAAO,EAAE,OAAO;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;QACjD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACpD,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ;QAC9D,OAAO,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5F,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KACrE,CAAC;IACF,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC;YAAE,SAAS,GAAG,iBAAiB,EAAE,CAAC;aACvG,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO;YAAE,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE;QACtH,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IACvD,OAAO,iBAAiB,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO;QAC1C,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW;QAC5D,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC;QACnE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;QAC7F,KAAK,EAAE,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACtE,SAAS;QACT,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK;QACvD,OAAO;QACP,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAGD,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,+EAA+E;AAC/E,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,OAAO,EAAE,KAAK,GAAwB,EAAE;IACjE,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChH,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACtD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;QAC7C,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU;QAAE,KAAK,CAAC,SAAS,GAAG,iBAAiB,EAAE,CAAC;SACrE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC/H,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;SAAM,IAAI,IAAI,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACxD,2EAA2E;QAC3E,sDAAsD;QACtD,KAAK,CAAC,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrI,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpF,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QAClE,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM;YAAE,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACzD,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtD,MAAM,MAAM,GAAG;QACb,GAAG,OAAO,EAAE,GAAG,KAAK;QACpB,OAAO,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE;QACzE,MAAM,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE;KACtE,CAAC;IACF,gFAAgF;IAChF,0EAA0E;IAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/F,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;QACjG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,0EAA0E;AAC1E,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,QAAQ,EAAE,EAAE,SAAS,GAAG,KAAK,EAAE,GAAwB,EAAE;IACpF,MAAM,KAAK,GAAG;QACZ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC9C,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvJ,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS;gBACjC,CAAC,CAAC,QAAQ,CAAC,SAAS;gBACpB,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;QACvH,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,gEAAgE,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxF,IAAI,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvH,IAAI,OAAO,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { Settings } from '../shared/contracts.js';\n// The setup wizard's brain, with no I/O in it.\n//\n// `buildSteps` turns the current settings (and any --flags) into the ordered\n// list of questions, each with its default, its choices, its validator, and a\n// `when` that decides from earlier answers whether the question exists at all\n// (local mode never asks for a domain). `answersToSettings` folds the answers\n// back into a settings object that `server/config.js` then validates — the\n// same schema the HTTP settings API enforces, so the wizard can never write a\n// config the server would refuse. `applyFlags` is the non-interactive twin of\n// the same fold. All three are pure: the tests drive them directly, and the\n// readline renderer in `prompt.js` is a thin shell over them.\n\nimport os from 'node:os';\n\nimport { DEFAULT_SETTINGS, generateAccessKey, isLoopbackHost, normalizeSettings } from '../server/config.js';\n\n// Provider presets for the AI account step. `none` is the honest default: the\n// app works fully offline, and the browser can still hold its own key.\nexport const PROVIDER_PRESETS = {\n none: { label: 'Skip — set it later (the app works offline)', baseUrl: '' },\n 'openai-compatible': { label: 'OpenAI or any compatible endpoint', baseUrl: 'https://api.openai.com/v1' },\n ollama: { label: 'Ollama (local models)', baseUrl: 'http://localhost:11434/v1' },\n openrouter: { label: 'OpenRouter', baseUrl: 'https://openrouter.ai/api/v1' },\n custom: { label: 'Custom base URL', baseUrl: '' },\n};\n\nexport const TUNNEL_CHOICES = [\n { value: 'none', label: 'No tunnel', hint: 'reach the server directly' },\n { value: 'cloudflare', label: 'Cloudflare quick tunnel', hint: 'cloudflared — a public https://*.trycloudflare.com name' },\n { value: 'tailscale', label: 'Tailscale serve', hint: 'your devices only, https://machine.tailnet.ts.net' },\n { value: 'both', label: 'Both', hint: 'public via Cloudflare, private via tailnet' },\n];\n\nexport function validPort(value) {\n const n = Number(String(value).trim());\n if (!Number.isInteger(n) || n < 1 || n > 65535) return 'A whole number from 1 to 65535.';\n return null;\n}\n\nexport function validDomain(value) {\n const domain = String(value || '').trim();\n if (!domain) return null; // optional in some flows; required ones check separately\n if (domain.length > 253 || /[\\s/@\\\\]/.test(domain) || domain.startsWith('.') || !domain.includes('.')) {\n return 'A hostname such as map.example.com.';\n }\n return null;\n}\n\nexport function validEmail(value) {\n const email = String(value || '').trim();\n if (!email) return null; // optional\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email) ? null : 'That does not look like an email address.';\n}\n\nfunction providerOf(account) {\n if (!account?.baseUrl) return 'none';\n for (const [id, preset] of Object.entries(PROVIDER_PRESETS)) {\n if (id !== 'none' && id !== 'custom' && preset.baseUrl === account.baseUrl) return id;\n }\n return 'custom';\n}\n\nfunction tunnelChoiceOf(tunnel) {\n if (tunnel?.cloudflare && tunnel?.tailscale) return 'both';\n if (tunnel?.cloudflare) return 'cloudflare';\n if (tunnel?.tailscale) return 'tailscale';\n return 'none';\n}\n\n// The ordered question list. Every step's `when` reads the answers collected\n// so far, which is what makes the wizard a tree rather than a script: answer\n// \"local\" and the whole network/security branch never appears.\nexport function buildSteps(current: Settings = DEFAULT_SETTINGS) {\n const account = current.account || DEFAULT_SETTINGS.account;\n return [\n {\n id: 'name', section: 'Profile', type: 'text',\n question: 'Your name',\n hint: 'shown in the settings drawer; never leaves this machine',\n default: account.name || safeUsername(),\n },\n {\n id: 'email', section: 'Profile', type: 'text',\n question: 'Your email (optional)',\n hint: 'for your own reference only',\n default: account.email || '',\n validate: validEmail,\n },\n {\n id: 'mode', section: 'Server', type: 'choice',\n question: 'How will you run Onboarder?',\n choices: [\n { value: 'local', label: 'Local — localhost only', hint: 'private by construction; nothing on the network can reach it' },\n { value: 'self-hosted', label: 'Self-hosted — domain, LAN, or tunnel', hint: 'reach it from other devices; every API call needs an access key' },\n ],\n default: current.mode,\n },\n {\n id: 'host', section: 'Server', type: 'choice',\n question: 'What should the server bind to?',\n choices: [\n { value: '127.0.0.1', label: 'Loopback only — behind Cloudflare or Tailscale', hint: 'safest remote layout; the tunnel/proxy connects to 127.0.0.1' },\n { value: '0.0.0.0', label: 'Every interface — direct public/LAN access', hint: 'accessible by server IP; recommended for a cloud VPS' },\n ],\n default: (answers) => {\n const currentHost = current.host;\n if (answers.host) return answers.host;\n if (current.mode === 'self-hosted' && ['127.0.0.1', 'localhost', '::1', '[::1]'].includes(currentHost)) return currentHost;\n return '0.0.0.0';\n },\n when: (a) => a.mode === 'self-hosted',\n },\n {\n id: 'port', section: 'Server', type: 'text',\n question: 'Port',\n default: String(current.port),\n validate: validPort,\n },\n {\n id: 'domain', section: 'Server', type: 'text',\n question: 'Domain (optional for direct IP or a tunnel)',\n hint: 'e.g. map.example.com — point an A/AAAA record to this VPS to enable trusted HTTPS',\n default: current.domain || '',\n validate: validDomain,\n when: (a) => a.mode === 'self-hosted',\n },\n {\n id: 'https', section: 'HTTPS', type: 'confirm',\n question: 'Set up automatic HTTPS with Caddy?',\n hint: 'Caddy obtains and renews the certificate, proxies 80/443, and sends traffic to this app',\n default: Boolean(current.domain && current.https),\n when: (a) => a.mode === 'self-hosted' && Boolean(a.domain),\n },\n {\n id: 'keyChoice', section: 'Security', type: 'choice',\n question: 'Access key — the one credential remote devices must hold',\n choices: [\n { value: 'generate', label: 'Generate a strong key (recommended)', hint: 'shown once at the end, stored in the config file' },\n ...(current.accessKey ? [{ value: 'keep', label: `Keep the existing key (${current.accessKey.slice(0, 6)}…)`, hint: '' }] : []),\n { value: 'enter', label: 'Enter my own', hint: '' },\n ],\n default: current.accessKey ? 'keep' : 'generate',\n when: (a) => a.mode === 'self-hosted',\n },\n {\n id: 'keyValue', section: 'Security', type: 'text',\n question: 'Your access key',\n hint: 'at least 16 characters; anyone holding it can drive the API',\n validate: (v) => (String(v || '').trim().length >= 16 ? null : 'At least 16 characters.'),\n when: (a) => a.mode === 'self-hosted' && a.keyChoice === 'enter',\n },\n {\n id: 'provider', section: 'AI provider (optional)', type: 'choice',\n question: 'Default AI provider for explain/chat features',\n choices: Object.entries(PROVIDER_PRESETS).map(([value, p]) => ({ value, label: p.label, hint: p.baseUrl })),\n default: providerOf(account),\n },\n {\n id: 'baseUrl', section: 'AI provider (optional)', type: 'text',\n question: 'Base URL',\n default: (a) => PROVIDER_PRESETS[a.provider]?.baseUrl || account.baseUrl || '',\n validate: (v) => (v && !/^https?:\\/\\//.test(v) ? 'An http(s) URL, e.g. https://api.openai.com/v1.' : null),\n when: (a) => a.provider && a.provider !== 'none',\n },\n {\n id: 'model', section: 'AI provider (optional)', type: 'text',\n question: 'Model (optional)',\n hint: 'e.g. gpt-4o-mini, llama3.1',\n default: account.model || '',\n when: (a) => a.provider && a.provider !== 'none',\n },\n {\n id: 'tunnelChoice', section: 'Remote access', type: 'choice',\n question: 'Expose it through a tunnel?',\n hint: 'the wizard prints the exact command afterwards; missing CLIs get an install hint',\n choices: TUNNEL_CHOICES,\n default: tunnelChoiceOf(current.tunnel),\n when: (a) => a.mode === 'self-hosted',\n },\n {\n id: 'autoOpen', section: 'Finish', type: 'confirm',\n question: 'Open the app in a browser when the server starts?',\n default: current.autoOpen !== false,\n },\n ];\n}\n\n\nfunction safeUsername() {\n try {\n return os.userInfo().username || '';\n } catch {\n return '';\n }\n}\n\n// Steps for one run, given what is already answered: flags pre-answer questions\n// (a flagged question is never asked), and `when` prunes dead branches. The\n// answers object grows as the run proceeds, so a later step's `when` sees both\n// flag answers and typed answers through the same lens.\nexport function pendingSteps(steps, answers: Record<string, any> = {}) {\n return steps.filter((s) => !(s.id in answers) && (!s.when || s.when(answers)));\n}\n\n// Steps the flags did not answer, in order — and nothing more. Unlike\n// `pendingSteps` this never looks at `when`: conditions read answers that\n// only exist mid-run (\"ask about the bind once mode is self-hosted\"), so\n// evaluating them before the first question prunes branches the typed answers\n// would reopen. The renderer (`prompt.js#runSteps`) evaluates `when` live,\n// one question at a time, which is the only moment it can be answered truly.\nexport function unansweredSteps(steps, answers: Record<string, any> = {}) {\n return steps.filter((s) => !(s.id in answers));\n}\n\n// Defaults may depend on earlier answers (`default` as a function).\nexport function defaultOf(step, answers) {\n return typeof step.default === 'function' ? step.default(answers) : step.default;\n}\n\n// Answers → settings. The key rule: this builds a plain object and hands it to\n// normalizeSettings, so an impossible combination (local mode on 0.0.0.0, a\n// LAN bind with no domain) fails with the schema's own sentence here, in the\n// API, and in `config set` — one law, three courts.\nexport function answersToSettings(current, answers) {\n const selfHosted = answers.mode === 'self-hosted';\n const provider = answers.provider || 'none';\n const account = {\n name: answers.name ?? current.account?.name ?? '',\n email: answers.email ?? current.account?.email ?? '',\n provider: provider === 'none' ? 'openai-compatible' : provider,\n baseUrl: provider === 'none' ? '' : String(answers.baseUrl ?? '').trim().replace(/\\/+$/, ''),\n model: provider === 'none' ? '' : String(answers.model ?? '').trim(),\n };\n let accessKey = current.accessKey || '';\n if (selfHosted) {\n if (answers.keyChoice === 'generate' || (!answers.keyChoice && !accessKey)) accessKey = generateAccessKey();\n else if (answers.keyChoice === 'enter') accessKey = String(answers.keyValue || '').trim();\n }\n const choice = answers.tunnelChoice || tunnelChoiceOf(current.tunnel);\n const tunnel = selfHosted\n ? { cloudflare: choice === 'cloudflare' || choice === 'both', tailscale: choice === 'tailscale' || choice === 'both' }\n : { ...(current.tunnel || DEFAULT_SETTINGS.tunnel) };\n return normalizeSettings({\n version: current.version,\n mode: selfHosted ? 'self-hosted' : 'local',\n host: selfHosted ? (answers.host || '0.0.0.0') : '127.0.0.1',\n port: Number(answers.port ?? current.port ?? DEFAULT_SETTINGS.port),\n domain: selfHosted ? String(answers.domain ?? current.domain ?? '').trim().toLowerCase() : '',\n https: selfHosted && Boolean(answers.domain) && Boolean(answers.https),\n accessKey,\n autoOpen: answers.autoOpen ?? current.autoOpen ?? false,\n account,\n tunnel,\n });\n}\n\n\n// The non-interactive twin: --flags become the same patch the wizard would\n// have collected. Anything unflagged falls back to the current settings, and\n// the whole result goes through the same normalizeSettings validation, so\n// `onboarder setup --non-interactive --mode self-hosted --port 8080` can never\n// produce a config the interactive wizard would refuse.\nexport function applyFlags(current, flags: Record<string, any> = {}) {\n const patch: Record<string, any> = {};\n if (flags.mode !== undefined) {\n if (!['local', 'self-hosted'].includes(flags.mode)) throw new Error('--mode must be \"local\" or \"self-hosted\".');\n patch.mode = flags.mode;\n }\n const mode = patch.mode || current.mode;\n if (flags.host !== undefined) patch.host = flags.host;\n if (flags.port !== undefined) {\n const err = validPort(flags.port);\n if (err) throw new Error('--port: ' + err);\n patch.port = Number(flags.port);\n }\n if (flags.domain !== undefined) {\n const err = validDomain(flags.domain);\n if (err) throw new Error('--domain: ' + err);\n patch.domain = String(flags.domain).trim().toLowerCase();\n }\n if (flags.https !== undefined) patch.https = Boolean(flags.https);\n if (flags.accessKey === 'generate') patch.accessKey = generateAccessKey();\n else if (flags.accessKey !== undefined) {\n if (String(flags.accessKey).trim().length < 16) throw new Error('--access-key must be at least 16 characters, or \"generate\".');\n patch.accessKey = String(flags.accessKey).trim();\n } else if (mode === 'self-hosted' && !current.accessKey) {\n // Self-hosted without a key is a locked door with no handle — generate one\n // rather than write a config that refuses every call.\n patch.accessKey = generateAccessKey();\n }\n if (flags.autoOpen !== undefined) patch.autoOpen = Boolean(flags.autoOpen);\n const account: Record<string, any> = {};\n if (flags.name !== undefined) account.name = String(flags.name);\n if (flags.email !== undefined) {\n const err = validEmail(flags.email);\n if (err) throw new Error('--email: ' + err);\n account.email = String(flags.email);\n }\n if (flags.provider !== undefined) {\n if (!(flags.provider in PROVIDER_PRESETS)) throw new Error('--provider must be one of: ' + Object.keys(PROVIDER_PRESETS).join(', '));\n account.provider = flags.provider === 'none' ? 'openai-compatible' : flags.provider;\n account.baseUrl = PROVIDER_PRESETS[flags.provider]?.baseUrl || '';\n if (flags.provider === 'none') account.model = '';\n }\n if (flags.baseUrl !== undefined) account.baseUrl = String(flags.baseUrl).trim().replace(/\\/+$/, '');\n if (flags.model !== undefined) account.model = String(flags.model).trim();\n if (Object.keys(account).length) patch.account = account;\n const tunnel: Record<string, any> = {};\n if (flags.cloudflare !== undefined) tunnel.cloudflare = Boolean(flags.cloudflare);\n if (flags.tailscale !== undefined) tunnel.tailscale = Boolean(flags.tailscale);\n if (Object.keys(tunnel).length) patch.tunnel = tunnel;\n const merged = {\n ...current, ...patch,\n account: { ...(current.account || DEFAULT_SETTINGS.account), ...account },\n tunnel: { ...(current.tunnel || DEFAULT_SETTINGS.tunnel), ...tunnel },\n };\n // A fresh self-hosted setup is direct-first for cloud/VPS use. Re-running setup\n // preserves an existing deliberate loopback choice for tunnels and Caddy.\n if (flags.mode === 'self-hosted' && flags.host === undefined && current.mode !== 'self-hosted') {\n merged.host = '0.0.0.0';\n }\n if (merged.mode === 'local') {\n if (!['127.0.0.1', 'localhost', '::1', '[::1]'].includes(merged.host)) merged.host = '127.0.0.1';\n if (flags.domain === undefined) merged.domain = '';\n if (flags.https === undefined) merged.https = false;\n }\n return { patch, settings: normalizeSettings(merged) };\n}\n\n// What the wizard's last screen shows before writing. `reveal` is the one\n// moment the key is printed — rotation through the API has the same rule.\nexport function summaryLines(settings, { revealKey = false }: Record<string, any> = {}) {\n const lines = [\n ['Mode', settings.mode],\n ['Bind', `${settings.host}:${settings.port}`],\n ];\n if (settings.domain) lines.push(['Domain', (settings.https ? 'https://' : 'http://') + settings.domain + (settings.https ? '' : ':' + settings.port)]);\n if (settings.mode === 'self-hosted') {\n lines.push(['Access key', revealKey\n ? settings.accessKey\n : (settings.accessKey ? settings.accessKey.slice(0, 6) + '… (hidden)' : '(none — the API will refuse every call)')]);\n if (isLoopbackHost(settings.host)) {\n lines.push(['Network', 'loopback only — use a tunnel or bind 0.0.0.0 for direct access']);\n }\n }\n const who = [settings.account.name, settings.account.email].filter(Boolean).join(' · ');\n if (who) lines.push(['Profile', who]);\n if (settings.account.baseUrl) {\n lines.push(['AI', `${settings.account.provider} — ${settings.account.baseUrl}${settings.account.model ? ' — ' + settings.account.model : ''}`]);\n }\n const tunnels = [settings.tunnel.cloudflare && 'cloudflare', settings.tunnel.tailscale && 'tailscale'].filter(Boolean);\n if (tunnels.length) lines.push(['Tunnels', tunnels.join(' + ')]);\n lines.push(['Auto-open', settings.autoOpen ? 'yes' : 'no']);\n return lines;\n}\n"]}
@@ -0,0 +1,51 @@
1
+ # Hermes integration research
2
+
3
+ Research date: 2026-10-03. Official source: [NousResearch/hermes-agent](https://github.com/NousResearch/hermes-agent), revision [`eb7e8620324b32424c06218f6a28094df2e921f8`](https://github.com/NousResearch/hermes-agent/tree/eb7e8620324b32424c06218f6a28094df2e921f8). Upstream is MIT licensed, copyright Nous Research. The installed runtime used for integration testing reports `0.21.5+2584.g1c535d9`; the harness tests its required CLI interfaces rather than assuming that version string alone proves compatibility.
4
+
5
+ ## Findings and implementation choice
6
+
7
+ Hermes supplies the model/provider routing, iterative agent loop, sessions, streaming, tool selection, skills, memory and integrations. Its core runtime is Python. Onboarder is a TypeScript/Node application with no npm runtime dependencies. A separate Hermes subprocess plus a scoped MCP server lets both projects retain their existing runtime contracts. No Hermes source files or Python package tree are copied into Onboarder. See the official [architecture guide](https://hermes-agent.nousresearch.com/docs/developer-guide/architecture/) and [MCP guide](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp/).
8
+
9
+ The source was pulled and inspected before implementation. The following upstream files establish the actual contract used by this harness:
10
+
11
+ | Upstream source | Verified behavior | Harness use |
12
+ | --- | --- | --- |
13
+ | `hermes_cli/main.py`, `hermes_cli/_parser.py` | One-shot chat, stdin query files, structured format, turn and wall-clock limits, model overrides and session resume | Argument arrays with `--query-file -`; bounded subprocess lifecycle |
14
+ | `hermes_cli/stream_json.py` | JSONL `system`, `text`, `tool_use`, `tool_result`, `result` events; terminal text, exit code, session ID, usage | Typed event validation; successful completion requires both terminal result and successful process exit |
15
+ | `hermes_cli/mcp_startup.py` | `--toolsets` filters which configured MCP servers start | Only the dedicated `onboarder` server is selected |
16
+ | `hermes_cli/_launchers.py`, `model_switch_providers.py`, `model_switch.py` | Installation-bound runtime command, native model catalog, credential resolution, model selection and persistence | Searchable inline provider/model picker; only display fields cross the Python/Node boundary; full `hermes model` setup remains available |
17
+ | `tools/mcp_tool_config.py` | Stdio children receive a filtered environment; `${VAR}` values in explicit server config are interpolated | Explicit run-manifest and GitHub token placeholders; no assumption that ambient secrets reach MCP |
18
+ | `tools/mcp_tool_registration.py` | Server-name aliases resolve to dynamically registered MCP toolsets | `--toolsets onboarder` selects the scoped tools |
19
+ | `tools/mcp_tool_schema.py` | Tool names follow `mcp__<server>__<tool>` with bounded names | Real-runtime fixture verifies discovered tools belong to Onboarder |
20
+ | `tools/tool_search.py`, `hermes_cli/config_defaults.py` | MCP tools may be collapsed behind progressive-discovery bridge tools by default | The dedicated profile uses `tools.tool_search.enabled: off` so this small fixed catalog is explicit |
21
+ | `hermes_constants.py`, `pm/environments.py` | Named profiles share installation dependency state while having separate config/data | A stable named Onboarder profile supports current source installs without duplicating Python packages |
22
+
23
+ Changing `HERMES_HOME` to an arbitrary directory initially exposed a current-source-install issue: its Python dependency selection is also rooted there. The integration uses an installation-root named profile instead. A live local fixture also caught progressive tool disclosure: the initial model surface contained three bridge tools. Making the scoped catalog explicit resolved this and allowed verification of all 37 exposed tool names.
24
+
25
+ ## Workflow coverage
26
+
27
+ The CLI supports repository Q&A, local/PR review, issue triage, isolated implementation, draft PR preparation/publishing, and general GitHub tasks. It reuses Onboarder's scan, architecture, dependencies, health, security, history, tour and search engines. Additional tools cover bounded text reads/edits, working diffs, deterministic local review, npm checks, repository facts, issue/PR lists and details, source at exact commit SHAs, review discussions, labels, exact-head check runs, CI workflows/jobs, issue creation/updates, comments, PR review submission and draft PR creation.
28
+
29
+ GitHub routes are pinned to the checkout's github.com origin. PR files are capped at 300, ordinary paginated lists at 200, and CI collections at 100; truncation and missing patches are reported. Local source is explicitly distinguished from a remote PR's head. PR review submission includes the expected commit SHA and checks that the head has not changed.
30
+
31
+ Exact-commit source reads traverse immutable Git trees and check file modes before reading a blob. They reject symlinks/submodules and incomplete trees. This uses the documented [Git tree modes](https://docs.github.com/en/rest/git/trees#get-a-tree) and [Git blob API](https://docs.github.com/en/rest/git/blobs#get-a-blob). Review writes bind their evidence to `commit_id` as documented in [GitHub's review API](https://docs.github.com/en/rest/pulls/reviews#create-a-review-for-a-pull-request).
32
+
33
+ Implementation starts in a Git worktree at committed HEAD on its own `codex/agent-…` branch. Fresh file hashes prevent stale overwrites. `--allow-checks` and `--allow-github-writes` are separate, enforced capabilities; neither is enabled by default. Fixed check commands use argument arrays. Draft publishing verifies origin and branch, disables Git commit/push hooks for those commands, pushes only the task branch without force, checks for an existing PR and creates a draft. This integration does not include automatic merging, GitHub Enterprise origins, webhook hosting, sandboxed script execution, or a background review bot.
34
+
35
+ ## Lifecycle and data handling
36
+
37
+ Onboarder stores manifests, final results, event metadata and operation audits with private file permissions. Hermes keeps its own session transcripts inside the dedicated profile. Audit entries omit tool arguments, source and comment bodies; transcripts/final answers can contain source. Known environment credentials are redacted from Onboarder output. A configured model receives selected repository and GitHub content when a task runs.
38
+
39
+ The Node supervisor imposes output, turn and time limits and cancels its process group on POSIX. The stdio server watches its parent because some Hermes releases start MCP children in separate process groups. Windows uses process-tree termination. Worktrees remain inspectable on failure. Resume pins the original repository/workspace and cannot expand permissions. A recorded completion describes the agent run; a model's claims still need the associated tool evidence, and check results remain visible in its transcript.
40
+
41
+ ## Validation and practical limits
42
+
43
+ Automated fixtures cover path containment, symlinks, stale edits, subprocess Unicode/framing, cancellation/timeouts/output limits, GitHub identity/authentication/pagination/errors, capability enforcement, write deduplication, PR coverage/exact-head checks, structured completion, isolated worktrees, saved failures, dry runs and bounded resume permissions. The existing MCP transport and explorer command table continue to be exercised by their regression tests.
44
+
45
+ `node scripts/hermes-smoke.mjs` runs the actual installed Hermes runtime against a loopback OpenAI-compatible model fixture. It verifies the native model catalog, model selection and profile persistence, tool selection, MCP discovery, a real context-tool invocation, structured streaming and saved audit/result files. It makes no paid model call or GitHub mutation. Live provider authentication and actual GitHub issue/review/PR publishing require the user's model and GitHub credentials and are not claimed as exercised by this fixture.
46
+
47
+ The chat welcome, composer and inline `/model` menu were compared with the installed interactive Hermes CLI on October 3, 2026. An unconfigured Onboarder profile offers model/provider setup or offline browsing. The full official model wizard owns the terminal exclusively: the parent input stream is paused during the handoff and resumed afterward. Native terminal tests cover keystroke delivery, startup setup, cancellation, model-menu search and keeping the existing conversation when no selection succeeds. The quick picker uses the published launcher command and verifies its bootstrap shape; installations without that boundary fall back to the full wizard.
48
+
49
+ The full-screen chat uses the terminal's alternate buffer, a bottom-pinned composer, and a bounded, scrollable transcript. Resizing reflows both the welcome and conversation; only changed rows are painted. Model setup temporarily restores the original terminal buffer, and chat restores its viewport and draft afterward. Native terminal tests resize a running chat and verify that exit returns to the shell. Onboarder's original code-compass mark replaces the Hermes-inspired mascot, with full/compact terminal representations and a reusable SVG.
50
+
51
+ The harness requires a compatible Hermes installation. `agent doctor` checks the CLI flags, compiled MCP entry point and profile presence; it does not verify provider credentials or GitHub token scopes. Upstream interfaces can evolve; update the source revision and rerun both fixtures and the live-runtime smoke before expanding compatibility claims.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebase-onboarder",
3
- "version": "0.6.0",
3
+ "version": "1.0.0",
4
4
  "description": "Drop a path. Get a map. A zero-dependency codebase visualizer with a CLI onboarding wizard, a web UI, and an optional key-gated self-hosted mode.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,15 +13,23 @@
13
13
  "server",
14
14
  "shared",
15
15
  "public",
16
+ "docs/HERMES_RESEARCH.md",
16
17
  "README.md",
17
18
  "LICENSE"
18
19
  ],
19
20
  "scripts": {
21
+ "build": "npm run typecheck && tsc -p tsconfig.json",
22
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.strict.json",
20
23
  "start": "node server/index.js",
21
24
  "mcp": "node server/mcp/standalone.js",
22
- "test": "node --test",
25
+ "test": "npm run build && node --test",
23
26
  "postinstall": "node bin/postinstall.js",
24
- "prepublishOnly": "npm test"
27
+ "prepublishOnly": "npm test",
28
+ "prestart": "node bin/build-if-source.js",
29
+ "dev": "node scripts/dev.mjs",
30
+ "build:check": "node scripts/check-build.mjs",
31
+ "check": "npm run typecheck && npm test && npm run build:check",
32
+ "prepare": "node bin/build-if-source.js"
25
33
  },
26
34
  "engines": {
27
35
  "node": ">=20"
@@ -44,5 +52,9 @@
44
52
  "homepage": "https://github.com/Amitpandey88/onboarder#readme",
45
53
  "bugs": "https://github.com/Amitpandey88/onboarder/issues",
46
54
  "author": "Amit Pandey",
47
- "license": "MIT"
55
+ "license": "MIT",
56
+ "devDependencies": {
57
+ "@types/node": "^26.6.3",
58
+ "typescript": "^7.0.2"
59
+ }
48
60
  }
@@ -0,0 +1 @@
1
+ export {};