runpane 2.2.12 → 2.3.1

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.
@@ -0,0 +1,1198 @@
1
+ "use strict";
2
+ // Generated by scripts/generate-runpane-contract.js. Do not edit by hand.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RUNPANE_CONTRACT = void 0;
5
+ exports.RUNPANE_CONTRACT = {
6
+ "$schema": "./schema.json",
7
+ "schemaVersion": 1,
8
+ "name": "runpane",
9
+ "description": "Thin installer and local control CLI for Pane",
10
+ "packageInstallPolicy": [
11
+ "The packages must not download, install, or configure Pane during package installation.",
12
+ "Work starts only when a user runs `runpane ...`."
13
+ ],
14
+ "compatibility": {
15
+ "node": ">=18.17.0",
16
+ "python": ">=3.8"
17
+ },
18
+ "terminology": {
19
+ "repo": "Saved Pane repository/project record",
20
+ "pane": "User-visible Pane session",
21
+ "tool": "Terminal-backed tab",
22
+ "agent": "Built-in agent command template"
23
+ },
24
+ "defaults": {
25
+ "target": "client",
26
+ "paneVersion": "latest",
27
+ "channel": "stable",
28
+ "format": "auto",
29
+ "dryRun": false,
30
+ "yes": false,
31
+ "verbose": false
32
+ },
33
+ "enums": {
34
+ "installTargets": [
35
+ "client",
36
+ "daemon"
37
+ ],
38
+ "artifactFormats": [
39
+ "auto",
40
+ "appimage",
41
+ "deb",
42
+ "dmg",
43
+ "zip",
44
+ "exe"
45
+ ],
46
+ "channels": [
47
+ "stable",
48
+ "nightly"
49
+ ],
50
+ "agents": [
51
+ "codex",
52
+ "claude"
53
+ ]
54
+ },
55
+ "agentTemplates": {
56
+ "codex": {
57
+ "title": "Codex",
58
+ "command": "codex --yolo",
59
+ "description": "Open a Codex terminal tab and allow the initial input to drive the agent."
60
+ },
61
+ "claude": {
62
+ "title": "Claude Code",
63
+ "command": "claude --dangerously-skip-permissions",
64
+ "description": "Open a Claude Code terminal tab and allow the initial input to drive the agent."
65
+ }
66
+ },
67
+ "commands": [
68
+ {
69
+ "name": "help",
70
+ "summary": "Show help for runpane or a specific command.",
71
+ "usage": [
72
+ "runpane help [command]"
73
+ ]
74
+ },
75
+ {
76
+ "name": "setup",
77
+ "summary": "Open the guided setup wizard for install, remote host setup, update, and diagnostics.",
78
+ "usage": [
79
+ "runpane setup"
80
+ ],
81
+ "interactiveEntrypoint": true
82
+ },
83
+ {
84
+ "name": "install",
85
+ "summary": "Install Pane on this machine or configure this machine as a remote daemon host.",
86
+ "usage": [
87
+ "runpane install [client|daemon] [options]"
88
+ ],
89
+ "defaultTarget": "client",
90
+ "targets": [
91
+ "client",
92
+ "daemon"
93
+ ],
94
+ "unknownDaemonFlagsForwarded": true
95
+ },
96
+ {
97
+ "name": "update",
98
+ "summary": "Update the Pane desktop app using the same artifact path as install client.",
99
+ "usage": [
100
+ "runpane update [options]"
101
+ ],
102
+ "target": "client"
103
+ },
104
+ {
105
+ "name": "version",
106
+ "summary": "Print the runpane wrapper version and installed Pane version when detectable.",
107
+ "usage": [
108
+ "runpane version",
109
+ "runpane --version"
110
+ ]
111
+ },
112
+ {
113
+ "name": "doctor",
114
+ "summary": "Run platform, release, installed Pane, and remote setup diagnostics.",
115
+ "usage": [
116
+ "runpane doctor"
117
+ ]
118
+ },
119
+ {
120
+ "name": "repos list",
121
+ "summary": "List repositories saved in the running Pane app.",
122
+ "usage": [
123
+ "runpane repos list [--json] [--pane-dir <path>]"
124
+ ],
125
+ "jsonSchemas": [
126
+ "repoListResult"
127
+ ]
128
+ },
129
+ {
130
+ "name": "repos add",
131
+ "summary": "Register an existing git repository with the running Pane app.",
132
+ "usage": [
133
+ "runpane repos add --path <path> [--name <name>] [--json] [--yes]"
134
+ ],
135
+ "mutates": true,
136
+ "jsonSchemas": [
137
+ "repoAddRequest",
138
+ "repoAddResult"
139
+ ]
140
+ },
141
+ {
142
+ "name": "panes create",
143
+ "summary": "Create one or more Pane sessions in a saved repository and open a terminal-backed tool tab.",
144
+ "usage": [
145
+ "runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]",
146
+ "runpane panes create --from-json <path|-> [--yes] [--json]"
147
+ ],
148
+ "mutates": true,
149
+ "jsonSchemas": [
150
+ "paneCreateRequest",
151
+ "paneCreateResult"
152
+ ]
153
+ }
154
+ ],
155
+ "flags": {
156
+ "wrapper": [
157
+ {
158
+ "name": "--version",
159
+ "value": "<latest|vX.Y.Z>",
160
+ "description": "Pane release to install or inspect."
161
+ },
162
+ {
163
+ "name": "--download-dir",
164
+ "value": "<path>",
165
+ "description": "Directory for downloaded Pane release artifacts."
166
+ },
167
+ {
168
+ "name": "--pane-path",
169
+ "value": "<path>",
170
+ "description": "Use or inspect an existing Pane executable."
171
+ },
172
+ {
173
+ "name": "--format",
174
+ "value": "<auto|appimage|deb|dmg|zip|exe>",
175
+ "description": "Pane release artifact format."
176
+ },
177
+ {
178
+ "name": "--dry-run",
179
+ "description": "Print the plan without downloading or installing."
180
+ },
181
+ {
182
+ "name": "--yes",
183
+ "aliases": [
184
+ "-y"
185
+ ],
186
+ "description": "Skip interactive prompts where possible."
187
+ },
188
+ {
189
+ "name": "--verbose",
190
+ "description": "Print extra diagnostics."
191
+ }
192
+ ],
193
+ "remoteValue": [
194
+ {
195
+ "name": "--label",
196
+ "value": "<name>"
197
+ },
198
+ {
199
+ "name": "--prefer-tunnel",
200
+ "value": "<tailscale|ssh|manual|auto>"
201
+ },
202
+ {
203
+ "name": "--channel",
204
+ "value": "<stable|nightly>"
205
+ },
206
+ {
207
+ "name": "--base-url",
208
+ "value": "<url>"
209
+ },
210
+ {
211
+ "name": "--pane-dir",
212
+ "value": "<path>"
213
+ },
214
+ {
215
+ "name": "--listen-port",
216
+ "value": "<port>"
217
+ },
218
+ {
219
+ "name": "--port",
220
+ "value": "<port>"
221
+ },
222
+ {
223
+ "name": "--repo-ref",
224
+ "value": "<ref>"
225
+ }
226
+ ],
227
+ "remoteBoolean": [
228
+ {
229
+ "name": "--auto-listen-port"
230
+ },
231
+ {
232
+ "name": "--interactive-tailscale-setup"
233
+ },
234
+ {
235
+ "name": "--no-install-service"
236
+ },
237
+ {
238
+ "name": "--no-tailscale-serve"
239
+ },
240
+ {
241
+ "name": "--print-only"
242
+ }
243
+ ],
244
+ "localValue": [
245
+ {
246
+ "name": "--pane-dir",
247
+ "value": "<path>",
248
+ "description": "Connect to a Pane daemon using this Pane data directory."
249
+ },
250
+ {
251
+ "name": "--repo",
252
+ "value": "<selector>",
253
+ "description": "Repository selector: active, id, exact path, or saved repository name."
254
+ },
255
+ {
256
+ "name": "--path",
257
+ "value": "<path>",
258
+ "description": "Existing git repository path to register with Pane."
259
+ },
260
+ {
261
+ "name": "--name",
262
+ "value": "<name>",
263
+ "description": "Name for the registered repository or created pane/session."
264
+ },
265
+ {
266
+ "name": "--worktree-name",
267
+ "value": "<name>",
268
+ "description": "Worktree name to request. Defaults to --name."
269
+ },
270
+ {
271
+ "name": "--base-branch",
272
+ "value": "<branch>",
273
+ "description": "Base branch for the created worktree."
274
+ },
275
+ {
276
+ "name": "--agent",
277
+ "value": "<codex|claude>",
278
+ "description": "Built-in agent terminal template to open."
279
+ },
280
+ {
281
+ "name": "--tool-command",
282
+ "value": "<command>",
283
+ "description": "Custom terminal command to run instead of a built-in agent."
284
+ },
285
+ {
286
+ "name": "--title",
287
+ "value": "<title>",
288
+ "description": "Terminal tab title. Defaults to the selected agent title or Terminal."
289
+ },
290
+ {
291
+ "name": "--initial-input",
292
+ "value": "<text>",
293
+ "aliases": [
294
+ "--prompt"
295
+ ],
296
+ "description": "Text to send to the terminal after the command is ready. --prompt is an alias."
297
+ },
298
+ {
299
+ "name": "--initial-input-file",
300
+ "value": "<path|->",
301
+ "description": "Read initial input from a file or stdin."
302
+ },
303
+ {
304
+ "name": "--from-json",
305
+ "value": "<path|->",
306
+ "description": "Read a full panes.create request JSON payload from a file or stdin."
307
+ },
308
+ {
309
+ "name": "--timeout-ms",
310
+ "value": "<milliseconds>",
311
+ "description": "Maximum time to wait for each pane creation job."
312
+ }
313
+ ],
314
+ "localBoolean": [
315
+ {
316
+ "name": "--json",
317
+ "description": "Print machine-readable JSON output."
318
+ }
319
+ ]
320
+ },
321
+ "help": {
322
+ "npm": {
323
+ "default": [
324
+ "Usage:",
325
+ " runpane",
326
+ " runpane setup",
327
+ " runpane install [client|daemon] [options]",
328
+ " runpane update [options]",
329
+ " runpane version",
330
+ " runpane doctor",
331
+ " runpane repos list [--json]",
332
+ " runpane repos add --path <path> [--name <name>]",
333
+ " runpane panes create --repo <selector> --name <name> --agent <codex|claude>",
334
+ " runpane help [command]",
335
+ "",
336
+ "Quick start:",
337
+ " npx --yes runpane@latest",
338
+ " npm i -g runpane && runpane setup",
339
+ "",
340
+ "Advanced examples:",
341
+ " npx --yes runpane@latest install client",
342
+ " npx --yes runpane@latest install daemon --label \"My Server\"",
343
+ " pnpm dlx runpane@latest",
344
+ " pipx run runpane",
345
+ "",
346
+ "Run \"runpane help panes create\" for pane orchestration options."
347
+ ],
348
+ "install": [
349
+ "Usage:",
350
+ " runpane install [client|daemon] [options]",
351
+ "",
352
+ "Examples:",
353
+ " npx --yes runpane@latest install client",
354
+ " npx --yes runpane@latest install daemon --label \"My Server\"",
355
+ " pnpm dlx runpane@latest install daemon --prefer-tunnel ssh --label \"VM\"",
356
+ "",
357
+ "Wrapper options:",
358
+ " --version <latest|vX.Y.Z> Pane release to install",
359
+ " --format <auto|appimage|deb|dmg|zip|exe>",
360
+ " --download-dir <path>",
361
+ " --pane-path <path> Use an existing Pane executable",
362
+ " --dry-run Print the plan without downloading",
363
+ " --yes Skip interactive prompts where possible",
364
+ " --verbose",
365
+ "",
366
+ "Daemon passthrough options:",
367
+ " --label <name>",
368
+ " --prefer-tunnel <tailscale|ssh|manual|auto>",
369
+ " --channel <stable|nightly>",
370
+ " --base-url <url>",
371
+ " --pane-dir <path>",
372
+ " --listen-port <port> / --port <port>",
373
+ " --auto-listen-port",
374
+ " --interactive-tailscale-setup",
375
+ " --no-install-service",
376
+ " --no-tailscale-serve",
377
+ " --print-only",
378
+ " --repo-ref <ref>"
379
+ ],
380
+ "setup": [
381
+ "Usage:",
382
+ " runpane setup",
383
+ "",
384
+ "Opens the guided setup for desktop install, remote host setup, update, and diagnostics.",
385
+ "",
386
+ "Quick start:",
387
+ " npx --yes runpane@latest",
388
+ " npm i -g runpane && runpane setup"
389
+ ],
390
+ "update": [
391
+ "Usage:",
392
+ " runpane update [options]",
393
+ "",
394
+ "Updates Pane using the same artifact selection as \"runpane install client\".",
395
+ "",
396
+ "Options:",
397
+ " --version <latest|vX.Y.Z>",
398
+ " --format <auto|appimage|deb|dmg|zip|exe>",
399
+ " --download-dir <path>",
400
+ " --pane-path <path>",
401
+ " --dry-run",
402
+ " --yes",
403
+ " --verbose"
404
+ ],
405
+ "version": [
406
+ "Usage:",
407
+ " runpane version",
408
+ " runpane --version"
409
+ ],
410
+ "doctor": [
411
+ "Usage:",
412
+ " runpane doctor [--pane-path <path>] [--format <format>] [--verbose]"
413
+ ],
414
+ "repos list": [
415
+ "Usage:",
416
+ " runpane repos list [--json] [--pane-dir <path>]",
417
+ "",
418
+ "Lists repositories saved in the running Pane app.",
419
+ "",
420
+ "Options:",
421
+ " --json Print machine-readable output",
422
+ " --pane-dir <path> Connect to a specific Pane data directory"
423
+ ],
424
+ "repos add": [
425
+ "Usage:",
426
+ " runpane repos add --path <path> [--name <name>] [--json] [--yes]",
427
+ "",
428
+ "Registers an existing git repository with the running Pane app.",
429
+ "",
430
+ "Options:",
431
+ " --path <path> Existing git repository path",
432
+ " --name <name> Saved repository name; defaults to the directory name",
433
+ " --pane-dir <path> Connect to a specific Pane data directory",
434
+ " --json Print machine-readable output",
435
+ " --dry-run Validate and preview without adding the repo",
436
+ " --yes Skip confirmation for mutating commands"
437
+ ],
438
+ "panes create": [
439
+ "Usage:",
440
+ " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]",
441
+ " runpane panes create --from-json <path|-> [--yes] [--json]",
442
+ "",
443
+ "Creates Pane sessions in a saved repository and opens a terminal-backed tool tab.",
444
+ "",
445
+ "Options:",
446
+ " --repo <selector> active, id, exact path, or saved repository name",
447
+ " --name <name> Pane/session name",
448
+ " --worktree-name <name> Worktree name; defaults to --name",
449
+ " --base-branch <branch> Base branch for the worktree",
450
+ " --agent <codex|claude> Built-in terminal template",
451
+ " --tool-command <command> Custom terminal command",
452
+ " --title <title> Terminal tab title",
453
+ " --initial-input <text> Text sent after the command is ready",
454
+ " --prompt <text> Alias for --initial-input",
455
+ " --initial-input-file <path|-> Read initial input from a file or stdin",
456
+ " --from-json <path|-> Read a full request payload",
457
+ " --timeout-ms <milliseconds> Pane creation timeout",
458
+ " --pane-dir <path> Connect to a specific Pane data directory",
459
+ " --json Print machine-readable output",
460
+ " --dry-run Validate and preview without creating panes",
461
+ " --yes Skip confirmation for mutating commands"
462
+ ]
463
+ },
464
+ "pip": {
465
+ "default": [
466
+ "Usage:",
467
+ " runpane",
468
+ " runpane setup",
469
+ " runpane install [client|daemon] [options]",
470
+ " runpane update [options]",
471
+ " runpane version",
472
+ " runpane doctor",
473
+ " runpane repos list [--json]",
474
+ " runpane repos add --path <path> [--name <name>]",
475
+ " runpane panes create --repo <selector> --name <name> --agent <codex|claude>",
476
+ " runpane help [command]",
477
+ "",
478
+ "Quick start:",
479
+ " pipx run runpane",
480
+ " python -m pip install runpane && python -m runpane setup",
481
+ "",
482
+ "Advanced examples:",
483
+ " pipx run runpane install client",
484
+ " pipx run runpane install daemon --label \"My Server\"",
485
+ " uvx runpane@latest",
486
+ "",
487
+ "Run \"runpane help panes create\" for pane orchestration options."
488
+ ],
489
+ "install": [
490
+ "Usage:",
491
+ " runpane install [client|daemon] [options]",
492
+ "",
493
+ "Examples:",
494
+ " npx --yes runpane@latest install daemon --label \"My Server\"",
495
+ " pnpm dlx runpane@latest install daemon --prefer-tunnel ssh --label \"VM\"",
496
+ " pipx run runpane install daemon --label \"My Server\"",
497
+ "",
498
+ "Wrapper options:",
499
+ " --version <latest|vX.Y.Z>",
500
+ " --format <auto|appimage|deb|dmg|zip|exe>",
501
+ " --download-dir <path>",
502
+ " --pane-path <path>",
503
+ " --dry-run",
504
+ " --yes",
505
+ " --verbose",
506
+ "",
507
+ "Daemon passthrough options:",
508
+ " --label <name>",
509
+ " --prefer-tunnel <tailscale|ssh|manual|auto>",
510
+ " --channel <stable|nightly>",
511
+ " --base-url <url>",
512
+ " --pane-dir <path>",
513
+ " --listen-port <port> / --port <port>",
514
+ " --auto-listen-port",
515
+ " --interactive-tailscale-setup",
516
+ " --no-install-service",
517
+ " --no-tailscale-serve",
518
+ " --print-only",
519
+ " --repo-ref <ref>"
520
+ ],
521
+ "setup": [
522
+ "Usage:",
523
+ " runpane setup",
524
+ "",
525
+ "Opens the guided setup for desktop install, remote host setup, update, and diagnostics.",
526
+ "",
527
+ "Quick start:",
528
+ " pipx run runpane",
529
+ " python -m pip install runpane && python -m runpane setup"
530
+ ],
531
+ "update": [
532
+ "Usage:",
533
+ " runpane update [--version <latest|vX.Y.Z>] [--dry-run] [--yes]"
534
+ ],
535
+ "version": [
536
+ "Usage:",
537
+ " runpane version",
538
+ " runpane --version"
539
+ ],
540
+ "doctor": [
541
+ "Usage:",
542
+ " runpane doctor [--pane-path <path>] [--format <format>] [--verbose]"
543
+ ],
544
+ "repos list": [
545
+ "Usage:",
546
+ " runpane repos list [--json] [--pane-dir <path>]",
547
+ "",
548
+ "Lists repositories saved in the running Pane app.",
549
+ "",
550
+ "Options:",
551
+ " --json",
552
+ " --pane-dir <path>"
553
+ ],
554
+ "repos add": [
555
+ "Usage:",
556
+ " runpane repos add --path <path> [--name <name>] [--json] [--yes]",
557
+ "",
558
+ "Registers an existing git repository with the running Pane app.",
559
+ "",
560
+ "Options:",
561
+ " --path <path>",
562
+ " --name <name>",
563
+ " --pane-dir <path>",
564
+ " --json",
565
+ " --dry-run",
566
+ " --yes"
567
+ ],
568
+ "panes create": [
569
+ "Usage:",
570
+ " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]",
571
+ " runpane panes create --from-json <path|-> [--yes] [--json]",
572
+ "",
573
+ "Creates Pane sessions in a saved repository and opens a terminal-backed tool tab.",
574
+ "",
575
+ "Options:",
576
+ " --repo <selector>",
577
+ " --name <name>",
578
+ " --worktree-name <name>",
579
+ " --base-branch <branch>",
580
+ " --agent <codex|claude>",
581
+ " --tool-command <command>",
582
+ " --title <title>",
583
+ " --initial-input <text>",
584
+ " --prompt <text>",
585
+ " --initial-input-file <path|->",
586
+ " --from-json <path|->",
587
+ " --timeout-ms <milliseconds>",
588
+ " --pane-dir <path>",
589
+ " --json",
590
+ " --dry-run",
591
+ " --yes"
592
+ ]
593
+ }
594
+ },
595
+ "docs": {
596
+ "maintainerRules": [
597
+ "Treat `contracts/runpane/contract.json` as the source of truth for both wrapper packages and generated docs.",
598
+ "Every command, flag, platform default, artifact-selection rule, and attribution rule change must be reflected in the contract.",
599
+ "The npm and PyPI wrappers must expose the same command behavior unless the contract explicitly documents a package-manager-specific difference.",
600
+ "Root `README.md` and package READMEs should lead with one guided quick-start command. Explicit commands, package-manager variants, and flags belong in an Advanced section.",
601
+ "Release version bumps must keep root `package.json`, `packages/runpane`, and `packages/runpane-py` versions in sync. Run `pnpm run check:runpane-package-versions` before release.",
602
+ "`pnpm run test:runpane-contract` must pass before changing wrapper command parsing, help output, platform defaults, release asset selection, or generated contract artifacts.",
603
+ "Token-based npm or PyPI publishing is a temporary fallback. Prefer trusted publishing once the package names are reserved and trusted publishers are configured."
604
+ ],
605
+ "recommendedQuickStarts": [
606
+ "npx --yes runpane@latest",
607
+ "npm i -g runpane && runpane setup",
608
+ "pipx run runpane",
609
+ "python -m pip install runpane && python -m runpane setup"
610
+ ],
611
+ "npmCommands": [
612
+ "npx --yes runpane@latest",
613
+ "npx --yes runpane@latest setup",
614
+ "npx --yes runpane@latest install client",
615
+ "npx --yes runpane@latest install daemon --label \"My Server\"",
616
+ "pnpm dlx runpane@latest",
617
+ "pnpm dlx runpane@latest install daemon --label \"My Server\"",
618
+ "npm i -g runpane && runpane",
619
+ "npm i -g runpane && runpane setup",
620
+ "npm i -g runpane && runpane install daemon --label \"My Server\"",
621
+ "pnpm add -g runpane && runpane",
622
+ "pnpm add -g runpane && runpane setup",
623
+ "pnpm add -g runpane && runpane install daemon --label \"My Server\"",
624
+ "yarn dlx runpane@latest install daemon --label \"My Server\"",
625
+ "bunx runpane@latest install daemon --label \"My Server\""
626
+ ],
627
+ "pythonCommands": [
628
+ "pipx run runpane",
629
+ "pipx run runpane setup",
630
+ "python -m pip install runpane",
631
+ "runpane",
632
+ "runpane setup",
633
+ "python -m runpane setup",
634
+ "runpane install daemon --label \"My Server\"",
635
+ "pipx install runpane",
636
+ "runpane",
637
+ "runpane setup",
638
+ "pipx run runpane install daemon --label \"My Server\"",
639
+ "uvx runpane@latest",
640
+ "uvx runpane@latest setup",
641
+ "uvx runpane@latest install daemon --label \"My Server\"",
642
+ "python -m runpane install daemon --label \"My Server\""
643
+ ],
644
+ "packageManagerNotes": [
645
+ "Use `pnpm dlx` for one-shot pnpm execution and `pnpm add -g` for persistent CLI installation.",
646
+ "Do not document `pnpm install runpane` as the public CLI install path."
647
+ ],
648
+ "commandUsages": [
649
+ "runpane",
650
+ "runpane setup",
651
+ "runpane install",
652
+ "runpane install client",
653
+ "runpane install daemon",
654
+ "runpane update",
655
+ "runpane version",
656
+ "runpane doctor",
657
+ "runpane repos list --json",
658
+ "runpane repos add --path /path/to/repo --name Pane --yes --json",
659
+ "runpane panes create --repo active --name issue-252 --agent codex --prompt \"Kick off the discussion skill for issue 252\" --yes",
660
+ "runpane panes create --from-json panes.json --yes --json",
661
+ "runpane help",
662
+ "runpane <command> --help"
663
+ ],
664
+ "commandDescriptions": [
665
+ "`runpane` with no arguments and `runpane setup` open an interactive wizard when stdin and stdout are TTYs. In non-interactive shells or CI, both forms must print help and exit successfully instead of waiting for input.",
666
+ "`runpane install` is an alias for `runpane install client`.",
667
+ "`runpane install client` downloads the selected Pane desktop artifact and installs, opens, or launches it for the current platform.",
668
+ "`runpane install daemon` downloads or installs Pane, resolves a stable Pane executable path, and spawns `<pane executable> --remote-setup <forwarded remote setup args>`.",
669
+ "The wrapper must stream Pane stdout/stderr without reformatting because `pane --remote-setup` prints the one-time `pane-remote://...` connection code.",
670
+ "`runpane update` uses the same release resolution and installer path as `install client`.",
671
+ "`runpane version` prints the wrapper package version, the installed Pane version when detectable, and the latest GitHub release version when reachable.",
672
+ "`runpane doctor` checks platform support, release metadata reachability, download URL selection, installed Pane detection, and remote-daemon hints.",
673
+ "`runpane repos list` connects to the running local Pane daemon and prints saved repository records.",
674
+ "`runpane repos add` registers an existing git repository with the running local Pane daemon. It does not create directories or initialize git repositories by default.",
675
+ "`runpane panes create` connects to the running local Pane daemon, resolves the requested repository, creates Pane sessions, opens terminal-backed tool tabs, and optionally sends initial input to the started tool.",
676
+ "`runpane panes create --prompt` is an alias for `--initial-input`; request JSON and daemon payloads should use the canonical `initialInput` field."
677
+ ],
678
+ "wrapperFlagNote": "The top-level `runpane --version` form prints the wrapper version. The install subcommand form `runpane install --version vX.Y.Z` selects a Pane release.",
679
+ "localControlFlagNote": "`runpane repos list` and `runpane panes create` use the local framed daemon socket/pipe for a running Pane app. `--pane-dir` points the wrapper at a non-default Pane data directory, such as `PANE_DIR=~/.pane_test` in development.",
680
+ "daemonFlagNote": "Unknown daemon flags should be forwarded rather than dropped so newer Pane versions can extend `--remote-setup` without requiring an immediate wrapper release. Unknown flags for non-daemon commands should fail clearly.",
681
+ "downloadAttribution": [
682
+ "The npm package uses `source=npm` for all npm-registry consumers, including `npx`, `pnpm dlx`, `yarn dlx`, `bunx`, and global npm/pnpm installs.",
683
+ "The PyPI package uses `source=pip` for all Python consumers, including pip, pipx, uvx, and `python -m runpane`.",
684
+ "Wrappers should prefer `https://runpane.com/api/download?platform=<platform>&arch=<arch>&format=<format>&version=<version>&channel=<channel>&source=<npm|pip>`.",
685
+ "If the website route cannot satisfy the download, wrappers may fall back to the matching GitHub release asset and print a warning that website attribution may be incomplete for that run."
686
+ ],
687
+ "publishingCredentials": [
688
+ "Local implementation, build, and dry-run validation do not need npm or PyPI API tokens.",
689
+ "Release publishing should prefer npm Trusted Publishing and PyPI Trusted Publishing from GitHub Actions.",
690
+ "Fallback `NPM_TOKEN` or `PYPI_API_TOKEN` credentials may be used for first package reservation or manual publication only. They must be supplied through local environment variables or GitHub Actions secrets, never committed, and revoked or rotated after use."
691
+ ]
692
+ },
693
+ "testFixtures": {
694
+ "parserSamples": [
695
+ [
696
+ "setup"
697
+ ],
698
+ [
699
+ "install"
700
+ ],
701
+ [
702
+ "install",
703
+ "client",
704
+ "--version",
705
+ "v2.2.8",
706
+ "--format",
707
+ "dmg",
708
+ "--download-dir",
709
+ "/tmp/pane-downloads",
710
+ "--dry-run",
711
+ "--yes"
712
+ ],
713
+ [
714
+ "install",
715
+ "daemon",
716
+ "--label",
717
+ "VM",
718
+ "--prefer-tunnel",
719
+ "ssh",
720
+ "--channel",
721
+ "nightly",
722
+ "--base-url",
723
+ "https://example.test",
724
+ "--pane-dir",
725
+ "/tmp/pane",
726
+ "--listen-port",
727
+ "4555",
728
+ "--auto-listen-port",
729
+ "--print-only",
730
+ "--repo-ref",
731
+ "main",
732
+ "--unknown-future-flag",
733
+ "future-value",
734
+ "--dry-run",
735
+ "--verbose"
736
+ ],
737
+ [
738
+ "update",
739
+ "--version",
740
+ "latest",
741
+ "--format",
742
+ "appimage",
743
+ "--pane-path",
744
+ "/usr/bin/pane",
745
+ "--dry-run"
746
+ ],
747
+ [
748
+ "doctor",
749
+ "--pane-path",
750
+ "/usr/bin/pane",
751
+ "--format",
752
+ "zip",
753
+ "--verbose"
754
+ ],
755
+ [
756
+ "repos",
757
+ "list",
758
+ "--json",
759
+ "--pane-dir",
760
+ "/tmp/pane"
761
+ ],
762
+ [
763
+ "repos",
764
+ "add",
765
+ "--path",
766
+ "/tmp/repo",
767
+ "--name",
768
+ "Repo",
769
+ "--dry-run",
770
+ "--yes",
771
+ "--json",
772
+ "--pane-dir",
773
+ "/tmp/pane"
774
+ ],
775
+ [
776
+ "panes",
777
+ "create",
778
+ "--repo",
779
+ "active",
780
+ "--name",
781
+ "issue-252",
782
+ "--agent",
783
+ "codex",
784
+ "--prompt",
785
+ "Kick off discussion",
786
+ "--dry-run",
787
+ "--yes",
788
+ "--json"
789
+ ],
790
+ [
791
+ "panes",
792
+ "create",
793
+ "--from-json",
794
+ "-",
795
+ "--yes",
796
+ "--json"
797
+ ],
798
+ [
799
+ "--version"
800
+ ]
801
+ ],
802
+ "topLevelHelpIncludes": [
803
+ "runpane setup",
804
+ "runpane install",
805
+ "runpane update",
806
+ "runpane version",
807
+ "runpane doctor",
808
+ "runpane repos list",
809
+ "runpane repos add",
810
+ "runpane panes create"
811
+ ],
812
+ "npmHelpIncludes": [
813
+ "pnpm dlx runpane@latest",
814
+ "npx --yes runpane@latest"
815
+ ],
816
+ "pipHelpIncludes": [
817
+ "pipx run runpane",
818
+ "python -m pip install runpane && python -m runpane setup"
819
+ ],
820
+ "installHelpIncludes": [
821
+ "--version <latest|vX.Y.Z>",
822
+ "--format <auto|appimage|deb|dmg|zip|exe>",
823
+ "--download-dir <path>",
824
+ "--pane-path <path>",
825
+ "--label <name>",
826
+ "--prefer-tunnel <tailscale|ssh|manual|auto>",
827
+ "--repo-ref <ref>"
828
+ ]
829
+ },
830
+ "jsonSchemas": {
831
+ "error": {
832
+ "type": "object",
833
+ "required": [
834
+ "ok",
835
+ "error"
836
+ ],
837
+ "properties": {
838
+ "ok": {
839
+ "const": false
840
+ },
841
+ "error": {
842
+ "type": "object",
843
+ "required": [
844
+ "message"
845
+ ],
846
+ "properties": {
847
+ "message": {
848
+ "type": "string"
849
+ },
850
+ "code": {
851
+ "type": "string"
852
+ }
853
+ },
854
+ "additionalProperties": false
855
+ }
856
+ },
857
+ "additionalProperties": false
858
+ },
859
+ "repoListResult": {
860
+ "type": "object",
861
+ "required": [
862
+ "ok",
863
+ "repos"
864
+ ],
865
+ "properties": {
866
+ "ok": {
867
+ "const": true
868
+ },
869
+ "repos": {
870
+ "type": "array",
871
+ "items": {
872
+ "type": "object",
873
+ "required": [
874
+ "id",
875
+ "name",
876
+ "path",
877
+ "active",
878
+ "sessionCount"
879
+ ],
880
+ "properties": {
881
+ "id": {
882
+ "type": "number"
883
+ },
884
+ "name": {
885
+ "type": "string"
886
+ },
887
+ "path": {
888
+ "type": "string"
889
+ },
890
+ "active": {
891
+ "type": "boolean"
892
+ },
893
+ "environment": {
894
+ "type": "string"
895
+ },
896
+ "sessionCount": {
897
+ "type": "number"
898
+ }
899
+ },
900
+ "additionalProperties": false
901
+ }
902
+ }
903
+ },
904
+ "additionalProperties": false
905
+ },
906
+ "repoAddRequest": {
907
+ "type": "object",
908
+ "required": [
909
+ "path"
910
+ ],
911
+ "properties": {
912
+ "path": {
913
+ "type": "string"
914
+ },
915
+ "name": {
916
+ "type": "string"
917
+ },
918
+ "dryRun": {
919
+ "type": "boolean"
920
+ }
921
+ },
922
+ "additionalProperties": false
923
+ },
924
+ "repoAddResult": {
925
+ "type": "object",
926
+ "required": [
927
+ "ok",
928
+ "created"
929
+ ],
930
+ "properties": {
931
+ "ok": {
932
+ "const": true
933
+ },
934
+ "created": {
935
+ "type": "boolean"
936
+ },
937
+ "dryRun": {
938
+ "type": "boolean"
939
+ },
940
+ "repo": {
941
+ "$ref": "#/jsonSchemas/repoListResult/properties/repos/items"
942
+ },
943
+ "preview": {
944
+ "type": "object",
945
+ "required": [
946
+ "name",
947
+ "path",
948
+ "alreadyExists",
949
+ "wouldCreate"
950
+ ],
951
+ "properties": {
952
+ "name": {
953
+ "type": "string"
954
+ },
955
+ "path": {
956
+ "type": "string"
957
+ },
958
+ "alreadyExists": {
959
+ "type": "boolean"
960
+ },
961
+ "wouldCreate": {
962
+ "type": "boolean"
963
+ },
964
+ "environment": {
965
+ "type": "string"
966
+ }
967
+ },
968
+ "additionalProperties": false
969
+ }
970
+ },
971
+ "additionalProperties": false
972
+ },
973
+ "paneCreateRequest": {
974
+ "type": "object",
975
+ "required": [
976
+ "repo",
977
+ "panes"
978
+ ],
979
+ "properties": {
980
+ "repo": {
981
+ "oneOf": [
982
+ {
983
+ "type": "string"
984
+ },
985
+ {
986
+ "type": "object",
987
+ "properties": {
988
+ "id": {
989
+ "type": "number"
990
+ },
991
+ "path": {
992
+ "type": "string"
993
+ },
994
+ "name": {
995
+ "type": "string"
996
+ },
997
+ "active": {
998
+ "const": true
999
+ }
1000
+ },
1001
+ "additionalProperties": false
1002
+ }
1003
+ ]
1004
+ },
1005
+ "panes": {
1006
+ "type": "array",
1007
+ "minItems": 1,
1008
+ "items": {
1009
+ "type": "object",
1010
+ "required": [
1011
+ "name",
1012
+ "tool"
1013
+ ],
1014
+ "properties": {
1015
+ "name": {
1016
+ "type": "string"
1017
+ },
1018
+ "worktreeName": {
1019
+ "type": "string"
1020
+ },
1021
+ "baseBranch": {
1022
+ "type": "string"
1023
+ },
1024
+ "sessionPrompt": {
1025
+ "type": "string"
1026
+ },
1027
+ "tool": {
1028
+ "oneOf": [
1029
+ {
1030
+ "type": "object",
1031
+ "required": [
1032
+ "agent"
1033
+ ],
1034
+ "properties": {
1035
+ "agent": {
1036
+ "enum": [
1037
+ "codex",
1038
+ "claude"
1039
+ ]
1040
+ },
1041
+ "title": {
1042
+ "type": "string"
1043
+ },
1044
+ "initialInput": {
1045
+ "type": "string"
1046
+ }
1047
+ },
1048
+ "additionalProperties": false
1049
+ },
1050
+ {
1051
+ "type": "object",
1052
+ "required": [
1053
+ "command"
1054
+ ],
1055
+ "properties": {
1056
+ "command": {
1057
+ "type": "string"
1058
+ },
1059
+ "title": {
1060
+ "type": "string"
1061
+ },
1062
+ "initialInput": {
1063
+ "type": "string"
1064
+ }
1065
+ },
1066
+ "additionalProperties": false
1067
+ }
1068
+ ]
1069
+ }
1070
+ },
1071
+ "additionalProperties": false
1072
+ }
1073
+ },
1074
+ "dryRun": {
1075
+ "type": "boolean"
1076
+ },
1077
+ "timeoutMs": {
1078
+ "type": "number"
1079
+ }
1080
+ },
1081
+ "additionalProperties": false
1082
+ },
1083
+ "paneCreateResult": {
1084
+ "type": "object",
1085
+ "required": [
1086
+ "ok",
1087
+ "repo",
1088
+ "items"
1089
+ ],
1090
+ "properties": {
1091
+ "ok": {
1092
+ "type": "boolean"
1093
+ },
1094
+ "repo": {
1095
+ "$ref": "#/jsonSchemas/repoListResult/properties/repos/items"
1096
+ },
1097
+ "items": {
1098
+ "type": "array",
1099
+ "items": {
1100
+ "oneOf": [
1101
+ {
1102
+ "type": "object",
1103
+ "required": [
1104
+ "ok",
1105
+ "index",
1106
+ "name"
1107
+ ],
1108
+ "properties": {
1109
+ "ok": {
1110
+ "const": true
1111
+ },
1112
+ "index": {
1113
+ "type": "number"
1114
+ },
1115
+ "name": {
1116
+ "type": "string"
1117
+ },
1118
+ "sessionId": {
1119
+ "type": "string"
1120
+ },
1121
+ "paneId": {
1122
+ "type": "string"
1123
+ },
1124
+ "panelId": {
1125
+ "type": "string"
1126
+ },
1127
+ "worktreePath": {
1128
+ "type": "string"
1129
+ },
1130
+ "tool": {
1131
+ "type": "object",
1132
+ "required": [
1133
+ "title",
1134
+ "command"
1135
+ ],
1136
+ "properties": {
1137
+ "title": {
1138
+ "type": "string"
1139
+ },
1140
+ "command": {
1141
+ "type": "string"
1142
+ },
1143
+ "agent": {
1144
+ "enum": [
1145
+ "codex",
1146
+ "claude"
1147
+ ]
1148
+ }
1149
+ },
1150
+ "additionalProperties": false
1151
+ }
1152
+ },
1153
+ "additionalProperties": false
1154
+ },
1155
+ {
1156
+ "type": "object",
1157
+ "required": [
1158
+ "ok",
1159
+ "index",
1160
+ "error"
1161
+ ],
1162
+ "properties": {
1163
+ "ok": {
1164
+ "const": false
1165
+ },
1166
+ "index": {
1167
+ "type": "number"
1168
+ },
1169
+ "name": {
1170
+ "type": "string"
1171
+ },
1172
+ "error": {
1173
+ "type": "object",
1174
+ "required": [
1175
+ "message"
1176
+ ],
1177
+ "properties": {
1178
+ "message": {
1179
+ "type": "string"
1180
+ },
1181
+ "code": {
1182
+ "type": "string"
1183
+ }
1184
+ },
1185
+ "additionalProperties": false
1186
+ }
1187
+ },
1188
+ "additionalProperties": false
1189
+ }
1190
+ ]
1191
+ }
1192
+ }
1193
+ },
1194
+ "additionalProperties": false
1195
+ }
1196
+ }
1197
+ };
1198
+ //# sourceMappingURL=contract.js.map