runpane 2.4.163 → 2.4.164

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.
@@ -297,6 +297,76 @@ exports.RUNPANE_CONTRACT = {
297
297
  ],
298
298
  "localControl": true
299
299
  },
300
+ {
301
+ "name": "workspace list",
302
+ "summary": "List your machines on Tailscale and whether each has joined workspaces.",
303
+ "usage": [
304
+ "runpane workspace list [--json] [--pane-dir <path>]"
305
+ ],
306
+ "wrappers": [
307
+ "npm"
308
+ ],
309
+ "localControl": true
310
+ },
311
+ {
312
+ "name": "workspace enable",
313
+ "summary": "Put this machine's Pane on your tailnet for runpane workspace (the default when Tailscale is signed in).",
314
+ "usage": [
315
+ "runpane workspace enable [--json] [--pane-dir <path>]"
316
+ ],
317
+ "mutates": true,
318
+ "wrappers": [
319
+ "npm"
320
+ ],
321
+ "localControl": true
322
+ },
323
+ {
324
+ "name": "workspace disable",
325
+ "summary": "Take this machine off runpane workspace and remove its tailscale serve handler on port 8443.",
326
+ "usage": [
327
+ "runpane workspace disable [--json] [--pane-dir <path>]"
328
+ ],
329
+ "mutates": true,
330
+ "wrappers": [
331
+ "npm"
332
+ ],
333
+ "localControl": true
334
+ },
335
+ {
336
+ "name": "workspace read",
337
+ "summary": "Print a file from one of your machines; any path form works (C:\\..., /mnt/c/..., /home/..., ~/...).",
338
+ "usage": [
339
+ "runpane workspace [<machine>] read <path> [--json]"
340
+ ],
341
+ "wrappers": [
342
+ "npm"
343
+ ],
344
+ "localControl": true
345
+ },
346
+ {
347
+ "name": "workspace write",
348
+ "summary": "Write stdin to a file on one of your machines, creating parent folders.",
349
+ "usage": [
350
+ "runpane workspace [<machine>] write <path> [--json]"
351
+ ],
352
+ "mutates": true,
353
+ "wrappers": [
354
+ "npm"
355
+ ],
356
+ "localControl": true
357
+ },
358
+ {
359
+ "name": "workspace exec",
360
+ "summary": "Run a command in another machine's shell and return stdout, stderr, the exit code, OS, and shell.",
361
+ "usage": [
362
+ "runpane workspace <machine> exec [--cwd <path>] [--timeout-ms <ms>] [--json] -- <command>"
363
+ ],
364
+ "mutates": true,
365
+ "wrappers": [
366
+ "npm"
367
+ ],
368
+ "localControl": true
369
+ },
300
370
  {
301
371
  "name": "watch",
302
372
  "summary": "Wait for workspace agent and Pane transitions using a daemon-held cursor.",
@@ -1652,6 +1722,11 @@ exports.RUNPANE_CONTRACT = {
1652
1722
  "name": "--question",
1653
1723
  "value": "<text>",
1654
1724
  "description": "What a blocked worker needs answered; required with --state blocked."
1725
+ },
1726
+ {
1727
+ "name": "--cwd",
1728
+ "value": "<path>",
1729
+ "description": "Working directory on the target machine for workspace exec."
1655
1730
  }
1656
1731
  ],
