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
package/cli/main.js CHANGED
@@ -1,27 +1,43 @@
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 { runChat, CHAT_HELP } from './chat/app.js';
12
+ import { isRemoteSource } from './chat/source.js';
13
+ import { openRepoOrClone, closeRemote } from './explorer/session.js';
14
+ import { createReport, formatReport } from './explorer/report.js';
15
15
  import { setColorEnabled } from './ui.js';
16
-
16
+ import { runReview } from '../server/review.js';
17
+ import { reviewMarkdown, reviewProfile, SEVERITY_RANK } from '../shared/review/review.js';
18
+ import { expandHome } from '../server/paths.js';
19
+ import { agentCommand, AGENT_OPTIONS } from './agent/command.js';
17
20
  const PACKAGE = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
18
-
19
21
  const HELP = `
20
22
  🧭 Onboarder — drop a path, get a map.
21
23
 
24
+ Scan options for report and explore
25
+ --max-files <count> Maximum files to walk (default: 4000)
26
+ --max-file-size <bytes> Maximum UTF-8 file size (default: 204800)
27
+ --read-concurrency <n> Concurrent reads, 1–32 (default: 8)
28
+
22
29
  Usage
23
- onboarder Explore a codebase here, interactively
24
- onboarder explore [folder|url] The same, pointed somewhere else (alias: tui)
30
+ onboarder Open the Hermes chat harness here
31
+ onboarder chat [folder|url] Clone/open a repo and chat (alias: tui)
32
+ onboarder explore [folder|url] Open the offline repository explorer
33
+ onboarder report [folder|url] One-shot summary for terminals and scripts (--json)
34
+ onboarder review [folder] Review local changes (--json for scripts)
35
+ --base <ref> --head <ref> Compare branches from their merge base
36
+ --staged Review only staged changes
37
+ --profile focused|balanced|thorough
38
+ --fail-on high|medium|low|critical|info Exit 1 for findings at this level or above
39
+ onboarder agent <workflow> Hermes: ask, review, triage, implement, pr, github
40
+ onboarder agent --help Agent setup, permissions, and examples
25
41
  onboarder start Start the web UI in the foreground (Ctrl-C stops it)
26
42
  onboarder start background Start detached — keeps running after you close the terminal
27
43
  onboarder start startup Run automatically at login [install|remove|status]
@@ -37,13 +53,16 @@ const HELP = `
37
53
 
38
54
  In the explorer
39
55
  map tour explain what this is, where to start, and why
40
- tree find show deps browse it, search it, read it, trace it
56
+ tree find show inspect deps browse it, search it, read it, trace it
41
57
  graph blast symbols the dependency tree, the blast radius, the outline
42
58
  health hubs layers patterns the analysis, in the same words the site uses
43
59
  coupling clusters risks the heat grid, the module groups, what is wrong
44
60
  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
61
+ diagram atlas docs Mermaid source, diagram index, and prose
62
+ workflows sbom CI jobs and dependency/license inventory
63
+ diff engines deep Changed files, analyzer status, optional deep scan
64
+ ask <question> Optional AI answer grounded in the loaded repo
65
+ pick cd rescan web choose a source, switch repo, reload, open the web UI
47
66
  github what GitHub says about this repo — stars, issues, license
48
67
  !<command> run a shell command without leaving
49
68
  help exit everything, and the way out
@@ -58,7 +77,7 @@ const HELP = `
58
77
 
59
78
  General flags
60
79
  --config <file> Use this config file (or ONBOARDER_CONFIG)
61
- --server With bare \`onboarder\`, start the web UI instead of exploring
80
+ --server With bare \`onboarder\`, start the web UI instead of chatting
62
81
  --non-interactive Never prompt; flags + defaults are the answers
63
82
  -y, --yes Answer yes to confirmations
64
83
  --json Machine-readable output
@@ -73,9 +92,12 @@ const HELP = `
73
92
  fg | foreground alias for start
74
93
 
75
94
  Examples
76
- onboarder # explore the repo you are standing in
95
+ onboarder # chat about the repo you are standing in
96
+ onboarder chat --mode review # begin in review mode
77
97
  onboarder explore ~/code/my-app # explore somewhere else
98
+ onboarder explore # choose a local folder or paste a Git URL
78
99
  onboarder explore https://github.com/expressjs/express # clone one and read it
100
+ onboarder report . --json # analyze once and print machine-readable JSON
79
101
  onboarder start background # leave the web UI running, close the terminal
