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.
@@ -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')"