codebase-onboarder 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/README.md +174 -46
  2. package/bin/build-if-source.js +23 -0
  3. package/cli/commands.d.ts +26 -0
  4. package/cli/commands.js +836 -811
  5. package/cli/commands.js.map +1 -0
  6. package/cli/explorer/advanced.d.ts +14 -0
  7. package/cli/explorer/advanced.js +321 -329
  8. package/cli/explorer/advanced.js.map +1 -0
  9. package/cli/explorer/app.d.ts +1 -0
  10. package/cli/explorer/app.js +384 -313
  11. package/cli/explorer/app.js.map +1 -0
  12. package/cli/explorer/assistant.d.ts +9 -0
  13. package/cli/explorer/assistant.js +58 -0
  14. package/cli/explorer/assistant.js.map +1 -0
  15. package/cli/explorer/commands.d.ts +17 -0
  16. package/cli/explorer/commands.js +368 -302
  17. package/cli/explorer/commands.js.map +1 -0
  18. package/cli/explorer/featureViews.d.ts +124 -0
  19. package/cli/explorer/featureViews.js +179 -0
  20. package/cli/explorer/featureViews.js.map +1 -0
  21. package/cli/explorer/github.d.ts +21 -0
  22. package/cli/explorer/github.js +42 -44
  23. package/cli/explorer/github.js.map +1 -0
  24. package/cli/explorer/graphs.d.ts +7 -0
  25. package/cli/explorer/graphs.js +90 -95
  26. package/cli/explorer/graphs.js.map +1 -0
  27. package/cli/explorer/picker.d.ts +22 -0
  28. package/cli/explorer/picker.js +150 -0
  29. package/cli/explorer/picker.js.map +1 -0
  30. package/cli/explorer/report.d.ts +85 -0
  31. package/cli/explorer/report.js +60 -0
  32. package/cli/explorer/report.js.map +1 -0
  33. package/cli/explorer/session.d.ts +449 -0
  34. package/cli/explorer/session.js +143 -144
  35. package/cli/explorer/session.js.map +1 -0
  36. package/cli/explorer/views.d.ts +19 -0
  37. package/cli/explorer/views.js +465 -482
  38. package/cli/explorer/views.js.map +1 -0
  39. package/cli/explorer/wrap.d.ts +1 -0
  40. package/cli/explorer/wrap.js +28 -44
  41. package/cli/explorer/wrap.js.map +1 -0
  42. package/cli/main.d.ts +1 -0
  43. package/cli/main.js +214 -161
  44. package/cli/main.js.map +1 -0
  45. package/cli/prompt.d.ts +5 -0
  46. package/cli/prompt.js +84 -80
  47. package/cli/prompt.js.map +1 -0
  48. package/cli/scanOptions.d.ts +2 -0
  49. package/cli/scanOptions.js +11 -0
  50. package/cli/scanOptions.js.map +1 -0
  51. package/cli/ui.d.ts +33 -0
  52. package/cli/ui.js +35 -44
  53. package/cli/ui.js.map +1 -0
  54. package/cli/wizard.d.ts +187 -0
  55. package/cli/wizard.js +304 -284
  56. package/cli/wizard.js.map +1 -0
  57. package/package.json +15 -4
  58. package/public/app.d.ts +1 -0
  59. package/public/app.js +1057 -1009
  60. package/public/app.js.map +1 -0
  61. package/public/browser.d.ts +68 -0
  62. package/public/browser.js +2 -0
  63. package/public/browser.js.map +1 -0
  64. package/public/index.html +30 -13
  65. package/public/js/about.d.ts +6 -0
  66. package/public/js/about.js +152 -172
  67. package/public/js/about.js.map +1 -0
  68. package/public/js/aiDraft.d.ts +3 -0
  69. package/public/js/aiDraft.js +116 -124
  70. package/public/js/aiDraft.js.map +1 -0
  71. package/public/js/analysisPanel.d.ts +7 -0
  72. package/public/js/analysisPanel.js +166 -166
  73. package/public/js/analysisPanel.js.map +1 -0
  74. package/public/js/analysisReport.d.ts +38 -0
  75. package/public/js/analysisReport.js +105 -110
  76. package/public/js/analysisReport.js.map +1 -0
  77. package/public/js/api.d.ts +26 -0
  78. package/public/js/api.js +176 -167
  79. package/public/js/api.js.map +1 -0
  80. package/public/js/atlas.d.ts +6 -0
  81. package/public/js/atlas.js +50 -58
  82. package/public/js/atlas.js.map +1 -0
  83. package/public/js/blameView.d.ts +2 -0
  84. package/public/js/blameView.js +36 -37
  85. package/public/js/blameView.js.map +1 -0
  86. package/public/js/codeTab.d.ts +3 -0
  87. package/public/js/codeTab.js +175 -180
  88. package/public/js/codeTab.js.map +1 -0
  89. package/public/js/codeViewer.d.ts +5 -0
  90. package/public/js/codeViewer.js +162 -150
  91. package/public/js/codeViewer.js.map +1 -0
  92. package/public/js/components/FileChip.d.ts +9 -0
  93. package/public/js/components/FileChip.js +45 -49
  94. package/public/js/components/FileChip.js.map +1 -0
  95. package/public/js/components/MetricSparkline.d.ts +7 -0
  96. package/public/js/components/MetricSparkline.js +35 -44
  97. package/public/js/components/MetricSparkline.js.map +1 -0
  98. package/public/js/components/RiskBadge.d.ts +9 -0
  99. package/public/js/components/RiskBadge.js +55 -63
  100. package/public/js/components/RiskBadge.js.map +1 -0
  101. package/public/js/deepAnalysisView.d.ts +99 -0
  102. package/public/js/deepAnalysisView.js +282 -302
  103. package/public/js/deepAnalysisView.js.map +1 -0
  104. package/public/js/diagramPane.d.ts +8 -0
  105. package/public/js/diagramPane.js +133 -135
  106. package/public/js/diagramPane.js.map +1 -0
  107. package/public/js/diffView.d.ts +6 -0
  108. package/public/js/diffView.js +222 -209
  109. package/public/js/diffView.js.map +1 -0
  110. package/public/js/docsView.d.ts +2 -0
  111. package/public/js/docsView.js +441 -442
  112. package/public/js/docsView.js.map +1 -0
  113. package/public/js/dom.d.ts +189 -0
  114. package/public/js/dom.js +5 -0
  115. package/public/js/dom.js.map +1 -0
  116. package/public/js/fileSourceBrowser.d.ts +5 -0
  117. package/public/js/fileSourceBrowser.js +33 -41
  118. package/public/js/fileSourceBrowser.js.map +1 -0
  119. package/public/js/flameGraph.d.ts +5 -0
  120. package/public/js/flameGraph.js +62 -72
  121. package/public/js/flameGraph.js.map +1 -0
  122. package/public/js/forceGraph.d.ts +10 -0
  123. package/public/js/forceGraph.js +581 -556
  124. package/public/js/forceGraph.js.map +1 -0
  125. package/public/js/heatmap.d.ts +4 -0
  126. package/public/js/heatmap.js +142 -164
  127. package/public/js/heatmap.js.map +1 -0
  128. package/public/js/highlight.d.ts +2 -0
  129. package/public/js/highlight.js +116 -107
  130. package/public/js/highlight.js.map +1 -0
  131. package/public/js/html.d.ts +2 -0
  132. package/public/js/html.js +14 -44
  133. package/public/js/html.js.map +1 -0
  134. package/public/js/insightsView.d.ts +5 -0
  135. package/public/js/insightsView.js +93 -111
  136. package/public/js/insightsView.js.map +1 -0
  137. package/public/js/inspector.d.ts +37 -0
  138. package/public/js/inspector.js +416 -445
  139. package/public/js/inspector.js.map +1 -0
  140. package/public/js/llm.d.ts +113 -0
  141. package/public/js/llm.js +233 -272
  142. package/public/js/llm.js.map +1 -0
  143. package/public/js/mapView.d.ts +3 -0
  144. package/public/js/mapView.js +121 -120
  145. package/public/js/mapView.js.map +1 -0
  146. package/public/js/markdown.d.ts +3 -0
  147. package/public/js/markdown.js +84 -91
  148. package/public/js/markdown.js.map +1 -0
  149. package/public/js/mindmap.d.ts +32 -0
  150. package/public/js/mindmap.js +244 -259
  151. package/public/js/mindmap.js.map +1 -0
  152. package/public/js/mobilePanels.d.ts +5 -0
  153. package/public/js/mobilePanels.js +50 -0
  154. package/public/js/mobilePanels.js.map +1 -0
  155. package/public/js/repoFiles.d.ts +12 -0
  156. package/public/js/repoFiles.js +28 -27
  157. package/public/js/repoFiles.js.map +1 -0
  158. package/public/js/reviewView.d.ts +28 -0
  159. package/public/js/reviewView.js +256 -0
  160. package/public/js/reviewView.js.map +1 -0
  161. package/public/js/sbomView.d.ts +3 -0
  162. package/public/js/sbomView.js +59 -67
  163. package/public/js/sbomView.js.map +1 -0
  164. package/public/js/scanCache.d.ts +16 -0
  165. package/public/js/scanCache.js +67 -65
  166. package/public/js/scanCache.js.map +1 -0
  167. package/public/js/search.d.ts +7 -0
  168. package/public/js/search.js +868 -800
  169. package/public/js/search.js.map +1 -0
  170. package/public/js/searchLocal.d.ts +42 -0
  171. package/public/js/searchLocal.js +87 -0
  172. package/public/js/searchLocal.js.map +1 -0
  173. package/public/js/serverSettings.d.ts +5 -0
  174. package/public/js/serverSettings.js +153 -164
  175. package/public/js/serverSettings.js.map +1 -0
  176. package/public/js/state.d.ts +798 -0
  177. package/public/js/state.js +114 -122
  178. package/public/js/state.js.map +1 -0
  179. package/public/js/tour.d.ts +6 -0
  180. package/public/js/tour.js +5 -7
  181. package/public/js/tour.js.map +1 -0
  182. package/public/js/transitions.d.ts +2 -0
  183. package/public/js/transitions.js +9 -10
  184. package/public/js/transitions.js.map +1 -0
  185. package/public/js/tree.d.ts +12 -0
  186. package/public/js/tree.js +157 -154
  187. package/public/js/tree.js.map +1 -0
  188. package/public/js/workflowsView.d.ts +3 -0
  189. package/public/js/workflowsView.js +15 -22
  190. package/public/js/workflowsView.js.map +1 -0
  191. package/public/search.css +495 -0
  192. package/public/styles.css +163 -346
  193. package/public/workbench.css +166 -0
  194. package/server/apiAuth.d.ts +3 -0
  195. package/server/apiAuth.js +18 -20
  196. package/server/apiAuth.js.map +1 -0
  197. package/server/apiDiff.d.ts +2 -0
  198. package/server/apiDiff.js +20 -18
  199. package/server/apiDiff.js.map +1 -0
  200. package/server/apiDocs.d.ts +2 -0
  201. package/server/apiDocs.js +38 -40
  202. package/server/apiDocs.js.map +1 -0
  203. package/server/apiFile.d.ts +1 -0
  204. package/server/apiFile.js +14 -17
  205. package/server/apiFile.js.map +1 -0
  206. package/server/apiGitBlame.d.ts +2 -0
  207. package/server/apiGitBlame.js +50 -51
  208. package/server/apiGitBlame.js.map +1 -0
  209. package/server/apiMcp.d.ts +4 -0
  210. package/server/apiMcp.js +64 -66
  211. package/server/apiMcp.js.map +1 -0
  212. package/server/apiReview.d.ts +2 -0
  213. package/server/apiReview.js +45 -0
  214. package/server/apiReview.js.map +1 -0
  215. package/server/apiScan.d.ts +5 -0
  216. package/server/apiScan.js +90 -71
  217. package/server/apiScan.js.map +1 -0
  218. package/server/apiSearch.d.ts +33 -0
  219. package/server/apiSearch.js +184 -200
  220. package/server/apiSearch.js.map +1 -0
  221. package/server/apiSettings.d.ts +4 -0
  222. package/server/apiSettings.js +84 -85
  223. package/server/apiSettings.js.map +1 -0
  224. package/server/apiTools.d.ts +3 -0
  225. package/server/apiTools.js +55 -56
  226. package/server/apiTools.js.map +1 -0
  227. package/server/auth.d.ts +5 -0
  228. package/server/auth.js +54 -51
  229. package/server/auth.js.map +1 -0
  230. package/server/config.d.ts +42 -0
  231. package/server/config.js +189 -194
  232. package/server/config.js.map +1 -0
  233. package/server/daemon.d.ts +12 -0
  234. package/server/daemon.js +124 -114
  235. package/server/daemon.js.map +1 -0
  236. package/server/fileSourceNode.d.ts +2 -0
  237. package/server/fileSourceNode.js +34 -36
  238. package/server/fileSourceNode.js.map +1 -0
  239. package/server/gitClone.d.ts +9 -0
  240. package/server/gitClone.js +59 -61
  241. package/server/gitClone.js.map +1 -0
  242. package/server/gitDiff.d.ts +36 -0
  243. package/server/gitDiff.js +271 -169
  244. package/server/gitDiff.js.map +1 -0
  245. package/server/gitHistory.d.ts +12 -0
  246. package/server/gitHistory.js +80 -80
  247. package/server/gitHistory.js.map +1 -0
  248. package/server/gitRemote.d.ts +12 -0
  249. package/server/gitRemote.js +37 -38
  250. package/server/gitRemote.js.map +1 -0
  251. package/server/htmlText.d.ts +4 -0
  252. package/server/htmlText.js +16 -23
  253. package/server/htmlText.js.map +1 -0
  254. package/server/http.d.ts +5 -0
  255. package/server/http.js +27 -30
  256. package/server/http.js.map +1 -0
  257. package/server/httpGuards.d.ts +2 -0
  258. package/server/httpGuards.js +47 -43
  259. package/server/httpGuards.js.map +1 -0
  260. package/server/https.d.ts +34 -0
  261. package/server/https.js +121 -111
  262. package/server/https.js.map +1 -0
  263. package/server/index.d.ts +40 -0
  264. package/server/index.js +139 -147
  265. package/server/index.js.map +1 -0
  266. package/server/layout.d.ts +26 -0
  267. package/server/layout.js +59 -64
  268. package/server/layout.js.map +1 -0
  269. package/server/llmProxy.d.ts +3 -0
  270. package/server/llmProxy.js +137 -135
  271. package/server/llmProxy.js.map +1 -0
  272. package/server/logger.d.ts +38 -0
  273. package/server/logger.js +198 -211
  274. package/server/logger.js.map +1 -0
  275. package/server/mcp/analysis.d.ts +29 -0
  276. package/server/mcp/analysis.js +99 -120
  277. package/server/mcp/analysis.js.map +1 -0
  278. package/server/mcp/http.d.ts +9 -0
  279. package/server/mcp/http.js +128 -137
  280. package/server/mcp/http.js.map +1 -0
  281. package/server/mcp/runner.d.ts +68 -0
  282. package/server/mcp/runner.js +208 -218
  283. package/server/mcp/runner.js.map +1 -0
  284. package/server/mcp/server.d.ts +29 -0
  285. package/server/mcp/server.js +166 -179
  286. package/server/mcp/server.js.map +1 -0
  287. package/server/mcp/standalone.d.ts +1 -0
  288. package/server/mcp/standalone.js +8 -10
  289. package/server/mcp/standalone.js.map +1 -0
  290. package/server/mcp/tools.d.ts +2020 -0
  291. package/server/mcp/tools.js +523 -574
  292. package/server/mcp/tools.js.map +1 -0
  293. package/server/paths.d.ts +3 -0
  294. package/server/paths.js +17 -15
  295. package/server/paths.js.map +1 -0
  296. package/server/pidfile.d.ts +9 -0
  297. package/server/pidfile.js +43 -45
  298. package/server/pidfile.js.map +1 -0
  299. package/server/review.d.ts +5 -0
  300. package/server/review.js +35 -0
  301. package/server/review.js.map +1 -0
  302. package/server/router.d.ts +33 -0
  303. package/server/router.js +191 -197
  304. package/server/router.js.map +1 -0
  305. package/server/scanRequest.d.ts +3 -0
  306. package/server/scanRequest.js +36 -0
  307. package/server/scanRequest.js.map +1 -0
  308. package/server/searchIndex.d.ts +17 -0
  309. package/server/searchIndex.js +83 -80
  310. package/server/searchIndex.js.map +1 -0
  311. package/server/sessions.d.ts +14 -0
  312. package/server/sessions.js +62 -70
  313. package/server/sessions.js.map +1 -0
  314. package/server/startup.d.ts +118 -0
  315. package/server/startup.js +143 -148
  316. package/server/startup.js.map +1 -0
  317. package/server/static.d.ts +6 -0
  318. package/server/static.js +28 -31
  319. package/server/static.js.map +1 -0
  320. package/server/tools/install.d.ts +4 -0
  321. package/server/tools/install.js +176 -185
  322. package/server/tools/install.js.map +1 -0
  323. package/server/tools/parse.d.ts +8 -0
  324. package/server/tools/parse.js +112 -114
  325. package/server/tools/parse.js.map +1 -0
  326. package/server/tools/platform.d.ts +9 -0
  327. package/server/tools/platform.js +49 -47
  328. package/server/tools/platform.js.map +1 -0
  329. package/server/tools/registry.d.ts +137 -0
  330. package/server/tools/registry.js +173 -172
  331. package/server/tools/registry.js.map +1 -0
  332. package/server/tools/scan.d.ts +34 -0
  333. package/server/tools/scan.js +89 -98
  334. package/server/tools/scan.js.map +1 -0
  335. package/server/tools.d.ts +34 -0
  336. package/server/tools.js +94 -107
  337. package/server/tools.js.map +1 -0
  338. package/server/tunnel.d.ts +29 -0
  339. package/server/tunnel.js +61 -66
  340. package/server/tunnel.js.map +1 -0
  341. package/shared/analyzer/docs.d.ts +16 -0
  342. package/shared/analyzer/docs.js +99 -93
  343. package/shared/analyzer/docs.js.map +1 -0
  344. package/shared/analyzer/explainLocal.d.ts +4 -0
  345. package/shared/analyzer/explainLocal.js +122 -142
  346. package/shared/analyzer/explainLocal.js.map +1 -0
  347. package/shared/analyzer/github.d.ts +37 -0
  348. package/shared/analyzer/github.js +41 -43
  349. package/shared/analyzer/github.js.map +1 -0
  350. package/shared/analyzer/graph.d.ts +41 -0
  351. package/shared/analyzer/graph.js +393 -400
  352. package/shared/analyzer/graph.js.map +1 -0
  353. package/shared/analyzer/health.d.ts +33 -0
  354. package/shared/analyzer/health.js +197 -193
  355. package/shared/analyzer/health.js.map +1 -0
  356. package/shared/analyzer/history.d.ts +29 -0
  357. package/shared/analyzer/history.js +110 -111
  358. package/shared/analyzer/history.js.map +1 -0
  359. package/shared/analyzer/jsonConfig.d.ts +2 -0
  360. package/shared/analyzer/jsonConfig.js +61 -0
  361. package/shared/analyzer/jsonConfig.js.map +1 -0
  362. package/shared/analyzer/languages/csharp.d.ts +26 -0
  363. package/shared/analyzer/languages/csharp.js +83 -88
  364. package/shared/analyzer/languages/csharp.js.map +1 -0
  365. package/shared/analyzer/languages/generic.d.ts +23 -0
  366. package/shared/analyzer/languages/generic.js +94 -105
  367. package/shared/analyzer/languages/generic.js.map +1 -0
  368. package/shared/analyzer/languages/go.d.ts +24 -0
  369. package/shared/analyzer/languages/go.js +45 -54
  370. package/shared/analyzer/languages/go.js.map +1 -0
  371. package/shared/analyzer/languages/index.d.ts +6 -0
  372. package/shared/analyzer/languages/index.js +19 -20
  373. package/shared/analyzer/languages/index.js.map +1 -0
  374. package/shared/analyzer/languages/java.d.ts +20 -0
  375. package/shared/analyzer/languages/java.js +73 -78
  376. package/shared/analyzer/languages/java.js.map +1 -0
  377. package/shared/analyzer/languages/javascript.d.ts +12 -0
  378. package/shared/analyzer/languages/javascript.js +258 -209
  379. package/shared/analyzer/languages/javascript.js.map +1 -0
  380. package/shared/analyzer/languages/python.d.ts +23 -0
  381. package/shared/analyzer/languages/python.js +92 -100
  382. package/shared/analyzer/languages/python.js.map +1 -0
  383. package/shared/analyzer/languages/rust.d.ts +17 -0
  384. package/shared/analyzer/languages/rust.js +96 -98
  385. package/shared/analyzer/languages/rust.js.map +1 -0
  386. package/shared/analyzer/languages/typescript.d.ts +11 -0
  387. package/shared/analyzer/languages/typescript.js +117 -116
  388. package/shared/analyzer/languages/typescript.js.map +1 -0
  389. package/shared/analyzer/licenses.d.ts +18 -0
  390. package/shared/analyzer/licenses.js +130 -133
  391. package/shared/analyzer/licenses.js.map +1 -0
  392. package/shared/analyzer/metrics.d.ts +20 -0
  393. package/shared/analyzer/metrics.js +112 -104
  394. package/shared/analyzer/metrics.js.map +1 -0
  395. package/shared/analyzer/pathUtil.d.ts +10 -0
  396. package/shared/analyzer/pathUtil.js +29 -35
  397. package/shared/analyzer/pathUtil.js.map +1 -0
  398. package/shared/analyzer/patterns.d.ts +11 -0
  399. package/shared/analyzer/patterns.js +231 -253
  400. package/shared/analyzer/patterns.js.map +1 -0
  401. package/shared/analyzer/scan.d.ts +62 -0
  402. package/shared/analyzer/scan.js +451 -442
  403. package/shared/analyzer/scan.js.map +1 -0
  404. package/shared/analyzer/scanControl.d.ts +11 -0
  405. package/shared/analyzer/scanControl.js +62 -0
  406. package/shared/analyzer/scanControl.js.map +1 -0
  407. package/shared/analyzer/security.d.ts +18 -0
  408. package/shared/analyzer/security.js +159 -159
  409. package/shared/analyzer/security.js.map +1 -0
  410. package/shared/analyzer/services.d.ts +5 -0
  411. package/shared/analyzer/services.js +141 -138
  412. package/shared/analyzer/services.js.map +1 -0
  413. package/shared/analyzer/stack.d.ts +6 -0
  414. package/shared/analyzer/stack.js +134 -141
  415. package/shared/analyzer/stack.js.map +1 -0
  416. package/shared/analyzer/tour.d.ts +2 -0
  417. package/shared/analyzer/tour.js +45 -53
  418. package/shared/analyzer/tour.js.map +1 -0
  419. package/shared/analyzer/util.d.ts +8 -0
  420. package/shared/analyzer/util.js +130 -76
  421. package/shared/analyzer/util.js.map +1 -0
  422. package/shared/analyzer/workflows.d.ts +8 -0
  423. package/shared/analyzer/workflows.js +139 -134
  424. package/shared/analyzer/workflows.js.map +1 -0
  425. package/shared/contracts.d.ts +250 -0
  426. package/shared/contracts.js +2 -0
  427. package/shared/contracts.js.map +1 -0
  428. package/shared/diagram/aiFacts.d.ts +35 -0
  429. package/shared/diagram/aiFacts.js +102 -105
  430. package/shared/diagram/aiFacts.js.map +1 -0
  431. package/shared/diagram/aiMermaid.d.ts +5 -0
  432. package/shared/diagram/aiMermaid.js +46 -45
  433. package/shared/diagram/aiMermaid.js.map +1 -0
  434. package/shared/diagram/atlas.d.ts +16 -0
  435. package/shared/diagram/atlas.js +51 -60
  436. package/shared/diagram/atlas.js.map +1 -0
  437. package/shared/diagram/mermaid.d.ts +43 -0
  438. package/shared/diagram/mermaid.js +348 -370
  439. package/shared/diagram/mermaid.js.map +1 -0
  440. package/shared/review/contracts.d.ts +95 -0
  441. package/shared/review/contracts.js +2 -0
  442. package/shared/review/contracts.js.map +1 -0
  443. package/shared/review/review.d.ts +10 -0
  444. package/shared/review/review.js +184 -0
  445. package/shared/review/review.js.map +1 -0
  446. package/shared/search/query.d.ts +32 -0
  447. package/shared/search/query.js +395 -388
  448. package/shared/search/query.js.map +1 -0
