runpane 2.4.163 → 2.4.165

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,21 @@ 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> <runpane command> (any command that talks to Pane, 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.",
2114
+ "Commands that only run here (doctor, agent-context, mcp, docs) run there with: runpane workspace <machine> exec -- 'runpane doctor'"
2028
2115
  ],
2029
2116
  "workspace state": [
2030
2117
  "Usage:",
@@ -2883,6 +2970,68 @@ exports.RUNPANE_CONTRACT = {
2883
2970
  " --force Release a lock another owner holds (release).",
2884
2971
  " --session <id|name> Named Session whose locks to list or release.",
2885
2972
  " --json Print JSON output."
2973
+ ],
2974
+ "workspace list": [
2975
+ "Usage:",
2976
+ " runpane workspace list [--json] [--pane-dir <path>]",
2977
+ "",
2978
+ "List your machines on Tailscale and whether each has joined workspaces.",
2979
+ "",
2980
+ "Options:",
2981
+ " --json Print machine-readable output."
2982
+ ],
2983
+ "workspace enable": [
2984
+ "Usage:",
2985
+ " runpane workspace enable [--json] [--pane-dir <path>]",
2986
+ "",
2987
+ "Put this machine's Pane on your tailnet for runpane workspace (the default when Tailscale is signed in).",
2988
+ "",
2989
+ "Options:",
2990
+ " --json Print machine-readable output."
2991
+ ],
2992
+ "workspace disable": [
2993
+ "Usage:",
2994
+ " runpane workspace disable [--json] [--pane-dir <path>]",
2995
+ "",
2996
+ "Take this machine off runpane workspace and remove its tailscale serve handler on port 8443.",
2997
+ "",
2998
+ "Options:",
2999
+ " --json Print machine-readable output."
3000
+ ],
3001
+ "workspace read": [
3002
+ "Usage:",
3003
+ " runpane workspace [<machine>] read <path> [--json]",
3004
+ "",
3005
+ "Print a file from one of your machines; any path form works (C:\\..., /mnt/c/..., /home/..., ~/...).",
3006
+ "",
3007
+ "Options:",
3008
+ " <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.",
3009
+ " <path> Absolute path in any form; ~ is that machine's home.",
3010
+ " --json Print machine-readable output."
3011
+ ],
3012
+ "workspace write": [
3013
+ "Usage:",
3014
+ " runpane workspace [<machine>] write <path> [--json]",
3015
+ "",
3016
+ "Write stdin to a file on one of your machines, creating parent folders.",
3017
+ "",
3018
+ "Options:",
3019
+ " <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.",
3020
+ " <path> Absolute path in any form.",
3021
+ " --json Print machine-readable output."
3022
+ ],
3023
+ "workspace exec": [
3024
+ "Usage:",
3025
+ " runpane workspace <machine> exec [--cwd <path>] [--timeout-ms <ms>] [--json] -- <command>",
3026
+ "",
3027
+ "Run a command in another machine's shell and return stdout, stderr, the exit code, OS, and shell.",
3028
+ "",
3029
+ "Options:",
3030
+ " <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.",
3031
+ " --cwd <path> Working directory on that machine, in any path form; defaults to its home.",
3032
+ " --timeout-ms <milliseconds> Stop the command after this long (default 120000, at most 540000).",
3033
+ " --json Print machine-readable output.",
3034
+ " -- <command> The command line, run by that machine's shell."
2886
3035
  ]
2887
3036
  },