80
102
  onboarder logs -f # watch what it is doing
81
103
  onboarder start startup install # also start it every time you log in
@@ -83,48 +105,54 @@ const HELP = `
83
105
  onboarder setup --non-interactive --mode self-hosted --domain map.example.com --https --start
84
106
  onboarder config set tunnel.cloudflare true && onboarder tunnel cloudflare
85
107
  `;
86
-
87
108
  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' },
109
+ ...AGENT_OPTIONS,
110
+ help: { type: 'boolean', short: 'h' },
111
+ version: { type: 'boolean', short: 'v' },
112
+ json: { type: 'boolean' },
113
+ yes: { type: 'boolean', short: 'y' },
114
+ 'non-interactive': { type: 'boolean' },
115
+ reveal: { type: 'boolean' },
116
+ verbose: { type: 'boolean' },
117
+ start: { type: 'boolean' },
118
+ color: { type: 'boolean' }, // `--no-color` is lifted out by extractNegatedFlags; --color forces it on
119
+ config: { type: 'string' },
120
+ mode: { type: 'string' },
121
+ host: { type: 'string' },
122
+ port: { type: 'string' },
123
+ domain: { type: 'string' },
124
+ https: { type: 'boolean' },
125
+ 'access-key': { type: 'string' },
126
+ name: { type: 'string' },
127
+ email: { type: 'string' },
128
+ provider: { type: 'string' },
129
+ 'base-url': { type: 'string' },
130
+ model: { type: 'string' },
131
+ cloudflare: { type: 'boolean' },
132
+ tailscale: { type: 'boolean' },
133
+ 'auto-open': { type: 'boolean' },
134
+ lines: { type: 'string', short: 'n' },
135
+ follow: { type: 'boolean', short: 'f' },
136
+ timeout: { type: 'string' },
137
+ server: { type: 'boolean' },
138
+ 'max-files': { type: 'string' },
139
+ 'max-file-size': { type: 'string' },
140
+ 'read-concurrency': { type: 'string' },
141
+ base: { type: 'string' },
142
+ head: { type: 'string' },
143
+ staged: { type: 'boolean' },
144
+ profile: { type: 'string' },
145
+ 'fail-on': { type: 'string' },
116
146
  };
117
-
118
147
  // parseArgs speaks kebab-case; the wizard's flags speak camelCase.
119
148
  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;
149
+ const out = {};
150
+ for (const [k, v] of Object.entries(values)) {
151
+ const key = k.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
152
+ out[key] = v;
153
+ }
154
+ return out;
126
155
  }
127
-
128
156
  // `parseArgs` cannot express a negated boolean. `--color=false` is rejected
129
157
  // outright, `--color false` sets `color: true` and leaves `false` behind as a
130
158
  // positional, and `--no-color` is an unknown option — so the documented flag
@@ -137,126 +165,185 @@ function normalizeFlags(values) {
137
165
  // of a tool that writes a config file) while making the one negation the CLI
138
166
  // documents actually work.
139
167
  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 };
168
+ const rest = [];
169
+ let noColor = false;
170
+ for (const arg of argv) {
171
+ if (arg === '--no-color')
172
+ noColor = true;
173
+ else
174
+ rest.push(arg);
175
+ }
176
+ return { argv: rest, noColor };
147
177
  }
148
-
149
178
  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':