package/cli/main.js CHANGED
@@ -1,27 +1,37 @@
1
+ import { scanOptionsFromFlags } from './scanOptions.js';
1
2
  // argv → command. `bin/onboarder.js` is a one-line trampoline into `main`; all
2
3
  // parsing and dispatch lives here so the tests can call it directly.
3
4
  //
4
5
  // Flags use node's util.parseArgs — still zero dependencies, still strict about
5
6
  // unknown flags, which is what a tool that writes a config file should be.
6
-
7
7
  import fs from 'node:fs';
8
8
  import { parseArgs } from 'node:util';
9
-
10
- import {
11
- runSetup, runStart, runStartBackground, runStartup, runLogs, runStatus, runStop, runRestart,
12
- runConfig, runConfigKey, runConfigReset, runDoctor, runTunnel, runHttps,
13
- } from './commands.js';
9
+ import { runSetup, runStart, runStartBackground, runStartup, runLogs, runStatus, runStop, runRestart, runConfig, runConfigKey, runConfigReset, runDoctor, runTunnel, runHttps, } from './commands.js';
14
10
  import { runExplore } from './explorer/app.js';
11
+ import { openRepoOrClone, closeRemote } from './explorer/session.js';
12
+ import { createReport, formatReport } from './explorer/report.js';
15
13
  import { setColorEnabled } from './ui.js';