2888
3037
  "pip": {
@@ -3121,11 +3270,13 @@ exports.RUNPANE_CONTRACT = {
3121
3270
  " --json"
3122
3271
  ],
3123
3272
  "workspace": [
3124
- "Workspace observation commands.",
3273
+ "Workspace commands: this machine's Panes, and your other machines over Tailscale.",
3125
3274
  "",
3126
3275
  "Usage:",
3127
3276
  " runpane workspace state [--repo <selector>] [--json]",
3128
- " runpane watch --follow"
3277
+ " runpane watch --follow",
3278
+ "",
3279
+ "runpane workspace list|read|write|exec|enable|disable ship in the npm package: npx --yes runpane@latest workspace list"
3129
3280
  ],
3130
3281
  "workspace state": [
3131
3282
  "Usage:",
@@ -3945,6 +4096,48 @@ exports.RUNPANE_CONTRACT = {
3945
4096
  " --force Release a lock another owner holds (release).",
3946
4097
  " --session <id|name> Named Session whose locks to list or release.",
3947
4098
  " --json Print JSON output."
4099
+ ],
4100
+ "workspace list": [
4101
+ "Usage:",
4102
+ " runpane workspace list [--json] [--pane-dir <path>]",
4103
+ "",
4104
+ "`runpane workspace list` ships in the npm package and the Pane app, not in the Python package.",
4105
+ "Run it with Node instead: npx --yes runpane@latest workspace list"
4106
+ ],
4107
+ "workspace enable": [
4108
+ "Usage:",
4109
+ " runpane workspace enable [--json] [--pane-dir <path>]",
4110
+ "",
4111
+ "`runpane workspace enable` ships in the npm package and the Pane app, not in the Python package.",
4112
+ "Run it with Node instead: npx --yes runpane@latest workspace enable"
4113
+ ],
4114
+ "workspace disable": [
4115
+ "Usage:",
4116
+ " runpane workspace disable [--json] [--pane-dir <path>]",
4117
+ "",
4118
+ "`runpane workspace disable` ships in the npm package and the Pane app, not in the Python package.",
4119
+ "Run it with Node instead: npx --yes runpane@latest workspace disable"
4120
+ ],
4121
+ "workspace read": [
4122
+ "Usage:",
4123
+ " runpane workspace [<machine>] read <path> [--json]",
4124
+ "",
4125
+ "`runpane workspace read` ships in the npm package and the Pane app, not in the Python package.",
4126
+ "Run it with Node instead: npx --yes runpane@latest workspace read"
4127
+ ],
4128
+ "workspace write": [
4129
+ "Usage:",
4130
+ " runpane workspace [<machine>] write <path> [--json]",
4131
+ "",
4132
+ "`runpane workspace write` ships in the npm package and the Pane app, not in the Python package.",
4133
+ "Run it with Node instead: npx --yes runpane@latest workspace write"
4134
+ ],
4135
+ "workspace exec": [
4136
+ "Usage:",
4137
+ " runpane workspace <machine> exec [--cwd <path>] [--timeout-ms <ms>] [--json] -- <command>",
4138
+ "",
4139
+ "`runpane workspace exec` ships in the npm package and the Pane app, not in the Python package.",
4140
+ "Run it with Node instead: npx --yes runpane@latest workspace exec"
3948
4141
  ]
3949
4142
  }
3950
4143
  },
@@ -5395,10 +5588,80 @@ exports.RUNPANE_CONTRACT = {
5395
5588
  "items": {
5396
5589
  "type": "string"
5397
5590
  }
5591
+ },
5592
+ "workspaces": {
5593
+ "$ref": "#/jsonSchemas/workspacesSummary"
5398
5594
  }
5399
5595
  },
5400
5596
  "additionalProperties": false
5401
5597
  },