1657
1732
  "localBoolean": [
@@ -1795,6 +1870,8 @@ exports.RUNPANE_CONTRACT = {
1795
1870
  " runpane panes list [--repo <selector>] [--json]",
1796
1871
  " runpane panes cost [--repo <selector>] [--pane <pane-id>] [--json]",
1797
1872
  " runpane workspace state [--repo <selector>] [--json]",
1873
+ " runpane workspace list [--json]",
1874
+ " runpane workspace <machine> read|write|exec|<command>",
1798
1875
  " runpane watch --follow",
1799
1876
  " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--base-branch <branch>] [--source user|agent] [--focus|--no-focus] [--wait-ready]",
1800
1877
  " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--remove-worktree] [--dry-run] --yes",
@@ -2020,11 +2097,20 @@ exports.RUNPANE_CONTRACT = {
2020
2097
  " --json Print machine-readable output"
2021
2098
  ],
2022
2099
  "workspace": [
2023
- "Workspace observation commands.",
2100
+ "Workspace commands: this machine's Panes, and your other machines over Tailscale.",
2024
2101
  "",
2025
2102
  "Usage:",
2026
2103
  " runpane workspace state [--repo <selector>] [--json]",
2027
- " runpane watch --follow"
2104
+ " runpane watch --follow",
2105
+ " runpane workspace list [--json]",
2106
+ " runpane workspace <machine> read <path>",
2107
+ " runpane workspace <machine> write <path> (content from stdin)",
2108
+ " runpane workspace <machine> exec -- <command>",
2109
+ " runpane workspace <machine> <any runpane command> (e.g. sessions list --json)",
2110
+ " runpane workspace enable|disable",
2111
+ "",
2112
+ "<machine> is a Tailscale name, unique prefix, or IP. Only machines signed in to your own Tailscale login are reachable.",
2113
+ "Without <machine>, read, write, and exec route a path that cannot exist here (C:\\... on a Mac) to the one joined machine it fits."
2028
2114
  ],
2029
2115
  "workspace state": [
2030
2116
  "Usage:",
@@ -2883,6 +2969,68 @@ exports.RUNPANE_CONTRACT = {
2883
2969
  " --force Release a lock another owner holds (release).",
2884
2970
  " --session <id|name> Named Session whose locks to list or release.",
2885
2971
  " --json Print JSON output."
2972
+ ],
2973
+ "workspace list": [
2974
+ "Usage:",
2975
+ " runpane workspace list [--json] [--pane-dir <path>]",
2976
+ "",
2977
+ "List your machines on Tailscale and whether each has joined workspaces.",
2978
+ "",
2979
+ "Options:",
2980
+ " --json Print machine-readable output."
2981
+ ],
2982
+ "workspace enable": [
2983
+ "Usage:",
2984
+ " runpane workspace enable [--json] [--pane-dir <path>]",
2985
+ "",
2986
+ "Put this machine's Pane on your tailnet for runpane workspace (the default when Tailscale is signed in).",
2987
+ "",
2988
+ "Options:",
2989
+ " --json Print machine-readable output."
2990
+ ],
2991
+ "workspace disable": [
2992
+ "Usage:",
2993
+ " runpane workspace disable [--json] [--pane-dir <path>]",
2994
+ "",
2995
+ "Take this machine off runpane workspace and remove its tailscale serve handler on port 8443.",
2996
+ "",
2997
+ "Options:",
2998
+ " --json Print machine-readable output."
2999
+ ],
3000
+ "workspace read": [
3001
+ "Usage:",
3002
+ " runpane workspace [<machine>] read <path> [--json]",
3003
+ "",
3004
+ "Print a file from one of your machines; any path form works (C:\\..., /mnt/c/..., /home/..., ~/...).",
3005
+ "",
3006
+ "Options:",
3007
+ " <machine> Tailscale machine name, unique prefix, MagicDNS name, or Tailscale IP. Omit it to route a path that cannot exist here to the one joined machine it fits.",
3008
+ " <path> Absolute path in any form; ~ is that machine's home.",
3009
+ " --json Print machine-readable output."
3010
+ ],
3011
+ "workspace write": [
3012
+ "Usage:",
3013
+ " runpane workspace [<machine>] write <path> [--json]",
3014
+ "",
3015
+ "Write stdin to a file on one of your machines, creating parent folders.",
3016
+ "",
3017
+ "Options:",
3018
+ " <machine> Tailscale machine name, unique prefix, MagicDNS name, or Tailscale IP. Omit it to route a path that cannot exist here to the one joined machine it fits.",
3019
+ " <path> Absolute path in any form.",
3020
+ " --json Print machine-readable output."
3021
+ ],
3022
+ "workspace exec": [
3023
+ "Usage:",
3024
+ " runpane workspace <machine> exec [--cwd <path>] [--timeout-ms <ms>] [--json] -- <command>",
3025
+ "",
3026
+ "Run a command in another machine's shell and return stdout, stderr, the exit code, OS, and shell.",
3027
+ "",
3028
+ "Options:",
3029
+ " <machine> Tailscale machine name, unique prefix, MagicDNS name, or Tailscale IP. Omit it to route a path that cannot exist here to the one joined machine it fits.",
3030
+ " --cwd <path> Working directory on that machine, in any path form; defaults to its home.",
3031
+ " --timeout-ms <milliseconds> Stop the command after this long (default 120000, at most 540000).",
3032
+ " --json Print machine-readable output.",
3033
+ " -- <command> The command line, run by that machine's shell."
2886
3034
  ]
2887
3035
  },
2888
3036
  "pip": {
@@ -3121,11 +3269,13 @@ exports.RUNPANE_CONTRACT = {
3121
3269
  " --json"
3122
3270
  ],
3123
3271
  "workspace": [
3124
- "Workspace observation commands.",
3272
+ "Workspace commands: this machine's Panes, and your other machines over Tailscale.",
3125
3273
  "",
3126
3274
  "Usage:",
3127
3275
  " runpane workspace state [--repo <selector>] [--json]",
3128
- " runpane watch --follow"
3276
+ " runpane watch --follow",
3277
+ "",
3278
+ "runpane workspace list|read|write|exec|enable|disable ship in the npm package: npx --yes runpane@latest workspace list"
3129
3279
  ],
3130
3280
  "workspace state": [
3131
3281
  "Usage:",
@@ -3945,6 +4095,48 @@ exports.RUNPANE_CONTRACT = {
3945
4095
  " --force Release a lock another owner holds (release).",
3946
4096
  " --session <id|name> Named Session whose locks to list or release.",
3947
4097
  " --json Print JSON output."
4098
+ ],
4099
+ "workspace list": [
4100
+ "Usage:",
4101
+ " runpane workspace list [--json] [--pane-dir <path>]",
4102
+ "",
4103
+ "`runpane workspace list` ships in the npm package and the Pane app, not in the Python package.",
4104
+ "Run it with Node instead: npx --yes runpane@latest workspace list"
4105
+ ],
4106
+ "workspace enable": [
4107
+ "Usage:",
4108
+ " runpane workspace enable [--json] [--pane-dir <path>]",
4109
+ "",
4110
+ "`runpane workspace enable` ships in the npm package and the Pane app, not in the Python package.",
4111
+ "Run it with Node instead: npx --yes runpane@latest workspace enable"
4112
+ ],
4113
+ "workspace disable": [
4114
+ "Usage:",
4115
+ " runpane workspace disable [--json] [--pane-dir <path>]",
4116
+ "",
4117
+ "`runpane workspace disable` ships in the npm package and the Pane app, not in the Python package.",
4118
+ "Run it with Node instead: npx --yes runpane@latest workspace disable"
4119
+ ],
4120
+ "workspace read": [
4121
+ "Usage:",
4122
+ " runpane workspace [<machine>] read <path> [--json]",
4123
+ "",
4124
+ "`runpane workspace read` ships in the npm package and the Pane app, not in the Python package.",
4125
+ "Run it with Node instead: npx --yes runpane@latest workspace read"
4126
+ ],
4127
+ "workspace write": [
4128
+ "Usage:",
4129
+ " runpane workspace [<machine>] write <path> [--json]",
4130
+ "",
4131
+ "`runpane workspace write` ships in the npm package and the Pane app, not in the Python package.",
4132
+ "Run it with Node instead: npx --yes runpane@latest workspace write"
4133
+ ],
4134
+ "workspace exec": [
4135
+ "Usage:",
4136
+ " runpane workspace <machine> exec [--cwd <path>] [--timeout-ms <ms>] [--json] -- <command>",
4137
+ "",
4138
+ "`runpane workspace exec` ships in the npm package and the Pane app, not in the Python package.",
4139
+ "Run it with Node instead: npx --yes runpane@latest workspace exec"
3948
4140
  ]
3949
4141
  }
3950
4142
  },
@@ -5395,10 +5587,80 @@ exports.RUNPANE_CONTRACT = {
5395
5587
  "items": {
5396
5588
  "type": "string"
5397
5589
  }
5590
+ },
5591
+ "workspaces": {
5592
+ "$ref": "#/jsonSchemas/workspacesSummary"
5398
5593
  }
5399
5594
  },
5400
5595
  "additionalProperties": false
5401
5596
  },