16
-
14
+ import { runReview } from '../server/review.js';
15
+ import { reviewMarkdown, reviewProfile, SEVERITY_RANK } from '../shared/review/review.js';
16
+ import { expandHome } from '../server/paths.js';
17
17
  const PACKAGE = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
18
-
19
18
  const HELP = `
20
19
  🧭 Onboarder — drop a path, get a map.
21
20
 
21
+ Scan options for report and explore
22
+ --max-files <count> Maximum files to walk (default: 4000)
23
+ --max-file-size <bytes> Maximum UTF-8 file size (default: 204800)
24
+ --read-concurrency <n> Concurrent reads, 1–32 (default: 8)
25
+
22
26
  Usage
23
27
  onboarder Explore a codebase here, interactively
24
- onboarder explore [folder|url] The same, pointed somewhere else (alias: tui)
28
+ onboarder explore [folder|url] Choose a source, or open one directly (alias: tui)
29
+ onboarder report [folder|url] One-shot summary for terminals and scripts (--json)
30
+ onboarder review [folder] Review local changes (--json for scripts)
31
+ --base <ref> --head <ref> Compare branches from their merge base
32
+ --staged Review only staged changes
33
+ --profile focused|balanced|thorough
34
+ --fail-on high|medium|low|critical|info Exit 1 for findings at this level or above
25
35
  onboarder start Start the web UI in the foreground (Ctrl-C stops it)
26
36
  onboarder start background Start detached — keeps running after you close the terminal
27
37
  onboarder start startup Run automatically at login [install|remove|status]
@@ -37,13 +47,16 @@ const HELP = `
37
47
 
