runpane 2.3.0 → 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.
@@ -46,8 +46,24 @@ exports.RUNPANE_CONTRACT = {
46
46
  "channels": [
47
47
  "stable",
48
48
  "nightly"
49
+ ],
50
+ "agents": [
51
+ "codex",
52
+ "claude"
49
53
  ]
50
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
+ },
51
67
  "commands": [
52
68
  {
53
69
  "name": "help",
@@ -99,6 +115,41 @@ exports.RUNPANE_CONTRACT = {
99
115
  "usage": [
100
116
  "runpane doctor"
101
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
+ ]
102
153
  }
103
154
  ],
104
155
  "flags": {
@@ -189,6 +240,82 @@ exports.RUNPANE_CONTRACT = {
189
240
  {
190
241
  "name": "--print-only"
191
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
+ }
192
319
  ]
193
320
  },
194
321
  "help": {
@@ -201,6 +328,9 @@ exports.RUNPANE_CONTRACT = {
201
328
  " runpane update [options]",
202
329
  " runpane version",
203
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>",
204
334
  " runpane help [command]",
205
335
  "",
206
336
  "Quick start:",
@@ -213,7 +343,7 @@ exports.RUNPANE_CONTRACT = {
213
343
  " pnpm dlx runpane@latest",
214
344
  " pipx run runpane",
215
345
  "",
216
- "Run \"runpane help install\" for install options."
346
+ "Run \"runpane help panes create\" for pane orchestration options."
217
347
  ],
218
348
  "install": [
219
349
  "Usage:",
@@ -280,6 +410,55 @@ exports.RUNPANE_CONTRACT = {
280
410
  "doctor": [
281
411
  "Usage:",
282
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"
283
462
  ]
284
463
  },
285
464
  "pip": {
@@ -291,6 +470,9 @@ exports.RUNPANE_CONTRACT = {
291
470
  " runpane update [options]",
292
471
  " runpane version",
293
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>",
294
476
  " runpane help [command]",
295
477
  "",
296
478
  "Quick start:",
@@ -302,7 +484,7 @@ exports.RUNPANE_CONTRACT = {
302
484
  " pipx run runpane install daemon --label \"My Server\"",
303
485
  " uvx runpane@latest",
304
486
  "",
305
- "Run \"runpane help install\" for install options."
487
+ "Run \"runpane help panes create\" for pane orchestration options."
306
488
  ],
307
489
  "install": [
308
490
  "Usage:",
@@ -358,6 +540,55 @@ exports.RUNPANE_CONTRACT = {
358
540
  "doctor": [
359
541
  "Usage:",
360
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"
361
592
  ]
362
593
  }
363
594
  },
@@ -423,6 +654,10 @@ exports.RUNPANE_CONTRACT = {
423
654
  "runpane update",
424
655
  "runpane version",
425
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",
426
661
  "runpane help",
427
662
  "runpane <command> --help"
428
663
  ],
@@ -434,9 +669,14 @@ exports.RUNPANE_CONTRACT = {
434
669
  "The wrapper must stream Pane stdout/stderr without reformatting because `pane --remote-setup` prints the one-time `pane-remote://...` connection code.",
435
670
  "`runpane update` uses the same release resolution and installer path as `install client`.",
436
671
  "`runpane version` prints the wrapper package version, the installed Pane version when detectable, and the latest GitHub release version when reachable.",
437
- "`runpane doctor` checks platform support, release metadata reachability, download URL selection, installed Pane detection, and remote-daemon hints."
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."
438
677
  ],
439
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.",
440
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.",
441
681
  "downloadAttribution": [
442
682
  "The npm package uses `source=npm` for all npm-registry consumers, including `npx`, `pnpm dlx`, `yarn dlx`, `bunx`, and global npm/pnpm installs.",
@@ -512,6 +752,49 @@ exports.RUNPANE_CONTRACT = {
512
752
  "zip",
513
753
  "--verbose"
514
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
+ ],
515
798
  [
516
799
  "--version"
517
800
  ]
@@ -521,7 +804,10 @@ exports.RUNPANE_CONTRACT = {
521
804
  "runpane install",
522
805
  "runpane update",
523
806
  "runpane version",
524
- "runpane doctor"
807
+ "runpane doctor",
808
+ "runpane repos list",
809
+ "runpane repos add",
810
+ "runpane panes create"
525
811
  ],
526
812
  "npmHelpIncludes": [
527
813
  "pnpm dlx runpane@latest",
@@ -570,13 +856,342 @@ exports.RUNPANE_CONTRACT = {
570
856
  },
571
857
  "additionalProperties": false
572
858
  },
573
- "future.repoListResult": {
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": {
574
907
  "type": "object",
575
- "description": "Reserved for #252 repo listing output."
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
576
923
  },
577
- "future.paneCreateResult": {
924
+ "repoAddResult": {
578
925
  "type": "object",
579
- "description": "Reserved for #252 pane creation output."
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
580
1195
  }
581
1196
  }
582
1197
  };