codebase-onboarder 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -46
- package/bin/build-if-source.js +23 -0
- package/cli/commands.d.ts +26 -0
- package/cli/commands.js +836 -811
- package/cli/commands.js.map +1 -0
- package/cli/explorer/advanced.d.ts +14 -0
- package/cli/explorer/advanced.js +321 -329
- package/cli/explorer/advanced.js.map +1 -0
- package/cli/explorer/app.d.ts +1 -0
- package/cli/explorer/app.js +384 -313
- package/cli/explorer/app.js.map +1 -0
- package/cli/explorer/assistant.d.ts +9 -0
- package/cli/explorer/assistant.js +58 -0
- package/cli/explorer/assistant.js.map +1 -0
- package/cli/explorer/commands.d.ts +17 -0
- package/cli/explorer/commands.js +368 -302
- package/cli/explorer/commands.js.map +1 -0
- package/cli/explorer/featureViews.d.ts +124 -0
- package/cli/explorer/featureViews.js +179 -0
- package/cli/explorer/featureViews.js.map +1 -0
- package/cli/explorer/github.d.ts +21 -0
- package/cli/explorer/github.js +42 -44
- package/cli/explorer/github.js.map +1 -0
- package/cli/explorer/graphs.d.ts +7 -0
- package/cli/explorer/graphs.js +90 -95
- package/cli/explorer/graphs.js.map +1 -0
- package/cli/explorer/picker.d.ts +22 -0
- package/cli/explorer/picker.js +150 -0
- package/cli/explorer/picker.js.map +1 -0
- package/cli/explorer/report.d.ts +85 -0
- package/cli/explorer/report.js +60 -0
- package/cli/explorer/report.js.map +1 -0
- package/cli/explorer/session.d.ts +449 -0
- package/cli/explorer/session.js +143 -144
- package/cli/explorer/session.js.map +1 -0
- package/cli/explorer/views.d.ts +19 -0
- package/cli/explorer/views.js +465 -482
- package/cli/explorer/views.js.map +1 -0
- package/cli/explorer/wrap.d.ts +1 -0
- package/cli/explorer/wrap.js +28 -44
- package/cli/explorer/wrap.js.map +1 -0
- package/cli/main.d.ts +1 -0
- package/cli/main.js +214 -161
- package/cli/main.js.map +1 -0
- package/cli/prompt.d.ts +5 -0
- package/cli/prompt.js +84 -80
- package/cli/prompt.js.map +1 -0
- package/cli/scanOptions.d.ts +2 -0
- package/cli/scanOptions.js +11 -0
- package/cli/scanOptions.js.map +1 -0
- package/cli/ui.d.ts +33 -0
- package/cli/ui.js +35 -44
- package/cli/ui.js.map +1 -0
- package/cli/wizard.d.ts +187 -0
- package/cli/wizard.js +304 -284
- package/cli/wizard.js.map +1 -0
- package/package.json +15 -4
- package/public/app.d.ts +1 -0
- package/public/app.js +1057 -1009
- package/public/app.js.map +1 -0
- package/public/browser.d.ts +68 -0
- package/public/browser.js +2 -0
- package/public/browser.js.map +1 -0
- package/public/index.html +30 -13
- package/public/js/about.d.ts +6 -0
- package/public/js/about.js +152 -172
- package/public/js/about.js.map +1 -0
- package/public/js/aiDraft.d.ts +3 -0
- package/public/js/aiDraft.js +116 -124
- package/public/js/aiDraft.js.map +1 -0
- package/public/js/analysisPanel.d.ts +7 -0
- package/public/js/analysisPanel.js +166 -166
- package/public/js/analysisPanel.js.map +1 -0
- package/public/js/analysisReport.d.ts +38 -0
- package/public/js/analysisReport.js +105 -110
- package/public/js/analysisReport.js.map +1 -0
- package/public/js/api.d.ts +26 -0
- package/public/js/api.js +176 -167
- package/public/js/api.js.map +1 -0
- package/public/js/atlas.d.ts +6 -0
- package/public/js/atlas.js +50 -58
- package/public/js/atlas.js.map +1 -0
- package/public/js/blameView.d.ts +2 -0
- package/public/js/blameView.js +36 -37
- package/public/js/blameView.js.map +1 -0
- package/public/js/codeTab.d.ts +3 -0
- package/public/js/codeTab.js +175 -180
- package/public/js/codeTab.js.map +1 -0
- package/public/js/codeViewer.d.ts +5 -0
- package/public/js/codeViewer.js +162 -150
- package/public/js/codeViewer.js.map +1 -0
- package/public/js/components/FileChip.d.ts +9 -0
- package/public/js/components/FileChip.js +45 -49
- package/public/js/components/FileChip.js.map +1 -0
- package/public/js/components/MetricSparkline.d.ts +7 -0
- package/public/js/components/MetricSparkline.js +35 -44
- package/public/js/components/MetricSparkline.js.map +1 -0
- package/public/js/components/RiskBadge.d.ts +9 -0
- package/public/js/components/RiskBadge.js +55 -63
- package/public/js/components/RiskBadge.js.map +1 -0
- package/public/js/deepAnalysisView.d.ts +99 -0
- package/public/js/deepAnalysisView.js +282 -302
- package/public/js/deepAnalysisView.js.map +1 -0
- package/public/js/diagramPane.d.ts +8 -0
- package/public/js/diagramPane.js +133 -135
- package/public/js/diagramPane.js.map +1 -0
- package/public/js/diffView.d.ts +6 -0
- package/public/js/diffView.js +222 -209
- package/public/js/diffView.js.map +1 -0
- package/public/js/docsView.d.ts +2 -0
- package/public/js/docsView.js +441 -442
- package/public/js/docsView.js.map +1 -0
- package/public/js/dom.d.ts +189 -0
- package/public/js/dom.js +5 -0
- package/public/js/dom.js.map +1 -0
- package/public/js/fileSourceBrowser.d.ts +5 -0
- package/public/js/fileSourceBrowser.js +33 -41
- package/public/js/fileSourceBrowser.js.map +1 -0
- package/public/js/flameGraph.d.ts +5 -0
- package/public/js/flameGraph.js +62 -72
- package/public/js/flameGraph.js.map +1 -0
- package/public/js/forceGraph.d.ts +10 -0
- package/public/js/forceGraph.js +581 -556
- package/public/js/forceGraph.js.map +1 -0
- package/public/js/heatmap.d.ts +4 -0
- package/public/js/heatmap.js +142 -164
- package/public/js/heatmap.js.map +1 -0
- package/public/js/highlight.d.ts +2 -0
- package/public/js/highlight.js +116 -107
- package/public/js/highlight.js.map +1 -0
- package/public/js/html.d.ts +2 -0
- package/public/js/html.js +14 -44
- package/public/js/html.js.map +1 -0
- package/public/js/insightsView.d.ts +5 -0
- package/public/js/insightsView.js +93 -111
- package/public/js/insightsView.js.map +1 -0
- package/public/js/inspector.d.ts +37 -0
- package/public/js/inspector.js +416 -445
- package/public/js/inspector.js.map +1 -0
- package/public/js/llm.d.ts +113 -0
- package/public/js/llm.js +233 -272
- package/public/js/llm.js.map +1 -0
- package/public/js/mapView.d.ts +3 -0
- package/public/js/mapView.js +121 -120
- package/public/js/mapView.js.map +1 -0
- package/public/js/markdown.d.ts +3 -0
- package/public/js/markdown.js +84 -91
- package/public/js/markdown.js.map +1 -0
- package/public/js/mindmap.d.ts +32 -0
- package/public/js/mindmap.js +244 -259
- package/public/js/mindmap.js.map +1 -0
- package/public/js/mobilePanels.d.ts +5 -0
- package/public/js/mobilePanels.js +50 -0
- package/public/js/mobilePanels.js.map +1 -0
- package/public/js/repoFiles.d.ts +12 -0
- package/public/js/repoFiles.js +28 -27
- package/public/js/repoFiles.js.map +1 -0
- package/public/js/reviewView.d.ts +28 -0
- package/public/js/reviewView.js +256 -0
- package/public/js/reviewView.js.map +1 -0
- package/public/js/sbomView.d.ts +3 -0
- package/public/js/sbomView.js +59 -67
- package/public/js/sbomView.js.map +1 -0
- package/public/js/scanCache.d.ts +16 -0
- package/public/js/scanCache.js +67 -65
- package/public/js/scanCache.js.map +1 -0
- package/public/js/search.d.ts +7 -0
- package/public/js/search.js +868 -800
- package/public/js/search.js.map +1 -0
- package/public/js/searchLocal.d.ts +42 -0
- package/public/js/searchLocal.js +87 -0
- package/public/js/searchLocal.js.map +1 -0
- package/public/js/serverSettings.d.ts +5 -0
- package/public/js/serverSettings.js +153 -164
- package/public/js/serverSettings.js.map +1 -0
- package/public/js/state.d.ts +798 -0
- package/public/js/state.js +114 -122
- package/public/js/state.js.map +1 -0
- package/public/js/tour.d.ts +6 -0
- package/public/js/tour.js +5 -7
- package/public/js/tour.js.map +1 -0
- package/public/js/transitions.d.ts +2 -0
- package/public/js/transitions.js +9 -10
- package/public/js/transitions.js.map +1 -0
- package/public/js/tree.d.ts +12 -0
- package/public/js/tree.js +157 -154
- package/public/js/tree.js.map +1 -0
- package/public/js/workflowsView.d.ts +3 -0
- package/public/js/workflowsView.js +15 -22
- package/public/js/workflowsView.js.map +1 -0
- package/public/search.css +495 -0
- package/public/styles.css +163 -346
- package/public/workbench.css +166 -0
- package/server/apiAuth.d.ts +3 -0
- package/server/apiAuth.js +18 -20
- package/server/apiAuth.js.map +1 -0
- package/server/apiDiff.d.ts +2 -0
- package/server/apiDiff.js +20 -18
- package/server/apiDiff.js.map +1 -0
- package/server/apiDocs.d.ts +2 -0
- package/server/apiDocs.js +38 -40
- package/server/apiDocs.js.map +1 -0
- package/server/apiFile.d.ts +1 -0
- package/server/apiFile.js +14 -17
- package/server/apiFile.js.map +1 -0
- package/server/apiGitBlame.d.ts +2 -0
- package/server/apiGitBlame.js +50 -51
- package/server/apiGitBlame.js.map +1 -0
- package/server/apiMcp.d.ts +4 -0
- package/server/apiMcp.js +64 -66
- package/server/apiMcp.js.map +1 -0
- package/server/apiReview.d.ts +2 -0
- package/server/apiReview.js +45 -0
- package/server/apiReview.js.map +1 -0
- package/server/apiScan.d.ts +5 -0
- package/server/apiScan.js +90 -71
- package/server/apiScan.js.map +1 -0
- package/server/apiSearch.d.ts +33 -0
- package/server/apiSearch.js +184 -200
- package/server/apiSearch.js.map +1 -0
- package/server/apiSettings.d.ts +4 -0
- package/server/apiSettings.js +84 -85
- package/server/apiSettings.js.map +1 -0
- package/server/apiTools.d.ts +3 -0
- package/server/apiTools.js +55 -56
- package/server/apiTools.js.map +1 -0
- package/server/auth.d.ts +5 -0
- package/server/auth.js +54 -51
- package/server/auth.js.map +1 -0
- package/server/config.d.ts +42 -0
- package/server/config.js +189 -194
- package/server/config.js.map +1 -0
- package/server/daemon.d.ts +12 -0
- package/server/daemon.js +124 -114
- package/server/daemon.js.map +1 -0
- package/server/fileSourceNode.d.ts +2 -0
- package/server/fileSourceNode.js +34 -36
- package/server/fileSourceNode.js.map +1 -0
- package/server/gitClone.d.ts +9 -0
- package/server/gitClone.js +59 -61
- package/server/gitClone.js.map +1 -0
- package/server/gitDiff.d.ts +36 -0
- package/server/gitDiff.js +271 -169
- package/server/gitDiff.js.map +1 -0
- package/server/gitHistory.d.ts +12 -0
- package/server/gitHistory.js +80 -80
- package/server/gitHistory.js.map +1 -0
- package/server/gitRemote.d.ts +12 -0
- package/server/gitRemote.js +37 -38
- package/server/gitRemote.js.map +1 -0
- package/server/htmlText.d.ts +4 -0
- package/server/htmlText.js +16 -23
- package/server/htmlText.js.map +1 -0
- package/server/http.d.ts +5 -0
- package/server/http.js +27 -30
- package/server/http.js.map +1 -0
- package/server/httpGuards.d.ts +2 -0
- package/server/httpGuards.js +47 -43
- package/server/httpGuards.js.map +1 -0
- package/server/https.d.ts +34 -0
- package/server/https.js +121 -111
- package/server/https.js.map +1 -0
- package/server/index.d.ts +40 -0
- package/server/index.js +139 -147
- package/server/index.js.map +1 -0
- package/server/layout.d.ts +26 -0
- package/server/layout.js +59 -64
- package/server/layout.js.map +1 -0
- package/server/llmProxy.d.ts +3 -0
- package/server/llmProxy.js +137 -135
- package/server/llmProxy.js.map +1 -0
- package/server/logger.d.ts +38 -0
- package/server/logger.js +198 -211
- package/server/logger.js.map +1 -0
- package/server/mcp/analysis.d.ts +29 -0
- package/server/mcp/analysis.js +99 -120
- package/server/mcp/analysis.js.map +1 -0
- package/server/mcp/http.d.ts +9 -0
- package/server/mcp/http.js +128 -137
- package/server/mcp/http.js.map +1 -0
- package/server/mcp/runner.d.ts +68 -0
- package/server/mcp/runner.js +208 -218
- package/server/mcp/runner.js.map +1 -0
- package/server/mcp/server.d.ts +29 -0
- package/server/mcp/server.js +166 -179
- package/server/mcp/server.js.map +1 -0
- package/server/mcp/standalone.d.ts +1 -0
- package/server/mcp/standalone.js +8 -10
- package/server/mcp/standalone.js.map +1 -0
- package/server/mcp/tools.d.ts +2020 -0
- package/server/mcp/tools.js +523 -574
- package/server/mcp/tools.js.map +1 -0
- package/server/paths.d.ts +3 -0
- package/server/paths.js +17 -15
- package/server/paths.js.map +1 -0
- package/server/pidfile.d.ts +9 -0
- package/server/pidfile.js +43 -45
- package/server/pidfile.js.map +1 -0
- package/server/review.d.ts +5 -0
- package/server/review.js +35 -0
- package/server/review.js.map +1 -0
- package/server/router.d.ts +33 -0
- package/server/router.js +191 -197
- package/server/router.js.map +1 -0
- package/server/scanRequest.d.ts +3 -0
- package/server/scanRequest.js +36 -0
- package/server/scanRequest.js.map +1 -0
- package/server/searchIndex.d.ts +17 -0
- package/server/searchIndex.js +83 -80
- package/server/searchIndex.js.map +1 -0
- package/server/sessions.d.ts +14 -0
- package/server/sessions.js +62 -70
- package/server/sessions.js.map +1 -0
- package/server/startup.d.ts +118 -0
- package/server/startup.js +143 -148
- package/server/startup.js.map +1 -0
- package/server/static.d.ts +6 -0
- package/server/static.js +28 -31
- package/server/static.js.map +1 -0
- package/server/tools/install.d.ts +4 -0
- package/server/tools/install.js +176 -185
- package/server/tools/install.js.map +1 -0
- package/server/tools/parse.d.ts +8 -0
- package/server/tools/parse.js +112 -114
- package/server/tools/parse.js.map +1 -0
- package/server/tools/platform.d.ts +9 -0
- package/server/tools/platform.js +49 -47
- package/server/tools/platform.js.map +1 -0
- package/server/tools/registry.d.ts +137 -0
- package/server/tools/registry.js +173 -172
- package/server/tools/registry.js.map +1 -0
- package/server/tools/scan.d.ts +34 -0
- package/server/tools/scan.js +89 -98
- package/server/tools/scan.js.map +1 -0
- package/server/tools.d.ts +34 -0
- package/server/tools.js +94 -107
- package/server/tools.js.map +1 -0
- package/server/tunnel.d.ts +29 -0
- package/server/tunnel.js +61 -66
- package/server/tunnel.js.map +1 -0
- package/shared/analyzer/docs.d.ts +16 -0
- package/shared/analyzer/docs.js +99 -93
- package/shared/analyzer/docs.js.map +1 -0
- package/shared/analyzer/explainLocal.d.ts +4 -0
- package/shared/analyzer/explainLocal.js +122 -142
- package/shared/analyzer/explainLocal.js.map +1 -0
- package/shared/analyzer/github.d.ts +37 -0
- package/shared/analyzer/github.js +41 -43
- package/shared/analyzer/github.js.map +1 -0
- package/shared/analyzer/graph.d.ts +41 -0
- package/shared/analyzer/graph.js +393 -400
- package/shared/analyzer/graph.js.map +1 -0
- package/shared/analyzer/health.d.ts +33 -0
- package/shared/analyzer/health.js +197 -193
- package/shared/analyzer/health.js.map +1 -0
- package/shared/analyzer/history.d.ts +29 -0
- package/shared/analyzer/history.js +110 -111
- package/shared/analyzer/history.js.map +1 -0
- package/shared/analyzer/jsonConfig.d.ts +2 -0
- package/shared/analyzer/jsonConfig.js +61 -0
- package/shared/analyzer/jsonConfig.js.map +1 -0
- package/shared/analyzer/languages/csharp.d.ts +26 -0
- package/shared/analyzer/languages/csharp.js +83 -88
- package/shared/analyzer/languages/csharp.js.map +1 -0
- package/shared/analyzer/languages/generic.d.ts +23 -0
- package/shared/analyzer/languages/generic.js +94 -105
- package/shared/analyzer/languages/generic.js.map +1 -0
- package/shared/analyzer/languages/go.d.ts +24 -0
- package/shared/analyzer/languages/go.js +45 -54
- package/shared/analyzer/languages/go.js.map +1 -0
- package/shared/analyzer/languages/index.d.ts +6 -0
- package/shared/analyzer/languages/index.js +19 -20
- package/shared/analyzer/languages/index.js.map +1 -0
- package/shared/analyzer/languages/java.d.ts +20 -0
- package/shared/analyzer/languages/java.js +73 -78
- package/shared/analyzer/languages/java.js.map +1 -0
- package/shared/analyzer/languages/javascript.d.ts +12 -0
- package/shared/analyzer/languages/javascript.js +258 -209
- package/shared/analyzer/languages/javascript.js.map +1 -0
- package/shared/analyzer/languages/python.d.ts +23 -0
- package/shared/analyzer/languages/python.js +92 -100
- package/shared/analyzer/languages/python.js.map +1 -0
- package/shared/analyzer/languages/rust.d.ts +17 -0
- package/shared/analyzer/languages/rust.js +96 -98
- package/shared/analyzer/languages/rust.js.map +1 -0
- package/shared/analyzer/languages/typescript.d.ts +11 -0
- package/shared/analyzer/languages/typescript.js +117 -116
- package/shared/analyzer/languages/typescript.js.map +1 -0
- package/shared/analyzer/licenses.d.ts +18 -0
- package/shared/analyzer/licenses.js +130 -133
- package/shared/analyzer/licenses.js.map +1 -0
- package/shared/analyzer/metrics.d.ts +20 -0
- package/shared/analyzer/metrics.js +112 -104
- package/shared/analyzer/metrics.js.map +1 -0
- package/shared/analyzer/pathUtil.d.ts +10 -0
- package/shared/analyzer/pathUtil.js +29 -35
- package/shared/analyzer/pathUtil.js.map +1 -0
- package/shared/analyzer/patterns.d.ts +11 -0
- package/shared/analyzer/patterns.js +231 -253
- package/shared/analyzer/patterns.js.map +1 -0
- package/shared/analyzer/scan.d.ts +62 -0
- package/shared/analyzer/scan.js +451 -442
- package/shared/analyzer/scan.js.map +1 -0
- package/shared/analyzer/scanControl.d.ts +11 -0
- package/shared/analyzer/scanControl.js +62 -0
- package/shared/analyzer/scanControl.js.map +1 -0
- package/shared/analyzer/security.d.ts +18 -0
- package/shared/analyzer/security.js +159 -159
- package/shared/analyzer/security.js.map +1 -0
- package/shared/analyzer/services.d.ts +5 -0
- package/shared/analyzer/services.js +141 -138
- package/shared/analyzer/services.js.map +1 -0
- package/shared/analyzer/stack.d.ts +6 -0
- package/shared/analyzer/stack.js +134 -141
- package/shared/analyzer/stack.js.map +1 -0
- package/shared/analyzer/tour.d.ts +2 -0
- package/shared/analyzer/tour.js +45 -53
- package/shared/analyzer/tour.js.map +1 -0
- package/shared/analyzer/util.d.ts +8 -0
- package/shared/analyzer/util.js +130 -76
- package/shared/analyzer/util.js.map +1 -0
- package/shared/analyzer/workflows.d.ts +8 -0
- package/shared/analyzer/workflows.js +139 -134
- package/shared/analyzer/workflows.js.map +1 -0
- package/shared/contracts.d.ts +250 -0
- package/shared/contracts.js +2 -0
- package/shared/contracts.js.map +1 -0
- package/shared/diagram/aiFacts.d.ts +35 -0
- package/shared/diagram/aiFacts.js +102 -105
- package/shared/diagram/aiFacts.js.map +1 -0
- package/shared/diagram/aiMermaid.d.ts +5 -0
- package/shared/diagram/aiMermaid.js +46 -45
- package/shared/diagram/aiMermaid.js.map +1 -0
- package/shared/diagram/atlas.d.ts +16 -0
- package/shared/diagram/atlas.js +51 -60
- package/shared/diagram/atlas.js.map +1 -0
- package/shared/diagram/mermaid.d.ts +43 -0
- package/shared/diagram/mermaid.js +348 -370
- package/shared/diagram/mermaid.js.map +1 -0
- package/shared/review/contracts.d.ts +95 -0
- package/shared/review/contracts.js +2 -0
- package/shared/review/contracts.js.map +1 -0
- package/shared/review/review.d.ts +10 -0
- package/shared/review/review.js +184 -0
- package/shared/review/review.js.map +1 -0
- package/shared/search/query.d.ts +32 -0
- package/shared/search/query.js +395 -388
- package/shared/search/query.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/cli/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// The verbs of the `onboarder` command. `main.js` parses argv into flags and a\n// command name; each function here is one command, taking `{ flags, out, err,\n// io }` so the tests can drive them with strings instead of a terminal.\n//\n// Every command returns an exit code instead of calling process.exit — the\n// bin wrapper is the only place that touches the process.\n\nimport fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport net from 'node:net';\nimport { spawn } from 'node:child_process';\n\nimport {\n DEFAULT_SETTINGS, configPath, configExists, readSettings, writeSettings,\n publicSettings, serverUrls, maskAccessKey, isLoopbackHost,\n} from '../server/config.js';\nimport { startServer } from '../server/index.js';\nimport { pidIsAlive, readPidFile, removePidFile, readRunInfo, runInfoPath } from '../server/pidfile.js';\nimport { logPath, rotateLogIfNeeded, tailLog, followLog, logExists, spawnDetached, waitForPidFile, waitForReady } from '../server/daemon.js';\nimport { installStartup, removeStartup, startupStatus, startupTarget } from '../server/startup.js';\nimport { tunnelStatus, cloudflareCommand, tailscaleCommand, installHint, findOnPath } from '../server/tunnel.js';\nimport { caddyRun, caddyValidate, httpsReadiness, httpsStatus, writeCaddyfile } from '../server/https.js';\nimport { bold, cyan, dim, ok, warn, bad, paint, kv, tick, cross, dash, welcomeBanner, panel, row, hint } from './ui.js';\nimport { buildSteps, unansweredSteps, defaultOf, applyFlags, answersToSettings, summaryLines } from './wizard.js';\nimport { runSteps, WizardCancelled } from './prompt.js';\n\n// ---------------------------------------------------------------- setup ---\n\nexport async function runSetup({ flags = {}, out = console.log, err = console.error, version = '' }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const existed = await configExists(file);\n const current = existed ? await readSettings(file) : { ...DEFAULT_SETTINGS };\n\n // Non-interactive (or a piped stdout): flags are the answers, defaults fill\n // the rest, and the summary is printed instead of asked about.\n if (flags.nonInteractive || !process.stdout.isTTY) {\n const { settings } = applyFlags(current, flags);\n await writeSettings(settings, file);\n if (flags.json) {\n out(JSON.stringify({ configFile: file, created: !existed, settings: publicSettings(settings) }, null, 2));\n } else {\n out(tick + `Wrote ${file}`);\n printSummary(out, settings, { revealKey: Boolean(patchHasNewKey(flags)) });\n }\n await printTunnelFollowup(out, settings);\n // `start` may be the flag `--start` (true) or the mode a subcommand asked\n // for ('background') — both mean \"boot it now\", differently.\n if (flags.start === 'background') return runStartBackground({ flags, out, err });\n if (flags.start) return runStart({ flags, out, err });\n return 0;\n }\n\n out(welcomeBanner(version, file));\n if (existed) out(dim(' A config already exists — answers start from what it says.\\n'));\n\n // Flag answers go in first; the wizard only asks what is left.\n const seed: Record<string, any> = {};\n for (const id of ['name', 'email', 'mode', 'host', 'port', 'domain', 'https', 'autoOpen']) {\n if (flags[id] !== undefined) seed[id] = flags[id];\n }\n if (flags.provider !== undefined) seed.provider = flags.provider;\n if (flags.baseUrl !== undefined) seed.baseUrl = flags.baseUrl;\n if (flags.model !== undefined) seed.model = flags.model;\n\n let answers;\n try {\n answers = await runSteps(unansweredSteps(buildSteps(current), seed), seed);\n } catch (e) {\n if (e instanceof WizardCancelled) {\n err('\\n Setup cancelled — nothing was written.');\n return 130;\n }\n throw e;\n }\n\n let settings;\n try {\n settings = answersToSettings(current, answers);\n } catch (e) {\n err(bad(' Those answers do not make a valid config: ' + e.message));\n return 1;\n }\n\n out('');\n printSummary(out, settings, { revealKey: false });\n out('');\n const confirmed = await confirm(out, 'Write this config?');\n if (!confirmed) {\n err(' Not written.');\n return 1;\n }\n await writeSettings(settings, file);\n out(tick + 'Wrote ' + file);\n\n // The generated key exists exactly once in a readable form: right now.\n if (answers.keyChoice === 'generate' && settings.accessKey) {\n out('');\n out(warn(' Your access key — shown this once, store it somewhere safe:'));\n out(' ' + bold(settings.accessKey));\n }\n await printTunnelFollowup(out, settings);\n\n if (flags.start === 'background' || (!flags.start && await confirm(out, 'Start Onboarder now?', true))) {\n out('');\n return flags.start === 'background' ? runStartBackground({ flags, out, err }) : runStart({ flags, out, err });\n }\n out(dim(settings.https\n ? ' Later: `onboarder start` (starts Caddy automatically), or `onboarder https status`'\n : ' Later: `onboarder start`'));\n return 0;\n}\n\nfunction patchHasNewKey(flags) {\n return flags.accessKey === 'generate' || (flags.accessKey === undefined && flags.mode === 'self-hosted');\n}\n\nfunction printSummary(out, settings, { revealKey = false }: Record<string, any> = {}) {\n out(bold(' About to write:'));\n for (const [label, value] of summaryLines(settings, { revealKey })) out(kv(label, String(value)));\n}\n\nasync function confirm(out, question, fallback = false) {\n const { default: readline } = await import('node:readline/promises');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const typed = await rl.question(` ${bold(question)} ${dim(fallback ? '(Y/n)' : '(y/N)')} `);\n const v = typed.trim().toLowerCase();\n return v ? v === 'y' || v === 'yes' : fallback;\n } finally {\n rl.close();\n }\n}\n\nasync function printTunnelFollowup(out, settings) {\n const status = tunnelStatus(settings);\n for (const name of ['cloudflare', 'tailscale']) {\n const t = status[name];\n if (!t.enabled) continue;\n out('');\n if (t.installed) {\n out(` ${name} — start the tunnel with:`);\n out(' ' + cyan(t.command));\n out(dim(` or just: onboarder tunnel ${name}`));\n } else {\n out(warn(` ${name} is enabled but its CLI is not installed.`));\n out(dim(' Install: ' + t.install));\n }\n }\n}\n\n// ---------------------------------------------------------------- start ---\n\n// What the person is about to be looking at, as a titled panel instead of a\n// loose run of lines. One function serves the foreground banner and the\n// background confirmation, so \"what does `onboarder start` tell me\" has exactly\n// one answer no matter which mode you used.\nexport function serverDetails(started, { configFile, pid = null, mode = 'foreground', logFile = '' }: Record<string, any> = {}) {\n const { settings, host, port } = started;\n const urls = serverUrls(settings);\n const rows = [\n row('URL', bold(cyan(urls.local))),\n row('Bind', `${host}:${port}`),\n row('Mode', settings.mode === 'self-hosted'\n ? (isLoopbackHost(host) ? 'self-hosted (loopback — use a tunnel for remote access)' : 'self-hosted (network reachable, access key required)')\n : 'local (this machine only)'),\n ];\n if (urls.network) rows.push(row('Network', urls.network));\n if (urls.domain) rows.push(row('Public', urls.domain));\n if (settings.mode === 'self-hosted') {\n rows.push(row('Access key', settings.accessKey ? maskAccessKey(settings.accessKey) : bad('NOT SET — every API call is refused')));\n }\n rows.push(row('PID', String(pid ?? process.pid)));\n rows.push(row('Config', dim(configFile || '')));\n if (logFile) rows.push(row('Logs', dim(logFile)));\n return { rows, urls, mode };\n}\n\nfunction printServerDetails(out, started, options) {\n const { rows } = serverDetails(started, options);\n out('');\n out(panel('Onboarder is running', rows));\n out('');\n}\n\n// Keep a foreground panel at the terminal's current width.\n//\n// Resizing a window after the server started used to leave a panel whose right\n// border was off-screen — the information was correct but unreadable, which is\n// the same complaint as \"it messes up the terminal\". On SIGWINCH we redraw the\n// block in place: move the cursor up over the lines we own, clear them, and\n// reprint at the new width. Only the panel is redrawn, not the log scrollback\n// above it, so nothing the user has already read is disturbed.\n//\n// A non-TTY (a pipe, a log file) never redraws: there is no cursor to move and\n// re-printing would just duplicate the block.\nexport function watchResize(render, stream = process.stdout) {\n if (!stream.isTTY || typeof process.stdout.on !== 'function') return (..._args: unknown[]) => {};\n let previous = '';\n const onResize = () => {\n const next = render();\n if (next === previous) return;\n const lines = previous ? previous.split('\\n').length : 0;\n // Up over the old block, clear it, print the new one. `\\x1b[J` clears from\n // the cursor to the end of the screen, which is exactly the old block.\n stream.write(lines ? `\\x1b[${lines}A\\x1b[J` : '');\n stream.write(next);\n previous = next;\n };\n process.stdout.on('SIGWINCH', onResize);\n return () => process.stdout.removeListener('SIGWINCH', onResize);\n}\n\nexport async function runStart({ flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n if (!await configExists(file)) {\n // No config yet: on a terminal the kind thing is to run setup first; in a\n // script the predictable thing is to boot the defaults (which are the\n // pre-settings behavior) and say so.\n if (process.stdout.isTTY && !flags.nonInteractive) {\n out(dim(' No settings yet — running setup first.'));\n return runSetup({ flags: { ...flags, start: true }, out, err });\n }\n out(dim(` No config at ${file} — starting with defaults (local mode).`));\n }\n const recorded = readPidFile(file);\n if (recorded && pidIsAlive(recorded)) {\n err(` Onboarder is already running (PID ${recorded}).`);\n err(dim(' Use `onboarder status`, `onboarder stop`, or `onboarder restart`.'));\n return 1;\n }\n if (recorded) removePidFile(file, recorded);\n\n // `quiet`: the CLI prints its own details panel below, so the loose banner\n // would be the same facts twice. `node server/index.js` still gets the banner.\n const started = await startServer({ configFile: file, log: (..._args: unknown[]) => {}, openBrowser: false });\n if (started.settings.https) {\n out('');\n const httpsCode = await runHttps('setup', { flags, out: flags.json ? (..._args: unknown[]) => {} : out, err });\n if (httpsCode !== 0) {\n await new Promise((resolve) => started.server.close(resolve));\n return httpsCode;\n }\n }\n if (flags.json) out(JSON.stringify({ host: started.host, port: started.port, url: serverUrls(started.settings).local }));\n // `start` foreground prints the details itself rather than letting\n // `startServer` print the old loose banner — the panel replaces it. The\n // background child lands here too (that is the point of reusing this path),\n // and ONBOARDER_BACKGROUND is what tells the two apart: one is attached to a\n // terminal you are about to close, the other is already detached from it.\n printServerDetails(out, started, { configFile: file, mode: 'foreground' });\n // Redraw the panel when the terminal is resized, so the border stays on screen\n // and long paths re-elide to the new width instead of hanging off the edge.\n watchResize(() => '\\n' + panel('Onboarder is running', serverDetails(started, { configFile: file }).rows) + '\\n');\n if (process.env.ONBOARDER_LAUNCH) {\n // Started by launchd/systemd/the Startup folder: these lines are going into\n // a log file nobody is watching, so they say what the supervisor is doing\n // rather than telling a person to press Ctrl-C.\n out(dim(` Launched at login by ${process.env.ONBOARDER_LAUNCH}. This process is supervised — stop it with \\`onboarder stop\\`.`));\n } else if (process.env.ONBOARDER_BACKGROUND) {\n out(dim(' Started in the background — this process is now independent of any terminal.'));\n } else {\n out(dim(' Running in the foreground. Ctrl-C stops it; closing this terminal stops it too.'));\n out(dim(' To keep it alive after you close the terminal: ') + cyan('onboarder start background'));\n }\n out('');\n // The listening server holds the event loop; resolve so callers/tests know\n // we are up, but leave the process running.\n return { ...started, code: 0 };\n}\n\n// `onboarder start background` — same server, no terminal attached. The child is\n// an ordinary foreground `start`; all this does is detach it and then *wait for\n// it to answer* before reporting success, so a bind failure surfaces here as a\n// failure with the log tail attached rather than a cheerful lie.\nexport async function runStartBackground({ flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n if (!await configExists(file) && process.stdout.isTTY && !flags.nonInteractive) {\n out(dim(' No settings yet — running setup first.'));\n return runSetup({ flags: { ...flags, start: 'background' }, out, err });\n }\n const recorded = readPidFile(file);\n if (recorded && pidIsAlive(recorded)) {\n err(` Onboarder is already running (PID ${recorded}).`);\n err(dim(' Use `onboarder status`, `onboarder stop`, or `onboarder restart`.'));\n return 1;\n }\n if (recorded) removePidFile(file, recorded);\n\n const settings = await readSettings(file);\n const log = logPath(file);\n await rotateLogIfNeeded(log);\n\n spawnDetached({ configFile: file, log });\n const pid = await waitForPidFile(file, { timeoutMs: flags.timeout ? Number(flags.timeout) * 1000 : 20000 });\n const urls = serverUrls(settings);\n const ready = pid ? await waitForReady(new URL('/api/health', urls.local).toString(), { timeoutMs: 8000 }) : false;\n\n if (!ready) {\n // Two different failures with two different fixes, so they are reported\n // differently. No pid record means the child never finished binding — the\n // log holds the reason (a busy port, an invalid config). A live pid that will\n // not answer means it bound and then something in front of it is in the way\n // (a proxy, a firewall), and no amount of log-reading will show that.\n if (!pid) {\n err(bad(' Onboarder did not start in the background.'));\n const tail = await tailLog(log, 15);\n if (tail.length) {\n err(dim(` Last lines of ${log}:`));\n for (const line of tail) err(' ' + line);\n }\n err(dim(' Fix the cause above, then run `onboarder start background` again.'));\n } else {\n err(bad(` Onboarder is running (PID ${pid}) but ${urls.local} is not answering.`));\n err(dim(` Its log is ${log}. If a proxy or firewall fronts this port, check that first.`));\n err(dim(' Otherwise: `onboarder stop`, then `onboarder start background` again.'));\n }\n return 1;\n }\n\n if (flags.json) {\n out(JSON.stringify({ background: true, pid, url: urls.local, log, configFile: file }, null, 2));\n return 0;\n }\n\n out('');\n out(panel('Onboarder is running in the background', [\n row('URL', bold(cyan(urls.local))),\n row('PID', String(pid)),\n row('Mode', 'background — survives closing this terminal'),\n row('Logs', dim(log)),\n row('Config', dim(file)),\n ]));\n out('');\n out(dim(' Follow the log: ') + cyan('onboarder logs -f'));\n out(dim(' Stop it: ') + cyan('onboarder stop'));\n out(dim(' Check on it: ') + cyan('onboarder status'));\n out('');\n return 0;\n}\n\n\n// ------------------------------------------------------------- lifecycle ---\n\n// Panel rows carry their own inline marker rather than the `tick`/`cross`/`dash`\n// constants: those bake in a two-column indent for standalone lines, which would\n// push the first row out of the panel's label column.\nconst MARK = { yes: (s) => paint('✓ ', 'green') + s, no: (s) => paint('– ', 'gray') + s, warn: (s) => paint('! ', 'yellow') + s };\n\n// How a live instance presents itself, in one sentence per mode. The point of\n// the sentence is the thing someone actually needs to know: can I close my\n// terminal, or will that kill it?\nconst MODE_NOTES = {\n background: 'background — survives closing the terminal',\n startup: 'started at login — the OS restarts it if it stops',\n foreground: 'foreground — stops when you press Ctrl-C or close the terminal',\n};\n\nexport async function runStatus({ flags = {}, out = console.log }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const pid = readPidFile(file);\n let running = pid && pidIsAlive(pid);\n let settings = null;\n try { settings = await readSettings(file); } catch { /* defaults are still meaningful */ }\n const portBusy = settings ? !(await portIsFree(settings.host, settings.port)) : false;\n if (pid && !running) removePidFile(file, pid);\n // The pid says whether it is up; the run record says *how* it came up, which\n // is what tells someone whether closing their terminal will kill it.\n const info = running ? readRunInfo(file) : null;\n const result = {\n running: Boolean(running || portBusy),\n pid: running ? pid : null,\n port: settings ? `${settings.host}:${settings.port}` : null,\n portBusy,\n managed: Boolean(running),\n configFile: file,\n mode: running ? (info?.mode || 'foreground') : null,\n url: running ? (info?.url || (settings ? serverUrls(settings).local : null)) : null,\n uptimeMs: running && info?.startedAt ? Date.now() - Date.parse(info.startedAt) : null,\n log: running && info?.log ? info.log : null,\n startup: (await startupStatus()).installed,\n };\n if (flags.json) {\n out(JSON.stringify(result, null, 2));\n } else {\n out('');\n out(panel('Onboarder status', [\n row('State', running\n ? MARK.yes(`Running (PID ${pid})`)\n : portBusy\n ? MARK.warn(`Port busy — ${result.port}, but no Onboarder process record`)\n : MARK.no('Stopped')),\n ...(running ? [\n row('URL', cyan(result.url || '')),\n row('Mode', MODE_NOTES[result.mode] || MODE_NOTES.foreground),\n ...(result.uptimeMs ? [row('Uptime', humanDuration(result.uptimeMs))] : []),\n ...(result.log ? [row('Logs', dim(result.log))] : []),\n ] : []),\n row('Config', dim(file)),\n row('At login', result.startup ? MARK.yes('Enabled') : MARK.no('Not enabled — `onboarder start startup install`')),\n ...(result.portBusy && !running\n ? [hint('Inspect the listener with `ss -ltnp` or `lsof -i :' + settings.port + '` before stopping another process.')]\n : []),\n ]));\n out('');\n }\n return 0;\n}\n\n// \"3d 4h\", \"12m 5s\" — coarse on purpose. Precision past the second is noise on\n// something a person glances at.\nexport function humanDuration(ms) {\n const total = Math.max(0, Math.floor(ms / 1000));\n const days = Math.floor(total / 86400);\n const hours = Math.floor((total % 86400) / 3600);\n const minutes = Math.floor((total % 3600) / 60);\n const seconds = total % 60;\n if (days) return `${days}d ${hours}h`;\n if (hours) return `${hours}h ${minutes}m`;\n if (minutes) return `${minutes}m ${seconds}s`;\n return `${seconds}s`;\n}\n\nfunction waitForExit(pid, timeoutMs = 5000) {\n return new Promise((resolve) => {\n const started = Date.now();\n const poll = () => {\n if (!pidIsAlive(pid)) return resolve(true);\n if (Date.now() - started >= timeoutMs) return resolve(false);\n setTimeout(poll, 100);\n };\n poll();\n });\n}\n\nexport async function runStop({ flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const pid = readPidFile(file);\n if (!pid) {\n const settings = await readSettings(file);\n const portBusy = !(await portIsFree(settings.host, settings.port));\n if (flags.json) out(JSON.stringify({ stopped: false, reason: portBusy ? 'unmanaged busy port' : 'not running', port: `${settings.host}:${settings.port}` }, null, 2));\n else if (portBusy) {\n out(`${warn('!')}Port busy ${settings.host}:${settings.port} — no Onboarder process record.`);\n out(dim(' Inspect it with `ss -ltnp` or `lsof -i :' + settings.port + '`; `onboarder stop` will not kill an unmanaged process.'));\n } else {\n out(`${dash}Not running.`);\n }\n return portBusy ? 1 : 0;\n }\n if (!pidIsAlive(pid)) {\n removePidFile(file, pid);\n if (flags.json) out(JSON.stringify({ stopped: true, pid, stale: true }, null, 2));\n else out(tick + `Removed stale process record for PID ${pid}.`);\n return 0;\n }\n try {\n process.kill(pid, 'SIGTERM');\n } catch (error) {\n if (error?.code !== 'ESRCH') throw error;\n }\n const stopped = await waitForExit(pid);\n if (!stopped && pidIsAlive(pid)) {\n err(` PID ${pid} did not stop after SIGTERM.`);\n err(dim(' Check it with `ps -p ' + pid + ' -f`, then stop it only if it really is Onboarder.'));\n return 1;\n }\n removePidFile(file, pid);\n if (flags.json) out(JSON.stringify({ stopped: true, pid }, null, 2));\n else out(tick + `Stopped Onboarder (PID ${pid}).`);\n return 0;\n}\n\nexport async function runRestart(options: Record<string, any> = {}) {\n const file = options.flags?.config || configPath();\n const pid = readPidFile(file);\n if (pid && pidIsAlive(pid)) {\n const stopped = await runStop(options);\n if (stopped !== 0) return stopped;\n } else if (pid) {\n removePidFile(file, pid);\n }\n return runStart(options);\n}\n\n// ----------------------------------------------------------------- logs ---\n\n// `onboarder logs` — the answer to \"it is running in the background, what is it\n// doing?\". Prints the tail of the same file the background child writes, and\n// `-f` follows it. Line-oriented and level-colored, so a wall of request logs\n// stays scannable instead of being one undifferentiated block.\nexport async function runLogs({ flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const log = logPath(file);\n const lines = flags.lines === undefined ? 40 : Math.max(1, Number(flags.lines) || 40);\n if (!await logExists(log)) {\n if (flags.json) out(JSON.stringify({ log, exists: false, lines: [] }, null, 2));\n else {\n err(` No log file yet at ${log}.`);\n err(dim(' A foreground `onboarder start` prints to the terminal; only `onboarder start background` writes this file.'));\n }\n return flags.json ? 0 : 1;\n }\n if (!flags.follow) {\n const tail = await tailLog(log, lines);\n if (flags.json) { out(JSON.stringify({ log, exists: true, lines: tail }, null, 2)); return 0; }\n out('');\n out(bold(` ${log}`) + dim(` (last ${tail.length} of ${lines})`));\n out('');\n for (const line of tail) out(' ' + line);\n out('');\n return 0;\n }\n if (flags.json) { err(' --follow and --json do not combine; pick one.'); return 2; }\n out('');\n out(bold(` Following ${log}`) + dim(' (Ctrl-C to stop)'));\n out('');\n const stop = followLog(log, (line) => out(' ' + line), { from: 'start' });\n const finish = () => { stop(); process.exit(0); };\n process.once('SIGINT', finish);\n await new Promise((resolve) => process.once('exit', resolve));\n return 0;\n}\n\n// -------------------------------------------------------------- startup ---\n\n// `onboarder start startup` — run at login, not just right now. Three verbs\n// because the three actions are genuinely different: `install` writes the\n// artifact and hands it to the OS, `remove` takes it back out, `status` only\n// looks. `install` also starts it once so the person is not left waiting for the\n// next reboot to find out whether it worked.\nexport async function runStartup(action = 'status', { flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const target = startupTarget();\n const log = logPath(file);\n\n if (action === 'install' || action === 'enable' || action === 'on') {\n const result = await installStartup({ configFile: file, log, target });\n if (!result.ok) {\n err(bad(' Could not install the startup entry.'));\n err(' ' + (result.reason || result.output || result.error || 'unknown error'));\n return 1;\n }\n out(tick + `Onboarder will start at login (${target.hint}).`);\n out(kv('Startup file', result.path));\n if (result.output) out(dim(' ' + result.output.split('\\n').slice(-2).join('\\n ')));\n out('');\n out(dim(' Start it right now too: ') + cyan('onboarder start background'));\n out(dim(' Turn it off again: ') + cyan('onboarder start startup remove'));\n out('');\n return 0;\n }\n\n if (action === 'remove' || action === 'disable' || action === 'off' || action === 'uninstall') {\n const status = await startupStatus(target);\n if (!status.installed) {\n out(dash + 'No startup entry is installed — nothing to remove.');\n return 0;\n }\n const result = await removeStartup({ target });\n if (!result.ok) { err(bad(' Could not remove the startup entry: ' + (result.reason || 'unknown error'))); return 1; }\n out(tick + 'Startup entry removed. A running server is untouched — use `onboarder stop` for that.');\n out(kv('Removed', result.path));\n out('');\n return 0;\n }\n\n if (action === 'status' || action === undefined) {\n const status = await startupStatus(target);\n if (flags.json) { out(JSON.stringify(status, null, 2)); return status.installed ? 0 : 1; }\n out('');\n out(panel('Onboarder at login', [\n row('State', status.installed\n ? (status.active ? MARK.yes('Enabled and running') : MARK.warn('Enabled, not running'))\n : MARK.no('Not enabled')),\n row('How', status.detail),\n ...(status.path ? [row('File', dim(status.path))] : []),\n ...(status.supported ? [hint(status.installed\n ? 'Remove it with `onboarder start startup remove`.'\n : 'Enable it with `onboarder start startup install`.')] : []),\n ]));\n out('');\n return status.installed ? 0 : 1;\n }\n\n throw new Error('Usage: onboarder start startup [install|remove|status]');\n}\n\n// --------------------------------------------------------------- config ---\n\n// Keys `config set` may touch — the same allow-list the HTTP API enforces, so\n// neither surface can smuggle in a key the schema does not know.\nconst SETTABLE = {\n mode: (v) => { if (!['local', 'self-hosted'].includes(v)) throw new Error('mode must be \"local\" or \"self-hosted\".'); return v; },\n host: (v) => v,\n port: (v) => { const n = Number(v); if (!Number.isInteger(n) || n < 1 || n > 65535) throw new Error('port must be 1-65535.'); return n; },\n domain: (v) => v,\n https: (v) => ['true', 'yes', '1', 'on'].includes(String(v).toLowerCase()),\n autoOpen: (v) => ['true', 'yes', '1', 'on'].includes(String(v).toLowerCase()),\n 'account.name': (v) => v,\n 'account.email': (v) => v,\n 'account.provider': (v) => v,\n 'account.baseUrl': (v) => v,\n 'account.model': (v) => v,\n 'tunnel.cloudflare': (v) => ['true', 'yes', '1', 'on'].includes(String(v).toLowerCase()),\n 'tunnel.tailscale': (v) => ['true', 'yes', '1', 'on'].includes(String(v).toLowerCase()),\n};\n\nfunction dig(obj, dotted) {\n return dotted.split('.').reduce((o, k) => (o == null ? undefined : o[k]), obj);\n}\n\nfunction bury(obj, dotted, value) {\n const keys = dotted.split('.');\n let o = obj;\n for (const k of keys.slice(0, -1)) o = o[k] = o[k] && typeof o[k] === 'object' ? o[k] : {};\n o[keys.at(-1)] = value;\n}\n\n\nexport async function runConfig(sub, args, { flags = {}, out = console.log }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n switch (sub) {\n case 'path':\n out(file);\n return 0;\n case 'show': {\n const settings = await readSettings(file);\n if (flags.json) {\n const pub: ReturnType<typeof publicSettings> & { accessKey?: string } = publicSettings(settings);\n if (flags.reveal) pub.accessKey = settings.accessKey || null;\n out(JSON.stringify({ configFile: file, ...pub }, null, 2));\n return 0;\n }\n const urls = serverUrls(settings);\n out(bold(' ' + file));\n out(kv('Mode', settings.mode));\n out(kv('Bind', `${settings.host}:${settings.port}`));\n if (settings.domain) out(kv('Domain', settings.domain));\n out(kv('HTTPS', settings.https ? `enabled — ${urls.domain}` : settings.domain ? 'disabled (plain HTTP)' : 'no domain configured'));\n out(kv('Local', urls.local));\n if (urls.network) out(kv('Network', urls.network));\n if (urls.domain) out(kv('Public', urls.domain));\n if (settings.mode === 'self-hosted') {\n out(kv('Access key', flags.reveal ? (settings.accessKey || '(none)') : maskAccessKey(settings.accessKey)));\n if (!flags.reveal) out(dim(' `onboarder config show --reveal` prints it — you are on this machine, after all.'));\n }\n const who = [settings.account.name, settings.account.email].filter(Boolean).join(' · ');\n if (who) out(kv('Profile', who));\n if (settings.account.baseUrl) {\n out(kv('AI', `${settings.account.provider} — ${settings.account.baseUrl}${settings.account.model ? ' — ' + settings.account.model : ''}`));\n }\n const status = tunnelStatus(settings);\n for (const name of ['cloudflare', 'tailscale']) {\n if (status[name].enabled) {\n out(kv(name, status[name].installed ? status[name].command : 'enabled, CLI missing — ' + status[name].install));\n }\n }\n out(kv('Auto-open', settings.autoOpen ? 'yes' : 'no'));\n return 0;\n }\n case 'get': {\n const [key] = args;\n if (!key || (!(key in SETTABLE) && key !== 'accessKey')) throw new Error('Unknown key. Known: ' + [...Object.keys(SETTABLE), 'accessKey'].join(', '));\n const settings = await readSettings(file);\n const value = key === 'accessKey' ? maskAccessKey(settings.accessKey) : dig(settings, key);\n out(String(value ?? ''));\n return 0;\n }\n case 'set': {\n const [key, ...rest] = args;\n const raw = rest.join(' ');\n if (!key || !(key in SETTABLE)) throw new Error('Unknown or unsettable key \"' + key + '\". Known: ' + Object.keys(SETTABLE).join(', ') + '\\nThe access key is managed by `onboarder config key …`.');\n if (!raw) throw new Error('Missing value: onboarder config set ' + key + ' <value>');\n const value = SETTABLE[key](raw);\n const current = await readSettings(file);\n const next = { ...current, account: { ...current.account }, tunnel: { ...current.tunnel } };\n bury(next, key, value);\n await writeSettings(next, file); // normalizeSettings validates the result\n out(tick + key + ' = ' + (typeof value === 'boolean' ? String(value) : value));\n if (['host', 'port'].includes(key)) out(dim(' Restart the server for this to take effect.'));\n return 0;\n }\n default:\n throw new Error('Usage: onboarder config <show|get|set|path|reset|key>');\n }\n}\n\n\n// Config surgery that did not fit in `set`: full reset, and the access key,\n// which gets its own verb because it is the one value that is shown once and\n// never round-trips through an API.\nexport async function runConfigKey(action, args, { flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const current = await readSettings(file);\n if (action === 'rotate') {\n const { generateAccessKey } = await import('../server/config.js');\n const key = generateAccessKey();\n await writeSettings({ ...current, accessKey: key }, file);\n out(tick + 'Rotated. The old key is dead this second — settings are re-read per request.');\n out(' ' + bold(key));\n out(dim(' Shown once. Distribute it to your devices.'));\n return 0;\n }\n if (action === 'show') {\n out(current.accessKey || '(no key set)');\n return 0;\n }\n if (action === 'set') {\n const value = args.join(' ').trim();\n if (value.length < 16) throw new Error('Access keys are at least 16 characters.');\n await writeSettings({ ...current, accessKey: value }, file);\n out(tick + 'Access key updated.');\n return 0;\n }\n throw new Error('Usage: onboarder config key <rotate|show|set <value>>');\n}\n\nexport async function runConfigReset({ flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n if (!flags.yes) {\n err(' This rewrites ' + file + ' with factory defaults (local mode, port 4310, no key).');\n err(' Re-run with --yes to confirm.');\n return 1;\n }\n await writeSettings({ ...DEFAULT_SETTINGS }, file);\n out(tick + 'Reset to defaults: ' + file);\n return 0;\n}\n\n\n// --------------------------------------------------------------- doctor ---\n\n// Diagnose without mutating. Every check reports { id, ok, required, detail }\n// and the command exits non-zero if any *required* check failed — the same\n// shape `doctor --json` hands to scripts.\nexport async function runDoctor({ flags = {}, out = console.log }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const checks = [];\n\n checks.push({\n id: 'node', ok: Number(process.versions.node.split('.')[0]) >= 20, required: true,\n detail: `v${process.versions.node} (needs ≥ 20)`,\n });\n\n let settings = null;\n try {\n settings = await readSettings(file);\n checks.push({ id: 'config', ok: true, required: true, detail: file });\n } catch (e) {\n checks.push({ id: 'config', ok: false, required: true, detail: `${file} — ${e.message}` });\n }\n\n const dir = file.slice(0, file.lastIndexOf('/'));\n let dirOk = true;\n try { await fsp.access(dir, fs.constants.W_OK); } catch { dirOk = false; }\n checks.push({ id: 'config-dir', ok: dirOk, required: true, detail: dirOk ? dir + ' is writable' : dir + ' is NOT writable' });\n\n if (settings) {\n const free = await portIsFree(settings.host, settings.port);\n checks.push({\n id: 'port', ok: free, required: false,\n detail: free ? `${settings.host}:${settings.port} is free` : `${settings.host}:${settings.port} is already in use (running already?)`,\n });\n if (settings.mode === 'self-hosted') {\n checks.push({\n id: 'access-key', ok: Boolean(settings.accessKey), required: true,\n detail: settings.accessKey ? 'set — ' + maskAccessKey(settings.accessKey) : 'MISSING — the API refuses every call until one is set',\n });\n const loopback = ['127.0.0.1', 'localhost', '::1', '[::1]'].includes(settings.host);\n checks.push({\n id: 'domain', ok: true, required: false,\n detail: settings.domain || (loopback ? '(none — a tunnel or local reverse proxy provides the name)' : '(none — visitors can connect by server IP)'),\n });\n if (settings.https) {\n const readiness = await httpsReadiness(settings, { configFile: file });\n for (const check of readiness.checks.slice(1).filter((item) => item.id !== 'caddy')) {\n checks.push({ ...check, required: check.id !== 'dns-target' });\n }\n }\n }\n }\n\n for (const name of ['git', 'cloudflared', 'tailscale', 'caddy']) {\n const wanted = name === 'git'\n || (name === 'caddy' && settings?.https)\n || (settings && settings.tunnel?.[name === 'cloudflared' ? 'cloudflare' : 'tailscale']);\n const found = Boolean(findOnPath(name));\n checks.push({\n id: name,\n ok: found || !wanted,\n required: name === 'git' || (name === 'caddy' && settings?.https),\n detail: found ? 'installed' : wanted ? 'not installed — ' + installHint(name) : 'not installed (not needed for your settings)',\n });\n }\n\n if (flags.json) {\n out(JSON.stringify({ ok: checks.every((c) => c.ok || !c.required), checks }, null, 2));\n } else {\n out('');\n out(bold(' Onboarder doctor'));\n for (const c of checks) {\n const mark = c.ok ? tick : c.required ? cross : dash;\n out(`${mark}${c.id} — ${c.detail}`);\n }\n out('');\n }\n return checks.every((c) => c.ok || !c.required) ? 0 : 1;\n}\n\nfunction portIsFree(host, port) {\n return new Promise((resolve) => {\n const probe = net.createServer();\n probe.once('error', () => resolve(false));\n probe.listen(port, host, () => probe.close(() => resolve(true)));\n });\n}\n\n// ------------------------------------------------------------------ https ---\n\nexport async function runHttps(action = 'status', { flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const file = flags.config || configPath();\n const settings = await readSettings(file);\n const status = httpsStatus(settings, file);\n if (action === 'status') {\n if (flags.json) out(JSON.stringify(status, null, 2));\n else {\n out('');\n out(bold(' Onboarder HTTPS'));\n out(kv('Enabled', status.enabled ? 'yes' : 'no'));\n out(kv('Domain', status.domain || '(not configured)'));\n out(kv('URL', status.url || '(none)'));\n out(kv('Caddy', status.caddyInstalled ? status.caddyVersion : 'not installed'));\n out(kv('Caddyfile', status.caddyfile));\n if (status.enabled) out(dim(' `onboarder https check` verifies DNS and ports before issuance.'));\n out('');\n }\n return status.enabled ? 0 : 1;\n }\n if (action === 'check') {\n const readiness = await httpsReadiness(settings, { configFile: file });\n if (flags.json) out(JSON.stringify(readiness, null, 2));\n else {\n out('');\n out(bold(' HTTPS readiness'));\n for (const check of readiness.checks) out(`${check.ok ? tick : check.required ? cross : dash}${check.id} — ${check.detail}`);\n if (!readiness.ok) {\n out('');\n out(warn(' Fix the required items, then run `onboarder https setup` again.'));\n out(dim(' DNS: point an A/AAAA record to this VPS. Firewall: allow inbound 80 and 443.'));\n }\n out('');\n }\n return readiness.ok ? 0 : 1;\n }\n if (action === 'setup' || action === 'start') {\n const readiness = await httpsReadiness(settings, { configFile: file });\n if (!readiness.ok) {\n err(bad(' HTTPS setup is not ready:'));\n for (const check of readiness.checks.filter((item) => item.required && !item.ok)) err(cross + check.id + ' — ' + check.detail);\n err(' Point DNS at this VPS, allow inbound TCP 80/443, install Caddy, then retry.');\n return 1;\n }\n const caddyfile = await writeCaddyfile(settings, file);\n out(dim(' Caddyfile: ' + caddyfile));\n await caddyValidate(settings, file);\n\n // Ubuntu's package usually leaves Caddy running as a service. Reload first\n // so repeat setup is idempotent and does not mistake Caddy for a foreign\n // listener. Reload talks only to Caddy's local admin endpoint and never\n // stops an unknown process.\n let result;\n let reloaded = false;\n try {\n result = caddyRun(settings, file, 'reload');\n reloaded = true;\n } catch {\n try {\n result = caddyRun(settings, file, 'start');\n } catch (error) {\n err(bad(' Caddy could not start: ' + (error.message || error)));\n if (process.platform !== 'win32') {\n err(' On Ubuntu, start the packaged service once:');\n err(' sudo systemctl enable --now caddy');\n err(' Then run `onboarder https setup` again.');\n }\n return 1;\n }\n }\n out(tick + (reloaded ? 'Caddy reloaded. It is using' : 'Caddy started. It is using') + ' https://' + settings.domain + '.');\n out(' Public URL https://' + settings.domain);\n out(dim(' Upstream http://127.0.0.1:' + settings.port));\n if (result.output) out(dim(' ' + result.output.split('\\n').slice(-3).join('\\n ')));\n return 0;\n }\n if (action === 'stop') {\n if (!status.caddyInstalled) { err(' Caddy is not installed.'); return 1; }\n caddyRun(settings, file, 'stop');\n out(tick + 'Caddy stopped. The Onboarder HTTP server is unchanged.');\n return 0;\n }\n throw new Error('Usage: onboarder https <check|setup|start|stop|status>');\n}\n\n// --------------------------------------------------------------- tunnel ---\n\nexport async function runTunnel(kind, { flags = {}, out = console.log, err = console.error }: Record<string, any> = {}) {\n const settings = await readSettings(flags.config || configPath());\n const target = `http://127.0.0.1:${settings.port}`;\n if (kind === 'tailscale') {\n if (!findOnPath('tailscale')) {\n err(' tailscale is not installed — ' + installHint('tailscale'));\n return 1;\n }\n const cmd = tailscaleCommand(settings);\n out(' ' + cmd);\n const { spawnSync } = await import('node:child_process');\n const r = spawnSync(cmd, { shell: true, stdio: 'inherit' });\n if (r.status === 0) {\n out(tick + 'Tailscale is serving ' + target + ' over your tailnet (https://<machine>.<tailnet>.ts.net).');\n out(dim(' `tailscale serve status` to verify, `onboarder doctor` to re-check.'));\n }\n return r.status ?? 1;\n }\n if (kind === 'cloudflare') {\n if (!findOnPath('cloudflared')) {\n err(' cloudflared is not installed — ' + installHint('cloudflared'));\n return 1;\n }\n const cmd = cloudflareCommand(settings);\n out(dim(' $ ' + cmd));\n out(dim(' Ctrl-C stops the tunnel; the server keeps running.\\n'));\n // Quick tunnels print their random name on stderr; surface just that line\n // plus everything when --verbose, so the default output is one useful URL.\n const child = spawn('cloudflared', ['tunnel', '--url', target], { stdio: ['ignore', 'pipe', 'pipe'] });\n let announced = false;\n child.stderr.on('data', (chunk) => {\n const text = String(chunk);\n const m = text.match(/https:\\/\\/[a-z0-9-]+\\.trycloudflare\\.com/);\n if (m && !announced) {\n announced = true;\n out(tick + 'Public URL: ' + bold(m[0]));\n out(dim(' Anyone with the URL still needs the access key: ' + m[0]));\n }\n if (flags.verbose) process.stderr.write(text);\n });\n child.stdout.on('data', (d) => { if (flags.verbose) process.stdout.write(d); });\n const stop = () => child.kill('SIGINT');\n process.once('SIGINT', stop);\n return new Promise((resolve) => {\n child.on('close', (code) => {\n process.removeListener('SIGINT', stop);\n if (!announced && code !== 0) err(' cloudflared exited without printing a URL — re-run with --verbose to see why.');\n resolve(code ?? 0);\n });\n });\n }\n throw new Error('Usage: onboarder tunnel <cloudflare|tailscale>');\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function loadHistory(repo: any, { force }?: Record<string, any>): Promise<any>;
|
|
2
|
+
export declare function log(repo: any, { limit }?: Record<string, any>): Promise<string>;
|
|
3
|
+
export declare function blame(repo: any, { target, limit }?: Record<string, any>): Promise<string>;
|
|
4
|
+
export declare function coupling(repo: any): string;
|
|
5
|
+
export declare function clusters(repo: any, { limit }?: Record<string, any>): string;
|
|
6
|
+
export declare function blast(repo: any, { target, limit }?: Record<string, any>): string;
|
|
7
|
+
export declare function hotspots(repo: any, { limit }?: Record<string, any>): Promise<string>;
|
|
8
|
+
export declare function diagram(repo: any, { target }?: Record<string, any>): string;
|
|
9
|
+
export declare function layerDiagram(repo: any): string;
|
|
10
|
+
export declare function graph(repo: any, { target, depth, direction }?: Record<string, any>): string;
|
|
11
|
+
export declare function docs(repo: any, { target }?: Record<string, any>): string;
|
|
12
|
+
export declare function writeDocs(repo: any, target?: string): Promise<string>;
|
|
13
|
+
export declare function symbols(repo: any, { target }?: Record<string, any>): string;
|
|
14
|
+
export declare function risks(repo: any): string;
|