5597
+ "workspacesSummary": {
5598
+ "type": "object",
5599
+ "required": [
5600
+ "state",
5601
+ "machine",
5602
+ "otherMachines",
5603
+ "lines"
5604
+ ],
5605
+ "additionalProperties": false,
5606
+ "properties": {
5607
+ "state": {
5608
+ "enum": [
5609
+ "on",
5610
+ "off"
5611
+ ]
5612
+ },
5613
+ "machine": {
5614
+ "type": [
5615
+ "string",
5616
+ "null"
5617
+ ],
5618
+ "description": "This machine's Tailscale name."
5619
+ },
5620
+ "reason": {
5621
+ "type": "string",
5622
+ "description": "Why workspaces are off."
5623
+ },
5624
+ "fix": {
5625
+ "type": "string",
5626
+ "description": "The one step that turns them on."
5627
+ },
5628
+ "otherMachines": {
5629
+ "type": "array",
5630
+ "items": {
5631
+ "type": "object",
5632
+ "required": [
5633
+ "name",
5634
+ "os",
5635
+ "online"
5636
+ ],
5637
+ "additionalProperties": false,
5638
+ "properties": {
5639
+ "name": {
5640
+ "type": "string"
5641
+ },
5642
+ "os": {
5643
+ "enum": [
5644
+ "macOS",
5645
+ "Windows",
5646
+ "Linux"
5647
+ ]
5648
+ },
5649
+ "online": {
5650
+ "type": "boolean"
5651
+ }
5652
+ }
5653
+ }
5654
+ },
5655
+ "lines": {
5656
+ "type": "array",
5657
+ "items": {
5658
+ "type": "string"
5659
+ },
5660
+ "description": "The block printed by help, doctor, and agent-context."
5661
+ }
5662
+ }
5663
+ },
5402
5664
  "daemonRepairResult": {
5403
5665
  "type": "object",
5404
5666
  "required": [
@@ -7599,6 +7861,9 @@ exports.RUNPANE_CONTRACT = {
7599
7861
  },
7600
7862
  "detailCommand": {
7601
7863
  "type": "string"
7864
+ },
7865
+ "workspaces": {
7866
+ "$ref": "#/jsonSchemas/workspacesSummary"
7602
7867
  }
7603
7868
  },
7604
7869
  "additionalProperties": false
@@ -13103,6 +13368,170 @@ exports.RUNPANE_CONTRACT = {
13103
13368
  "lockListResult"
13104
13369
  ],
13105
13370
  "notes": []
13371
+ },
13372
+ "workspace list": {
13373
+ "name": "workspace list",
13374
+ "summary": "List your machines on Tailscale and whether each has joined workspaces.",
13375
+ "details": "Shows this machine's workspace state, then each of your other Mac, Windows, and Linux machines with its OS, online state, and shell. Only machines signed in to your own Tailscale login appear.",
13376
+ "requiresPaneDaemon": false,
13377
+ "mutates": false,
13378
+ "arguments": [
13379
+ {
13380
+ "name": "--json",
13381
+ "required": false,
13382
+ "description": "Print machine-readable output."
13383
+ }
13384
+ ],
13385
+ "examples": [
13386
+ "runpane workspace list --json"
13387
+ ],
13388
+ "notes": [
13389
+ "A machine has joined when Pane runs there with workspaces on; it answers on https://<machine>.<tailnet>.ts.net:8443."
13390
+ ]
13391
+ },
13392
+ "workspace enable": {
13393
+ "name": "workspace enable",
13394
+ "summary": "Put this machine's Pane on your tailnet for runpane workspace (the default when Tailscale is signed in).",
13395
+ "details": "Serves this Pane's daemon with tailscale serve on port 8443 in HTTP proxy mode. Only your own Tailscale login is accepted; nothing is opened to the internet.",
13396
+ "requiresPaneDaemon": true,
13397
+ "mutates": true,
13398
+ "arguments": [
13399
+ {
13400
+ "name": "--json",
13401
+ "required": false,
13402
+ "description": "Print machine-readable output."
13403
+ }
13404
+ ],
13405
+ "examples": [
13406
+ "runpane workspace enable"
13407
+ ],
13408
+ "notes": [
13409
+ "Workspaces are on by default when Tailscale is installed and signed in; this undoes runpane workspace disable."
13410
+ ]
13411
+ },
13412
+ "workspace disable": {
13413
+ "name": "workspace disable",
13414
+ "summary": "Take this machine off runpane workspace and remove its tailscale serve handler on port 8443.",
13415
+ "details": "Turns workspaces off for this machine until runpane workspace enable. The remote daemon on port 443 and pairing codes are unaffected.",
13416
+ "requiresPaneDaemon": true,
13417
+ "mutates": true,
13418
+ "arguments": [
13419
+ {
13420
+ "name": "--json",
13421
+ "required": false,
13422
+ "description": "Print machine-readable output."
13423
+ }
13424
+ ],
13425
+ "examples": [
13426
+ "runpane workspace disable"
13427
+ ],
13428
+ "notes": [
13429
+ "Other machines can no longer reach this one; this machine can still reach theirs."
13430
+ ]
13431
+ },
13432
+ "workspace read": {
13433
+ "name": "workspace read",
13434
+ "summary": "Print a file from one of your machines; any path form works (C:\\..., /mnt/c/..., /home/..., ~/...).",
13435
+ "details": "Reads the same way on every OS. On Windows, /mnt/c/... reaches C:\\... and WSL paths such as /home/<user>/... are read through \\\\wsl.localhost\\<distro>\\. Directories list their entries.",
13436
+ "requiresPaneDaemon": false,
13437
+ "mutates": false,
13438
+ "arguments": [
13439
+ {
13440
+ "name": "<machine>",
13441
+ "required": false,
13442
+ "description": "Tailscale machine name, unique prefix, MagicDNS name, or Tailscale IP. Omit it to route a path that cannot exist here to the one joined machine it fits."
13443
+ },
13444
+ {
13445
+ "name": "<path>",
13446
+ "required": true,
13447
+ "description": "Absolute path in any form; ~ is that machine's home."
13448
+ },
13449
+ {
13450
+ "name": "--json",
13451
+ "required": false,
13452
+ "description": "Print machine-readable output."
13453
+ }
13454
+ ],
13455
+ "examples": [
13456
+ "runpane workspace parsa-devbox read 'C:\\Users\\me\\.pane\\plans\\topic\\index.html'",
13457
+ "runpane workspace read /mnt/c/Users/me/notes.md"
13458
+ ],
13459
+ "notes": [
13460
+ "--json returns content with encoding utf8 or base64."
13461
+ ]
13462
+ },
13463
+ "workspace write": {
13464
+ "name": "workspace write",
13465
+ "summary": "Write stdin to a file on one of your machines, creating parent folders.",
13466
+ "details": "Takes the same path forms as workspace read. Content comes from stdin and replaces the file.",
13467
+ "requiresPaneDaemon": false,
13468
+ "mutates": true,
13469
+ "arguments": [
13470
+ {
13471
+ "name": "<machine>",
13472
+ "required": false,
13473
+ "description": "Tailscale machine name, unique prefix, MagicDNS name, or Tailscale IP. Omit it to route a path that cannot exist here to the one joined machine it fits."
13474
+ },
13475
+ {
13476
+ "name": "<path>",
13477
+ "required": true,
13478
+ "description": "Absolute path in any form."
13479
+ },
13480
+ {
13481
+ "name": "--json",
13482
+ "required": false,
13483
+ "description": "Print machine-readable output."
13484
+ }
13485
+ ],
13486
+ "examples": [
13487
+ "echo done | runpane workspace parsa-devbox write '~/notes/status.md'"
13488
+ ],
13489
+ "notes": [
13490
+ "Binary stdin is sent as base64 and written byte for byte."
13491
+ ]
13492
+ },
13493
+ "workspace exec": {
13494
+ "name": "workspace exec",
13495
+ "summary": "Run a command in another machine's shell and return stdout, stderr, the exit code, OS, and shell.",
13496
+ "details": "Runs in the shell Pane uses for terminals on that machine (PowerShell or Git Bash on Windows, the login shell elsewhere). The exit code becomes runpane's exit code. Without <machine>, a --cwd that cannot exist here picks the machine.",
13497
+ "requiresPaneDaemon": false,
13498
+ "mutates": true,
13499
+ "arguments": [
13500
+ {
13501
+ "name": "<machine>",
13502
+ "required": false,
13503
+ "description": "Tailscale machine name, unique prefix, MagicDNS name, or Tailscale IP. Omit it to route a path that cannot exist here to the one joined machine it fits."
13504
+ },
13505
+ {
13506
+ "name": "--cwd",
13507
+ "value": "<path>",
13508
+ "required": false,
13509
+ "description": "Working directory on that machine, in any path form; defaults to its home."
13510
+ },
13511
+ {
13512
+ "name": "--timeout-ms",
13513
+ "value": "<milliseconds>",
13514
+ "required": false,
13515
+ "description": "Stop the command after this long (default 120000, at most 540000)."
13516
+ },
13517
+ {
13518
+ "name": "--json",
13519
+ "required": false,
13520
+ "description": "Print machine-readable output."
13521
+ },
13522
+ {
13523
+ "name": "-- <command>",
13524
+ "required": true,
13525
+ "description": "The command line, run by that machine's shell."
13526
+ }
13527
+ ],
13528
+ "examples": [
13529
+ "runpane workspace parsa-devbox exec --json -- git -C C:\\src\\app status --short"
13530
+ ],
13531
+ "notes": [
13532
+ "This is SSH-level power: a local agent's sandbox and permission prompts see only runpane workspace exec, not what runs on the other machine.",
13533
+ "Pass the command as one quoted string; several words after -- are joined with spaces, so their own quoting is lost."
13534
+ ]
13106
13535
  }
13107
13536
  },
13108
13537
  "managedBlock": [