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/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
4
4
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
5
5
  [![Zero Dependencies](https://img.shields.io/badge/runtime%20dependencies-0-success.svg)](package.json)
6
- [![Tests](https://img.shields.io/badge/tests-560%20passing-brightgreen.svg)](tests/)
6
+ [![Tests](https://github.com/Amitpandey88/onboarder/actions/workflows/ci.yml/badge.svg)](https://github.com/Amitpandey88/onboarder/actions/workflows/ci.yml)
7
7
 
8
8
  > **Drop a path. Get a map.**
9
9
  > A lightweight, zero-dependency codebase visualizer and architectural map generator that runs entirely on your local machine.
@@ -12,7 +12,7 @@
12
12
 
13
13
  Onboarder reads a software repository the way a senior engineer would: starting at the front door, tracing import graphs, mapping architectural layers, computing risk/health metrics, discovering dead exports and dependency drift, and charting Git hotspots — rendering everything as interactive, zoomable diagrams.
14
14
 
15
- **100% Local & Private**: Your code never leaves your computer. No external services or accounts are required.
15
+ **Local analysis**: Repository maps and the offline explorer run on your machine without an account. Optional AI chat sends task context and requested source to your configured model provider.
16
16
 
17
17
  ---
18
18
 
@@ -22,9 +22,12 @@ Onboarder reads a software repository the way a senior engineer would: starting
22
22
  # Install from npm (Node 20+, zero runtime dependencies)
23
23
  npm install -g codebase-onboarder
24
24
 
25
- # Explore the repo you are standing in, right in your terminal
25
+ # Open the repository chat harness in your terminal
26
26
  onboarder
27
27
 
28
+ # Browse offline, including folders and Git URLs
29
+ onboarder explore
30
+
28
31
  # …or start the web UI instead
29
32
  onboarder start
30
33
  ```
@@ -34,13 +37,14 @@ Or from source:
34
37
  ```bash
35
38
  git clone https://github.com/Amitpandey88/onboarder.git
36
39
  cd onboarder
40
+ npm ci
37
41
  npm start
38
42
  ```
39
43
 
40
44
  Open **http://localhost:4310** in your browser (the CLI opens it for you).
41
45
 
42
- - **Two front doors, one engine.** `onboarder` opens an interactive terminal session; `onboarder start` opens the web UI. Both run the *same* analyzer, so they can never disagree about a repository.
43
- - **Zero build steps**: Native ES modules.
46
+ - **Chat, explorer, and web UI.** `onboarder` opens the Hermes chat harness; `onboarder explore` opens offline browsing; `onboarder start` opens the web UI. Repository analysis uses the same engine in all three.
47
+ - **Ready to run from npm**: Compiled JavaScript is included in the package. Application source lives in `src/` as TypeScript. Run `npm run build` after editing it, or use `npm run dev` for automatic rebuilds and server restarts.
44
48
  - **Zero runtime dependencies**: Powered by Node.js built-ins (`node:http`, `node:fs`, `node:crypto`).
45
49
  - **Offline ready**: Vendored Mermaid.js and Monaco Editor builds are included in `public/vendor/`.
46
50
 
@@ -48,23 +52,87 @@ Open **http://localhost:4310** in your browser (the CLI opens it for you).
48
52
 
49
53
  ## 🖥️ The terminal app
50
54
 
51
- Type `onboarder` in any repo and you get the website, in your terminal. No server, no browser, no network — it reads the folder directly.
55
+ Type `onboarder` to open the Hermes-powered chat interface for the current repository, or `onboarder chat ~/work/some-repo` to open another local checkout. An amber welcome screen shows the actual configured model, repository, permissions, six workflow skills, and 37 registered tools. The composer has a session status bar with recorded token usage, elapsed run time, and live tool activity. It keeps terminal scrollback and loads the browsing engine only when requested.
56
+
57
+ ```sh
58
+ onboarder chat
59
+ onboarder chat ~/work/some-repo --mode review
60
+ onboarder chat https://github.com/owner/repo
61
+ onboarder chat --resume <conversation-id>
62
+ ```
63
+
64
+ Inside the chat:
65
+
66
+ ```text
67
+ codebase ask › /model configure
68
+ codebase ask › /repo https://github.com/owner/repo
69
+ codebase ask › Explain how authentication works
70
+ codebase ask › Where are those permissions checked?
71
+ codebase ask › /review 42 Focus on correctness and security
72
+ codebase review › /triage 12
73
+ codebase triage › /permissions checks on
74
+ codebase triage › /implement Fix the bug described in issue 12
75
+ codebase implement › /diff
76
+ codebase implement › Add a regression test for that fix
77
+ codebase implement › /history
78
+ ```
79
+
80
+ | Commands | Purpose |
81
+ | --- | --- |
82
+ | `/ask`, `/review`, `/triage`, `/implement`, `/pr`, `/github` | Start a workflow; following messages continue it |
83
+ | `/mode`, `/model`, `/permissions`, `/limits` | Control the workflow, provider, allowed actions, timeout, and turn budget |
84
+ | `/map`, `/tree`, `/find`, `/show`, `/diff`, `/health`, `/rescan` | Browse and analyze offline; inspect the active implementation workspace |
85
+ | `/tour`, `/explain`, `/deps`, `/inspect`, `/graph`, `/blast`, `/symbols` | Follow the reading order, inspect modules, and trace dependencies |
86
+ | `/hubs`, `/layers`, `/patterns`, `/stats`, `/security`, `/stack`, `/entry`, `/externals`, `/coupling`, `/clusters`, `/risks` | Explore repository structure, health, and risks |
87
+ | `/log`, `/hotspots`, `/blame`, `/diagram`, `/layers-diagram`, `/atlas`, `/docs`, `/workflows`, `/sbom` | Inspect Git history, diagrams, documentation, CI, and licenses |
88
+ | `/engines`, `/deep`, `/web`, `/about` | Discover and run optional analyzers, start the web interface, and inspect repository details |
89
+ | `/new`, `/history`, `/resume`, `/repo`, `/status` | Manage saved conversations, repository context, and workspaces |
90
+ | `/clone <GitHub URL>`, `/pull` | Clone a GitHub repository and refresh a clean saved checkout |
91
+ | `/paste`, `/send`, `/discard` | Compose or discard multiline prompts and code |
92
+ | `/setup`, `/doctor`, `/help`, `/clear`, `/cancel`, `/exit` | Set up Hermes, check readiness, and control the terminal session |
93
+ | `/tools`, `/skills`, `/runs`, `/run`, `/export` | Inspect actual capabilities, saved runs, and export this chat as Markdown |
94
+
95
+ Typing `/` immediately opens a searchable command menu with descriptions. Keep typing to filter, use ↑/↓ to choose, and press Tab or Enter to fill the command without starting a task. A fully typed command executes on Enter. Esc dismisses the menu and restores normal history navigation. Tab also completes settings and indexed file paths. Alt-Enter adds a newline; bracketed paste keeps multiline code together and waits for Enter before sending. Ctrl-A/E move to the start/end, Ctrl-U clears the draft, and Ctrl-C cancels an active task. Ctrl-D cancels, saves, and exits when the draft is empty.
96
+
97
+ Chat opens in a **full-screen terminal interface** with the composer pinned to the bottom. The welcome, conversation and menus automatically reflow when the terminal window changes size. **Page Up / Page Down** scroll the conversation without editing your draft; new output preserves your reading position until you return to the latest messages. Narrow or short windows use compact layouts, and the original Onboarder **code-compass** logo appears in full or compact terminal art. Its reusable vector image is [public/assets/onboarder-mark.svg](public/assets/onboarder-mark.svg).
98
+
99
+ The screen paints only changed rows and batches streamed output. Drafts survive resizes and model-wizard handoffs, and leaving chat restores the original shell screen. The in-memory viewport retains up to 4,000 logical lines or 2 MiB; conversation storage and `/export` remain available separately. Follow-ups reuse the saved Hermes session and its isolated implementation workspace. Changing the workflow, PR/issue target, model, or permissions starts a new session. `/clear` clears the screen while keeping context; `/new` resets the conversation. Checks and GitHub writes default to off. `/deep` requires checks permission. `/pr` prepares changes locally unless GitHub writes are enabled; publishing must also be requested in the task. `/export` saves a private Markdown transcript under the agent home's `exports` folder.
100
+
101
+ `/model` opens a Hermes-style provider/model picker below the input. Type to filter, use ↑/↓ to select, and press Enter to choose. Available providers and models come from the installed Hermes catalog; selection uses Hermes' own credential resolution and saves the model to the dedicated Onboarder profile. Escape keeps your current model and conversation. Choose **Configure provider / authentication**, or run `/model configure`, for the full official Hermes configuration, including custom endpoints and provider login. Older Hermes installations can use this full wizard when the quick picker is unavailable. No model names or provider credentials are hardcoded into the picker.
102
+
103
+ At startup, an unconfigured profile offers **Choose a provider and model** or **Continue offline**. Configured profiles start directly in chat. Hermes must be installed separately for AI tasks; offline commands work without it. Conversation summaries are stored privately in `~/.config/onboarder/agent/chats`, alongside agent runs, and known environment credentials are redacted. `/resume` requires a conversation for the current repository and preserves your current permission choices. `onboarder chat --resume` takes a **conversation ID**; `onboarder agent … --resume` takes an **agent run ID**.
104
+
105
+ To ask about a GitHub repository, launch `onboarder chat https://github.com/owner/repo`, use `/repo <URL>` or `/clone <URL>`, or simply paste the URL into chat. You can also paste `<URL> Explain this repository` to clone and ask in one message. HTTPS and GitHub SSH URLs work; private repositories use your existing Git credentials. Cloning shows progress and can be cancelled with Ctrl-C.
106
+
107
+ Chat checkouts are saved under `~/.config/onboarder/agent/repositories` and remain after exit, so conversations and isolated implementation workspaces can resume. Reopening the same URL reuses its checkout. `/pull` fetches current changes with a fast-forward-only pull and refuses local changes; use `/new` first if an implementation workspace is active. A successful pull resets AI context so the next question reads the updated source. To resume later, reopen the same URL and use `/history`, then `/resume <conversation-id>`.
108
+
109
+ The original explorer remains available for its full browsing, source picker, diagrams, and optional analyzer commands:
52
110
 
53
111
  ```bash
54
- onboarder # explore the current directory
112
+ onboarder explore # choose a source; Enter uses the current directory
55
113
  onboarder explore ~/work/some-repo
56
- onboarder --server # force the web UI (what bare `onboarder` used to do)
114
+ onboarder report . # one-shot summary, no interactive terminal needed
115
+ onboarder report . --json # stable JSON for scripts and CI
116
+ onboarder --server # force the web UI
57
117
  ```
58
118
 
59
- It lands on a `map` of the repo, then waits:
119
+ The explorer lands on a `map` of the repo, then waits:
60
120
 
61
121
  ```
62
122
  codebase > tour
63
123
  codebase > hotspots
64
124
  codebase > find resolveImport
65
125
  codebase > deps logger.js
126
+ codebase > inspect logger.js # one file’s links, exports, and findings
66
127
  codebase > blast pathUtil.js # what breaks if this breaks
67
128
  codebase > github # what GitHub says about this repo
129
+ codebase > workflows # CI triggers, jobs, and steps
130
+ codebase > sbom express # dependency and license inventory
131
+ codebase > diff HEAD~1 HEAD # changes and dependent-file impact
132
+ codebase > engines # optional deep analyzers on this machine
133
+ codebase > deep gitleaks # run one analyzer when requested
134
+ codebase > ask Where should I start? # optional AI answer with scan context
135
+ codebase > pick # choose another local folder or Git URL
68
136
  codebase > !git log --oneline -3 # shell, without leaving
69
137
  codebase > exit
70
138
  ```
@@ -72,16 +140,107 @@ It lands on a `map` of the repo, then waits:
72
140
  | | |
73
141
  |---|---|
74
142
  | **map · tour · explain** | What this is, the reading order for a new teammate, and a file or folder explained in prose |
75
- | **tree · find · show · deps** | Browse it, search it, read it, and trace what it connects to |
143
+ | **tree · find · show · inspect · deps** | Browse, search, read, inspect, and trace files |
76
144
  | **graph · blast · symbols** | The dependency tree as arrows, the transitive blast radius, and a file's outline |
77
145
  | **health · hubs · layers · patterns** | The analysis, in the same words the site uses |
78
146
  | **coupling · clusters · risks** | Folder traffic as a heat grid, module groups, and everything wrong in one list |
79
147
  | **log · hotspots · blame** | Git history, the files that are complex *and* often changed, and who wrote a line |
80
- | **diagram · docs** | Real Mermaid source, and prose you can print or write to `ONBOARDER.md` |
81
- | **cd · rescan · web** | Switch repo, reload from disk, or start the web UI without leaving |
148
+ | **diagram · atlas · docs** | Mermaid source, a diagram index, and prose you can print or write to `ONBOARDER.md` |
149
+ | **workflows · sbom · diff** | CI pipelines, dependency/license inventory, and changed files with blast radius |
150
+ | **engines · deep** | See optional analyzers, then run one (`deep semgrep`) or all (`deep all`) |
151
+ | **ask** | Ask an OpenAI-compatible model a question using the current repository scan |
152
+ | **pick · cd · rescan · web** | Browse device folders, switch repo, reload from disk, or start the web UI |
82
153
  | **github** | Stars, forks, watchers, license and topics from GitHub, for the repo you have loaded |
83
154
  | **Tab · `!cmd`** | Completes commands then file paths; runs a shell command inline |
84
155
 
156
+ `report` reads a local folder or Git URL once, prints file counts, import resolution,
157
+ entry points, health, security, and test reachability, then exits. Its JSON output
158
+ has `schemaVersion: 1` and contains no source text.
159
+
160
+ All application modules are authored in TypeScript under `src/`: the server,
161
+ MCP tools, analyzer, diagrams, CLI, and browser views. Builds emit JavaScript,
162
+ declarations, and source maps into the existing runtime folders, so the npm CLI
163
+ and Node 20+ keep their existing entry points. Edit `src/`, rather than generated
164
+ files in `cli/`, `server/`, `shared/`, or `public/js/`.
165
+
166
+ ```bash
167
+ npm ci
168
+ npm run dev # rebuild on changes; restart after a successful compilation
169
+ npm run build # typecheck and generate the distributable files
170
+ npm run check # typecheck, tests, and generated-build consistency
171
+ ```
172
+
173
+ `tsconfig.json` checks the whole application. The new portable contracts, scan
174
+ controls, request validator, browser adapter, editor wrapper, and terminal layout
175
+ also pass the strict checks in `tsconfig.strict.json`. Older view and orchestration
176
+ code still uses permissive types; converting every legacy callback and data bag
177
+ to strict types is follow-up work. No application file disables type checking.
178
+
179
+ Scans accept validated limits and bounded read concurrency. The browser offers a
180
+ **Cancel scan** button, browser-folder scans report progress, and disconnected
181
+ server requests stop scanning. File limits measure UTF-8 bytes, including
182
+ non-ASCII source. TypeScript configs support comments, trailing commas, slash
183
+ aliases, and mapping generated JavaScript imports back to TypeScript source. CLI limits work with `report` and persist across `explore` rescans and repository changes:
184
+
185
+ ```bash
186
+ onboarder report . --max-files 10000 --max-file-size 524288 --read-concurrency 4
187
+ ```
188
+
189
+ The HTTP equivalent is `{ "path": "/repo", "options": { "maxFiles": 10000,
190
+ "maxFileSize": 524288, "readConcurrency": 4 } }`. Defaults are 4,000 files,
191
+ 200 KiB per file, and 8 concurrent reads. Maximums are 100,000 files, 10 MiB,
192
+ and 32 reads. Scan cache keys include every file and its imports, exports, and
193
+ findings, so changes beyond the first hundred files also invalidate the cache.
194
+
195
+ The explorer's `ask` command is optional. Set `ONBOARDER_AI_BASE_URL` and `ONBOARDER_AI_MODEL`, plus
196
+ `ONBOARDER_AI_API_KEY` when the endpoint requires a key. The CLI also accepts
197
+ `OPENAI_BASE_URL`, `OPENAI_MODEL`, and `OPENAI_API_KEY`. It sends the question
198
+ and a limited scan summary only when you run `ask`; the key stays in the
199
+ process environment and is not saved in Onboarder's config.
200
+
201
+ ### Hermes repository and GitHub agent
202
+
203
+ `onboarder agent` adds multi-step repository work through [Nous Research's Hermes Agent](https://github.com/NousResearch/hermes-agent). Hermes is an optional, separately installed Python runtime; Onboarder's npm package still has no runtime dependencies. The TypeScript harness supplies **37 scoped MCP tools** built around Onboarder's existing analysis and GitHub's API.
204
+
205
+ ```sh
206
+ onboarder agent setup
207
+ onboarder agent model # choose a provider/model in the dedicated profile
208
+ onboarder agent doctor
209
+ onboarder agent ask . --task "Explain the authentication flow"
210
+ onboarder agent review . --pr 42 --task "Review correctness and security"
211
+ onboarder agent triage . --issue 12 --task "Investigate the cause and propose labels"
212
+ onboarder agent implement . --issue 12 --task "Fix this issue" --allow-checks
213
+ onboarder agent pr . --task "Implement the fix and open a draft PR" --allow-checks --allow-github-writes
214
+ onboarder agent github . --task "Explain why the latest CI run failed"
215
+ onboarder agent runs
216
+ onboarder agent show <run-id>
217
+ ```
218
+
219
+ The same commands work inside the explorer: `agent review --pr 42` uses the loaded repository. Implementation and PR work require a persistent local checkout; the explorer's temporary URL clones are removed on exit. `agent help` lists setup and workflow options. Use `--dry-run --json` to inspect a plan without creating a workspace or calling a model. Use `--json` for one machine-readable result; progress stays on stderr.
220
+
221
+ | Workflow | Result |
222
+ | --- | --- |
223
+ | `ask` | Repository Q&A grounded in scan, architecture, search and source tools |
224
+ | `review` | Local-change or GitHub PR findings, patch coverage, discussion and checks at the PR head SHA |
225
+ | `triage` | Issue investigation, duplicate candidates, priority, labels and a proposed implementation plan |
226
+ | `implement` | Edits in a separate Git worktree, diff inspection and optional npm checks |
227
+ | `pr` | Implementation plus a proposed PR; publishes a **draft** when GitHub writes are enabled |
228
+ | `github` | Repository, issues, PR discussions, labels, CI runs/jobs, comments and review tasks |
229
+
230
+ GitHub access uses the local checkout's **github.com `origin`** and `GITHUB_TOKEN` or `GH_TOKEN`. Public reads can work without a token; private reads and writes need a token with access to the requested resources. Git transport uses your existing Git credentials. Publishing a review requires the freshly read PR head SHA and refuses a changed head.
231
+
232
+ Source editing is available only in `implement`/`pr` worktrees created at **committed HEAD** on a `codex/agent-…` branch. Uncommitted changes in your source checkout are excluded. File tools refuse symlinks, credential files, traversal and files larger than 128 KiB; edits require the hash of a fresh read. Workspaces remain available after completion or failure for inspection. Publishing commits workspace changes, pushes that task branch and creates a draft PR; it does not merge. The PR target defaults to the cached `origin/HEAD` branch, falling back to the current branch; choose another with `--base`. Repeated identical successful writes are deduplicated within one running tool server.
233
+
234
+ `--allow-checks` allows lockfile dependency installation with lifecycle scripts disabled, plus `npm test`, `npm run typecheck` and `npm run build`. Test/build scripts can execute repository code and may write files. `--allow-github-writes` enables issue updates, comments, PR reviews and draft PR publishing. Both permissions are enforced by the tools and default to off. Onboarder supplies only its dedicated MCP toolset to Hermes.
235
+
236
+ Runs have a default 24-turn, 300-second limit; adjust with `--max-turns` and `--timeout`. Ctrl-C cancels an active agent in both the CLI and explorer. `--resume <run-id>` continues a saved Hermes session in its original workspace; repeat any enabled permission flags. Resume cannot expand the original permissions. Timeouts, missing completion frames and nonzero process exits are recorded as failures.
237
+
238
+ Run metadata, final answers and operation audits live under `~/.config/onboarder/agent` (override with `ONBOARDER_AGENT_HOME`). Hermes configuration and transcripts use a dedicated named profile under the installation's `profiles` folder; `agent setup` prints its path. Audit records contain operation names, outcome and timing; Hermes session transcripts can contain prompts and source. Repository/tool content is sent to the configured model during agent tasks. Known environment credentials are redacted from Onboarder diagnostics and final answers. API keys supplied through the environment are not written by Onboarder.
239
+
240
+ For an existing compatible endpoint, set `ONBOARDER_AI_BASE_URL`, `ONBOARDER_AI_MODEL` and optionally `ONBOARDER_AI_API_KEY` **before the first `agent setup`**. Standard `OPENAI_BASE_URL`, `OPENAI_MODEL`, `OPENAI_API_KEY` aliases also work. Later, `agent model` updates the dedicated profile without changing your normal Hermes profile. Use `ONBOARDER_HERMES_BIN` to select a Hermes executable. For a nonstandard source installation, preserve its `HERMES_HOME`/`HERMES_RUNTIME_DIR` environment so the harness can locate its shared Python packages.
241
+
242
+ `onboarder agent source` fetches the official MIT-licensed source at the researched revision into the agent source cache. This does not install Python dependencies or vendor Hermes into the npm package. The source review and integration decisions are documented in [Hermes research](docs/HERMES_RESEARCH.md). Developers can run `node scripts/hermes-smoke.mjs` after building to verify a real installed Hermes runtime against a local model fixture, without external inference or GitHub writes.
243
+
85
244
  **It also takes a GitHub URL, the way the site does.** Point it at one and it clones, scans and opens that repo:
86
245
 
87
246
  ```
@@ -104,6 +263,7 @@ Details worth knowing:
104
263
  - **Fits your terminal.** Every line is fitted to the current width and re-fits on resize; prose wraps instead of running off the edge. `NO_COLOR` and `COLUMNS` are honored.
105
264
  - **It refuses to hang.** Without a TTY, `onboarder explore` explains itself and exits rather than waiting for input that will never come. Scripts and CI keep working.
106
265
  - **Bridges to the web.** `web` starts the UI in the background and prints the URL, without ending your session.
266
+ - **Interactive source picker.** `pick` or a bare `cd` lists device folders, supports parent/home navigation and paging, and accepts pasted paths or Git URLs. A failed load leaves the current repository open.
107
267
 
108
268
  ---
109
269
 
@@ -118,6 +278,72 @@ Details worth knowing:
118
278
 
119
279
  ## 🔍 Features & Views
120
280
 
281
+ ### Change Review — a local review workbench
282
+
283
+ After opening a repository by its local path, the **Review** tab is the first
284
+ workspace. Choose working-tree changes (including untracked files), staged
285
+ changes, or a branch/commit range, then select **Run review**.
286
+
287
+ - Security and quality patterns are flagged on **added lines**, with file and
288
+ line references, severity, and suggested next steps. Credential excerpts are
289
+ redacted from reports, including other findings on the same credential line.
290
+ - A risk-sorted walkthrough groups source, tests, documentation, dependencies,
291
+ and configuration changes. Dependency impact uses the last repository scan;
292
+ rescan after structural edits and treat branch-range impact as an estimate.
293
+ - The checklist reports high-severity patterns, conflict markers, test-file
294
+ changes, change size, and skipped files. Tests are **not executed** and
295
+ test-file changes do not establish coverage.
296
+ - Filter findings, acknowledge them locally, and export Markdown or JSON.
297
+ Acknowledgements belong to an exact comparison fingerprint; editing the
298
+ change starts a fresh review. Exports always include all detected findings.
299
+ - An optional **reviewer's brief** sends the report to your configured AI
300
+ provider for a summary and testing plan. It does not send the raw diff.
301
+ Core reviews work offline without an API key.
302
+
303
+ The same review is available to scripts:
304
+
305
+ ```bash
306
+ onboarder review .
307
+ onboarder review . --staged --json
308
+ onboarder review . --base main --head feature/my-change
309
+ onboarder review . --profile focused --fail-on high
310
+ ```
311
+
312
+ `--fail-on` exits with status 1 for findings at or above the selected severity.
313
+ Conflict markers also return 1. Invalid comparisons return a failure instead
314
+ of falling back to a different diff. Reviews use the Git repository root;
315
+ subfolder scans cannot read changes outside the scanned folder.
316
+
317
+ Optional `.onboarder-review.json` in the repository root:
318
+
319
+ ```json
320
+ {
321
+ "profile": "balanced",
322
+ "exclude": ["dist/**", "**/*.generated.ts"],
323
+ "instructions": [
324
+ { "path": "src/auth/**", "instruction": "Check permission boundaries and failure handling." }
325
+ ]
326
+ }
327
+ ```
328
+
329
+ Profiles: `focused` includes medium/above, `balanced` low/above, and `thorough`
330
+ all patterns. Exclusions use `*`, `**`, and `?` path globs. Guidelines are shown
331
+ for human review and included in the optional AI brief; the pattern engine
332
+ does not claim to enforce natural-language guidelines. Configuration always
333
+ comes from the current working tree, including for staged and branch reviews.
334
+ This project's configuration excludes generated JavaScript and vendored files
335
+ so changes are reviewed in their canonical TypeScript source.
336
+
337
+ Git commands have a 15-second timeout and a 5 MB output limit. Working reviews
338
+ include at most 200 untracked files, each at most 1 MB; oversized inputs fail
339
+ explicitly. Binary content, deleted files, metadata-only changes, exclusions,
340
+ and untracked symlinks have visible skip reasons. Reviews can be canceled.
341
+
342
+ Inspired by CodeRabbit's change summaries, path guidelines, and pre-merge
343
+ checks, this is a local pattern review workflow. It does not install a GitHub
344
+ App, automatically post PR comments, apply fixes, execute repository scripts,
345
+ or replace a human/security review.
346
+
121
347
  ### 1. Explorer (One Canvas, 6 Modes)
122
348
  - **Tree**: Hierarchical expandable cell map of directories, files, hubs, and entry points with ghost connection cells.
123
349
  - **Files**: Intra-folder dependency graphs with deep-dive call inspections.
@@ -128,6 +354,17 @@ Details worth knowing:
128
354
  - **Tour**: Curated step-by-step walkthrough of key architectural waypoints.
129
355
  - **Atlas**: Grid gallery of every pre-generated diagram across folders and components.
130
356
 
357
+ **Search:** Click Search or press `Cmd/Ctrl+K` to find files, symbols, and file
358
+ contents. Arrow keys select results; Enter opens them and `Cmd/Ctrl+Enter`
359
+ opens the source. `Alt+Left/Right` switches result kinds. Tab moves between
360
+ dialog controls; Escape clears the query, then closes. Filters such as
361
+ `path:src ext:ts render` can be removed using their chips.
362
+
363
+ Search reuses the scan's symbol index, combines rapid keystrokes, and displays
364
+ bounded previews with exact local match counts. Graph animation pauses outside
365
+ the Graph tab, while search is open, and when the browser tab is hidden. Review
366
+ filters update the findings without rebuilding the surrounding workspace.
367
+
131
368
  ### 1b. Deep Analysis — plug in the best engines (Optional, self-hosted)
132
369
 
133
370
  Onboarder is the **frontend**; the sharpest open-source analyzers are the
@@ -167,8 +404,8 @@ Next to **Explorer** in the top nav. One page with everything:
167
404
  - **What this means** — the AI reads the report: *"Explain this analysis"* for a
168
405
  prioritised read, or ask about a specific finding (*"is the eval finding
169
406
  reachable?"*). It is told which engines did **not** run, so it will not claim
170
- coverage it does not have. Needs an OpenAI-compatible endpoint; without one the
171
- report is still fully readable and the button offers the API key drawer.
407
+ coverage it does not have. Needs a Hermes connection or an AI endpoint; without one the
408
+ report is still fully readable and the button offers the AI connection drawer.
172
409
 
173
410
  Rules that keep this safe to self-host:
174
411
 
@@ -202,8 +439,12 @@ Rules that keep this safe to self-host:
202
439
 
203
440
  ### 5. AI Notes & Explainers (Optional)
204
441
  - Works 100% offline out-of-the-box.
442
+ - In **AI connection**, choose **Hermes · use my configured login** to reuse the Onboarder CLI's Hermes provider and model. No API key is needed in the browser. The drawer shows the current model/provider; use **Test connection**, then **Save**. Install Hermes on the computer running the server and run `onboarder agent model` to sign in or change models, then refresh the configuration in the drawer.
205
443
  - Connect any OpenAI-compatible LLM endpoint (OpenAI, Azure OpenAI, Groq, OpenRouter, Ollama, LM Studio) to generate streaming explanations and repository documentation.
206
- - API keys are stored solely in your browser's `localStorage` and never logged or written to disk.
444
+ - Hermes powers questions, explanations, diagrams, documentation, analysis summaries and review briefs using their supplied repository context. Web explanations have no machine tools. Each request starts a fresh conversation, with a two-minute runtime budget and at most two concurrent requests; closing or cancelling an answer stops its Hermes process. Runtime startup can add a few seconds to the first response.
445
+ - **AI sketch** draws the current map, folder, file or architecture view using that connection. Sketches are checked with Mermaid before they are cached and displayed. **Static** returns to the original map; **AI sketch ✓** restores the cached sketch. Generated diagrams support **Copy Mermaid**, **Save SVG**, pan/zoom and file links. **Cancel sketch**, changing views, or opening another repository cancels an unfinished request. Hermes diagram requests use low reasoning without changing the saved chat configuration.
446
+ - Hermes owns its login and may save prompts/source in its session transcripts. Context is sent to the configured provider under its normal account usage limits. Existing API endpoint settings still work; API-mode keys are saved in browser `localStorage` and never logged or written to the server's disk. Hermes requests do not forward these browser keys.
447
+ - Developers can run `node scripts/hermes-web-smoke.mjs` after building to verify the HTTP integration against a real installed Hermes runtime and a local model fixture without external inference.
207
448
 
208
449
  ### 6. MCP Server — let any AI agent onboard itself
209
450
 
@@ -375,43 +616,29 @@ Cloudflare quick tunnels and Tailscale remain supported. They terminate TLS and
375
616
 
376
617
  ```
377
618
  codebase-onboarder/
378
- ├── bin/ # npm entry point (shebang trampoline) & postinstall note
379
- ├── cli/ # Onboarding wizard, config commands, doctor, tunnels
380
- │ ├── main.js # argv → command; bare `onboarder` picks explorer vs server
381
- │ ├── ui.js # Terminal paint; --no-color / NO_COLOR strip it in one place
382
- │ └── explorer/ # The terminal app
383
- │ ├── app.js # The readline session, TTY guards, `web` bridge
384
- │ ├── session.js # Loads a repo exactly as POST /api/scan does
385
- │ ├── views.js # The site's screens, drawn as text (pure functions)
386
- │ └── commands.js# One command table: dispatch, help, and tests share it
387
- ├── server/ # Zero-dependency Node.js HTTP server
388
- │ ├── index.js # createServer / startServer / startup banner
389
- │ ├── config.js # Settings schema, normalization, atomic 0600 writes
390
- │ ├── pidfile.js # PID + run record (mode, url, log) for status / stop / restart
391
- │ ├── daemon.js # Detached background start, log file, readiness probe
392
- │ ├── startup.js # Login items: launchd plist / systemd --user unit / Startup folder
393
- │ ├── logger.js # Aligned-text or JSON log lines from one entry shape
394
- │ ├── layout.js # Shared terminal geometry: width, fit, panel, resize
395
- │ ├── router.js # Route table, live per-request settings, auth & CSRF gates
396
- │ ├── auth.js # Signed HttpOnly browser sessions
397
- │ ├── apiAuth.js # Login/status/logout endpoints
398
- │ ├── apiSettings.js# GET/PUT /api/settings, key rotation
399
- │ ├── tunnel.js # Cloudflare & Tailscale status/commands
400
- │ ├── https.js # Caddy config, ACME/TLS readiness & lifecycle
401
- │ ├── httpGuards.js# Host verification & CSRF/rebinding guards
402
- │ ├── apiScan.js # Local & remote scan coordination
403
- │ ├── apiFile.js # Path-traversal safe file serving
404
- │ ├── gitHistory.js# Local Git log parser & hotspot metrics
405
- │ └── sessions.js # Temporary clone lifecycle manager
406
- ├── shared/ # Isomorphic analyzer engine (Runs in Node & Browser)
407
- │ ├── analyzer/ # Language parsers, graph analytics, metrics, security
408
- │ └── diagram/ # Mermaid diagram generation
409
- ├── public/ # Frontend client application
410
- │ ├── js/ # Vanilla ES modules (State, Inspector, Views, Settings)
411
- │ ├── vendor/ # Vendored Mermaid & Monaco Editor (Offline)
412
- │ ├── index.html # Main application interface
413
- │ └── login.html # Self-hosted access-key sign-in
414
- └── tests/ # Comprehensive node:test suite
619
+ ├── src/ # Canonical TypeScript application source
620
+ │ ├── cli/ # Wizard, lifecycle commands, terminal explorer, reports
621
+ │ ├── server/ # HTTP server, auth, settings, clone sessions, MCP, tools
622
+ │ ├── shared/ # Portable contracts and the isomorphic analysis engine
623
+ │ │ ├── contracts.ts # FileSource, scan options/progress, settings, analysis types
624
+ │ │ ├── analyzer/ # Language parsers, graph analytics, scan controls, metrics
625
+ │ │ ├── diagram/ # Mermaid and AI diagram generation
626
+ │ │ └── search/ # Shared query language
627
+ │ └── public/ # Browser application, views, components, integration types
628
+ ├── bin/ # npm entry-point trampoline and postinstall note
629
+ ├── cli/ # Generated terminal runtime and declarations
630
+ ├── server/ # Generated server/MCP runtime and declarations
631
+ ├── shared/ # Generated shared engine, served at /shared/
632
+ ├── public/
633
+ │ ├── app.js & js/ # Generated browser ES modules
634
+ │ ├── vendor/ # Offline Mermaid and Monaco builds
635
+ │ ├── index.html # App shell and scan controls
636
+ │ ├── login.html # Self-hosted access-key sign-in
637
+ │ └── styles.css # Existing paper-and-ink design
638
+ ├── scripts/ # Development watcher and build consistency verification
639
+ ├── tsconfig.json # Whole-application compilation
640
+ ├── tsconfig.strict.json # Strict core checks
641
+ └── tests/ # Native node:test regression suite
415
642
  ```
416
643
 
417
644
  ---
@@ -421,7 +648,10 @@ codebase-onboarder/
421
648
  Onboarder includes a comprehensive automated test suite built with Node's native test runner:
422
649
 
423
650
  ```bash
424
- # Run all 565 tests
651
+ # Run all checks (also exercised in CI on Node 20, 22, and 24)
652
+ npm run check
653
+
654
+ # Run the regression suite
425
655
  npm test
426
656
  ```
427
657
 
@@ -433,6 +663,7 @@ Test suites cover:
433
663
  - The settings layer end to end: schema validation, atomic config writes, the
434
664
  Bearer auth gate, key rotation, DNS-rebinding protection, and the wizard's
435
665
  branching/flag logic.
666
+ - Scan cancellation, bounded concurrent reads, UTF-8 limits, and request validation.
436
667
  - Deep Analysis tooling: engine detection across Windows/macOS/Linux, install-plan
437
668
  validation, output parsing, and report shaping.
438
669
 
@@ -0,0 +1,23 @@
1
+ // Source checkouts need compilation; published npm installs already contain it.
2
+ import { existsSync } from 'node:fs';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { fileURLToPath } from 'node:url';
5
+ import path from 'node:path';
6
+
7
+ const root = fileURLToPath(new URL('../', import.meta.url));
8
+ if (existsSync(path.join(root, 'src')) && existsSync(path.join(root, 'tsconfig.json'))) {
9
+ const compiler = path.join(root, 'node_modules/typescript/bin/tsc');
10
+ if (!existsSync(compiler)) {
11
+ console.error('Run npm ci to install the TypeScript development tools before starting from source.');
12
+ process.exitCode = 1;
13
+ } else {
14
+ for (const args of [
15
+ ['-p', 'tsconfig.json', '--noEmit'],
16
+ ['-p', 'tsconfig.strict.json'],
17
+ ['-p', 'tsconfig.json'],
18
+ ]) {
19
+ const result = spawnSync(process.execPath, [compiler, ...args], { cwd: root, stdio: 'inherit' });
20
+ if (result.status !== 0) { process.exitCode = result.status || 1; break; }
21
+ }
22
+ }
23
+ }
package/bin/onboarder.js CHANGED
File without changes
@@ -0,0 +1,71 @@
1
+ export declare const AGENT_HELP = "\n Onboarder agent \u2014 Hermes with repository and GitHub tools\n\n onboarder agent setup Create a dedicated Hermes profile\n onboarder chat [folder] Open the conversational harness with / commands\n onboarder agent model Configure its model/provider interactively\n onboarder agent doctor Check runtime and integration compatibility\n onboarder agent source Fetch the researched official Hermes source\n onboarder agent runs List saved runs\n onboarder agent show <run-id> Inspect a saved result and workspace\n onboarder agent <workflow> [folder] --task \"...\"\n\n Workflows: ask, review, triage, implement, pr, github\n --pr <number> Review/inspect a GitHub pull request\n --issue <number> Work from an issue\n --base <branch> PR target (default: origin HEAD, or current branch)\n --allow-checks Allow npm install/test/typecheck/build (repository code)\n --allow-github-writes Allow issue/review/comment updates and draft PR publishing\n --max-turns <1\u2013100> Agent turn limit (default: 24)\n --timeout <seconds> Run limit, 15\u20133600 (default: 300)\n --model <name> --provider <name> Override the dedicated Hermes model\n --resume <run-id> Continue a session; repeat allowed permission flags\n --dry-run Print the plan without a model call or worktree\n --json One JSON result; progress goes to stderr\n\n implement/pr use a new Git worktree at committed HEAD. Uncommitted source\n changes are excluded. Without --allow-github-writes, pr prepares a draft locally.\n GitHub uses the checkout's github.com origin and GITHUB_TOKEN or GH_TOKEN.\n Hermes is an optional separate Python runtime: https://github.com/NousResearch/hermes-agent\n Profile/history: ONBOARDER_AGENT_HOME (default: ~/.config/onboarder/agent).\n\n onboarder agent ask . --task \"Explain the authentication flow\"\n onboarder agent review . --pr 42 --task \"Find correctness and security issues\"\n onboarder agent triage . --issue 12 --task \"Investigate and propose a fix\"\n onboarder agent implement . --task \"Fix issue 12\" --issue 12 --allow-checks\n onboarder agent pr . --task \"Fix issue 12 and open a draft PR\" --issue 12 --allow-checks --allow-github-writes\n";
2
+ export declare const AGENT_OPTIONS: {
3
+ task: {
4
+ type: 'string';
5
+ };
6
+ pr: {
7
+ type: 'string';
8
+ };
9
+ issue: {
10
+ type: 'string';
11
+ };
12
+ 'max-turns': {
13
+ type: 'string';
14
+ };
15
+ timeout: {
16
+ type: 'string';
17
+ };
18
+ resume: {
19
+ type: 'string';
20
+ };
21
+ 'allow-checks': {
22
+ type: 'boolean';
23
+ };
24
+ 'allow-github-writes': {
25
+ type: 'boolean';
26
+ };
27
+ 'dry-run': {
28
+ type: 'boolean';
29
+ };
30
+ model: {
31
+ type: 'string';
32
+ };
33
+ provider: {
34
+ type: 'string';
35
+ };
36
+ json: {
37
+ type: 'boolean';
38
+ };
39
+ help: {
40
+ type: 'boolean';
41
+ short: string;
42
+ };
43
+ base: {
44
+ type: 'string';
45
+ };
46
+ };
47
+ export declare function agentDoctor(home?: string, env?: NodeJS.ProcessEnv): Promise<{
48
+ runtime: boolean;
49
+ compatible: boolean;
50
+ server: boolean;
51
+ profile: boolean;
52
+ githubToken: boolean;
53
+ home: string;
54
+ ready: boolean;
55
+ detail: string;
56
+ next: string;
57
+ }>;
58
+ export declare function fetchHermesSource(home?: string, signal?: AbortSignal): Promise<{
59
+ source: string;
60
+ revision: string;
61
+ directory: string;
62
+ license: string;
63
+ installed: boolean;
64
+ }>;
65
+ export declare function agentCommand(sub?: string, positionals?: string[], flags?: Record<string, any>, options?: {
66
+ root?: string;
67
+ signal?: AbortSignal;
68
+ out?: (text: string) => void;
69
+ err?: (text: string) => void;
70
+ }): Promise<number>;
71
+ export declare function explorerAgent(args: string[], root: string, signal: AbortSignal, out: (text: string) => void, err: (text: string) => void): Promise<string>;