5598
+ "workspacesSummary": {
5599
+ "type": "object",
5600
+ "required": [
5601
+ "state",
5602
+ "machine",
5603
+ "otherMachines",
5604
+ "lines"
5605
+ ],
5606
+ "additionalProperties": false,
5607
+ "properties": {
5608
+ "state": {
5609
+ "enum": [
5610
+ "on",
5611
+ "off"
5612
+ ]
5613
+ },
5614
+ "machine": {
5615
+ "type": [
5616
+ "string",
5617
+ "null"
5618
+ ],
5619
+ "description": "This machine's Tailscale name."
5620
+ },
5621
+ "reason": {
5622
+ "type": "string",
5623
+ "description": "Why workspaces are off."
5624
+ },
5625
+ "fix": {
5626
+ "type": "string",
5627
+ "description": "The one step that turns them on."
5628
+ },
5629
+ "otherMachines": {
5630
+ "type": "array",
5631
+ "items": {
5632
+ "type": "object",
5633
+ "required": [
5634
+ "name",
5635
+ "os",
5636
+ "online"
5637
+ ],
5638
+ "additionalProperties": false,
5639
+ "properties": {
5640
+ "name": {
5641
+ "type": "string"
5642
+ },
5643
+ "os": {
5644
+ "enum": [
5645
+ "macOS",
5646
+ "Windows",
5647
+ "Linux"
5648
+ ]
5649
+ },
5650
+ "online": {
5651
+ "type": "boolean"
5652
+ }
5653
+ }
5654
+ }
5655
+ },
5656
+ "lines": {
5657
+ "type": "array",
5658
+ "items": {
5659
+ "type": "string"
5660
+ },
5661
+ "description": "The block printed by help, doctor, and agent-context."
5662
+ }
5663
+ }
5664
+ },
5402
5665
  "daemonRepairResult": {
5403
5666
  "type": "object",
5404
5667
  "required": [
@@ -7599,6 +7862,9 @@ exports.RUNPANE_CONTRACT = {
7599
7862
  },
7600
7863
  "detailCommand": {
7601
7864
  "type": "string"
7865
+ },
7866
+ "workspaces": {
7867
+ "$ref": "#/jsonSchemas/workspacesSummary"
7602
7868
  }
7603
7869
  },
7604
7870
  "additionalProperties": false
@@ -13103,6 +13369,170 @@ exports.RUNPANE_CONTRACT = {
13103
13369
  "lockListResult"
13104
13370
  ],
13105
13371
  "notes": []
13372
+ },
13373
+ "workspace list": {
13374
+ "name": "workspace list",
13375
+ "summary": "List your machines on Tailscale and whether each has joined workspaces.",
13376
+ "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.",
13377
+ "requiresPaneDaemon": false,
13378
+ "mutates": false,
13379
+ "arguments": [
13380
+ {
13381
+ "name": "--json",
13382
+ "required": false,
13383
+ "description": "Print machine-readable output."
13384
+ }
13385
+ ],
13386
+ "examples": [
13387
+ "runpane workspace list --json"
13388
+ ],
13389
+ "notes": [
13390
+ "A machine has joined when Pane runs there with workspaces on; it answers on https://<machine>.<tailnet>.ts.net:8443."
13391
+ ]
13392
+ },
13393
+ "workspace enable": {
13394
+ "name": "workspace enable",
13395
+ "summary": "Put this machine's Pane on your tailnet for runpane workspace (the default when Tailscale is signed in).",
13396
+ "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.",
13397
+ "requiresPaneDaemon": true,
13398
+ "mutates": true,
13399
+ "arguments": [
13400
+ {
13401
+ "name": "--json",
13402
+ "required": false,
13403
+ "description": "Print machine-readable output."
13404
+ }
13405
+ ],
13406
+ "examples": [
13407
+ "runpane workspace enable"
13408
+ ],
13409
+ "notes": [
13410
+ "Workspaces are on by default when Tailscale is installed and signed in; this undoes runpane workspace disable."
13411
+ ]
13412
+ },
13413
+ "workspace disable": {
13414
+ "name": "workspace disable",
13415
+ "summary": "Take this machine off runpane workspace and remove its tailscale serve handler on port 8443.",
13416
+ "details": "Turns workspaces off for this machine until runpane workspace enable. The remote daemon on port 443 and pairing codes are unaffected.",
13417
+ "requiresPaneDaemon": true,
13418
+ "mutates": true,
13419
+ "arguments": [
13420
+ {
13421
+ "name": "--json",
13422
+ "required": false,
13423
+ "description": "Print machine-readable output."
13424
+ }
13425
+ ],
13426
+ "examples": [
13427
+ "runpane workspace disable"
13428
+ ],
13429
+ "notes": [
13430
+ "Other machines can no longer reach this one; this machine can still reach theirs."
13431
+ ]
13432
+ },
13433
+ "workspace read": {
13434
+ "name": "workspace read",
13435
+ "summary": "Print a file from one of your machines; any path form works (C:\\..., /mnt/c/..., /home/..., ~/...).",
13436
+ "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.",
13437
+ "requiresPaneDaemon": false,
13438
+ "mutates": false,
13439
+ "arguments": [
13440
+ {
13441
+ "name": "<machine>",
13442
+ "required": false,
13443
+ "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."
13444
+ },
13445
+ {
13446
+ "name": "<path>",
13447
+ "required": true,
13448
+ "description": "Absolute path in any form; ~ is that machine's home."
13449
+ },
13450
+ {
13451
+ "name": "--json",
13452
+ "required": false,
13453
+ "description": "Print machine-readable output."
13454
+ }
13455
+ ],
13456
+ "examples": [
13457
+ "runpane workspace parsa-devbox read 'C:\\Users\\me\\.pane\\plans\\topic\\index.html'",
13458
+ "runpane workspace read /mnt/c/Users/me/notes.md"
13459
+ ],
13460
+ "notes": [
13461
+ "--json returns content with encoding utf8 or base64."
13462
+ ]
13463
+ },
13464
+ "workspace write": {
13465
+ "name": "workspace write",
13466
+ "summary": "Write stdin to a file on one of your machines, creating parent folders.",
13467
+ "details": "Takes the same path forms as workspace read. Content comes from stdin and replaces the file.",
13468
+ "requiresPaneDaemon": false,
13469
+ "mutates": true,
13470
+ "arguments": [
13471
+ {
13472
+ "name": "<machine>",
13473
+ "required": false,
13474
+ "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."
13475
+ },
13476
+ {
13477
+ "name": "<path>",
13478
+ "required": true,
13479
+ "description": "Absolute path in any form."
13480
+ },
13481
+ {
13482
+ "name": "--json",
13483
+ "required": false,
13484
+ "description": "Print machine-readable output."
13485
+ }
13486
+ ],
13487
+ "examples": [
13488
+ "echo done | runpane workspace parsa-devbox write '~/notes/status.md'"
13489
+ ],
13490
+ "notes": [
13491
+ "Binary stdin is sent as base64 and written byte for byte."
13492
+ ]
13493
+ },
13494
+ "workspace exec": {
13495
+ "name": "workspace exec",
13496
+ "summary": "Run a command in another machine's shell and return stdout, stderr, the exit code, OS, and shell.",
13497
+ "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.",
13498
+ "requiresPaneDaemon": false,
13499
+ "mutates": true,
13500
+ "arguments": [
13501
+ {
13502
+ "name": "<machine>",
13503
+ "required": false,
13504
+ "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."
13505
+ },
13506
+ {
13507
+ "name": "--cwd",
13508
+ "value": "<path>",
13509
+ "required": false,
13510
+ "description": "Working directory on that machine, in any path form; defaults to its home."
13511
+ },
13512
+ {
13513
+ "name": "--timeout-ms",
13514
+ "value": "<milliseconds>",
13515
+ "required": false,
13516
+ "description": "Stop the command after this long (default 120000, at most 540000)."
13517
+ },
13518
+ {
13519
+ "name": "--json",
13520
+ "required": false,
13521
+ "description": "Print machine-readable output."
13522
+ },
13523
+ {
13524
+ "name": "-- <command>",
13525
+ "required": true,
13526
+ "description": "The command line, run by that machine's shell."
13527
+ }
13528
+ ],
13529
+ "examples": [
13530
+ "runpane workspace parsa-devbox exec --json -- git -C C:\\src\\app status --short"
13531
+ ],
13532
+ "notes": [
13533
+ "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.",
13534
+ "Pass the command as one quoted string; several words after -- are joined with spaces, so their own quoting is lost."
13535
+ ]
13106
13536
  }
13107
13537
  },
13108
13538
  "managedBlock": [