38
48
  In the explorer
39
49
  map tour explain what this is, where to start, and why
40
- tree find show deps browse it, search it, read it, trace it
50
+ tree find show inspect deps browse it, search it, read it, trace it
41
51
  graph blast symbols the dependency tree, the blast radius, the outline
42
52
  health hubs layers patterns the analysis, in the same words the site uses
43
53
  coupling clusters risks the heat grid, the module groups, what is wrong
44
54
  log hotspots blame git history, hot files, who wrote a line
45
- diagram docs Mermaid source, and prose you can write out
46
- cd rescan web switch repo (or clone a URL), reload, open the web UI
55
+ diagram atlas docs Mermaid source, diagram index, and prose
56
+ workflows sbom CI jobs and dependency/license inventory
57
+ diff engines deep Changed files, analyzer status, optional deep scan
58
+ ask <question> Optional AI answer grounded in the loaded repo
59
+ pick cd rescan web choose a source, switch repo, reload, open the web UI
47
60
  github what GitHub says about this repo — stars, issues, license
48
61
  !<command> run a shell command without leaving
49
62
  help exit everything, and the way out
@@ -75,7 +88,9 @@ const HELP = `
75
88
  Examples
76
89
  onboarder # explore the repo you are standing in
77
90
  onboarder explore ~/code/my-app # explore somewhere else
91
+ onboarder explore # choose a local folder or paste a Git URL
78
92
  onboarder explore https://github.com/expressjs/express # clone one and read it
93
+ onboarder report . --json # analyze once and print machine-readable JSON
79
94
  onboarder start background # leave the web UI running, close the terminal
80
95
  onboarder logs -f # watch what it is doing
81
96
  onboarder start startup install # also start it every time you log in
@@ -83,48 +98,53 @@ const HELP = `
83
98
  onboarder setup --non-interactive --mode self-hosted --domain map.example.com --https --start
84
99
  onboarder config set tunnel.cloudflare true && onboarder tunnel cloudflare