179
+ const { argv: argsIn, noColor } = extractNegatedFlags(argv);
180
+ let parsed;
181
+ try {
182
+ parsed = parseArgs({ args: argsIn, options: OPTIONS, allowPositionals: true });
183
+ }
184
+ catch (e) {
185
+ console.error(' ' + e.message + '\n' + HELP);
186
+ return 2;
187
+ }
188
+ const { values, positionals } = parsed;
189
+ const flags = normalizeFlags(values);
190
+ // Color is decided here, after the flags exist and before anything is
191
+ // painted. An explicit `--no-color` wins over `FORCE_COLOR`: a person who
192
+ // typed the flag meant it, and a stray `FORCE_COLOR` inherited from a CI
193
+ // profile should not override the thing they just asked for.
194
+ if (noColor) {
195
+ flags.color = false;
196
+ setColorEnabled(false);
197
+ }
198
+ else if (flags.color === true) {
199
+ // `--color` was accepted by the parser and then ignored, which is the same
200
+ // lie in the other direction. It is the documented way to keep ANSI in a
201
+ // captured log, so it has to actually turn color on.
202
+ setColorEnabled(true);
203
+ }
204
+ if (flags.help && ['chat', 'tui'].includes(positionals[0])) {
205
+ console.log(CHAT_HELP);
206
+ return 0;
207
+ }
208
+ if (flags.help && positionals[0] !== 'agent') {
182
209
  console.log(HELP);
183
210
  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;
211
+ }
212
+ if (flags.version) {
213
+ console.log(PACKAGE.version);
214
+ return 0;
215
+ }
216
+ const [cmd, sub, ...rest] = positionals;
217
+ try {
218
+ switch (cmd) {
219
+ case 'agent': {
220
+ if (sub === 'chat') {
221
+ if (rest.length > 1)
222
+ throw new Error('Use one repository folder: onboarder agent chat [folder].');
223
+ return runChat({ target: rest[0], flags, version: PACKAGE.version });
224
+ }
225
+ const abort = new AbortController();
226
+ const cancel = () => abort.abort();
227
+ process.once('SIGINT', cancel);
228
+ process.once('SIGTERM', cancel);
229
+ try {
230
+ return await agentCommand(sub, rest, flags, { signal: abort.signal });
231
+ }
232
+ finally {
233
+ process.off('SIGINT', cancel);
234
+ process.off('SIGTERM', cancel);
235
+ }
236
+ }
237
+ case 'help':
238
+ console.log(HELP);
239
+ return 0;
240
+ case undefined:
241
+ // Chat on a terminal; retain server behavior for existing scripts.
242
+ if (!flags.server && process.stdin.isTTY && process.stdout.isTTY) {
243
+ return codeOf(await runChat({ flags, version: PACKAGE.version }));
244
+ }
245
+ return codeOf(await runStart({ flags }));
246
+ case 'explore':
247
+ case 'shell':
248
+ return codeOf(await runExplore({ flags, target: sub }));
249
+ case 'chat':
250
+ case 'tui':
251
+ if (rest.length)
252
+ throw new Error('Use one repository folder: onboarder chat [folder].');
253
+ return codeOf(await runChat({ flags, target: sub, version: PACKAGE.version }));
254
+ case 'report': {
255
+ const repo = await openRepoOrClone(sub || '.', scanOptionsFromFlags(flags));
256
+ try {
257
+ const report = createReport(repo);
258
+ console.log(flags.json ? JSON.stringify(report, null, 2) : formatReport(report));
259
+ return 0;
260
+ }
261
+ finally {
262
+ await closeRemote(repo);
263
+ }
264
+ }
265
+ case 'review': {
266
+ if (flags.staged && flags.head)
267
+ throw new Error('Choose either --staged or --head.');
268
+ if (flags.failOn && !Object.hasOwn(SEVERITY_RANK, flags.failOn))
269
+ throw new Error('Choose a valid --fail-on severity: critical, high, medium, low, or info.');
270
+ 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 });
271
+ console.log(flags.json ? JSON.stringify(report, null, 2) : reviewMarkdown(report));
272
+ 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;
273
+ }
274
+ case 'web':
275
+ case 'site':
276
+ return codeOf(await runStart({ flags }));
277
+ case 'start':
278
+ // `onboarder start [background|fg|startup [action]]`. The sub-verb is a
279
+ // positional, not a flag, because `onboarder start` has to keep working
280
+ // exactly as it did and `startup install` is a different verb from
281
+ // `start`.
282
+ if (sub === 'background' || sub === 'bg' || sub === 'daemon' || sub === 'detached') {
283
+ return codeOf(await runStartBackground({ flags }));
284
+ }
285
+ if (sub === 'startup' || sub === 'login' || sub === 'autostart') {
286
+ return codeOf(await runStartup(rest[0] || 'status', { flags }));
287
+ }
288
+ if (sub === 'fg' || sub === 'foreground')
289
+ return codeOf(await runStart({ flags }));
290
+ if (sub === 'status')
291
+ return codeOf(await runStatus({ flags }));
292
+ if (sub === 'stop')
293
+ return codeOf(await runStop({ flags }));
294
+ if (sub === 'logs')
295
+ return codeOf(await runLogs({ flags }));
296
+ if (sub) {
297
+ console.error(' Unknown start mode: ' + sub + '\n' + HELP);
298
+ return 2;
299
+ }
300
+ return codeOf(await runStart({ flags }));
301
+ case 'logs':
302
+ case 'log':
303
+ return codeOf(await runLogs({ flags }));
304
+ case 'startup':
305
+ case 'autostart':
306
+ return codeOf(await runStartup(sub || 'status', { flags }));
307
+ case 'status':
308
+ return codeOf(await runStatus({ flags }));
309
+ case 'stop':
310
+ return codeOf(await runStop({ flags }));
311
+ case 'restart':
312
+ return codeOf(await runRestart({ flags }));
313
+ case 'setup':
314
+ case 'onboard':
315
+ case 'init':
316
+ return codeOf(await runSetup({ flags, version: PACKAGE.version }));
317
+ case 'config':
318
+ if (sub === 'key')
319
+ return codeOf(await runConfigKey(rest[0], rest.slice(1), { flags }));
320
+ if (sub === 'reset')
321
+ return codeOf(await runConfigReset({ flags }));
322
+ return codeOf(await runConfig(sub || 'show', rest, { flags }));
323
+ case 'tunnel':
324
+ return codeOf(await runTunnel(sub, { flags }));
325
+ case 'https':
326
+ return codeOf(await runHttps(sub || 'status', { flags }));
327
+ case 'doctor':
328
+ return codeOf(await runDoctor({ flags }));
329
+ default:
330
+ if (isRemoteSource(cmd)) {
331
+ if (sub)
332
+ throw new Error('Use onboarder chat <GitHub URL>, then type your question.');
333
+ return codeOf(await runChat({ target: cmd, flags, version: PACKAGE.version }));
334
+ }
335
+ console.error(' Unknown command: ' + cmd + '\n' + HELP);
336
+ return 2;
220
337
  }
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
338
  }
