browser4-cli 4.12.0 → 4.12.2
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/bin/browser4-cli-darwin-arm64 +0 -0
- package/bin/browser4-cli-darwin-x64 +0 -0
- package/bin/browser4-cli-linux-arm64 +0 -0
- package/bin/browser4-cli-linux-musl-arm64 +0 -0
- package/bin/browser4-cli-linux-musl-x64 +0 -0
- package/bin/browser4-cli-linux-x64 +0 -0
- package/bin/browser4-cli-win32-x64.exe +0 -0
- package/package.json +1 -1
- package/scripts/README.md +4 -3
- package/scripts/build-all-platforms.ps1 +104 -104
- package/scripts/enumerate-help.ps1 +382 -382
- package/scripts/install-browser4-cli.ps1 +812 -812
- package/scripts/tests/install-browser4-cli.tests.ps1 +476 -462
|
@@ -1,382 +1,382 @@
|
|
|
1
|
-
#!/usr/bin/env pwsh
|
|
2
|
-
<#
|
|
3
|
-
.SYNOPSIS
|
|
4
|
-
Enumerates every browser4-cli command and subcommand, prints help
|
|
5
|
-
information, and saves output to categorized files.
|
|
6
|
-
.DESCRIPTION
|
|
7
|
-
This script discovers all browser4-cli commands (including hidden ones),
|
|
8
|
-
generates detailed help for each, and organizes the output into:
|
|
9
|
-
- A top-level help overview
|
|
10
|
-
- One file per command (with numbered prefixes for ordering)
|
|
11
|
-
- Prefix group overviews (swarm, agent, htmlsnapshot, crawl, snapshot)
|
|
12
|
-
- An INDEX.md for easy navigation
|
|
13
|
-
|
|
14
|
-
Output is saved to: <repo-root>/cli/help-output/
|
|
15
|
-
.PARAMETER Binary
|
|
16
|
-
Path to the browser4-cli binary. Defaults to the release build in the
|
|
17
|
-
workspace: cli/browser4-cli/target/release/browser4-cli.exe
|
|
18
|
-
.PARAMETER OutDir
|
|
19
|
-
Directory for help output. Defaults to cli/help-output/ under the repo root.
|
|
20
|
-
.EXAMPLE
|
|
21
|
-
.\enumerate-help.ps1
|
|
22
|
-
.\enumerate-help.ps1 -Binary "C:\tools\browser4-cli.exe" -OutDir ".\docs\cli-help"
|
|
23
|
-
#>
|
|
24
|
-
|
|
25
|
-
param(
|
|
26
|
-
[string]$Binary,
|
|
27
|
-
[string]$OutDir
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
$ErrorActionPreference = "Stop"
|
|
31
|
-
|
|
32
|
-
# ---- Resolve paths ----------------------------------------------------------
|
|
33
|
-
$RepoRoot = Resolve-Path "$PSScriptRoot\..\.."
|
|
34
|
-
|
|
35
|
-
if (-not $Binary) {
|
|
36
|
-
$Binary = Join-Path $RepoRoot "cli\browser4-cli\target\release\browser4-cli.exe"
|
|
37
|
-
}
|
|
38
|
-
if (-not $OutDir) {
|
|
39
|
-
$OutDir = Join-Path $RepoRoot "cli\help-output"
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (-not (Test-Path $Binary)) {
|
|
43
|
-
Write-Error "browser4-cli binary not found at: $Binary"
|
|
44
|
-
Write-Host "Build it first: cd cli/browser4-cli && cargo build --release"
|
|
45
|
-
exit 1
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
# Ensure output directory exists
|
|
49
|
-
$null = New-Item -ItemType Directory -Force -Path $OutDir
|
|
50
|
-
|
|
51
|
-
# Normalize binary path for reliable invocation
|
|
52
|
-
$Binary = Resolve-Path $Binary
|
|
53
|
-
|
|
54
|
-
Write-Host "browser4-cli binary : $Binary"
|
|
55
|
-
Write-Host "Output directory : $OutDir"
|
|
56
|
-
Write-Host ""
|
|
57
|
-
|
|
58
|
-
# ---- Helper: invoke the CLI and capture output ------------------------------
|
|
59
|
-
function Invoke-Cli {
|
|
60
|
-
param([string[]]$Arguments)
|
|
61
|
-
$psi = [System.Diagnostics.ProcessStartInfo]::new()
|
|
62
|
-
$psi.FileName = $Binary
|
|
63
|
-
$psi.Arguments = $Arguments -join ' '
|
|
64
|
-
$psi.RedirectStandardOutput = $true
|
|
65
|
-
$psi.RedirectStandardError = $true
|
|
66
|
-
$psi.UseShellExecute = $false
|
|
67
|
-
$psi.CreateNoWindow = $true
|
|
68
|
-
$psi.StandardOutputEncoding = [System.Text.Encoding]::UTF8
|
|
69
|
-
$psi.StandardErrorEncoding = [System.Text.Encoding]::UTF8
|
|
70
|
-
|
|
71
|
-
$proc = [System.Diagnostics.Process]::new()
|
|
72
|
-
$proc.StartInfo = $psi
|
|
73
|
-
$null = $proc.Start()
|
|
74
|
-
$stdout = $proc.StandardOutput.ReadToEnd()
|
|
75
|
-
$stderr = $proc.StandardError.ReadToEnd()
|
|
76
|
-
$proc.WaitForExit(10000) | Out-Null
|
|
77
|
-
|
|
78
|
-
# Combine: stdout first, then stderr (stderr carries errors / tips)
|
|
79
|
-
$result = $stdout
|
|
80
|
-
if ($stderr.Trim().Length -gt 0) {
|
|
81
|
-
if ($result.Length -gt 0) { $result += "`n" }
|
|
82
|
-
$result += $stderr
|
|
83
|
-
}
|
|
84
|
-
return $result.TrimEnd()
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
# ---- Command definitions ----------------------------------------------------
|
|
88
|
-
|
|
89
|
-
# Each entry: @{ Name = "<internal-name>"; HelpArgs = @("<arg1>", ...) }
|
|
90
|
-
#
|
|
91
|
-
# For simple commands (no spaced public form), use:
|
|
92
|
-
# HelpArgs = @("--help", "<internal-name>")
|
|
93
|
-
#
|
|
94
|
-
# For commands with a spaced public form, use:
|
|
95
|
-
# HelpArgs = @("<prefix>", "<sub>", "--help")
|
|
96
|
-
# Because `browser4-cli --help agent-run` is rejected; must use
|
|
97
|
-
# `browser4-cli agent run --help` instead.
|
|
98
|
-
|
|
99
|
-
$Commands = @(
|
|
100
|
-
# -- Browser sessions --
|
|
101
|
-
@{ Name = "open"; HelpArgs = @("--help", "open") },
|
|
102
|
-
@{ Name = "attach"; HelpArgs = @("--help", "attach") },
|
|
103
|
-
@{ Name = "close"; HelpArgs = @("--help", "close") },
|
|
104
|
-
@{ Name = "list"; HelpArgs = @("--help", "list") },
|
|
105
|
-
@{ Name = "close-all"; HelpArgs = @("--help", "close-all") },
|
|
106
|
-
@{ Name = "kill-all"; HelpArgs = @("--help", "kill-all") },
|
|
107
|
-
@{ Name = "stop"; HelpArgs = @("--help", "stop") },
|
|
108
|
-
@{ Name = "status"; HelpArgs = @("--help", "status") },
|
|
109
|
-
@{ Name = "doctor"; HelpArgs = @("--help", "doctor") },
|
|
110
|
-
|
|
111
|
-
# -- Navigation --
|
|
112
|
-
@{ Name = "goto"; HelpArgs = @("--help", "goto") },
|
|
113
|
-
@{ Name = "go-back"; HelpArgs = @("--help", "go-back") },
|
|
114
|
-
@{ Name = "go-forward"; HelpArgs = @("--help", "go-forward") },
|
|
115
|
-
@{ Name = "reload"; HelpArgs = @("--help", "reload") },
|
|
116
|
-
|
|
117
|
-
# -- Keyboard --
|
|
118
|
-
@{ Name = "press"; HelpArgs = @("--help", "press") },
|
|
119
|
-
@{ Name = "type"; HelpArgs = @("--help", "type") },
|
|
120
|
-
@{ Name = "keydown"; HelpArgs = @("--help", "keydown") },
|
|
121
|
-
@{ Name = "keyup"; HelpArgs = @("--help", "keyup") },
|
|
122
|
-
@{ Name = "fill"; HelpArgs = @("--help", "fill") },
|
|
123
|
-
|
|
124
|
-
# -- Mouse --
|
|
125
|
-
@{ Name = "click"; HelpArgs = @("--help", "click") },
|
|
126
|
-
@{ Name = "dblclick"; HelpArgs = @("--help", "dblclick") },
|
|
127
|
-
@{ Name = "hover"; HelpArgs = @("--help", "hover") },
|
|
128
|
-
@{ Name = "drag"; HelpArgs = @("--help", "drag") },
|
|
129
|
-
@{ Name = "mousemove"; HelpArgs = @("--help", "mousemove") },
|
|
130
|
-
@{ Name = "mousedown"; HelpArgs = @("--help", "mousedown") },
|
|
131
|
-
@{ Name = "mouseup"; HelpArgs = @("--help", "mouseup") },
|
|
132
|
-
@{ Name = "mousewheel"; HelpArgs = @("--help", "mousewheel") },
|
|
133
|
-
@{ Name = "scroll"; HelpArgs = @("--help", "scroll") },
|
|
134
|
-
|
|
135
|
-
# -- Core --
|
|
136
|
-
@{ Name = "snapshot"; HelpArgs = @("--help", "snapshot") },
|
|
137
|
-
@{ Name = "get"; HelpArgs = @("--help", "get") },
|
|
138
|
-
@{ Name = "eval"; HelpArgs = @("--help", "eval") },
|
|
139
|
-
@{ Name = "wait"; HelpArgs = @("--help", "wait") },
|
|
140
|
-
@{ Name = "select"; HelpArgs = @("--help", "select") },
|
|
141
|
-
@{ Name = "check"; HelpArgs = @("--help", "check") },
|
|
142
|
-
@{ Name = "uncheck"; HelpArgs = @("--help", "uncheck") },
|
|
143
|
-
@{ Name = "dialog-accept"; HelpArgs = @("--help", "dialog-accept") },
|
|
144
|
-
@{ Name = "dialog-dismiss"; HelpArgs = @("--help", "dialog-dismiss") },
|
|
145
|
-
@{ Name = "resize"; HelpArgs = @("--help", "resize") },
|
|
146
|
-
@{ Name = "delete-data"; HelpArgs = @("--help", "delete-data") },
|
|
147
|
-
@{ Name = "batch"; HelpArgs = @("--help", "batch") },
|
|
148
|
-
@{ Name = "generate-locator"; HelpArgs = @("--help", "generate-locator") },
|
|
149
|
-
|
|
150
|
-
# -- Export --
|
|
151
|
-
@{ Name = "screenshot"; HelpArgs = @("--help", "screenshot") },
|
|
152
|
-
@{ Name = "pdf"; HelpArgs = @("--help", "pdf") },
|
|
153
|
-
|
|
154
|
-
# -- Tabs --
|
|
155
|
-
@{ Name = "tab-list"; HelpArgs = @("--help", "tab-list") },
|
|
156
|
-
@{ Name = "tab-new"; HelpArgs = @("--help", "tab-new") },
|
|
157
|
-
@{ Name = "tab-close"; HelpArgs = @("--help", "tab-close") },
|
|
158
|
-
@{ Name = "tab-select"; HelpArgs = @("--help", "tab-select") },
|
|
159
|
-
|
|
160
|
-
# -- Storage --
|
|
161
|
-
@{ Name = "state-save"; HelpArgs = @("--help", "state-save") },
|
|
162
|
-
@{ Name = "state-load"; HelpArgs = @("--help", "state-load") },
|
|
163
|
-
@{ Name = "cookie-list"; HelpArgs = @("--help", "cookie-list") },
|
|
164
|
-
@{ Name = "cookie-get"; HelpArgs = @("--help", "cookie-get") },
|
|
165
|
-
@{ Name = "cookie-set"; HelpArgs = @("--help", "cookie-set") },
|
|
166
|
-
@{ Name = "cookie-delete"; HelpArgs = @("--help", "cookie-delete") },
|
|
167
|
-
@{ Name = "cookie-clear"; HelpArgs = @("--help", "cookie-clear") },
|
|
168
|
-
@{ Name = "localstorage-list"; HelpArgs = @("--help", "localstorage-list") },
|
|
169
|
-
@{ Name = "localstorage-get"; HelpArgs = @("--help", "localstorage-get") },
|
|
170
|
-
@{ Name = "localstorage-set"; HelpArgs = @("--help", "localstorage-set") },
|
|
171
|
-
@{ Name = "localstorage-delete"; HelpArgs = @("--help", "localstorage-delete") },
|
|
172
|
-
@{ Name = "localstorage-clear"; HelpArgs = @("--help", "localstorage-clear") },
|
|
173
|
-
@{ Name = "sessionstorage-list"; HelpArgs = @("--help", "sessionstorage-list") },
|
|
174
|
-
@{ Name = "sessionstorage-get"; HelpArgs = @("--help", "sessionstorage-get") },
|
|
175
|
-
@{ Name = "sessionstorage-set"; HelpArgs = @("--help", "sessionstorage-set") },
|
|
176
|
-
@{ Name = "sessionstorage-delete"; HelpArgs = @("--help", "sessionstorage-delete") },
|
|
177
|
-
@{ Name = "sessionstorage-clear"; HelpArgs = @("--help", "sessionstorage-clear") },
|
|
178
|
-
|
|
179
|
-
# -- Agent (hidden: agent-run, agent-status, agent-result) --
|
|
180
|
-
@{ Name = "extract"; HelpArgs = @("--help", "extract") },
|
|
181
|
-
# agent-list is a standalone command, not hidden
|
|
182
|
-
@{ Name = "agent-list"; HelpArgs = @("--help", "agent-list") },
|
|
183
|
-
|
|
184
|
-
# -- Snapshot subcommands (spaced-form: htmlsnapshot *, snapshot grep) --
|
|
185
|
-
@{ Name = "snapshot-grep"; HelpArgs = @("--help", "snapshot-grep") },
|
|
186
|
-
|
|
187
|
-
# -- DOM Snapshot (base command + spaced subcommands) --
|
|
188
|
-
@{ Name = "htmlsnapshot"; HelpArgs = @("--help", "htmlsnapshot") },
|
|
189
|
-
|
|
190
|
-
# -- Crawl --
|
|
191
|
-
@{ Name = "crawl"; HelpArgs = @("--help", "crawl") },
|
|
192
|
-
|
|
193
|
-
# -- Install / Admin --
|
|
194
|
-
@{ Name = "install"; HelpArgs = @("--help", "install") },
|
|
195
|
-
@{ Name = "upgrade"; HelpArgs = @("--help", "upgrade") },
|
|
196
|
-
@{ Name = "uninstall"; HelpArgs = @("--help", "uninstall") },
|
|
197
|
-
@{ Name = "loop"; HelpArgs = @("--help", "loop") }
|
|
198
|
-
)
|
|
199
|
-
|
|
200
|
-
# Commands with spaced public forms — the CLI rejects `--help <kebab-name>`
|
|
201
|
-
# for these, so we use `<prefix> <sub> --help` instead.
|
|
202
|
-
$SpacedCommands = @(
|
|
203
|
-
# Agent subcommands (hidden)
|
|
204
|
-
@{ Name = "agent-run"; HelpArgs = @("agent", "run", "--help") },
|
|
205
|
-
@{ Name = "agent-status"; HelpArgs = @("agent", "status", "--help") },
|
|
206
|
-
@{ Name = "agent-result"; HelpArgs = @("agent", "result", "--help") },
|
|
207
|
-
|
|
208
|
-
# Swarm subcommands
|
|
209
|
-
@{ Name = "swarm-create"; HelpArgs = @("swarm", "create", "--help") },
|
|
210
|
-
@{ Name = "swarm-submit"; HelpArgs = @("swarm", "submit", "--help") },
|
|
211
|
-
@{ Name = "swarm-query"; HelpArgs = @("swarm", "query", "--help") },
|
|
212
|
-
@{ Name = "swarm-status"; HelpArgs = @("swarm", "status", "--help") },
|
|
213
|
-
@{ Name = "swarm-result"; HelpArgs = @("swarm", "result", "--help") },
|
|
214
|
-
@{ Name = "swarm-list"; HelpArgs = @("swarm", "list", "--help") },
|
|
215
|
-
|
|
216
|
-
# DOM Snapshot subcommands
|
|
217
|
-
@{ Name = "htmlsnapshot-get"; HelpArgs = @("htmlsnapshot", "get", "--help") },
|
|
218
|
-
@{ Name = "htmlsnapshot-get-all"; HelpArgs = @("htmlsnapshot", "get", "all", "--help") },
|
|
219
|
-
@{ Name = "htmlsnapshot-query"; HelpArgs = @("htmlsnapshot", "query", "--help") },
|
|
220
|
-
@{ Name = "htmlsnapshot-export"; HelpArgs = @("htmlsnapshot", "export", "--help") },
|
|
221
|
-
@{ Name = "htmlsnapshot-summary"; HelpArgs = @("htmlsnapshot", "summary", "--help") },
|
|
222
|
-
@{ Name = "htmlsnapshot-grep"; HelpArgs = @("htmlsnapshot", "grep", "--help") },
|
|
223
|
-
@{ Name = "htmlsnapshot-inspect"; HelpArgs = @("htmlsnapshot", "inspect", "--help") },
|
|
224
|
-
|
|
225
|
-
# Crawl subcommand
|
|
226
|
-
@{ Name = "crawl-list"; HelpArgs = @("crawl", "list", "--help") }
|
|
227
|
-
)
|
|
228
|
-
|
|
229
|
-
# Hidden commands (not shown in top-level help, but included for completeness)
|
|
230
|
-
$HiddenCommands = @(
|
|
231
|
-
@{ Name = "upload"; HelpArgs = @("--help", "upload") },
|
|
232
|
-
@{ Name = "console"; HelpArgs = @("--help", "console") },
|
|
233
|
-
@{ Name = "summarize"; HelpArgs = @("--help", "summarize") }
|
|
234
|
-
)
|
|
235
|
-
# Note: agent-run, agent-status, agent-result are also hidden but already in $SpacedCommands
|
|
236
|
-
|
|
237
|
-
# Prefix groups to generate overview pages for
|
|
238
|
-
$PrefixGroups = @(
|
|
239
|
-
@{ Name = "swarm"; HelpArgs = @("--help", "swarm") },
|
|
240
|
-
@{ Name = "agent"; HelpArgs = @("--help", "agent") },
|
|
241
|
-
@{ Name = "htmlsnapshot"; HelpArgs = @("--help", "htmlsnapshot") },
|
|
242
|
-
@{ Name = "crawl"; HelpArgs = @("--help", "crawl") },
|
|
243
|
-
@{ Name = "snapshot"; HelpArgs = @("--help", "snapshot") }
|
|
244
|
-
)
|
|
245
|
-
|
|
246
|
-
# ---- Generate help files ----------------------------------------------------
|
|
247
|
-
|
|
248
|
-
$allFiles = @() # Track generated files for the index
|
|
249
|
-
|
|
250
|
-
# 1. Top-level help
|
|
251
|
-
Write-Host "[1/5] Generating top-level help..."
|
|
252
|
-
$topHelp = Invoke-Cli -Arguments @("--help")
|
|
253
|
-
$topFile = "00-top-level-help.txt"
|
|
254
|
-
$topHelp | Out-File -FilePath (Join-Path $OutDir $topFile) -Encoding utf8
|
|
255
|
-
$allFiles += @{ Path = $topFile; Label = "Top-level help (browser4-cli --help)" }
|
|
256
|
-
Write-Host " -> $topFile"
|
|
257
|
-
|
|
258
|
-
# 2. Per-command help (simple commands)
|
|
259
|
-
Write-Host "[2/5] Generating per-command help ($($Commands.Count) simple commands)..."
|
|
260
|
-
$idx = 0
|
|
261
|
-
foreach ($cmd in $Commands) {
|
|
262
|
-
$idx++
|
|
263
|
-
$padIdx = $idx.ToString("00")
|
|
264
|
-
$safeName = $cmd.Name -replace '[<>:"/\\|?*]', '_'
|
|
265
|
-
$fileName = "$padIdx-$safeName.txt"
|
|
266
|
-
|
|
267
|
-
Write-Host " [$idx/$($Commands.Count)] $($cmd.Name)"
|
|
268
|
-
$help = Invoke-Cli -Arguments $cmd.HelpArgs
|
|
269
|
-
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
270
|
-
$allFiles += @{ Path = $fileName; Label = $cmd.Name }
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
# 3. Spaced-form command help
|
|
274
|
-
Write-Host "[3/5] Generating spaced-form command help ($($SpacedCommands.Count) commands)..."
|
|
275
|
-
$baseIdx = $idx
|
|
276
|
-
foreach ($cmd in $SpacedCommands) {
|
|
277
|
-
$idx++
|
|
278
|
-
$padIdx = $idx.ToString("00")
|
|
279
|
-
$safeName = $cmd.Name -replace '[<>:"/\\|?*]', '_'
|
|
280
|
-
$fileName = "$padIdx-$safeName.txt"
|
|
281
|
-
|
|
282
|
-
Write-Host " [$($idx - $baseIdx)/$($SpacedCommands.Count)] $($cmd.Name)"
|
|
283
|
-
$help = Invoke-Cli -Arguments $cmd.HelpArgs
|
|
284
|
-
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
285
|
-
$allFiles += @{ Path = $fileName; Label = $cmd.Name }
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
# 4. Hidden commands
|
|
289
|
-
Write-Host "[4/5] Generating hidden-command help ($($HiddenCommands.Count) commands)..."
|
|
290
|
-
$baseIdx = $idx
|
|
291
|
-
foreach ($cmd in $HiddenCommands) {
|
|
292
|
-
$idx++
|
|
293
|
-
$padIdx = $idx.ToString("00")
|
|
294
|
-
$safeName = $cmd.Name -replace '[<>:"/\\|?*]', '_'
|
|
295
|
-
$fileName = "$padIdx-$safeName.txt"
|
|
296
|
-
|
|
297
|
-
Write-Host " [$($idx - $baseIdx)/$($HiddenCommands.Count)] $($cmd.Name) [hidden]"
|
|
298
|
-
$help = Invoke-Cli -Arguments $cmd.HelpArgs
|
|
299
|
-
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
300
|
-
$allFiles += @{ Path = $fileName; Label = "$($cmd.Name) (hidden)" }
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
# 5. Prefix group overviews
|
|
304
|
-
Write-Host "[5/5] Generating prefix group overviews..."
|
|
305
|
-
foreach ($group in $PrefixGroups) {
|
|
306
|
-
$safeName = $group.Name
|
|
307
|
-
$fileName = "prefix-$safeName.txt"
|
|
308
|
-
|
|
309
|
-
Write-Host " prefix: $($group.Name)"
|
|
310
|
-
# For prefix groups, `--help <prefix>` prints subcommands
|
|
311
|
-
$help = Invoke-Cli -Arguments $group.HelpArgs
|
|
312
|
-
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
313
|
-
$allFiles += @{ Path = $fileName; Label = "Prefix group: $($group.Name)" }
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
# ---- Generate INDEX.md ------------------------------------------------------
|
|
317
|
-
Write-Host ""
|
|
318
|
-
Write-Host "Generating INDEX.md..."
|
|
319
|
-
|
|
320
|
-
$indexLines = @(
|
|
321
|
-
"# browser4-cli Help Reference",
|
|
322
|
-
"",
|
|
323
|
-
"Generated: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')",
|
|
324
|
-
"Binary: $Binary",
|
|
325
|
-
"",
|
|
326
|
-
"## Overview",
|
|
327
|
-
"",
|
|
328
|
-
"This directory contains the complete help output for every browser4-cli",
|
|
329
|
-
"command and subcommand.",
|
|
330
|
-
"",
|
|
331
|
-
"## Files",
|
|
332
|
-
""
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
foreach ($entry in $allFiles) {
|
|
336
|
-
$indexLines += "- [$($entry.Label)]($($entry.Path))"
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
$totalCmdCount = $Commands.Count + $SpacedCommands.Count + $HiddenCommands.Count
|
|
340
|
-
$visibleCount = $totalCmdCount - 5 # 5 hidden: upload, console, summarize, agent-run, agent-result
|
|
341
|
-
|
|
342
|
-
$indexLines += (
|
|
343
|
-
"",
|
|
344
|
-
"## Quick Reference",
|
|
345
|
-
"",
|
|
346
|
-
"### Global help",
|
|
347
|
-
'```',
|
|
348
|
-
"browser4-cli --help",
|
|
349
|
-
'```',
|
|
350
|
-
"",
|
|
351
|
-
"### Per-command help (simple commands)",
|
|
352
|
-
'```',
|
|
353
|
-
"browser4-cli --help <command>",
|
|
354
|
-
'```',
|
|
355
|
-
"",
|
|
356
|
-
"### Per-command help (spaced subcommands)",
|
|
357
|
-
'```',
|
|
358
|
-
"browser4-cli <prefix> <sub> --help # e.g. browser4-cli swarm create --help",
|
|
359
|
-
"browser4-cli help <prefix> <sub> # equivalent",
|
|
360
|
-
'```',
|
|
361
|
-
"",
|
|
362
|
-
"### Prefix group overview",
|
|
363
|
-
'```',
|
|
364
|
-
"browser4-cli --help <prefix> # e.g. browser4-cli --help swarm",
|
|
365
|
-
'```',
|
|
366
|
-
"",
|
|
367
|
-
"## Command Count",
|
|
368
|
-
"",
|
|
369
|
-
"- **Total commands**: $totalCmdCount",
|
|
370
|
-
"- **Visible commands**: $visibleCount (5 hidden)",
|
|
371
|
-
"- **Hidden commands**: upload, console, summarize, agent-run, agent-status, agent-result",
|
|
372
|
-
""
|
|
373
|
-
)
|
|
374
|
-
|
|
375
|
-
$indexContent = $indexLines -join "`n"
|
|
376
|
-
$indexPath = Join-Path $OutDir "INDEX.md"
|
|
377
|
-
$indexContent | Out-File -FilePath $indexPath -Encoding utf8
|
|
378
|
-
|
|
379
|
-
Write-Host "Done! All help files saved to: $OutDir"
|
|
380
|
-
Write-Host " Total files: $($allFiles.Count + 1) (including INDEX.md)"
|
|
381
|
-
Write-Host ""
|
|
382
|
-
Write-Host "Start here: $(Join-Path $OutDir 'INDEX.md')"
|
|
1
|
+
#!/usr/bin/env pwsh
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
Enumerates every browser4-cli command and subcommand, prints help
|
|
5
|
+
information, and saves output to categorized files.
|
|
6
|
+
.DESCRIPTION
|
|
7
|
+
This script discovers all browser4-cli commands (including hidden ones),
|
|
8
|
+
generates detailed help for each, and organizes the output into:
|
|
9
|
+
- A top-level help overview
|
|
10
|
+
- One file per command (with numbered prefixes for ordering)
|
|
11
|
+
- Prefix group overviews (swarm, agent, htmlsnapshot, crawl, snapshot)
|
|
12
|
+
- An INDEX.md for easy navigation
|
|
13
|
+
|
|
14
|
+
Output is saved to: <repo-root>/cli/help-output/
|
|
15
|
+
.PARAMETER Binary
|
|
16
|
+
Path to the browser4-cli binary. Defaults to the release build in the
|
|
17
|
+
workspace: cli/browser4-cli/target/release/browser4-cli.exe
|
|
18
|
+
.PARAMETER OutDir
|
|
19
|
+
Directory for help output. Defaults to cli/help-output/ under the repo root.
|
|
20
|
+
.EXAMPLE
|
|
21
|
+
.\enumerate-help.ps1
|
|
22
|
+
.\enumerate-help.ps1 -Binary "C:\tools\browser4-cli.exe" -OutDir ".\docs\cli-help"
|
|
23
|
+
#>
|
|
24
|
+
|
|
25
|
+
param(
|
|
26
|
+
[string]$Binary,
|
|
27
|
+
[string]$OutDir
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
$ErrorActionPreference = "Stop"
|
|
31
|
+
|
|
32
|
+
# ---- Resolve paths ----------------------------------------------------------
|
|
33
|
+
$RepoRoot = Resolve-Path "$PSScriptRoot\..\.."
|
|
34
|
+
|
|
35
|
+
if (-not $Binary) {
|
|
36
|
+
$Binary = Join-Path $RepoRoot "cli\browser4-cli\target\release\browser4-cli.exe"
|
|
37
|
+
}
|
|
38
|
+
if (-not $OutDir) {
|
|
39
|
+
$OutDir = Join-Path $RepoRoot "cli\help-output"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (-not (Test-Path $Binary)) {
|
|
43
|
+
Write-Error "browser4-cli binary not found at: $Binary"
|
|
44
|
+
Write-Host "Build it first: cd cli/browser4-cli && cargo build --release"
|
|
45
|
+
exit 1
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Ensure output directory exists
|
|
49
|
+
$null = New-Item -ItemType Directory -Force -Path $OutDir
|
|
50
|
+
|
|
51
|
+
# Normalize binary path for reliable invocation
|
|
52
|
+
$Binary = Resolve-Path $Binary
|
|
53
|
+
|
|
54
|
+
Write-Host "browser4-cli binary : $Binary"
|
|
55
|
+
Write-Host "Output directory : $OutDir"
|
|
56
|
+
Write-Host ""
|
|
57
|
+
|
|
58
|
+
# ---- Helper: invoke the CLI and capture output ------------------------------
|
|
59
|
+
function Invoke-Cli {
|
|
60
|
+
param([string[]]$Arguments)
|
|
61
|
+
$psi = [System.Diagnostics.ProcessStartInfo]::new()
|
|
62
|
+
$psi.FileName = $Binary
|
|
63
|
+
$psi.Arguments = $Arguments -join ' '
|
|
64
|
+
$psi.RedirectStandardOutput = $true
|
|
65
|
+
$psi.RedirectStandardError = $true
|
|
66
|
+
$psi.UseShellExecute = $false
|
|
67
|
+
$psi.CreateNoWindow = $true
|
|
68
|
+
$psi.StandardOutputEncoding = [System.Text.Encoding]::UTF8
|
|
69
|
+
$psi.StandardErrorEncoding = [System.Text.Encoding]::UTF8
|
|
70
|
+
|
|
71
|
+
$proc = [System.Diagnostics.Process]::new()
|
|
72
|
+
$proc.StartInfo = $psi
|
|
73
|
+
$null = $proc.Start()
|
|
74
|
+
$stdout = $proc.StandardOutput.ReadToEnd()
|
|
75
|
+
$stderr = $proc.StandardError.ReadToEnd()
|
|
76
|
+
$proc.WaitForExit(10000) | Out-Null
|
|
77
|
+
|
|
78
|
+
# Combine: stdout first, then stderr (stderr carries errors / tips)
|
|
79
|
+
$result = $stdout
|
|
80
|
+
if ($stderr.Trim().Length -gt 0) {
|
|
81
|
+
if ($result.Length -gt 0) { $result += "`n" }
|
|
82
|
+
$result += $stderr
|
|
83
|
+
}
|
|
84
|
+
return $result.TrimEnd()
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# ---- Command definitions ----------------------------------------------------
|
|
88
|
+
|
|
89
|
+
# Each entry: @{ Name = "<internal-name>"; HelpArgs = @("<arg1>", ...) }
|
|
90
|
+
#
|
|
91
|
+
# For simple commands (no spaced public form), use:
|
|
92
|
+
# HelpArgs = @("--help", "<internal-name>")
|
|
93
|
+
#
|
|
94
|
+
# For commands with a spaced public form, use:
|
|
95
|
+
# HelpArgs = @("<prefix>", "<sub>", "--help")
|
|
96
|
+
# Because `browser4-cli --help agent-run` is rejected; must use
|
|
97
|
+
# `browser4-cli agent run --help` instead.
|
|
98
|
+
|
|
99
|
+
$Commands = @(
|
|
100
|
+
# -- Browser sessions --
|
|
101
|
+
@{ Name = "open"; HelpArgs = @("--help", "open") },
|
|
102
|
+
@{ Name = "attach"; HelpArgs = @("--help", "attach") },
|
|
103
|
+
@{ Name = "close"; HelpArgs = @("--help", "close") },
|
|
104
|
+
@{ Name = "list"; HelpArgs = @("--help", "list") },
|
|
105
|
+
@{ Name = "close-all"; HelpArgs = @("--help", "close-all") },
|
|
106
|
+
@{ Name = "kill-all"; HelpArgs = @("--help", "kill-all") },
|
|
107
|
+
@{ Name = "stop"; HelpArgs = @("--help", "stop") },
|
|
108
|
+
@{ Name = "status"; HelpArgs = @("--help", "status") },
|
|
109
|
+
@{ Name = "doctor"; HelpArgs = @("--help", "doctor") },
|
|
110
|
+
|
|
111
|
+
# -- Navigation --
|
|
112
|
+
@{ Name = "goto"; HelpArgs = @("--help", "goto") },
|
|
113
|
+
@{ Name = "go-back"; HelpArgs = @("--help", "go-back") },
|
|
114
|
+
@{ Name = "go-forward"; HelpArgs = @("--help", "go-forward") },
|
|
115
|
+
@{ Name = "reload"; HelpArgs = @("--help", "reload") },
|
|
116
|
+
|
|
117
|
+
# -- Keyboard --
|
|
118
|
+
@{ Name = "press"; HelpArgs = @("--help", "press") },
|
|
119
|
+
@{ Name = "type"; HelpArgs = @("--help", "type") },
|
|
120
|
+
@{ Name = "keydown"; HelpArgs = @("--help", "keydown") },
|
|
121
|
+
@{ Name = "keyup"; HelpArgs = @("--help", "keyup") },
|
|
122
|
+
@{ Name = "fill"; HelpArgs = @("--help", "fill") },
|
|
123
|
+
|
|
124
|
+
# -- Mouse --
|
|
125
|
+
@{ Name = "click"; HelpArgs = @("--help", "click") },
|
|
126
|
+
@{ Name = "dblclick"; HelpArgs = @("--help", "dblclick") },
|
|
127
|
+
@{ Name = "hover"; HelpArgs = @("--help", "hover") },
|
|
128
|
+
@{ Name = "drag"; HelpArgs = @("--help", "drag") },
|
|
129
|
+
@{ Name = "mousemove"; HelpArgs = @("--help", "mousemove") },
|
|
130
|
+
@{ Name = "mousedown"; HelpArgs = @("--help", "mousedown") },
|
|
131
|
+
@{ Name = "mouseup"; HelpArgs = @("--help", "mouseup") },
|
|
132
|
+
@{ Name = "mousewheel"; HelpArgs = @("--help", "mousewheel") },
|
|
133
|
+
@{ Name = "scroll"; HelpArgs = @("--help", "scroll") },
|
|
134
|
+
|
|
135
|
+
# -- Core --
|
|
136
|
+
@{ Name = "snapshot"; HelpArgs = @("--help", "snapshot") },
|
|
137
|
+
@{ Name = "get"; HelpArgs = @("--help", "get") },
|
|
138
|
+
@{ Name = "eval"; HelpArgs = @("--help", "eval") },
|
|
139
|
+
@{ Name = "wait"; HelpArgs = @("--help", "wait") },
|
|
140
|
+
@{ Name = "select"; HelpArgs = @("--help", "select") },
|
|
141
|
+
@{ Name = "check"; HelpArgs = @("--help", "check") },
|
|
142
|
+
@{ Name = "uncheck"; HelpArgs = @("--help", "uncheck") },
|
|
143
|
+
@{ Name = "dialog-accept"; HelpArgs = @("--help", "dialog-accept") },
|
|
144
|
+
@{ Name = "dialog-dismiss"; HelpArgs = @("--help", "dialog-dismiss") },
|
|
145
|
+
@{ Name = "resize"; HelpArgs = @("--help", "resize") },
|
|
146
|
+
@{ Name = "delete-data"; HelpArgs = @("--help", "delete-data") },
|
|
147
|
+
@{ Name = "batch"; HelpArgs = @("--help", "batch") },
|
|
148
|
+
@{ Name = "generate-locator"; HelpArgs = @("--help", "generate-locator") },
|
|
149
|
+
|
|
150
|
+
# -- Export --
|
|
151
|
+
@{ Name = "screenshot"; HelpArgs = @("--help", "screenshot") },
|
|
152
|
+
@{ Name = "pdf"; HelpArgs = @("--help", "pdf") },
|
|
153
|
+
|
|
154
|
+
# -- Tabs --
|
|
155
|
+
@{ Name = "tab-list"; HelpArgs = @("--help", "tab-list") },
|
|
156
|
+
@{ Name = "tab-new"; HelpArgs = @("--help", "tab-new") },
|
|
157
|
+
@{ Name = "tab-close"; HelpArgs = @("--help", "tab-close") },
|
|
158
|
+
@{ Name = "tab-select"; HelpArgs = @("--help", "tab-select") },
|
|
159
|
+
|
|
160
|
+
# -- Storage --
|
|
161
|
+
@{ Name = "state-save"; HelpArgs = @("--help", "state-save") },
|
|
162
|
+
@{ Name = "state-load"; HelpArgs = @("--help", "state-load") },
|
|
163
|
+
@{ Name = "cookie-list"; HelpArgs = @("--help", "cookie-list") },
|
|
164
|
+
@{ Name = "cookie-get"; HelpArgs = @("--help", "cookie-get") },
|
|
165
|
+
@{ Name = "cookie-set"; HelpArgs = @("--help", "cookie-set") },
|
|
166
|
+
@{ Name = "cookie-delete"; HelpArgs = @("--help", "cookie-delete") },
|
|
167
|
+
@{ Name = "cookie-clear"; HelpArgs = @("--help", "cookie-clear") },
|
|
168
|
+
@{ Name = "localstorage-list"; HelpArgs = @("--help", "localstorage-list") },
|
|
169
|
+
@{ Name = "localstorage-get"; HelpArgs = @("--help", "localstorage-get") },
|
|
170
|
+
@{ Name = "localstorage-set"; HelpArgs = @("--help", "localstorage-set") },
|
|
171
|
+
@{ Name = "localstorage-delete"; HelpArgs = @("--help", "localstorage-delete") },
|
|
172
|
+
@{ Name = "localstorage-clear"; HelpArgs = @("--help", "localstorage-clear") },
|
|
173
|
+
@{ Name = "sessionstorage-list"; HelpArgs = @("--help", "sessionstorage-list") },
|
|
174
|
+
@{ Name = "sessionstorage-get"; HelpArgs = @("--help", "sessionstorage-get") },
|
|
175
|
+
@{ Name = "sessionstorage-set"; HelpArgs = @("--help", "sessionstorage-set") },
|
|
176
|
+
@{ Name = "sessionstorage-delete"; HelpArgs = @("--help", "sessionstorage-delete") },
|
|
177
|
+
@{ Name = "sessionstorage-clear"; HelpArgs = @("--help", "sessionstorage-clear") },
|
|
178
|
+
|
|
179
|
+
# -- Agent (hidden: agent-run, agent-status, agent-result) --
|
|
180
|
+
@{ Name = "extract"; HelpArgs = @("--help", "extract") },
|
|
181
|
+
# agent-list is a standalone command, not hidden
|
|
182
|
+
@{ Name = "agent-list"; HelpArgs = @("--help", "agent-list") },
|
|
183
|
+
|
|
184
|
+
# -- Snapshot subcommands (spaced-form: htmlsnapshot *, snapshot grep) --
|
|
185
|
+
@{ Name = "snapshot-grep"; HelpArgs = @("--help", "snapshot-grep") },
|
|
186
|
+
|
|
187
|
+
# -- DOM Snapshot (base command + spaced subcommands) --
|
|
188
|
+
@{ Name = "htmlsnapshot"; HelpArgs = @("--help", "htmlsnapshot") },
|
|
189
|
+
|
|
190
|
+
# -- Crawl --
|
|
191
|
+
@{ Name = "crawl"; HelpArgs = @("--help", "crawl") },
|
|
192
|
+
|
|
193
|
+
# -- Install / Admin --
|
|
194
|
+
@{ Name = "install"; HelpArgs = @("--help", "install") },
|
|
195
|
+
@{ Name = "upgrade"; HelpArgs = @("--help", "upgrade") },
|
|
196
|
+
@{ Name = "uninstall"; HelpArgs = @("--help", "uninstall") },
|
|
197
|
+
@{ Name = "loop"; HelpArgs = @("--help", "loop") }
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Commands with spaced public forms — the CLI rejects `--help <kebab-name>`
|
|
201
|
+
# for these, so we use `<prefix> <sub> --help` instead.
|
|
202
|
+
$SpacedCommands = @(
|
|
203
|
+
# Agent subcommands (hidden)
|
|
204
|
+
@{ Name = "agent-run"; HelpArgs = @("agent", "run", "--help") },
|
|
205
|
+
@{ Name = "agent-status"; HelpArgs = @("agent", "status", "--help") },
|
|
206
|
+
@{ Name = "agent-result"; HelpArgs = @("agent", "result", "--help") },
|
|
207
|
+
|
|
208
|
+
# Swarm subcommands
|
|
209
|
+
@{ Name = "swarm-create"; HelpArgs = @("swarm", "create", "--help") },
|
|
210
|
+
@{ Name = "swarm-submit"; HelpArgs = @("swarm", "submit", "--help") },
|
|
211
|
+
@{ Name = "swarm-query"; HelpArgs = @("swarm", "query", "--help") },
|
|
212
|
+
@{ Name = "swarm-status"; HelpArgs = @("swarm", "status", "--help") },
|
|
213
|
+
@{ Name = "swarm-result"; HelpArgs = @("swarm", "result", "--help") },
|
|
214
|
+
@{ Name = "swarm-list"; HelpArgs = @("swarm", "list", "--help") },
|
|
215
|
+
|
|
216
|
+
# DOM Snapshot subcommands
|
|
217
|
+
@{ Name = "htmlsnapshot-get"; HelpArgs = @("htmlsnapshot", "get", "--help") },
|
|
218
|
+
@{ Name = "htmlsnapshot-get-all"; HelpArgs = @("htmlsnapshot", "get", "all", "--help") },
|
|
219
|
+
@{ Name = "htmlsnapshot-query"; HelpArgs = @("htmlsnapshot", "query", "--help") },
|
|
220
|
+
@{ Name = "htmlsnapshot-export"; HelpArgs = @("htmlsnapshot", "export", "--help") },
|
|
221
|
+
@{ Name = "htmlsnapshot-summary"; HelpArgs = @("htmlsnapshot", "summary", "--help") },
|
|
222
|
+
@{ Name = "htmlsnapshot-grep"; HelpArgs = @("htmlsnapshot", "grep", "--help") },
|
|
223
|
+
@{ Name = "htmlsnapshot-inspect"; HelpArgs = @("htmlsnapshot", "inspect", "--help") },
|
|
224
|
+
|
|
225
|
+
# Crawl subcommand
|
|
226
|
+
@{ Name = "crawl-list"; HelpArgs = @("crawl", "list", "--help") }
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
# Hidden commands (not shown in top-level help, but included for completeness)
|
|
230
|
+
$HiddenCommands = @(
|
|
231
|
+
@{ Name = "upload"; HelpArgs = @("--help", "upload") },
|
|
232
|
+
@{ Name = "console"; HelpArgs = @("--help", "console") },
|
|
233
|
+
@{ Name = "summarize"; HelpArgs = @("--help", "summarize") }
|
|
234
|
+
)
|
|
235
|
+
# Note: agent-run, agent-status, agent-result are also hidden but already in $SpacedCommands
|
|
236
|
+
|
|
237
|
+
# Prefix groups to generate overview pages for
|
|
238
|
+
$PrefixGroups = @(
|
|
239
|
+
@{ Name = "swarm"; HelpArgs = @("--help", "swarm") },
|
|
240
|
+
@{ Name = "agent"; HelpArgs = @("--help", "agent") },
|
|
241
|
+
@{ Name = "htmlsnapshot"; HelpArgs = @("--help", "htmlsnapshot") },
|
|
242
|
+
@{ Name = "crawl"; HelpArgs = @("--help", "crawl") },
|
|
243
|
+
@{ Name = "snapshot"; HelpArgs = @("--help", "snapshot") }
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
# ---- Generate help files ----------------------------------------------------
|
|
247
|
+
|
|
248
|
+
$allFiles = @() # Track generated files for the index
|
|
249
|
+
|
|
250
|
+
# 1. Top-level help
|
|
251
|
+
Write-Host "[1/5] Generating top-level help..."
|
|
252
|
+
$topHelp = Invoke-Cli -Arguments @("--help")
|
|
253
|
+
$topFile = "00-top-level-help.txt"
|
|
254
|
+
$topHelp | Out-File -FilePath (Join-Path $OutDir $topFile) -Encoding utf8
|
|
255
|
+
$allFiles += @{ Path = $topFile; Label = "Top-level help (browser4-cli --help)" }
|
|
256
|
+
Write-Host " -> $topFile"
|
|
257
|
+
|
|
258
|
+
# 2. Per-command help (simple commands)
|
|
259
|
+
Write-Host "[2/5] Generating per-command help ($($Commands.Count) simple commands)..."
|
|
260
|
+
$idx = 0
|
|
261
|
+
foreach ($cmd in $Commands) {
|
|
262
|
+
$idx++
|
|
263
|
+
$padIdx = $idx.ToString("00")
|
|
264
|
+
$safeName = $cmd.Name -replace '[<>:"/\\|?*]', '_'
|
|
265
|
+
$fileName = "$padIdx-$safeName.txt"
|
|
266
|
+
|
|
267
|
+
Write-Host " [$idx/$($Commands.Count)] $($cmd.Name)"
|
|
268
|
+
$help = Invoke-Cli -Arguments $cmd.HelpArgs
|
|
269
|
+
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
270
|
+
$allFiles += @{ Path = $fileName; Label = $cmd.Name }
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
# 3. Spaced-form command help
|
|
274
|
+
Write-Host "[3/5] Generating spaced-form command help ($($SpacedCommands.Count) commands)..."
|
|
275
|
+
$baseIdx = $idx
|
|
276
|
+
foreach ($cmd in $SpacedCommands) {
|
|
277
|
+
$idx++
|
|
278
|
+
$padIdx = $idx.ToString("00")
|
|
279
|
+
$safeName = $cmd.Name -replace '[<>:"/\\|?*]', '_'
|
|
280
|
+
$fileName = "$padIdx-$safeName.txt"
|
|
281
|
+
|
|
282
|
+
Write-Host " [$($idx - $baseIdx)/$($SpacedCommands.Count)] $($cmd.Name)"
|
|
283
|
+
$help = Invoke-Cli -Arguments $cmd.HelpArgs
|
|
284
|
+
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
285
|
+
$allFiles += @{ Path = $fileName; Label = $cmd.Name }
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
# 4. Hidden commands
|
|
289
|
+
Write-Host "[4/5] Generating hidden-command help ($($HiddenCommands.Count) commands)..."
|
|
290
|
+
$baseIdx = $idx
|
|
291
|
+
foreach ($cmd in $HiddenCommands) {
|
|
292
|
+
$idx++
|
|
293
|
+
$padIdx = $idx.ToString("00")
|
|
294
|
+
$safeName = $cmd.Name -replace '[<>:"/\\|?*]', '_'
|
|
295
|
+
$fileName = "$padIdx-$safeName.txt"
|
|
296
|
+
|
|
297
|
+
Write-Host " [$($idx - $baseIdx)/$($HiddenCommands.Count)] $($cmd.Name) [hidden]"
|
|
298
|
+
$help = Invoke-Cli -Arguments $cmd.HelpArgs
|
|
299
|
+
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
300
|
+
$allFiles += @{ Path = $fileName; Label = "$($cmd.Name) (hidden)" }
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
# 5. Prefix group overviews
|
|
304
|
+
Write-Host "[5/5] Generating prefix group overviews..."
|
|
305
|
+
foreach ($group in $PrefixGroups) {
|
|
306
|
+
$safeName = $group.Name
|
|
307
|
+
$fileName = "prefix-$safeName.txt"
|
|
308
|
+
|
|
309
|
+
Write-Host " prefix: $($group.Name)"
|
|
310
|
+
# For prefix groups, `--help <prefix>` prints subcommands
|
|
311
|
+
$help = Invoke-Cli -Arguments $group.HelpArgs
|
|
312
|
+
$help | Out-File -FilePath (Join-Path $OutDir $fileName) -Encoding utf8
|
|
313
|
+
$allFiles += @{ Path = $fileName; Label = "Prefix group: $($group.Name)" }
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
# ---- Generate INDEX.md ------------------------------------------------------
|
|
317
|
+
Write-Host ""
|
|
318
|
+
Write-Host "Generating INDEX.md..."
|
|
319
|
+
|
|
320
|
+
$indexLines = @(
|
|
321
|
+
"# browser4-cli Help Reference",
|
|
322
|
+
"",
|
|
323
|
+
"Generated: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')",
|
|
324
|
+
"Binary: $Binary",
|
|
325
|
+
"",
|
|
326
|
+
"## Overview",
|
|
327
|
+
"",
|
|
328
|
+
"This directory contains the complete help output for every browser4-cli",
|
|
329
|
+
"command and subcommand.",
|
|
330
|
+
"",
|
|
331
|
+
"## Files",
|
|
332
|
+
""
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
foreach ($entry in $allFiles) {
|
|
336
|
+
$indexLines += "- [$($entry.Label)]($($entry.Path))"
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
$totalCmdCount = $Commands.Count + $SpacedCommands.Count + $HiddenCommands.Count
|
|
340
|
+
$visibleCount = $totalCmdCount - 5 # 5 hidden: upload, console, summarize, agent-run, agent-result
|
|
341
|
+
|
|
342
|
+
$indexLines += (
|
|
343
|
+
"",
|
|
344
|
+
"## Quick Reference",
|
|
345
|
+
"",
|
|
346
|
+
"### Global help",
|
|
347
|
+
'```',
|
|
348
|
+
"browser4-cli --help",
|
|
349
|
+
'```',
|
|
350
|
+
"",
|
|
351
|
+
"### Per-command help (simple commands)",
|
|
352
|
+
'```',
|
|
353
|
+
"browser4-cli --help <command>",
|
|
354
|
+
'```',
|
|
355
|
+
"",
|
|
356
|
+
"### Per-command help (spaced subcommands)",
|
|
357
|
+
'```',
|
|
358
|
+
"browser4-cli <prefix> <sub> --help # e.g. browser4-cli swarm create --help",
|
|
359
|
+
"browser4-cli help <prefix> <sub> # equivalent",
|
|
360
|
+
'```',
|
|
361
|
+
"",
|
|
362
|
+
"### Prefix group overview",
|
|
363
|
+
'```',
|
|
364
|
+
"browser4-cli --help <prefix> # e.g. browser4-cli --help swarm",
|
|
365
|
+
'```',
|
|
366
|
+
"",
|
|
367
|
+
"## Command Count",
|
|
368
|
+
"",
|
|
369
|
+
"- **Total commands**: $totalCmdCount",
|
|
370
|
+
"- **Visible commands**: $visibleCount (5 hidden)",
|
|
371
|
+
"- **Hidden commands**: upload, console, summarize, agent-run, agent-status, agent-result",
|
|
372
|
+
""
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
$indexContent = $indexLines -join "`n"
|
|
376
|
+
$indexPath = Join-Path $OutDir "INDEX.md"
|
|
377
|
+
$indexContent | Out-File -FilePath $indexPath -Encoding utf8
|
|
378
|
+
|
|
379
|
+
Write-Host "Done! All help files saved to: $OutDir"
|
|
380
|
+
Write-Host " Total files: $($allFiles.Count + 1) (including INDEX.md)"
|
|
381
|
+
Write-Host ""
|
|
382
|
+
Write-Host "Start here: $(Join-Path $OutDir 'INDEX.md')"
|