85
100
  `;
86
-
87
101
  const OPTIONS = {
88
- help: { type: 'boolean', short: 'h' },
89
- version: { type: 'boolean', short: 'v' },
90
- json: { type: 'boolean' },
91
- yes: { type: 'boolean', short: 'y' },
92
- 'non-interactive': { type: 'boolean' },
93
- reveal: { type: 'boolean' },
94
- verbose: { type: 'boolean' },
95
- start: { type: 'boolean' },
96
- color: { type: 'boolean' }, // `--no-color` is lifted out by extractNegatedFlags; --color forces it on
97
- config: { type: 'string' },
98
- mode: { type: 'string' },
99
- host: { type: 'string' },
100
- port: { type: 'string' },
101
- domain: { type: 'string' },
102
- https: { type: 'boolean' },
103
- 'access-key': { type: 'string' },
104
- name: { type: 'string' },
105
- email: { type: 'string' },
106
- provider: { type: 'string' },
107
- 'base-url': { type: 'string' },
108
- model: { type: 'string' },
109
- cloudflare: { type: 'boolean' },
110
- tailscale: { type: 'boolean' },
111
- 'auto-open': { type: 'boolean' },
112
- lines: { type: 'string', short: 'n' },
113
- follow: { type: 'boolean', short: 'f' },
114
- timeout: { type: 'string' },
115
- server: { type: 'boolean' },
102
+ help: { type: 'boolean', short: 'h' },
103
+ version: { type: 'boolean', short: 'v' },
104
+ json: { type: 'boolean' },
105
+ yes: { type: 'boolean', short: 'y' },
106
+ 'non-interactive': { type: 'boolean' },
107
+ reveal: { type: 'boolean' },
108
+ verbose: { type: 'boolean' },
109
+ start: { type: 'boolean' },
110
+ color: { type: 'boolean' }, // `--no-color` is lifted out by extractNegatedFlags; --color forces it on
111
+ config: { type: 'string' },
112
+ mode: { type: 'string' },
113
+ host: { type: 'string' },
114
+ port: { type: 'string' },
115
+ domain: { type: 'string' },
116
+ https: { type: 'boolean' },
117
+ 'access-key': { type: 'string' },
118
+ name: { type: 'string' },
119
+ email: { type: 'string' },
120
+ provider: { type: 'string' },
121
+ 'base-url': { type: 'string' },
122
+ model: { type: 'string' },
123
+ cloudflare: { type: 'boolean' },
124
+ tailscale: { type: 'boolean' },
125
+ 'auto-open': { type: 'boolean' },
126
+ lines: { type: 'string', short: 'n' },
127
+ follow: { type: 'boolean', short: 'f' },
128
+ timeout: { type: 'string' },
129
+ server: { type: 'boolean' },
130
+ 'max-files': { type: 'string' },
131
+ 'max-file-size': { type: 'string' },
132
+ 'read-concurrency': { type: 'string' },
133
+ base: { type: 'string' },
134
+ head: { type: 'string' },
135
+ staged: { type: 'boolean' },
136
+ profile: { type: 'string' },
137
+ 'fail-on': { type: 'string' },
116
138
  };
117
-
118
139
  // parseArgs speaks kebab-case; the wizard's flags speak camelCase.
119
140
  function normalizeFlags(values) {
120
- const out = {};
121
- for (const [k, v] of Object.entries(values)) {
122
- const key = k.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
123
- out[key] = v;
124
- }
125
- return out;
141
+ const out = {};
142
+ for (const [k, v] of Object.entries(values)) {
143
+ const key = k.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
144
+ out[key] = v;
145
+ }
146
+ return out;
126
147
  }
127
-
128
148
  // `parseArgs` cannot express a negated boolean. `--color=false` is rejected
129
149
  // outright, `--color false` sets `color: true` and leaves `false` behind as a
130
150
  // positional, and `--no-color` is an unknown option — so the documented flag
@@ -137,126 +157,159 @@ function normalizeFlags(values) {
137
157
  // of a tool that writes a config file) while making the one negation the CLI
138
158
  // documents actually work.
139
159
  function extractNegatedFlags(argv) {
140
- const rest = [];
141
- let noColor = false;
142
- for (const arg of argv) {
143
- if (arg === '--no-color') noColor = true;
144
- else rest.push(arg);
145
- }
146
- return { argv: rest, noColor };
160
+ const rest = [];
161
+ let noColor = false;
162
+ for (const arg of argv) {
163
+ if (arg === '--no-color')
164
+ noColor = true;
165
+ else
166
+ rest.push(arg);
167
+ }
168
+ return { argv: rest, noColor };
147
169
  }
148
-
149
170
  export async function main(argv = process.argv.slice(2)) {
150
- const { argv: argsIn, noColor } = extractNegatedFlags(argv);
151
- let parsed;
152
- try {
153
- parsed = parseArgs({ args: argsIn, options: OPTIONS, allowPositionals: true });
154
- } catch (e) {
155
- console.error(' ' + e.message + '\n' + HELP);
156
- return 2;
157
- }
158
- const { values, positionals } = parsed;
159
- const flags = normalizeFlags(values);
160
-
161
- // Color is decided here, after the flags exist and before anything is
162
- // painted. An explicit `--no-color` wins over `FORCE_COLOR`: a person who
163
- // typed the flag meant it, and a stray `FORCE_COLOR` inherited from a CI
164
- // profile should not override the thing they just asked for.
165
- if (noColor) {
166
- flags.color = false;
167
- setColorEnabled(false);
168
- } else if (flags.color === true) {
169
- // `--color` was accepted by the parser and then ignored, which is the same
170
- // lie in the other direction. It is the documented way to keep ANSI in a
171
- // captured log, so it has to actually turn color on.
172
- setColorEnabled(true);
173
- }
174
-
175
- if (flags.help) { console.log(HELP); return 0; }
176
- if (flags.version) { console.log(PACKAGE.version); return 0; }
177
-
178
- const [cmd, sub, ...rest] = positionals;
179
- try {
180
- switch (cmd) {
181
- case 'help':
171
+ const { argv: argsIn, noColor } = extractNegatedFlags(argv);
172
+ let parsed;
173
+ try {
174
+ parsed = parseArgs({ args: argsIn, options: OPTIONS, allowPositionals: true });
175
+ }
176
+ catch (e) {
177
+ console.error(' ' + e.message + '\n' + HELP);
178
+ return 2;
179
+ }
180
+ const { values, positionals } = parsed;
181
+ const flags = normalizeFlags(values);
182
+ // Color is decided here, after the flags exist and before anything is
183
+ // painted. An explicit `--no-color` wins over `FORCE_COLOR`: a person who
184
+ // typed the flag meant it, and a stray `FORCE_COLOR` inherited from a CI
185
+ // profile should not override the thing they just asked for.
186
+ if (noColor) {
187
+ flags.color = false;
188
+ setColorEnabled(false);
189
+ }
190
+ else if (flags.color === true) {
191
+ // `--color` was accepted by the parser and then ignored, which is the same
192
+ // lie in the other direction. It is the documented way to keep ANSI in a
193
+ // captured log, so it has to actually turn color on.
194
+ setColorEnabled(true);
195
+ }
196
+ if (flags.help) {
182
197
  console.log(HELP);
183
198
  return 0;
184
- case undefined:
185
- // The entry point. On a terminal, bare `onboarder` explores the repo you
186
- // are standing in — the thing people actually want from this tool, and
187
- // what the name promises. Everywhere else (a pipe, CI, a script) it
188
- // still starts the server, because an interactive session with no input
189
- // source is a hang, and nothing about a background job wants a prompt.
190
- // `--server` forces the old behavior even on a terminal.
191
- if (!flags.server && process.stdin.isTTY && process.stdout.isTTY) {
192
- return codeOf(await runExplore({ flags, target: '.' }));
193
- }
194
- return codeOf(await runStart({ flags }));
195
- case 'explore':
196
- case 'tui':
197
- case 'shell':
198
- return codeOf(await runExplore({ flags, target: sub || '.' }));
199
- case 'web':
200
- case 'site':
201
- return codeOf(await runStart({ flags }));
202
- case 'start':
203
- // `onboarder start [background|fg|startup [action]]`. The sub-verb is a
204
- // positional, not a flag, because `onboarder start` has to keep working
205
- // exactly as it did and `startup install` is a different verb from
206
- // `start`.
207
- if (sub === 'background' || sub === 'bg' || sub === 'daemon' || sub === 'detached') {
208
- return codeOf(await runStartBackground({ flags }));
209
- }
210
- if (sub === 'startup' || sub === 'login' || sub === 'autostart') {
211
- return codeOf(await runStartup(rest[0] || 'status', { flags }));
212
- }
213
- if (sub === 'fg' || sub === 'foreground') return codeOf(await runStart({ flags }));
214
- if (sub === 'status') return codeOf(await runStatus({ flags }));
215
- if (sub === 'stop') return codeOf(await runStop({ flags }));
216
- if (sub === 'logs') return codeOf(await runLogs({ flags }));
217
- if (sub) {
218
- console.error(' Unknown start mode: ' + sub + '\n' + HELP);
219
- return 2;
199
+ }
200
+ if (flags.version) {
201
+ console.log(PACKAGE.version);
202
+ return 0;
203
+ }
204
+ const [cmd, sub, ...rest] = positionals;
205
+ try {
206
+ switch (cmd) {
207
+ case 'help':
208
+ console.log(HELP);
209
+ return 0;
210
+ case undefined:
211
+ // The entry point. On a terminal, bare `onboarder` explores the repo you
212
+ // are standing in — the thing people actually want from this tool, and
213
+ // what the name promises. Everywhere else (a pipe, CI, a script) it
214
+ // still starts the server, because an interactive session with no input
215
+ // source is a hang, and nothing about a background job wants a prompt.
216
+ // `--server` forces the old behavior even on a terminal.
217
+ if (!flags.server && process.stdin.isTTY && process.stdout.isTTY) {
218
+ return codeOf(await runExplore({ flags }));
219
+ }
220
+ return codeOf(await runStart({ flags }));
221
+ case 'explore':
222
+ case 'tui':
223
+ case 'shell':
224
+ return codeOf(await runExplore({ flags, target: sub }));
225
+ case 'report': {
226
+ const repo = await openRepoOrClone(sub || '.', scanOptionsFromFlags(flags));
227
+ try {
228
+ const report = createReport(repo);
229
+ console.log(flags.json ? JSON.stringify(report, null, 2) : formatReport(report));
230
+ return 0;
231
+ }
232
+ finally {
233
+ await closeRemote(repo);
234
+ }
235
+ }
236
+ case 'review': {
237
+ if (flags.staged && flags.head)
238
+ throw new Error('Choose either --staged or --head.');
239
+ if (flags.failOn && !Object.hasOwn(SEVERITY_RANK, flags.failOn))
240
+ throw new Error('Choose a valid --fail-on severity: critical, high, medium, low, or info.');
241
+ const report = await runReview(expandHome(sub || '.'), { base: flags.base || 'HEAD', head: flags.head || '', mode: flags.staged ? 'staged' : flags.head ? 'range' : 'working', profile: flags.profile ? reviewProfile(flags.profile) : undefined });
242
+ console.log(flags.json ? JSON.stringify(report, null, 2) : reviewMarkdown(report));
243
+ return flags.failOn && report.findings.some(f => SEVERITY_RANK[f.severity] >= SEVERITY_RANK[flags.failOn]) || report.checks.some(c => c.id === 'conflicts' && c.status === 'fail') ? 1 : 0;
244
+ }
245
+ case 'web':
246
+ case 'site':
247
+ return codeOf(await runStart({ flags }));
248
+ case 'start':
249
+ // `onboarder start [background|fg|startup [action]]`. The sub-verb is a
250
+ // positional, not a flag, because `onboarder start` has to keep working
251
+ // exactly as it did and `startup install` is a different verb from
252
+ // `start`.
253
+ if (sub === 'background' || sub === 'bg' || sub === 'daemon' || sub === 'detached') {
254
+ return codeOf(await runStartBackground({ flags }));
255
+ }
256
+ if (sub === 'startup' || sub === 'login' || sub === 'autostart') {
257
+ return codeOf(await runStartup(rest[0] || 'status', { flags }));
258
+ }
259
+ if (sub === 'fg' || sub === 'foreground')
260
+ return codeOf(await runStart({ flags }));
261
+ if (sub === 'status')
262
+ return codeOf(await runStatus({ flags }));
263
+ if (sub === 'stop')
264
+ return codeOf(await runStop({ flags }));
265
+ if (sub === 'logs')
266
+ return codeOf(await runLogs({ flags }));
267
+ if (sub) {
268
+ console.error(' Unknown start mode: ' + sub + '\n' + HELP);
269
+ return 2;
270
+ }
271
+ return codeOf(await runStart({ flags }));
272
+ case 'logs':
273
+ case 'log':
274
+ return codeOf(await runLogs({ flags }));
275
+ case 'startup':
276
+ case 'autostart':
277
+ return codeOf(await runStartup(sub || 'status', { flags }));
278
+ case 'status':
279
+ return codeOf(await runStatus({ flags }));
280
+ case 'stop':
281
+ return codeOf(await runStop({ flags }));
282
+ case 'restart':
283
+ return codeOf(await runRestart({ flags }));
284
+ case 'setup':
285
+ case 'onboard':
286
+ case 'init':
287
+ return codeOf(await runSetup({ flags, version: PACKAGE.version }));
288
+ case 'config':
289
+ if (sub === 'key')
290
+ return codeOf(await runConfigKey(rest[0], rest.slice(1), { flags }));
291
+ if (sub === 'reset')
292
+ return codeOf(await runConfigReset({ flags }));
293
+ return codeOf(await runConfig(sub || 'show', rest, { flags }));
294
+ case 'tunnel':
295
+ return codeOf(await runTunnel(sub, { flags }));
296
+ case 'https':
297
+ return codeOf(await runHttps(sub || 'status', { flags }));
298
+ case 'doctor':
299
+ return codeOf(await runDoctor({ flags }));
300
+ default:
301
+ console.error(' Unknown command: ' + cmd + '\n' + HELP);
302
+ return 2;
220
303
  }
221
- return codeOf(await runStart({ flags }));
222
- case 'logs':
223
- case 'log':
224
- return codeOf(await runLogs({ flags }));
225
- case 'startup':
226
- case 'autostart':
227
- return codeOf(await runStartup(sub || 'status', { flags }));
228
- case 'status':
229
- return codeOf(await runStatus({ flags }));
230
- case 'stop':
231
- return codeOf(await runStop({ flags }));
232
- case 'restart':
233
- return codeOf(await runRestart({ flags }));
234
- case 'setup':
235
- case 'onboard':
236
- case 'init':
237
- return codeOf(await runSetup({ flags, version: PACKAGE.version }));
238
- case 'config':
239
- if (sub === 'key') return codeOf(await runConfigKey(rest[0], rest.slice(1), { flags }));
240
- if (sub === 'reset') return codeOf(await runConfigReset({ flags }));
241
- return codeOf(await runConfig(sub || 'show', rest, { flags }));
242
- case 'tunnel':
243
- return codeOf(await runTunnel(sub, { flags }));
244
- case 'https':
245
- return codeOf(await runHttps(sub || 'status', { flags }));
246
- case 'doctor':
247
- return codeOf(await runDoctor({ flags }));
248
- default:
249
- console.error(' Unknown command: ' + cmd + '\n' + HELP);
250
- return 2;
251
304
  }
252
- } catch (e) {
253
- console.error(' ' + (e.message || e));
254
- return 1;
255
- }
305
+ catch (e) {
306
+ console.error(' ' + (e.message || e));
307
+ return 1;
308
+ }
256
309
  }
257
-
258
310
  // Commands return an exit code or, for `start`, an object carrying the live
259
311
  // server. Both collapse to "what code should the process eventually use".
260
312
  function codeOf(result) {
261
- return typeof result === 'number' ? result : result?.code ?? 0;
313
+ return typeof result === 'number' ? result : result?.code ?? 0;
262
314
  }
315
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/cli/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { scanOptionsFromFlags } from './scanOptions.js';\n// argv → command. `bin/onboarder.js` is a one-line trampoline into `main`; all\n// parsing and dispatch lives here so the tests can call it directly.\n//\n// Flags use node's util.parseArgs — still zero dependencies, still strict about\n// unknown flags, which is what a tool that writes a config file should be.\n\nimport fs from 'node:fs';\nimport { parseArgs } from 'node:util';\n\nimport {\n runSetup, runStart, runStartBackground, runStartup, runLogs, runStatus, runStop, runRestart,\n runConfig, runConfigKey, runConfigReset, runDoctor, runTunnel, runHttps,\n} from './commands.js';\nimport { runExplore } from './explorer/app.js';\nimport { openRepoOrClone, closeRemote } from './explorer/session.js';\nimport { createReport, formatReport } from './explorer/report.js';\nimport { setColorEnabled } from './ui.js';\nimport { runReview } from '../server/review.js';\nimport { reviewMarkdown, reviewProfile, SEVERITY_RANK } from '../shared/review/review.js';\nimport { expandHome } from '../server/paths.js';\n\nconst PACKAGE = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf8'));\n\nconst HELP = `\n 🧭 Onboarder — drop a path, get a map.\n\n Scan options for report and explore\n --max-files <count> Maximum files to walk (default: 4000)\n --max-file-size <bytes> Maximum UTF-8 file size (default: 204800)\n --read-concurrency <n> Concurrent reads, 1–32 (default: 8)\n\n Usage\n onboarder Explore a codebase here, interactively\n onboarder explore [folder|url] Choose a source, or open one directly (alias: tui)\n onboarder report [folder|url] One-shot summary for terminals and scripts (--json)\n onboarder review [folder] Review local changes (--json for scripts)\n --base <ref> --head <ref> Compare branches from their merge base\n --staged Review only staged changes\n --profile focused|balanced|thorough\n --fail-on high|medium|low|critical|info Exit 1 for findings at this level or above\n onboarder start Start the web UI in the foreground (Ctrl-C stops it)\n onboarder start background Start detached — keeps running after you close the terminal\n onboarder start startup Run automatically at login [install|remove|status]\n onboarder web Alias for \\`onboarder start\\`\n onboarder logs Show recent log lines (-n <count>, -f to follow)\n onboarder status Show whether the web UI is running\n onboarder stop Stop the running web UI\n onboarder restart Stop and start again\n onboarder config [<…>] show | get <key> | set <key> <value> | path | reset | key <rotate|show|set>\n onboarder tunnel <name> cloudflare | tailscale\n onboarder https <action> check | setup | start | stop | status\n onboarder doctor Check the machine and the config\n\n In the explorer\n map tour explain what this is, where to start, and why\n tree find show inspect deps browse it, search it, read it, trace it\n graph blast symbols the dependency tree, the blast radius, the outline\n health hubs layers patterns the analysis, in the same words the site uses\n coupling clusters risks the heat grid, the module groups, what is wrong\n log hotspots blame git history, hot files, who wrote a line\n diagram atlas docs Mermaid source, diagram index, and prose\n workflows sbom CI jobs and dependency/license inventory\n diff engines deep Changed files, analyzer status, optional deep scan\n ask <question> Optional AI answer grounded in the loaded repo\n pick cd rescan web choose a source, switch repo, reload, open the web UI\n github what GitHub says about this repo — stars, issues, license\n !<command> run a shell command without leaving\n help exit everything, and the way out\n Tab completes commands, then file paths\n\n Setup flags (interactive wizard skips what they answer)\n --mode local|self-hosted --host <addr> --port <n> --domain <name>\n --https Set up automatic HTTPS through Caddy\n --access-key generate|<k> --name <n> --email <e>\n --provider none|openai-compatible|ollama|openrouter|custom\n --base-url <url> --model <m> --cloudflare --tailscale\n\n General flags\n --config <file> Use this config file (or ONBOARDER_CONFIG)\n --server With bare \\`onboarder\\`, start the web UI instead of exploring\n --non-interactive Never prompt; flags + defaults are the answers\n -y, --yes Answer yes to confirmations\n --json Machine-readable output\n --reveal config show prints the full access key\n --no-color Plain output (NO_COLOR works too)\n -h, --help This text -v, --version Print the version\n\n Also accepted\n help | --help onboarder help | onboarder --help\n config | config show\n bg | detached alias for start background\n fg | foreground alias for start\n\n Examples\n onboarder # explore the repo you are standing in\n onboarder explore ~/code/my-app # explore somewhere else\n onboarder explore # choose a local folder or paste a Git URL\n onboarder explore https://github.com/expressjs/express # clone one and read it\n onboarder report . --json # analyze once and print machine-readable JSON\n onboarder start background # leave the web UI running, close the terminal\n onboarder logs -f # watch what it is doing\n onboarder start startup install # also start it every time you log in\n onboarder setup --non-interactive --mode local --port 4310\n onboarder setup --non-interactive --mode self-hosted --domain map.example.com --https --start\n onboarder config set tunnel.cloudflare true && onboarder tunnel cloudflare\n`;\n\nconst OPTIONS: NonNullable<import('node:util').ParseArgsConfig['options']> = {\n help: { type: 'boolean', short: 'h' },\n version: { type: 'boolean', short: 'v' },\n json: { type: 'boolean' },\n yes: { type: 'boolean', short: 'y' },\n 'non-interactive': { type: 'boolean' },\n reveal: { type: 'boolean' },\n verbose: { type: 'boolean' },\n start: { type: 'boolean' },\n color: { type: 'boolean' }, // `--no-color` is lifted out by extractNegatedFlags; --color forces it on\n config: { type: 'string' },\n mode: { type: 'string' },\n host: { type: 'string' },\n port: { type: 'string' },\n domain: { type: 'string' },\n https: { type: 'boolean' },\n 'access-key': { type: 'string' },\n name: { type: 'string' },\n email: { type: 'string' },\n provider: { type: 'string' },\n 'base-url': { type: 'string' },\n model: { type: 'string' },\n cloudflare: { type: 'boolean' },\n tailscale: { type: 'boolean' },\n 'auto-open': { type: 'boolean' },\n lines: { type: 'string', short: 'n' },\n follow: { type: 'boolean', short: 'f' },\n timeout: { type: 'string' },\n server: { type: 'boolean' },\n 'max-files': { type: 'string' },\n 'max-file-size': { type: 'string' },\n 'read-concurrency': { type: 'string' },\n base: { type: 'string' },\n head: { type: 'string' },\n staged: { type: 'boolean' },\n profile: { type: 'string' },\n 'fail-on': { type: 'string' },\n};\n\n// parseArgs speaks kebab-case; the wizard's flags speak camelCase.\nfunction normalizeFlags(values) {\n const out: Record<string, any> = {};\n for (const [k, v] of Object.entries(values)) {\n const key = k.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n out[key] = v;\n }\n return out;\n}\n\n// `parseArgs` cannot express a negated boolean. `--color=false` is rejected\n// outright, `--color false` sets `color: true` and leaves `false` behind as a\n// positional, and `--no-color` is an unknown option — so the documented flag\n// had never worked, for any command, and `--no-color status` would try to run a\n// command called `no-color`.\n//\n// There is no parser-level spelling for \"this boolean is false\", so the flag is\n// lifted out of argv before parsing and applied to the parsed flags after. That\n// keeps `parseArgs` strict about genuinely unknown options (which is the point\n// of a tool that writes a config file) while making the one negation the CLI\n// documents actually work.\nfunction extractNegatedFlags(argv) {\n const rest = [];\n let noColor = false;\n for (const arg of argv) {\n if (arg === '--no-color') noColor = true;\n else rest.push(arg);\n }\n return { argv: rest, noColor };\n}\n\nexport async function main(argv = process.argv.slice(2)) {\n const { argv: argsIn, noColor } = extractNegatedFlags(argv);\n let parsed;\n try {\n parsed = parseArgs({ args: argsIn, options: OPTIONS, allowPositionals: true });\n } catch (e) {\n console.error(' ' + e.message + '\\n' + HELP);\n return 2;\n }\n const { values, positionals } = parsed;\n const flags = normalizeFlags(values);\n\n // Color is decided here, after the flags exist and before anything is\n // painted. An explicit `--no-color` wins over `FORCE_COLOR`: a person who\n // typed the flag meant it, and a stray `FORCE_COLOR` inherited from a CI\n // profile should not override the thing they just asked for.\n if (noColor) {\n flags.color = false;\n setColorEnabled(false);\n } else if (flags.color === true) {\n // `--color` was accepted by the parser and then ignored, which is the same\n // lie in the other direction. It is the documented way to keep ANSI in a\n // captured log, so it has to actually turn color on.\n setColorEnabled(true);\n }\n\n if (flags.help) { console.log(HELP); return 0; }\n if (flags.version) { console.log(PACKAGE.version); return 0; }\n\n const [cmd, sub, ...rest] = positionals;\n try {\n switch (cmd) {\n case 'help':\n console.log(HELP);\n return 0;\n case undefined:\n // The entry point. On a terminal, bare `onboarder` explores the repo you\n // are standing in — the thing people actually want from this tool, and\n // what the name promises. Everywhere else (a pipe, CI, a script) it\n // still starts the server, because an interactive session with no input\n // source is a hang, and nothing about a background job wants a prompt.\n // `--server` forces the old behavior even on a terminal.\n if (!flags.server && process.stdin.isTTY && process.stdout.isTTY) {\n return codeOf(await runExplore({ flags }));\n }\n return codeOf(await runStart({ flags }));\n case 'explore':\n case 'tui':\n case 'shell':\n return codeOf(await runExplore({ flags, target: sub }));\n case 'report': {\n const repo = await openRepoOrClone(sub || '.', scanOptionsFromFlags(flags));\n try {\n const report = createReport(repo);\n console.log(flags.json ? JSON.stringify(report, null, 2) : formatReport(report));\n return 0;\n } finally {\n await closeRemote(repo);\n }\n }\n case 'review': {\n if (flags.staged && flags.head) throw new Error('Choose either --staged or --head.');\n if (flags.failOn && !Object.hasOwn(SEVERITY_RANK, flags.failOn)) throw new Error('Choose a valid --fail-on severity: critical, high, medium, low, or info.');\n const report = await runReview(expandHome(sub || '.'), { base: flags.base || 'HEAD', head: flags.head || '', mode: flags.staged ? 'staged' : flags.head ? 'range' : 'working', profile: flags.profile ? reviewProfile(flags.profile) : undefined });\n console.log(flags.json ? JSON.stringify(report, null, 2) : reviewMarkdown(report));\n return flags.failOn && report.findings.some(f => SEVERITY_RANK[f.severity] >= SEVERITY_RANK[flags.failOn]) || report.checks.some(c => c.id === 'conflicts' && c.status === 'fail') ? 1 : 0;\n }\n case 'web':\n case 'site':\n return codeOf(await runStart({ flags }));\n case 'start':\n // `onboarder start [background|fg|startup [action]]`. The sub-verb is a\n // positional, not a flag, because `onboarder start` has to keep working\n // exactly as it did and `startup install` is a different verb from\n // `start`.\n if (sub === 'background' || sub === 'bg' || sub === 'daemon' || sub === 'detached') {\n return codeOf(await runStartBackground({ flags }));\n }\n if (sub === 'startup' || sub === 'login' || sub === 'autostart') {\n return codeOf(await runStartup(rest[0] || 'status', { flags }));\n }\n if (sub === 'fg' || sub === 'foreground') return codeOf(await runStart({ flags }));\n if (sub === 'status') return codeOf(await runStatus({ flags }));\n if (sub === 'stop') return codeOf(await runStop({ flags }));\n if (sub === 'logs') return codeOf(await runLogs({ flags }));\n if (sub) {\n console.error(' Unknown start mode: ' + sub + '\\n' + HELP);\n return 2;\n }\n return codeOf(await runStart({ flags }));\n case 'logs':\n case 'log':\n return codeOf(await runLogs({ flags }));\n case 'startup':\n case 'autostart':\n return codeOf(await runStartup(sub || 'status', { flags }));\n case 'status':\n return codeOf(await runStatus({ flags }));\n case 'stop':\n return codeOf(await runStop({ flags }));\n case 'restart':\n return codeOf(await runRestart({ flags }));\n case 'setup':\n case 'onboard':\n case 'init':\n return codeOf(await runSetup({ flags, version: PACKAGE.version }));\n case 'config':\n if (sub === 'key') return codeOf(await runConfigKey(rest[0], rest.slice(1), { flags }));\n if (sub === 'reset') return codeOf(await runConfigReset({ flags }));\n return codeOf(await runConfig(sub || 'show', rest, { flags }));\n case 'tunnel':\n return codeOf(await runTunnel(sub, { flags }));\n case 'https':\n return codeOf(await runHttps(sub || 'status', { flags }));\n case 'doctor':\n return codeOf(await runDoctor({ flags }));\n default:\n console.error(' Unknown command: ' + cmd + '\\n' + HELP);\n return 2;\n }\n } catch (e) {\n console.error(' ' + (e.message || e));\n return 1;\n }\n}\n\n// Commands return an exit code or, for `start`, an object carrying the live\n// server. Both collapse to \"what code should the process eventually use\".\nfunction codeOf(result) {\n return typeof result === 'number' ? result : result?.code ?? 0;\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare class WizardCancelled extends Error {
2
+ code: string;
3
+ constructor();
4
+ }
5
+ export declare function runSteps(steps: any, answers?: Record<string, any>, io?: Record<string, any>): Promise<Record<string, any>>;