252
- } catch (e) {
253
- console.error(' ' + (e.message || e));
254
- return 1;
255
- }
339
+ catch (e) {
340
+ console.error(' ' + (e.message || e));
341
+ return 1;
342
+ }
256
343
  }
257
-
258
344
  // Commands return an exit code or, for `start`, an object carrying the live
259
345
  // server. Both collapse to "what code should the process eventually use".
260
346
  function codeOf(result) {
261
- return typeof result === 'number' ? result : result?.code ?? 0;
347
+ return typeof result === 'number' ? result : result?.code ?? 0;
262
348
  }
349
+ //# 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 { runChat, CHAT_HELP } from './chat/app.js';\nimport { isRemoteSource } from './chat/source.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';\nimport { agentCommand, AGENT_OPTIONS } from './agent/command.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 Open the Hermes chat harness here\n onboarder chat [folder|url] Clone/open a repo and chat (alias: tui)\n onboarder explore [folder|url] Open the offline repository explorer\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 agent <workflow> Hermes: ask, review, triage, implement, pr, github\n onboarder agent --help Agent setup, permissions, and examples\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 chatting\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 # chat about the repo you are standing in\n onboarder chat --mode review # begin in review mode\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 ...AGENT_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 && ['chat', 'tui'].includes(positionals[0])) { console.log(CHAT_HELP); return 0; }\n if (flags.help && positionals[0] !== 'agent') { 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 'agent': {\n if (sub === 'chat') {\n if (rest.length > 1) throw new Error('Use one repository folder: onboarder agent chat [folder].');\n return runChat({ target: rest[0], flags, version: PACKAGE.version });\n }\n const abort = new AbortController();\n const cancel = () => abort.abort(); process.once('SIGINT', cancel); process.once('SIGTERM', cancel);\n try { return await agentCommand(sub, rest, flags, { signal: abort.signal }); }\n finally { process.off('SIGINT', cancel); process.off('SIGTERM', cancel); }\n }\n case 'help':\n console.log(HELP);\n return 0;\n case undefined:\n // Chat on a terminal; retain server behavior for existing scripts.\n if (!flags.server && process.stdin.isTTY && process.stdout.isTTY) {\n return codeOf(await runChat({ flags, version: PACKAGE.version }));\n }\n return codeOf(await runStart({ flags }));\n case 'explore':\n case 'shell':\n return codeOf(await runExplore({ flags, target: sub }));\n case 'chat':\n case 'tui':\n if (rest.length) throw new Error('Use one repository folder: onboarder chat [folder].');\n return codeOf(await runChat({ flags, target: sub, version: PACKAGE.version }));\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 if (isRemoteSource(cmd)) {\n if (sub) throw new Error('Use onboarder chat <GitHub URL>, then type your question.');\n return codeOf(await runChat({ target: cmd, flags, version: PACKAGE.version }));\n }\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>>;