runpane 2.4.70 → 2.4.76

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.
@@ -207,7 +207,7 @@ exports.RUNPANE_CONTRACT = {
207
207
  "name": "panes archive",
208
208
  "summary": "Archive a Pane (session) exactly like the UI Archive action, including safe removal of its Pane-managed git worktree.",
209
209
  "usage": [
210
- "runpane panes archive --pane <pane-id> [--source user|agent] [--force] --yes [--json]"
210
+ "runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--dry-run] --yes [--json]"
211
211
  ],
212
212
  "mutates": true,
213
213
  "jsonSchemas": [
@@ -308,7 +308,7 @@ exports.RUNPANE_CONTRACT = {
308
308
  },
309
309
  {
310
310
  "name": "panels submit",
311
- "summary": "Send text to a terminal panel and append a terminal Enter byte.",
311
+ "summary": "Send and submit text to a terminal panel, including idle agent composers.",
312
312
  "usage": [
313
313
  "runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]"
314
314
  ],
@@ -608,7 +608,7 @@ exports.RUNPANE_CONTRACT = {
608
608
  " runpane repos add --path <path> [--name <name>]",
609
609
  " runpane panes list [--repo <selector>] [--json]",
610
610
  " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] [--wait-ready]",
611
- " runpane panes archive --pane <pane-id> [--source user|agent] [--force] --yes",
611
+ " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--dry-run] --yes",
612
612
  " runpane panels create --pane <pane-id> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] --yes",
613
613
  " runpane panels list --pane <pane-id> [--json]",
614
614
  " runpane panels output --panel <panel-id> [--limit <count>] [--json]",
@@ -765,7 +765,7 @@ exports.RUNPANE_CONTRACT = {
765
765
  "Commands:",
766
766
  " runpane panes list [--repo <selector>] [--json]",
767
767
  " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [options]",
768
- " runpane panes archive --pane <pane-id> [--force] [--source user|agent] --yes [--json]",
768
+ " runpane panes archive --pane <pane-id> [--force] [--source user|agent] [--dry-run] --yes [--json]",
769
769
  " runpane panes pin --pane <pane-id> --yes [--dry-run] [--json]",
770
770
  " runpane panes unpin --pane <pane-id> --yes [--dry-run] [--json]",
771
771
  " runpane panes rename --pane <pane-id> --name <new-name> --yes [--dry-run] [--json]",
@@ -818,9 +818,9 @@ exports.RUNPANE_CONTRACT = {
818
818
  ],
819
819
  "panes archive": [
820
820
  "Usage:",
821
- " runpane panes archive --pane <pane-id> [--source user|agent] [--force] --yes [--json]",
821
+ " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--dry-run] --yes [--json]",
822
822
  "",
823
- "Archives a Pane (session) exactly like the UI Archive action, including removal of its Pane-managed git worktree. Refuses to archive a pane with uncommitted, untracked, or unpushed-to-remote changes unless --force is passed. Waits for worktree removal to finish before returning.",
823
+ "Archives a Pane (session) exactly like the UI Archive action, including removal of its Pane-managed git worktree. Refreshes the configured upstream before checking for unpushed commits and reports exact commit evidence. Refuses unsafe archives unless --force is passed. Use --dry-run to print the evidence without mutating Pane state.",
824
824
  "",
825
825
  "Options:",
826
826
  " --pane <pane-id> Pane/session id to archive",
@@ -828,6 +828,7 @@ exports.RUNPANE_CONTRACT = {
828
828
  " --force Archive even if the pane has uncommitted, untracked, or unpushed changes",
829
829
  " --pane-dir <path> Connect to a specific Pane data directory",
830
830
  " --json Print machine-readable output",
831
+ " --dry-run Refresh and print archive safety evidence without archiving",
831
832
  " --yes Skip confirmation for mutating commands"
832
833
  ],
833
834
  "panes pin": [
@@ -1046,7 +1047,7 @@ exports.RUNPANE_CONTRACT = {
1046
1047
  " runpane repos add --path <path> [--name <name>]",
1047
1048
  " runpane panes list [--repo <selector>] [--json]",
1048
1049
  " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] [--wait-ready]",
1049
- " runpane panes archive --pane <pane-id> [--source user|agent] [--force] --yes",
1050
+ " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--dry-run] --yes",
1050
1051
  " python -m runpane panels create --pane <pane-id> --agent <codex|claude|cursor> [--source user|agent] [--focus|--no-focus] --yes",
1051
1052
  " runpane panels list --pane <pane-id> [--json]",
1052
1053
  " runpane panels output --panel <panel-id> [--limit <count>] [--json]",
@@ -1192,7 +1193,7 @@ exports.RUNPANE_CONTRACT = {
1192
1193
  "Commands:",
1193
1194
  " runpane panes list [--repo <selector>] [--json]",
1194
1195
  " runpane panes create --repo <selector> --name <name> --agent <codex|claude|cursor> [options]",
1195
- " runpane panes archive --pane <pane-id> [--force] [--source user|agent] --yes [--json]",
1196
+ " runpane panes archive --pane <pane-id> [--force] [--source user|agent] [--dry-run] --yes [--json]",
1196
1197
  " runpane panes pin --pane <pane-id> --yes [--dry-run] [--json]",
1197
1198
  " runpane panes unpin --pane <pane-id> --yes [--dry-run] [--json]",
1198
1199
  " runpane panes rename --pane <pane-id> --name <new-name> --yes [--dry-run] [--json]",
@@ -1245,9 +1246,9 @@ exports.RUNPANE_CONTRACT = {
1245
1246
  ],
1246
1247
  "panes archive": [
1247
1248
  "Usage:",
1248
- " runpane panes archive --pane <pane-id> [--source user|agent] [--force] --yes [--json]",
1249
+ " runpane panes archive --pane <pane-id> [--source user|agent] [--force] [--dry-run] --yes [--json]",
1249
1250
  "",
1250
- "Archives a Pane (session) exactly like the UI Archive action, including removal of its Pane-managed git worktree. Refuses to archive a pane with uncommitted, untracked, or unpushed-to-remote changes unless --force is passed. Waits for worktree removal to finish before returning.",
1251
+ "Archives a Pane (session) exactly like the UI Archive action, including removal of its Pane-managed git worktree. Refreshes the configured upstream before checking for unpushed commits and reports exact commit evidence. Refuses unsafe archives unless --force is passed. Use --dry-run to print the evidence without mutating Pane state.",
1251
1252
  "",
1252
1253
  "Options:",
1253
1254
  " --pane <pane-id>",
@@ -1255,6 +1256,7 @@ exports.RUNPANE_CONTRACT = {
1255
1256
  " --force",
1256
1257
  " --pane-dir <path>",
1257
1258
  " --json",
1259
+ " --dry-run",
1258
1260
  " --yes"
1259
1261
  ],
1260
1262
  "panes pin": [
@@ -1554,7 +1556,7 @@ exports.RUNPANE_CONTRACT = {
1554
1556
  "`runpane panes list` lists Pane sessions, optionally scoped to one saved repository.",
1555
1557
  "`runpane panes create` connects to the running local Pane daemon, resolves the requested saved base repository, creates user-visible Pane sessions backed by Pane-managed worktrees/branches, opens terminal-backed tool tabs, and optionally sends initial input to the started tool. Built-in agent panes and `--source agent` default to background/no-focus unless `--focus` is passed. New Panes are pinned into the UI's favorite/pin set by default; pass `--no-pinned` to opt out. Panes created interactively in the Pane UI are unaffected.",
1556
1558
  "For `panes create --wait-ready`, `initialInput.verifiedSubmitted: true` is reported only after argument attachment or composer-clear plus activity evidence. Routing input does not by itself verify submission.",
1557
- "`runpane panes archive` archives a Pane exactly like the UI Archive action, including removal of its Pane-managed git worktree, and refuses (unless `--force`) when the pane's branch has uncommitted, untracked, or unpushed-to-remote changes. It waits for worktree removal to finish before returning and reports the outcome in `worktreeCleanup`.",
1559
+ "`runpane panes archive` refreshes the configured upstream, reports exact unpushed commit evidence, and refuses unsafe archive operations unless `--force` is used. Add `--dry-run` to inspect the same evidence without archiving. Successful archives wait for worktree removal and report `worktreeCleanup`.",
1558
1560
  "`runpane panes rename` trims and updates a Pane's display name without changing its worktree, branch, panels, or focus, and returns the updated pane summary.",
1559
1561
  "`runpane panels list` lists tool panels inside one Pane session.",
1560
1562
  "`runpane panels output` reads bounded recent terminal output from one panel and strips common terminal control noise for agent use.",
@@ -2879,6 +2881,12 @@ exports.RUNPANE_CONTRACT = {
2879
2881
  },
2880
2882
  "nextCommand": {
2881
2883
  "type": "string"
2884
+ },
2885
+ "verification": {
2886
+ "enum": [
2887
+ "observed",
2888
+ "unverifiable"
2889
+ ]
2882
2890
  }
2883
2891
  },
2884
2892
  "additionalProperties": false
@@ -2917,6 +2925,15 @@ exports.RUNPANE_CONTRACT = {
2917
2925
  }
2918
2926
  },
2919
2927
  "additionalProperties": false
2928
+ },
2929
+ "sessionId": {
2930
+ "type": "string"
2931
+ },
2932
+ "paneId": {
2933
+ "type": "string"
2934
+ },
2935
+ "worktreePath": {
2936
+ "type": "string"
2920
2937
  }
2921
2938
  },
2922
2939
  "additionalProperties": false
@@ -2952,7 +2969,8 @@ exports.RUNPANE_CONTRACT = {
2952
2969
  "worktreePath",
2953
2970
  "repoId",
2954
2971
  "panelCount",
2955
- "pinned"
2972
+ "pinned",
2973
+ "agentStatus"
2956
2974
  ],
2957
2975
  "properties": {
2958
2976
  "id": {
@@ -2990,6 +3008,12 @@ exports.RUNPANE_CONTRACT = {
2990
3008
  },
2991
3009
  "archived": {
2992
3010
  "type": "boolean"
3011
+ },
3012
+ "agentStatus": {
3013
+ "enum": [
3014
+ "active",
3015
+ "idle"
3016
+ ]
2993
3017
  }
2994
3018
  },
2995
3019
  "additionalProperties": false
@@ -3015,6 +3039,9 @@ exports.RUNPANE_CONTRACT = {
3015
3039
  "user",
3016
3040
  "agent"
3017
3041
  ]
3042
+ },
3043
+ "dryRun": {
3044
+ "type": "boolean"
3018
3045
  }
3019
3046
  },
3020
3047
  "additionalProperties": false
@@ -3157,8 +3184,33 @@ exports.RUNPANE_CONTRACT = {
3157
3184
  "hasUpstream": {
3158
3185
  "type": "boolean"
3159
3186
  },
3187
+ "upstream": {
3188
+ "type": "string"
3189
+ },
3190
+ "upstreamRefreshed": {
3191
+ "type": "boolean"
3192
+ },
3160
3193
  "unpushedCommits": {
3161
3194
  "type": "number"
3195
+ },
3196
+ "unpushedCommitDetails": {
3197
+ "type": "array",
3198
+ "items": {
3199
+ "type": "object",
3200
+ "required": [
3201
+ "sha",
3202
+ "subject"
3203
+ ],
3204
+ "properties": {
3205
+ "sha": {
3206
+ "type": "string"
3207
+ },
3208
+ "subject": {
3209
+ "type": "string"
3210
+ }
3211
+ },
3212
+ "additionalProperties": false
3213
+ }
3162
3214
  }
3163
3215
  },
3164
3216
  "additionalProperties": false
@@ -3166,6 +3218,41 @@ exports.RUNPANE_CONTRACT = {
3166
3218
  },
3167
3219
  "additionalProperties": false
3168
3220
  },
3221
+ {
3222
+ "type": "object",
3223
+ "required": [
3224
+ "ok",
3225
+ "paneId",
3226
+ "dryRun",
3227
+ "wouldArchive",
3228
+ "forced",
3229
+ "safetyCheck"
3230
+ ],
3231
+ "properties": {
3232
+ "ok": {
3233
+ "const": true
3234
+ },
3235
+ "paneId": {
3236
+ "type": "string"
3237
+ },
3238
+ "dryRun": {
3239
+ "const": true
3240
+ },
3241
+ "wouldArchive": {
3242
+ "type": "boolean"
3243
+ },
3244
+ "forced": {
3245
+ "type": "boolean"
3246
+ },
3247
+ "safetyCheck": {
3248
+ "$ref": "#/jsonSchemas/paneArchiveResult/oneOf/0/properties/safetyCheck"
3249
+ },
3250
+ "blocked": {
3251
+ "$ref": "#/jsonSchemas/paneArchiveResult/oneOf/2/properties/blocked"
3252
+ }
3253
+ },
3254
+ "additionalProperties": false
3255
+ },
3169
3256
  {
3170
3257
  "type": "object",
3171
3258
  "required": [
@@ -3218,8 +3305,33 @@ exports.RUNPANE_CONTRACT = {
3218
3305
  "hasUpstream": {
3219
3306
  "type": "boolean"
3220
3307
  },
3308
+ "upstream": {
3309
+ "type": "string"
3310
+ },
3311
+ "upstreamRefreshed": {
3312
+ "type": "boolean"
3313
+ },
3221
3314
  "unpushedCommits": {
3222
3315
  "type": "number"
3316
+ },
3317
+ "unpushedCommitDetails": {
3318
+ "type": "array",
3319
+ "items": {
3320
+ "type": "object",
3321
+ "required": [
3322
+ "sha",
3323
+ "subject"
3324
+ ],
3325
+ "properties": {
3326
+ "sha": {
3327
+ "type": "string"
3328
+ },
3329
+ "subject": {
3330
+ "type": "string"
3331
+ }
3332
+ },
3333
+ "additionalProperties": false
3334
+ }
3223
3335
  }
3224
3336
  },
3225
3337
  "additionalProperties": false
@@ -3553,7 +3665,8 @@ exports.RUNPANE_CONTRACT = {
3553
3665
  "returnedLineCount",
3554
3666
  "hasMore",
3555
3667
  "text",
3556
- "state"
3668
+ "state",
3669
+ "composer"
3557
3670
  ],
3558
3671
  "properties": {
3559
3672
  "ok": {
@@ -3621,6 +3734,22 @@ exports.RUNPANE_CONTRACT = {
3621
3734
  },
3622
3735
  "additionalProperties": false
3623
3736
  },
3737
+ "composer": {
3738
+ "type": "object",
3739
+ "required": [
3740
+ "isPresent",
3741
+ "hasUndeliveredText"
3742
+ ],
3743
+ "properties": {
3744
+ "isPresent": {
3745
+ "type": "boolean"
3746
+ },
3747
+ "hasUndeliveredText": {
3748
+ "type": "boolean"
3749
+ }
3750
+ },
3751
+ "additionalProperties": false
3752
+ },
3624
3753
  "initialInput": {
3625
3754
  "$ref": "#/jsonSchemas/paneCreateResult/properties/items/items/oneOf/0/properties/initialInput"
3626
3755
  },
@@ -3653,11 +3782,13 @@ exports.RUNPANE_CONTRACT = {
3653
3782
  "panelId",
3654
3783
  "inputBytes",
3655
3784
  "enter",
3785
+ "sequenceName",
3786
+ "verifiedSubmitted",
3656
3787
  "sentAt"
3657
3788
  ],
3658
3789
  "properties": {
3659
3790
  "ok": {
3660
- "const": true
3791
+ "type": "boolean"
3661
3792
  },
3662
3793
  "panelId": {
3663
3794
  "type": "string"
@@ -3671,11 +3802,29 @@ exports.RUNPANE_CONTRACT = {
3671
3802
  "enter": {
3672
3803
  "const": "cr"
3673
3804
  },
3805
+ "sequenceName": {
3806
+ "enum": [
3807
+ "codex-ctrl-enter-cr",
3808
+ "enter-cr"
3809
+ ]
3810
+ },
3811
+ "verifiedSubmitted": {
3812
+ "type": "boolean"
3813
+ },
3674
3814
  "sentAt": {
3675
3815
  "type": "string"
3676
3816
  },
3817
+ "blocked": {
3818
+ "$ref": "#/jsonSchemas/panelSubmitComposerResult/properties/blocked"
3819
+ },
3677
3820
  "nextCommand": {
3678
3821
  "type": "string"
3822
+ },
3823
+ "verification": {
3824
+ "enum": [
3825
+ "observed",
3826
+ "unverifiable"
3827
+ ]
3679
3828
  }
3680
3829
  },
3681
3830
  "additionalProperties": false
@@ -4164,6 +4313,12 @@ exports.RUNPANE_CONTRACT = {
4164
4313
  },
4165
4314
  "nextCommand": {
4166
4315
  "type": "string"
4316
+ },
4317
+ "verification": {
4318
+ "enum": [
4319
+ "observed",
4320
+ "unverifiable"
4321
+ ]
4167
4322
  }
4168
4323
  },
4169
4324
  "additionalProperties": false
@@ -4191,7 +4346,7 @@ exports.RUNPANE_CONTRACT = {
4191
4346
  "If the repository exists on disk but is not saved in Pane, use `runpane repos add --path <repo> --yes --json` before creating panes.",
4192
4347
  "Use `runpane agents doctor --agent <codex|claude|cursor> --repo <selector> --json` when agent availability differs across host, Windows, WSL, or repo environments.",
4193
4348
  "Use `runpane panes create --wait-ready` to create Panes and validate initial terminal readiness in one call.",
4194
- "Use `runpane panels screen` for compact current state, `panels wait` for readiness/text checks, `panels submit` for ordinary Enter-submitted input, and `panels submit-composer --strategy auto` for agent composers.",
4349
+ "Use `runpane panels screen` for compact current state, including Codex composer state. Use `panels wait` for readiness/text checks and `panels submit` to send and submit a new turn. Use `panels submit-composer --strategy auto` only for a composer that was filled separately.",
4195
4350
  "Use `runpane panels input` only when exact bytes are required, such as Ctrl-C or handcrafted terminal input.",
4196
4351
  "Pane terminals draw inline images: sixel, iTerm2 inline images, and the kitty graphics protocol. Tools that need kitty graphics, such as terminal-browser and terminal-doom, run inside a Pane panel; `runpane doctor --json` reports the exact list under `terminal.graphicsProtocols`.",
4197
4352
  "After creating Panes or sending terminal input, validate with `panels wait` or bounded `panels screen` before reporting success."
@@ -4283,6 +4438,7 @@ exports.RUNPANE_CONTRACT = {
4283
4438
  "--pane <pane-id>",
4284
4439
  "--source <user|agent>",
4285
4440
  "--force",
4441
+ "--dry-run",
4286
4442
  "--yes",
4287
4443
  "--json"
4288
4444
  ]
@@ -4919,7 +5075,7 @@ exports.RUNPANE_CONTRACT = {
4919
5075
  "panes archive": {
4920
5076
  "name": "panes archive",
4921
5077
  "summary": "Archive a Pane (session) exactly like the UI Archive action, including safe removal of its Pane-managed git worktree.",
4922
- "details": "Use this to close out a Pane once its PR has merged. Refuses to archive (unless --force) when the pane's branch has uncommitted, untracked, or unpushed-to-remote changes, so an agent cannot silently discard work. A merged and pushed branch has no unpushed commits, so it archives cleanly. Waits for worktree removal to finish before returning.",
5078
+ "details": "Use this to close out a Pane once its PR has merged. The safety check refreshes the configured upstream before comparing it to HEAD and includes exact unpushed commit IDs and subjects. Refuses unsafe archive operations unless --force is used. Use --dry-run to inspect the same evidence without mutating Pane state.",
4923
5079
  "requiresPaneDaemon": true,
4924
5080
  "mutates": true,
4925
5081
  "arguments": [
@@ -4945,6 +5101,11 @@ exports.RUNPANE_CONTRACT = {
4945
5101
  "required": false,
4946
5102
  "description": "Skip confirmation for mutating commands."
4947
5103
  },
5104
+ {
5105
+ "name": "--dry-run",
5106
+ "required": false,
5107
+ "description": "Refresh and print archive safety evidence without archiving."
5108
+ },
4948
5109
  {
4949
5110
  "name": "--json",
4950
5111
  "required": false,
@@ -4953,6 +5114,7 @@ exports.RUNPANE_CONTRACT = {
4953
5114
  ],
4954
5115
  "examples": [
4955
5116
  "runpane panes archive --pane <pane-id> --source agent --yes --json",
5117
+ "runpane panes archive --pane <pane-id> --dry-run --json",
4956
5118
  "runpane panes archive --pane <pane-id> --force --yes --json"
4957
5119
  ],
4958
5120
  "jsonSchemas": [
@@ -4961,6 +5123,8 @@ exports.RUNPANE_CONTRACT = {
4961
5123
  ],
4962
5124
  "notes": [
4963
5125
  "If the result has ok:false with a blocked field, the pane was NOT archived; inspect blocked.code and rerun with --force if discarding the flagged work is intentional.",
5126
+ "Inspect safetyCheck.unpushedCommitDetails for exact commit IDs and subjects; upstreamRefreshed confirms the tracking ref was refreshed first.",
5127
+ "A --dry-run result sets dryRun:true and wouldArchive without deleting the Pane or its worktree.",
4964
5128
  "A successful archive waits for the Pane-managed worktree to be removed before returning; check worktreeCleanup in the result for the final outcome.",
4965
5129
  "Archiving a main-repo Pane (no Pane-managed worktree) always succeeds immediately since nothing is deleted from disk."
4966
5130
  ]
@@ -5317,13 +5481,14 @@ exports.RUNPANE_CONTRACT = {
5317
5481
  ],
5318
5482
  "notes": [
5319
5483
  "Use this before `panels output` when an agent only needs the latest visible/current state.",
5484
+ "The composer object reports whether a Codex composer is present and whether it holds undelivered text.",
5320
5485
  "If hasMore is true and context is missing, rerun with a larger --limit or use `panels output`."
5321
5486
  ]
5322
5487
  },
5323
5488
  "panels submit": {
5324
5489
  "name": "panels submit",
5325
- "summary": "Send text to a terminal panel and append a terminal Enter byte.",
5326
- "details": "Use this for ordinary interactive submissions. The daemon normalizes a final LF or CRLF to CR, or appends CR if no newline is present. Exact byte workflows remain on `panels input`.",
5490
+ "summary": "Send and submit text to a terminal panel, including idle agent composers.",
5491
+ "details": "Use this for ordinary interactive submissions. For an idle Codex composer, Pane stages the text, waits for Codex paste handling, sends the Codex submit sequence, and verifies that the turn started when visible evidence is available. Other terminals receive a normalized CR Enter. Exact byte workflows remain on `panels input`.",
5327
5492
  "requiresPaneDaemon": true,
5328
5493
  "mutates": true,
5329
5494
  "arguments": [
@@ -5371,7 +5536,8 @@ exports.RUNPANE_CONTRACT = {
5371
5536
  "panelSubmitResult"
5372
5537
  ],
5373
5538
  "notes": [
5374
- "The response includes nextCommand for validation. Run it before reporting that the input worked.",
5539
+ "The response includes sequenceName, verifiedSubmitted, and nextCommand. If ok is false, inspect blocked and do not assume the turn started.",
5540
+ "Do not follow `panels submit` with `panels submit-composer`; idle Codex composer submission is handled atomically.",
5375
5541
  "Use `panels input` for Ctrl-C, escape sequences, or any workflow requiring exact bytes."
5376
5542
  ]
5377
5543
  },