runpane 2.3.7 → 2.3.8

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.
@@ -70,6 +70,11 @@ export declare const RUNPANE_CONTRACT: {
70
70
  readonly name: "doctor";
71
71
  readonly summary: "Run platform, release, installed Pane, and remote setup diagnostics.";
72
72
  readonly usage: readonly ["runpane doctor"];
73
+ }, {
74
+ readonly name: "agents doctor";
75
+ readonly summary: "Diagnose whether a built-in agent command is available in a Pane repository environment.";
76
+ readonly usage: readonly ["runpane agents doctor --agent <codex|claude> [--repo <selector>] [--json]"];
77
+ readonly jsonSchemas: readonly ["agentDoctorResult"];
73
78
  }, {
74
79
  readonly name: "agent-context";
75
80
  readonly summary: "Print token-efficient Pane command context for coding agents.";
@@ -107,12 +112,28 @@ export declare const RUNPANE_CONTRACT: {
107
112
  readonly summary: "Read recent terminal output from a panel.";
108
113
  readonly usage: readonly ["runpane panels output --panel <panel-id> [--limit <count>] [--json]"];
109
114
  readonly jsonSchemas: readonly ["panelOutputResult"];
115
+ }, {
116
+ readonly name: "panels screen";
117
+ readonly summary: "Read a compact current-screen view from a terminal panel.";
118
+ readonly usage: readonly ["runpane panels screen --panel <panel-id> [--limit <count>] [--json]"];
119
+ readonly jsonSchemas: readonly ["panelScreenResult"];
110
120
  }, {
111
121
  readonly name: "panels input";
112
122
  readonly summary: "Send input bytes to a terminal panel.";
113
123
  readonly usage: readonly ["runpane panels input --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]"];
114
124
  readonly mutates: true;
115
125
  readonly jsonSchemas: readonly ["panelInputRequest", "panelInputResult"];
126
+ }, {
127
+ readonly name: "panels submit";
128
+ readonly summary: "Send text to a terminal panel and append a terminal Enter byte.";
129
+ readonly usage: readonly ["runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]"];
130
+ readonly mutates: true;
131
+ readonly jsonSchemas: readonly ["panelSubmitRequest", "panelSubmitResult"];
132
+ }, {
133
+ readonly name: "panels wait";
134
+ readonly summary: "Wait for a terminal panel to initialize, become ready/idle, or contain text.";
135
+ readonly usage: readonly ["runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--contains <text>] [--timeout-ms <ms>] [--interval-ms <ms>] [--json]"];
136
+ readonly jsonSchemas: readonly ["panelWaitResult"];
116
137
  }];
117
138
  readonly flags: {
118
139
  readonly wrapper: readonly [{
@@ -239,10 +260,30 @@ export declare const RUNPANE_CONTRACT: {
239
260
  readonly name: "--timeout-ms";
240
261
  readonly value: "<milliseconds>";
241
262
  readonly description: "Maximum time to wait for each pane creation job.";
263
+ }, {
264
+ readonly name: "--ready-timeout-ms";
265
+ readonly value: "<milliseconds>";
266
+ readonly description: "Readiness wait timeout for panes create --wait-ready.";
267
+ }, {
268
+ readonly name: "--concurrency";
269
+ readonly value: "<count>";
270
+ readonly description: "Accepted for forward compatibility. Pane currently serializes multi-pane session creation so queued jobs do not time out before starting.";
242
271
  }, {
243
272
  readonly name: "--limit";
244
273
  readonly value: "<count>";
245
274
  readonly description: "Maximum recent output lines or records to read.";
275
+ }, {
276
+ readonly name: "--for";
277
+ readonly value: "<initialized|ready|idle|text>";
278
+ readonly description: "Panel wait condition.";
279
+ }, {
280
+ readonly name: "--contains";
281
+ readonly value: "<text>";
282
+ readonly description: "Text to wait for with panels wait --for text.";
283
+ }, {
284
+ readonly name: "--interval-ms";
285
+ readonly value: "<milliseconds>";
286
+ readonly description: "Polling interval for panels wait.";
246
287
  }, {
247
288
  readonly name: "--text";
248
289
  readonly value: "<text>";
@@ -255,11 +296,14 @@ export declare const RUNPANE_CONTRACT: {
255
296
  readonly localBoolean: readonly [{
256
297
  readonly name: "--json";
257
298
  readonly description: "Print machine-readable JSON output.";
299
+ }, {
300
+ readonly name: "--wait-ready";
301
+ readonly description: "Wait for created terminal panels to be ready before returning.";
258
302
  }];
259
303
  };
260
304
  readonly help: {
261
305
  readonly npm: {
262
- readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane agent-context [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes create --repo <selector> --name <name> --agent <codex|claude>", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> --input-file <path|-> --yes", " runpane help [command]", "", "Quick start:", " npx --yes runpane@latest", " npm i -g runpane && runpane setup", "", "Advanced examples:", " npx --yes runpane@latest install client", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest", " pipx run runpane", "", "Run \"runpane agent-context\" when an agent needs Pane command context.", "Run \"runpane help panes create\" for pane orchestration options."];
306
+ readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane agent-context [--json]", " runpane agents doctor --agent <codex|claude> [--repo <selector>] [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [--wait-ready]", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> --input-file <path|-> --yes", " runpane panels submit --panel <panel-id> --text <text> --yes", " runpane panels wait --panel <panel-id> [--for ready|idle|text] [--json]", " runpane help [command]", "", "Quick start:", " npx --yes runpane@latest", " npm i -g runpane && runpane setup", "", "Advanced examples:", " npx --yes runpane@latest install client", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest", "", "Run \"runpane agent-context\" when an agent needs Pane command context.", "Run \"runpane help panes create\" for pane orchestration options."];
263
307
  readonly install: readonly ["Usage:", " runpane install [client|daemon] [options]", "", "Examples:", " npx --yes runpane@latest install client", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest install daemon --prefer-tunnel ssh --label \"VM\"", "", "Wrapper options:", " --version <latest|vX.Y.Z> Pane release to install", " --format <auto|appimage|deb|dmg|zip|exe>", " --download-dir <path>", " --pane-path <path> Use an existing Pane executable", " --dry-run Print the plan without downloading", " --yes Skip interactive prompts where possible", " --verbose", "", "Daemon passthrough options:", " --label <name>", " --prefer-tunnel <tailscale|ssh|manual|auto>", " --channel <stable|nightly>", " --base-url <url>", " --pane-dir <path>", " --listen-port <port> / --port <port>", " --auto-listen-port", " --interactive-tailscale-setup", " --no-install-service", " --no-tailscale-serve", " --print-only", " --repo-ref <ref>"];
264
308
  readonly setup: readonly ["Usage:", " runpane setup", "", "Opens the guided setup for desktop install, remote host setup, update, and diagnostics.", "", "Quick start:", " npx --yes runpane@latest", " npm i -g runpane && runpane setup"];
265
309
  readonly update: readonly ["Usage:", " runpane update [options]", "", "Updates Pane using the same artifact selection as \"runpane install client\".", "", "Options:", " --version <latest|vX.Y.Z>", " --format <auto|appimage|deb|dmg|zip|exe>", " --download-dir <path>", " --pane-path <path>", " --dry-run", " --yes", " --verbose"];
@@ -268,14 +312,18 @@ export declare const RUNPANE_CONTRACT: {
268
312
  readonly "repos list": readonly ["Usage:", " runpane repos list [--json] [--pane-dir <path>]", "", "Lists repositories saved in the running Pane app.", "", "Options:", " --json Print machine-readable output", " --pane-dir <path> Connect to a specific Pane data directory"];
269
313
  readonly "repos add": readonly ["Usage:", " runpane repos add --path <path> [--name <name>] [--json] [--yes]", "", "Registers an existing git repository with the running Pane app.", "", "Options:", " --path <path> Existing git repository path", " --name <name> Saved repository name; defaults to the directory name", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --dry-run Validate and preview without adding the repo", " --yes Skip confirmation for mutating commands"];
270
314
  readonly "panes list": readonly ["Usage:", " runpane panes list [--repo <selector>] [--json]", "", "Lists Pane sessions. Pass --repo to limit results to one saved repository.", "", "Options:", " --repo <selector> active, id, exact path, or saved repository name", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
271
- readonly "panes create": readonly ["Usage:", " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]", " runpane panes create --from-json <path|-> [--yes] [--json]", "", "Creates Pane sessions in a saved repository and opens a terminal-backed tool tab.", "", "Options:", " --repo <selector> active, id, exact path, or saved repository name", " --name <name> Pane/session name", " --worktree-name <name> Worktree name; defaults to --name", " --base-branch <branch> Base branch for the worktree", " --agent <codex|claude> Built-in terminal template", " --tool-command <command> Custom terminal command", " --title <title> Terminal tab title", " --initial-input <text> Text sent after the command is ready", " --prompt <text> Alias for --initial-input", " --initial-input-file <path|-> Read initial input from a file or stdin", " --from-json <path|-> Read a full request payload", " --timeout-ms <milliseconds> Pane creation timeout", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --dry-run Validate and preview without creating panes", " --yes Skip confirmation for mutating commands"];
315
+ readonly "panes create": readonly ["Usage:", " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]", " runpane panes create --from-json <path|-> [--yes] [--json]", "", "Creates Pane sessions in a saved repository and opens a terminal-backed tool tab.", "", "Options:", " --repo <selector> active, id, exact path, or saved repository name", " --name <name> Pane/session name", " --worktree-name <name> Worktree name; defaults to --name", " --base-branch <branch> Base branch for the worktree", " --agent <codex|claude> Built-in terminal template", " --tool-command <command> Custom terminal command", " --title <title> Terminal tab title", " --initial-input <text> Text sent after the command is ready", " --prompt <text> Alias for --initial-input", " --initial-input-file <path|-> Read initial input from a file or stdin", " --from-json <path|-> Read a full request payload", " --timeout-ms <milliseconds> Pane creation timeout", " --wait-ready Wait for terminal readiness before returning", " --ready-timeout-ms <ms> Readiness wait timeout; defaults to 30000", " --concurrency <count> Accepted; creation is currently serialized", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --dry-run Validate and preview without creating panes", " --yes Skip confirmation for mutating commands"];
272
316
  readonly "panels list": readonly ["Usage:", " runpane panels list --pane <pane-id> [--json]", "", "Lists tool panels in a Pane session.", "", "Options:", " --pane <pane-id> Pane/session id", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
273
317
  readonly "panels output": readonly ["Usage:", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", "", "Reads bounded recent terminal output from a panel.", "", "Options:", " --panel <panel-id> Tool panel id", " --limit <count> Maximum recent output lines or records to read", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
274
318
  readonly "panels input": readonly ["Usage:", " runpane panels input --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", "", "Sends exact input bytes to a terminal panel. Include a newline in the input when you mean Enter.", "", "Options:", " --panel <panel-id> Terminal panel id", " --text <text> Text bytes to send", " --input-file <path|-> Read input from a file or stdin", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --yes Skip confirmation for mutating commands"];
275
319
  readonly "agent-context": readonly ["Usage:", " runpane agent-context [--json]", " runpane agent-context --command <command> [--json]", "", "Prints Pane command context for coding agents without requiring a running Pane app.", "", "Options:", " --command <command> Print the full definition for one runpane command", " --json Print machine-readable output", "", "Examples:", " runpane agent-context", " runpane agent-context --json", " runpane agent-context --command \"panes create\"", " runpane agent-context --command \"panes create\" --json"];
320
+ readonly "agents doctor": readonly ["Usage:", " runpane agents doctor --agent <codex|claude> [--repo <selector>] [--json]", "", "Diagnoses whether Codex or Claude is available in the same repository environment Pane will use.", "", "Options:", " --agent <codex|claude> Built-in agent command to diagnose", " --repo <selector> active, id, exact path, or saved repository name; defaults to active", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
321
+ readonly "panels screen": readonly ["Usage:", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", "", "Reads a compact current-screen view from a terminal panel. Prefers alternate-screen/TUI output and falls back to recent scrollback.", "", "Options:", " --panel <panel-id> Terminal panel id", " --limit <count> Maximum lines to return; defaults to 80", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
322
+ readonly "panels submit": readonly ["Usage:", " runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", "", "Sends text to a terminal panel and normalizes the final terminal Enter to CR. Use this for ordinary prompt answers and shell commands.", "", "Options:", " --panel <panel-id> Terminal panel id", " --text <text> Text to submit before Enter", " --input-file <path|-> Read text from a file or stdin before Enter", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --yes Skip confirmation for this mutating command"];
323
+ readonly "panels wait": readonly ["Usage:", " runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--contains <text>] [--timeout-ms <ms>] [--interval-ms <ms>] [--json]", "", "Polls a terminal panel until it is initialized, ready, idle, or contains text. Output is intentionally small and includes next-step guidance.", "", "Options:", " --panel <panel-id> Terminal panel id", " --for <condition> initialized, ready, idle, or text; defaults to ready for CLI panels and idle otherwise", " --contains <text> Text required for --for text; implies --for text when omitted", " --timeout-ms <milliseconds> Wait timeout; defaults to 30000", " --interval-ms <milliseconds> Poll interval; defaults to 500", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
276
324
  };
277
325
  readonly pip: {
278
- readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane agent-context [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes create --repo <selector> --name <name> --agent <codex|claude>", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> --input-file <path|-> --yes", " runpane help [command]", "", "Quick start:", " pipx run runpane", " python -m pip install runpane && python -m runpane setup", "", "Advanced examples:", " pipx run runpane install client", " pipx run runpane install daemon --label \"My Server\"", " uvx runpane@latest", "", "Run \"runpane agent-context\" when an agent needs Pane command context.", "Run \"runpane help panes create\" for pane orchestration options."];
326
+ readonly default: readonly ["Usage:", " runpane", " runpane setup", " runpane install [client|daemon] [options]", " runpane update [options]", " runpane version", " runpane doctor", " runpane agent-context [--json]", " runpane agents doctor --agent <codex|claude> [--repo <selector>] [--json]", " runpane repos list [--json]", " runpane repos add --path <path> [--name <name>]", " runpane panes list [--repo <selector>] [--json]", " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [--wait-ready]", " runpane panels list --pane <pane-id> [--json]", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", " runpane panels input --panel <panel-id> --input-file <path|-> --yes", " runpane panels submit --panel <panel-id> --text <text> --yes", " runpane panels wait --panel <panel-id> [--for ready|idle|text] [--json]", " runpane help [command]", "", "Quick start:", " pipx run runpane", " python -m pip install runpane && python -m runpane setup", "", "Advanced examples:", " pipx run runpane install client", " pipx run runpane install daemon --label \"My Server\"", " uvx runpane@latest", "", "Run \"runpane agent-context\" when an agent needs Pane command context.", "Run \"runpane help panes create\" for pane orchestration options."];
279
327
  readonly install: readonly ["Usage:", " runpane install [client|daemon] [options]", "", "Examples:", " npx --yes runpane@latest install daemon --label \"My Server\"", " pnpm dlx runpane@latest install daemon --prefer-tunnel ssh --label \"VM\"", " pipx run runpane install daemon --label \"My Server\"", "", "Wrapper options:", " --version <latest|vX.Y.Z>", " --format <auto|appimage|deb|dmg|zip|exe>", " --download-dir <path>", " --pane-path <path>", " --dry-run", " --yes", " --verbose", "", "Daemon passthrough options:", " --label <name>", " --prefer-tunnel <tailscale|ssh|manual|auto>", " --channel <stable|nightly>", " --base-url <url>", " --pane-dir <path>", " --listen-port <port> / --port <port>", " --auto-listen-port", " --interactive-tailscale-setup", " --no-install-service", " --no-tailscale-serve", " --print-only", " --repo-ref <ref>"];
280
328
  readonly setup: readonly ["Usage:", " runpane setup", "", "Opens the guided setup for desktop install, remote host setup, update, and diagnostics.", "", "Quick start:", " pipx run runpane", " python -m pip install runpane && python -m runpane setup"];
281
329
  readonly update: readonly ["Usage:", " runpane update [--version <latest|vX.Y.Z>] [--dry-run] [--yes]"];
@@ -284,11 +332,15 @@ export declare const RUNPANE_CONTRACT: {
284
332
  readonly "repos list": readonly ["Usage:", " runpane repos list [--json] [--pane-dir <path>]", "", "Lists repositories saved in the running Pane app.", "", "Options:", " --json", " --pane-dir <path>"];
285
333
  readonly "repos add": readonly ["Usage:", " runpane repos add --path <path> [--name <name>] [--json] [--yes]", "", "Registers an existing git repository with the running Pane app.", "", "Options:", " --path <path>", " --name <name>", " --pane-dir <path>", " --json", " --dry-run", " --yes"];
286
334
  readonly "panes list": readonly ["Usage:", " runpane panes list [--repo <selector>] [--json]", "", "Lists Pane sessions. Pass --repo to limit results to one saved repository.", "", "Options:", " --repo <selector>", " --pane-dir <path>", " --json"];
287
- readonly "panes create": readonly ["Usage:", " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]", " runpane panes create --from-json <path|-> [--yes] [--json]", "", "Creates Pane sessions in a saved repository and opens a terminal-backed tool tab.", "", "Options:", " --repo <selector>", " --name <name>", " --worktree-name <name>", " --base-branch <branch>", " --agent <codex|claude>", " --tool-command <command>", " --title <title>", " --initial-input <text>", " --prompt <text>", " --initial-input-file <path|->", " --from-json <path|->", " --timeout-ms <milliseconds>", " --pane-dir <path>", " --json", " --dry-run", " --yes"];
335
+ readonly "panes create": readonly ["Usage:", " runpane panes create --repo <selector> --name <name> --agent <codex|claude> [options]", " runpane panes create --from-json <path|-> [--yes] [--json]", "", "Creates Pane sessions in a saved repository and opens a terminal-backed tool tab.", "", "Options:", " --repo <selector> active, id, exact path, or saved repository name", " --name <name> Pane/session name", " --worktree-name <name> Worktree name; defaults to --name", " --base-branch <branch> Base branch for the worktree", " --agent <codex|claude> Built-in terminal template", " --tool-command <command> Custom terminal command", " --title <title> Terminal tab title", " --initial-input <text> Text sent after the command is ready", " --prompt <text> Alias for --initial-input", " --initial-input-file <path|-> Read initial input from a file or stdin", " --from-json <path|-> Read a full request payload", " --timeout-ms <milliseconds> Pane creation timeout", " --wait-ready Wait for terminal readiness before returning", " --ready-timeout-ms <ms> Readiness wait timeout; defaults to 30000", " --concurrency <count> Accepted; creation is currently serialized", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --dry-run Validate and preview without creating panes", " --yes Skip confirmation for mutating commands"];
288
336
  readonly "panels list": readonly ["Usage:", " runpane panels list --pane <pane-id> [--json]", "", "Lists tool panels in a Pane session.", "", "Options:", " --pane <pane-id>", " --pane-dir <path>", " --json"];
289
337
  readonly "panels output": readonly ["Usage:", " runpane panels output --panel <panel-id> [--limit <count>] [--json]", "", "Reads recent terminal output records from a panel.", "", "Options:", " --panel <panel-id>", " --limit <count>", " --pane-dir <path>", " --json"];
290
338
  readonly "panels input": readonly ["Usage:", " runpane panels input --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", "", "Sends exact input bytes to a terminal panel. Include a newline in the input when you mean Enter.", "", "Options:", " --panel <panel-id>", " --text <text>", " --input-file <path|->", " --pane-dir <path>", " --json", " --yes"];
291
339
  readonly "agent-context": readonly ["Usage:", " runpane agent-context [--json]", " runpane agent-context --command <command> [--json]", "", "Prints Pane command context for coding agents without requiring a running Pane app.", "", "Options:", " --command <command>", " --json", "", "Examples:", " runpane agent-context", " runpane agent-context --json", " runpane agent-context --command \"panes create\"", " runpane agent-context --command \"panes create\" --json"];
340
+ readonly "agents doctor": readonly ["Usage:", " runpane agents doctor --agent <codex|claude> [--repo <selector>] [--json]", "", "Diagnoses whether Codex or Claude is available in the same repository environment Pane will use.", "", "Options:", " --agent <codex|claude> Built-in agent command to diagnose", " --repo <selector> active, id, exact path, or saved repository name; defaults to active", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
341
+ readonly "panels screen": readonly ["Usage:", " runpane panels screen --panel <panel-id> [--limit <count>] [--json]", "", "Reads a compact current-screen view from a terminal panel. Prefers alternate-screen/TUI output and falls back to recent scrollback.", "", "Options:", " --panel <panel-id> Terminal panel id", " --limit <count> Maximum lines to return; defaults to 80", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
342
+ readonly "panels submit": readonly ["Usage:", " runpane panels submit --panel <panel-id> (--text <text>|--input-file <path|->) --yes [--json]", "", "Sends text to a terminal panel and normalizes the final terminal Enter to CR. Use this for ordinary prompt answers and shell commands.", "", "Options:", " --panel <panel-id> Terminal panel id", " --text <text> Text to submit before Enter", " --input-file <path|-> Read text from a file or stdin before Enter", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output", " --yes Skip confirmation for this mutating command"];
343
+ readonly "panels wait": readonly ["Usage:", " runpane panels wait --panel <panel-id> [--for initialized|ready|idle|text] [--contains <text>] [--timeout-ms <ms>] [--interval-ms <ms>] [--json]", "", "Polls a terminal panel until it is initialized, ready, idle, or contains text. Output is intentionally small and includes next-step guidance.", "", "Options:", " --panel <panel-id> Terminal panel id", " --for <condition> initialized, ready, idle, or text; defaults to ready for CLI panels and idle otherwise", " --contains <text> Text required for --for text; implies --for text when omitted", " --timeout-ms <milliseconds> Wait timeout; defaults to 30000", " --interval-ms <milliseconds> Poll interval; defaults to 500", " --pane-dir <path> Connect to a specific Pane data directory", " --json Print machine-readable output"];
292
344
  };
293
345
  };
294
346
  readonly docs: {
@@ -306,8 +358,8 @@ export declare const RUNPANE_CONTRACT: {
306
358
  readonly publishingCredentials: readonly ["Local implementation, build, and dry-run validation do not need npm or PyPI API tokens.", "Release publishing should prefer npm Trusted Publishing and PyPI Trusted Publishing from GitHub Actions.", "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."];
307
359
  };
308
360
  readonly testFixtures: {
309
- readonly parserSamples: readonly [readonly ["setup"], readonly ["install"], readonly ["install", "client", "--version", "v2.2.8", "--format", "dmg", "--download-dir", "/tmp/pane-downloads", "--dry-run", "--yes"], readonly ["install", "daemon", "--label", "VM", "--prefer-tunnel", "ssh", "--channel", "nightly", "--base-url", "https://example.test", "--pane-dir", "/tmp/pane", "--listen-port", "4555", "--auto-listen-port", "--print-only", "--repo-ref", "main", "--unknown-future-flag", "future-value", "--dry-run", "--verbose"], readonly ["update", "--version", "latest", "--format", "appimage", "--pane-path", "/usr/bin/pane", "--dry-run"], readonly ["doctor", "--pane-path", "/usr/bin/pane", "--format", "zip", "--verbose"], readonly ["agent-context"], readonly ["agent-context", "--command", "panes create", "--json"], readonly ["repos", "list", "--json", "--pane-dir", "/tmp/pane"], readonly ["repos", "add", "--path", "/tmp/repo", "--name", "Repo", "--dry-run", "--yes", "--json", "--pane-dir", "/tmp/pane"], readonly ["panes", "list", "--repo", "active", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "issue-252", "--agent", "codex", "--prompt", "Kick off discussion", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--from-json", "-", "--yes", "--json"], readonly ["panels", "list", "--pane", "session-1", "--json"], readonly ["panels", "output", "--panel", "panel-1", "--limit", "200", "--json"], readonly ["panels", "input", "--panel", "panel-1", "--text", "Continue\\n", "--yes", "--json"], readonly ["--version"]];
310
- readonly topLevelHelpIncludes: readonly ["runpane setup", "runpane install", "runpane update", "runpane version", "runpane doctor", "runpane agent-context", "runpane repos list", "runpane repos add", "runpane panes list", "runpane panes create", "runpane panels list", "runpane panels output", "runpane panels input"];
361
+ readonly parserSamples: readonly [readonly ["setup"], readonly ["install"], readonly ["install", "client", "--version", "v2.2.8", "--format", "dmg", "--download-dir", "/tmp/pane-downloads", "--dry-run", "--yes"], readonly ["install", "daemon", "--label", "VM", "--prefer-tunnel", "ssh", "--channel", "nightly", "--base-url", "https://example.test", "--pane-dir", "/tmp/pane", "--listen-port", "4555", "--auto-listen-port", "--print-only", "--repo-ref", "main", "--unknown-future-flag", "future-value", "--dry-run", "--verbose"], readonly ["update", "--version", "latest", "--format", "appimage", "--pane-path", "/usr/bin/pane", "--dry-run"], readonly ["doctor", "--pane-path", "/usr/bin/pane", "--format", "zip", "--verbose"], readonly ["agent-context"], readonly ["agent-context", "--command", "panes create", "--json"], readonly ["repos", "list", "--json", "--pane-dir", "/tmp/pane"], readonly ["repos", "add", "--path", "/tmp/repo", "--name", "Repo", "--dry-run", "--yes", "--json", "--pane-dir", "/tmp/pane"], readonly ["panes", "list", "--repo", "active", "--json"], readonly ["panes", "create", "--repo", "active", "--name", "issue-252", "--agent", "codex", "--prompt", "Kick off discussion", "--dry-run", "--yes", "--json"], readonly ["panes", "create", "--from-json", "-", "--yes", "--json"], readonly ["panels", "list", "--pane", "session-1", "--json"], readonly ["panels", "output", "--panel", "panel-1", "--limit", "200", "--json"], readonly ["panels", "input", "--panel", "panel-1", "--text", "Continue\\n", "--yes", "--json"], readonly ["--version"], readonly ["agents", "doctor", "--agent", "codex", "--repo", "active", "--json"], readonly ["panes", "create", "--from-json", "-", "--wait-ready", "--ready-timeout-ms", "45000", "--concurrency", "2", "--yes", "--json"], readonly ["panels", "screen", "--panel", "panel-1", "--limit", "80", "--json"], readonly ["panels", "submit", "--panel", "panel-1", "--text", "2", "--yes", "--json"], readonly ["panels", "wait", "--panel", "panel-1", "--for", "text", "--contains", "ready", "--timeout-ms", "30000", "--interval-ms", "500", "--json"]];
362
+ readonly topLevelHelpIncludes: readonly ["runpane setup", "runpane install", "runpane update", "runpane version", "runpane doctor", "runpane agent-context", "runpane repos list", "runpane repos add", "runpane panes list", "runpane panes create", "runpane panels list", "runpane panels output", "runpane panels input", "runpane agents doctor", "runpane panels screen", "runpane panels submit", "runpane panels wait"];
311
363
  readonly npmHelpIncludes: readonly ["pnpm dlx runpane@latest", "npx --yes runpane@latest"];
312
364
  readonly pipHelpIncludes: readonly ["pipx run runpane", "python -m pip install runpane && python -m runpane setup"];
313
365
  readonly installHelpIncludes: readonly ["--version <latest|vX.Y.Z>", "--format <auto|appimage|deb|dmg|zip|exe>", "--download-dir <path>", "--pane-path <path>", "--label <name>", "--prefer-tunnel <tailscale|ssh|manual|auto>", "--repo-ref <ref>"];
@@ -519,6 +571,15 @@ export declare const RUNPANE_CONTRACT: {
519
571
  readonly timeoutMs: {
520
572
  readonly type: "number";
521
573
  };
574
+ readonly waitReady: {
575
+ readonly type: "boolean";
576
+ };
577
+ readonly readyTimeoutMs: {
578
+ readonly type: "number";
579
+ };
580
+ readonly concurrency: {
581
+ readonly type: "number";
582
+ };
522
583
  };
523
584
  readonly additionalProperties: false;
524
585
  };
@@ -579,6 +640,75 @@ export declare const RUNPANE_CONTRACT: {
579
640
  };
580
641
  readonly additionalProperties: false;
581
642
  };
643
+ readonly readiness: {
644
+ readonly type: "object";
645
+ readonly required: readonly ["ok", "condition", "matched", "timedOut", "elapsedMs", "state"];
646
+ readonly properties: {
647
+ readonly ok: {
648
+ readonly type: "boolean";
649
+ };
650
+ readonly condition: {
651
+ readonly enum: readonly ["initialized", "ready", "idle", "text"];
652
+ };
653
+ readonly matched: {
654
+ readonly type: "boolean";
655
+ };
656
+ readonly timedOut: {
657
+ readonly type: "boolean";
658
+ };
659
+ readonly elapsedMs: {
660
+ readonly type: "number";
661
+ };
662
+ readonly state: {
663
+ readonly type: "object";
664
+ readonly required: readonly ["initialized"];
665
+ readonly properties: {
666
+ readonly initialized: {
667
+ readonly type: "boolean";
668
+ };
669
+ readonly isAlternateScreen: {
670
+ readonly type: "boolean";
671
+ };
672
+ readonly activityStatus: {
673
+ readonly enum: readonly ["active", "idle"];
674
+ };
675
+ readonly isCliReady: {
676
+ readonly type: "boolean";
677
+ };
678
+ readonly isCliPanel: {
679
+ readonly type: "boolean";
680
+ };
681
+ readonly agentType: {
682
+ readonly enum: readonly ["codex", "claude"];
683
+ };
684
+ readonly lastActivity: {
685
+ readonly type: "string";
686
+ };
687
+ };
688
+ readonly additionalProperties: false;
689
+ };
690
+ readonly blocked: {
691
+ readonly type: "object";
692
+ readonly required: readonly ["kind", "message"];
693
+ readonly properties: {
694
+ readonly kind: {
695
+ readonly enum: readonly ["codex-update", "agent-prompt", "unknown"];
696
+ };
697
+ readonly message: {
698
+ readonly type: "string";
699
+ };
700
+ readonly suggestedCommand: {
701
+ readonly type: "string";
702
+ };
703
+ };
704
+ readonly additionalProperties: false;
705
+ };
706
+ readonly nextCommand: {
707
+ readonly type: "string";
708
+ };
709
+ };
710
+ readonly additionalProperties: false;
711
+ };
582
712
  };
583
713
  readonly additionalProperties: false;
584
714
  }, {
@@ -925,17 +1055,271 @@ export declare const RUNPANE_CONTRACT: {
925
1055
  };
926
1056
  readonly additionalProperties: false;
927
1057
  };
1058
+ readonly panelScreenResult: {
1059
+ readonly type: "object";
1060
+ readonly required: readonly ["ok", "panelId", "source", "limit", "returnedLineCount", "hasMore", "text", "state"];
1061
+ readonly properties: {
1062
+ readonly ok: {
1063
+ readonly const: true;
1064
+ };
1065
+ readonly panelId: {
1066
+ readonly type: "string";
1067
+ };
1068
+ readonly paneId: {
1069
+ readonly type: "string";
1070
+ };
1071
+ readonly source: {
1072
+ readonly enum: readonly ["alternateScreen", "scrollback", "persistedOutput", "empty"];
1073
+ };
1074
+ readonly limit: {
1075
+ readonly type: "number";
1076
+ };
1077
+ readonly returnedLineCount: {
1078
+ readonly type: "number";
1079
+ };
1080
+ readonly hasMore: {
1081
+ readonly type: "boolean";
1082
+ };
1083
+ readonly text: {
1084
+ readonly type: "string";
1085
+ };
1086
+ readonly state: {
1087
+ readonly type: "object";
1088
+ readonly required: readonly ["initialized"];
1089
+ readonly properties: {
1090
+ readonly initialized: {
1091
+ readonly type: "boolean";
1092
+ };
1093
+ readonly isAlternateScreen: {
1094
+ readonly type: "boolean";
1095
+ };
1096
+ readonly activityStatus: {
1097
+ readonly enum: readonly ["active", "idle"];
1098
+ };
1099
+ readonly isCliReady: {
1100
+ readonly type: "boolean";
1101
+ };
1102
+ readonly isCliPanel: {
1103
+ readonly type: "boolean";
1104
+ };
1105
+ readonly agentType: {
1106
+ readonly enum: readonly ["codex", "claude"];
1107
+ };
1108
+ readonly lastActivity: {
1109
+ readonly type: "string";
1110
+ };
1111
+ };
1112
+ readonly additionalProperties: false;
1113
+ };
1114
+ readonly nextCommand: {
1115
+ readonly type: "string";
1116
+ };
1117
+ };
1118
+ readonly additionalProperties: false;
1119
+ };
1120
+ readonly panelSubmitRequest: {
1121
+ readonly type: "object";
1122
+ readonly required: readonly ["panelId", "input"];
1123
+ readonly properties: {
1124
+ readonly panelId: {
1125
+ readonly type: "string";
1126
+ };
1127
+ readonly input: {
1128
+ readonly type: "string";
1129
+ };
1130
+ };
1131
+ readonly additionalProperties: false;
1132
+ };
1133
+ readonly panelSubmitResult: {
1134
+ readonly type: "object";
1135
+ readonly required: readonly ["ok", "panelId", "inputBytes", "enter", "sentAt"];
1136
+ readonly properties: {
1137
+ readonly ok: {
1138
+ readonly const: true;
1139
+ };
1140
+ readonly panelId: {
1141
+ readonly type: "string";
1142
+ };
1143
+ readonly paneId: {
1144
+ readonly type: "string";
1145
+ };
1146
+ readonly inputBytes: {
1147
+ readonly type: "number";
1148
+ };
1149
+ readonly enter: {
1150
+ readonly const: "cr";
1151
+ };
1152
+ readonly sentAt: {
1153
+ readonly type: "string";
1154
+ };
1155
+ readonly nextCommand: {
1156
+ readonly type: "string";
1157
+ };
1158
+ };
1159
+ readonly additionalProperties: false;
1160
+ };
1161
+ readonly panelWaitResult: {
1162
+ readonly type: "object";
1163
+ readonly required: readonly ["ok", "panelId", "condition", "matched", "timedOut", "elapsedMs", "state", "screen"];
1164
+ readonly properties: {
1165
+ readonly ok: {
1166
+ readonly type: "boolean";
1167
+ };
1168
+ readonly panelId: {
1169
+ readonly type: "string";
1170
+ };
1171
+ readonly paneId: {
1172
+ readonly type: "string";
1173
+ };
1174
+ readonly condition: {
1175
+ readonly enum: readonly ["initialized", "ready", "idle", "text"];
1176
+ };
1177
+ readonly matched: {
1178
+ readonly type: "boolean";
1179
+ };
1180
+ readonly timedOut: {
1181
+ readonly type: "boolean";
1182
+ };
1183
+ readonly elapsedMs: {
1184
+ readonly type: "number";
1185
+ };
1186
+ readonly state: {
1187
+ readonly type: "object";
1188
+ readonly required: readonly ["initialized"];
1189
+ readonly properties: {
1190
+ readonly initialized: {
1191
+ readonly type: "boolean";
1192
+ };
1193
+ readonly isAlternateScreen: {
1194
+ readonly type: "boolean";
1195
+ };
1196
+ readonly activityStatus: {
1197
+ readonly enum: readonly ["active", "idle"];
1198
+ };
1199
+ readonly isCliReady: {
1200
+ readonly type: "boolean";
1201
+ };
1202
+ readonly isCliPanel: {
1203
+ readonly type: "boolean";
1204
+ };
1205
+ readonly agentType: {
1206
+ readonly enum: readonly ["codex", "claude"];
1207
+ };
1208
+ readonly lastActivity: {
1209
+ readonly type: "string";
1210
+ };
1211
+ };
1212
+ readonly additionalProperties: false;
1213
+ };
1214
+ readonly blocked: {
1215
+ readonly type: "object";
1216
+ readonly required: readonly ["kind", "message"];
1217
+ readonly properties: {
1218
+ readonly kind: {
1219
+ readonly enum: readonly ["codex-update", "agent-prompt", "unknown"];
1220
+ };
1221
+ readonly message: {
1222
+ readonly type: "string";
1223
+ };
1224
+ readonly suggestedCommand: {
1225
+ readonly type: "string";
1226
+ };
1227
+ };
1228
+ readonly additionalProperties: false;
1229
+ };
1230
+ readonly screen: {
1231
+ readonly type: "object";
1232
+ readonly required: readonly ["source", "text", "hasMore"];
1233
+ readonly properties: {
1234
+ readonly source: {
1235
+ readonly enum: readonly ["alternateScreen", "scrollback", "persistedOutput", "empty"];
1236
+ };
1237
+ readonly text: {
1238
+ readonly type: "string";
1239
+ };
1240
+ readonly hasMore: {
1241
+ readonly type: "boolean";
1242
+ };
1243
+ };
1244
+ readonly additionalProperties: false;
1245
+ };
1246
+ readonly nextCommand: {
1247
+ readonly type: "string";
1248
+ };
1249
+ };
1250
+ readonly additionalProperties: false;
1251
+ };
1252
+ readonly agentDoctorResult: {
1253
+ readonly type: "object";
1254
+ readonly required: readonly ["ok", "agent", "command", "available", "checks"];
1255
+ readonly properties: {
1256
+ readonly ok: {
1257
+ readonly type: "boolean";
1258
+ };
1259
+ readonly agent: {
1260
+ readonly enum: readonly ["codex", "claude"];
1261
+ };
1262
+ readonly command: {
1263
+ readonly type: "string";
1264
+ };
1265
+ readonly repo: {
1266
+ readonly $ref: "#/jsonSchemas/repoListResult/properties/repos/items";
1267
+ };
1268
+ readonly environment: {
1269
+ readonly enum: readonly ["wsl", "windows", "linux", "macos"];
1270
+ };
1271
+ readonly available: {
1272
+ readonly type: "boolean";
1273
+ };
1274
+ readonly executablePath: {
1275
+ readonly type: "string";
1276
+ };
1277
+ readonly version: {
1278
+ readonly type: "string";
1279
+ };
1280
+ readonly checks: {
1281
+ readonly type: "array";
1282
+ readonly items: {
1283
+ readonly type: "object";
1284
+ readonly required: readonly ["name", "ok", "message"];
1285
+ readonly properties: {
1286
+ readonly name: {
1287
+ readonly type: "string";
1288
+ };
1289
+ readonly ok: {
1290
+ readonly type: "boolean";
1291
+ };
1292
+ readonly message: {
1293
+ readonly type: "string";
1294
+ };
1295
+ };
1296
+ readonly additionalProperties: false;
1297
+ };
1298
+ };
1299
+ readonly warnings: {
1300
+ readonly type: "array";
1301
+ readonly items: {
1302
+ readonly type: "string";
1303
+ };
1304
+ };
1305
+ };
1306
+ readonly additionalProperties: false;
1307
+ };
928
1308
  };
929
1309
  readonly agentContext: {
930
1310
  readonly brief: {
931
1311
  readonly title: "Pane agent context";
932
- readonly summary: "Pane lets a developer manage repositories and user-visible panes. Agents can use runpane to list/add Pane repositories and create panes with terminal-backed tools.";
933
- readonly rules: readonly ["Start with `runpane repos list --json` to find the saved repository when unsure.", "If WSL cannot reach Pane or `runpane` resolves to a broken Windows shim, the user may be running Windows Pane; try `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`.", "If the repository exists on disk but is not saved in Pane, use `runpane repos add --path <repo> --yes --json` before creating panes.", "Use `runpane panes create` to create a Pane session and open a built-in agent or custom terminal command.", "Use `runpane panels list`, `runpane panels output`, and `runpane panels input` when you need to inspect or drive an existing Pane terminal.", "After creating panes or sending terminal input, validate with bounded panel output before reporting success.", "Prefer `--input-file` for terminal input that includes Enter, Ctrl-C, quotes, or multiple lines.", "Use `runpane agent-context --command <command>` for detailed command definitions only when needed."];
1312
+ readonly summary: "Pane lets a developer manage repositories and user-visible terminal panes. Agents can use runpane to create panes, inspect compact terminal state, wait for readiness, and submit interactive input.";
1313
+ readonly rules: readonly ["Start with `runpane repos list --json` to find the saved repository when unsure.", "If WSL cannot reach Pane or `runpane` resolves to a broken Windows shim, the user may be running Windows Pane; try `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`.", "If the repository exists on disk but is not saved in Pane, use `runpane repos add --path <repo> --yes --json` before creating panes.", "Use `runpane agents doctor --agent <codex|claude> --repo <selector> --json` when agent availability differs across host, Windows, WSL, or repo environments.", "Use `runpane panes create --wait-ready` to create panes and validate initial terminal readiness in one call.", "Use `runpane panels screen` for compact current state, `panels wait` for readiness/text checks, and `panels submit` for ordinary Enter-submitted input.", "Use `runpane panels input` only when exact bytes are required, such as Ctrl-C or handcrafted terminal input.", "After creating panes or sending terminal input, validate with `panels wait` or bounded `panels screen` before reporting success.", "Use `runpane agent-context --command <command>` for detailed command definitions only when needed."];
934
1314
  readonly detailCommand: "runpane agent-context --command <command> [--json]";
935
1315
  readonly tools: readonly [{
936
1316
  readonly name: "agent-context";
937
1317
  readonly summary: "Print token-efficient Pane command context for coding agents.";
938
1318
  readonly arguments: readonly ["--command <command>", "--json"];
1319
+ }, {
1320
+ readonly name: "agents doctor";
1321
+ readonly summary: "Check whether Codex or Claude is available in the repo environment Pane will use.";
1322
+ readonly arguments: readonly ["--agent <codex|claude>", "--repo <selector>", "--json"];
939
1323
  }, {
940
1324
  readonly name: "repos list";
941
1325
  readonly summary: "List repositories saved in the running Pane app.";
@@ -951,7 +1335,7 @@ export declare const RUNPANE_CONTRACT: {
951
1335
  }, {
952
1336
  readonly name: "panes create";
953
1337
  readonly summary: "Create one or more Pane sessions in a saved repository and open a terminal-backed tool tab.";
954
- readonly arguments: readonly ["--repo <selector>", "--name <name>", "--agent <codex|claude>", "--tool-command <command>", "--prompt <text>", "--initial-input-file <path|->", "--from-json <path|->", "--yes", "--json"];
1338
+ readonly arguments: readonly ["--repo <selector>", "--name <name>", "--agent <codex|claude>", "--tool-command <command>", "--prompt <text>", "--initial-input-file <path|->", "--from-json <path|->", "--wait-ready", "--ready-timeout-ms <ms>", "--concurrency <count>", "--yes", "--json"];
955
1339
  }, {
956
1340
  readonly name: "panels list";
957
1341
  readonly summary: "List tool panels inside a Pane session.";
@@ -960,10 +1344,22 @@ export declare const RUNPANE_CONTRACT: {
960
1344
  readonly name: "panels output";
961
1345
  readonly summary: "Read recent terminal output from a panel.";
962
1346
  readonly arguments: readonly ["--panel <panel-id>", "--limit <count>", "--json", "--pane-dir <path>"];
1347
+ }, {
1348
+ readonly name: "panels screen";
1349
+ readonly summary: "Read a compact current-screen view from a terminal panel.";
1350
+ readonly arguments: readonly ["--panel <panel-id>", "--limit <count>", "--json", "--pane-dir <path>"];
963
1351
  }, {
964
1352
  readonly name: "panels input";
965
1353
  readonly summary: "Send input bytes to a terminal panel.";
966
1354
  readonly arguments: readonly ["--panel <panel-id>", "--text <text>", "--input-file <path|->", "--yes", "--json", "--pane-dir <path>"];
1355
+ }, {
1356
+ readonly name: "panels submit";
1357
+ readonly summary: "Send text plus terminal Enter to a terminal panel.";
1358
+ readonly arguments: readonly ["--panel <panel-id>", "--text <text>", "--input-file <path|->", "--yes", "--json", "--pane-dir <path>"];
1359
+ }, {
1360
+ readonly name: "panels wait";
1361
+ readonly summary: "Wait for terminal initialized, ready, idle, or text state with compact output.";
1362
+ readonly arguments: readonly ["--panel <panel-id>", "--for <condition>", "--contains <text>", "--timeout-ms <ms>", "--interval-ms <ms>", "--json", "--pane-dir <path>"];
967
1363
  }];
968
1364
  };
969
1365
  readonly commands: {
@@ -1231,10 +1627,24 @@ export declare const RUNPANE_CONTRACT: {
1231
1627
  readonly name: "--json";
1232
1628
  readonly required: false;
1233
1629
  readonly description: "Print machine-readable output.";
1630
+ }, {
1631
+ readonly name: "--wait-ready";
1632
+ readonly required: false;
1633
+ readonly description: "Wait for each created terminal panel to be ready before returning.";
1634
+ }, {
1635
+ readonly name: "--ready-timeout-ms";
1636
+ readonly value: "<ms>";
1637
+ readonly required: false;
1638
+ readonly description: "Readiness timeout per pane; defaults to 30000.";
1639
+ }, {
1640
+ readonly name: "--concurrency";
1641
+ readonly value: "<count>";
1642
+ readonly required: false;
1643
+ readonly description: "Accepted for compatibility. Pane currently serializes multi-pane session creation so queued jobs do not time out before starting.";
1234
1644
  }];
1235
- readonly examples: readonly ["runpane panes create --repo active --name issue-257 --agent codex --prompt \"Plan this issue\" --yes", "runpane panes create --from-json panes.json --yes --json"];
1645
+ readonly examples: readonly ["runpane panes create --repo active --name issue-257 --agent codex --prompt \"Plan this issue\" --yes", "runpane panes create --from-json panes.json --yes --json", "runpane panes create --repo active --name issue-123 --agent codex --prompt \"Plan this issue\" --wait-ready --yes --json"];
1236
1646
  readonly jsonSchemas: readonly ["paneCreateRequest", "paneCreateResult"];
1237
- readonly notes: readonly ["At least one of --agent or --tool-command is required unless --from-json is used.", "The built-in agent templates come from the runpane contract; custom terminal commands can pass agent-specific flags when requested by the user.", "Use --initial-input-file for multi-line prompts or shell-sensitive initial input.", "When the JSON result includes nextCommand, run it to validate that the terminal produced output before reporting success.", "For POSIX or WSL command chaining, use a custom terminal command like `bash -lc 'cmd1 && cmd2 && cmd3'`.", "For Windows PowerShell command chaining, use a custom terminal command like `powershell -NoProfile -Command \"cmd1; if ($LASTEXITCODE) { exit $LASTEXITCODE }; cmd2\"`.", "From WSL with Windows Pane, invoke through PowerShell and select the saved WSL repo by name or id, for example `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane panes create --repo \"WSL Pane\" --name issue-123 --agent codex --prompt \"Plan this issue\" --yes --json'`."];
1647
+ readonly notes: readonly ["At least one of --agent or --tool-command is required unless --from-json is used.", "The built-in agent templates come from the runpane contract; custom terminal commands can pass agent-specific flags when requested by the user.", "Use --initial-input-file for multi-line prompts or shell-sensitive initial input.", "When the JSON result includes nextCommand, run it to validate that the terminal produced output before reporting success.", "Multi-pane requests are created sequentially today. The --concurrency flag is accepted for compatibility, but agents should not rely on parallel creation.", "For POSIX or WSL command chaining, use a custom terminal command like `bash -lc 'cmd1 && cmd2 && cmd3'`.", "For Windows PowerShell command chaining, use a custom terminal command like `powershell -NoProfile -Command \"cmd1; if ($LASTEXITCODE) { exit $LASTEXITCODE }; cmd2\"`.", "From WSL with Windows Pane, invoke through PowerShell and select the saved WSL repo by name or id, for example `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane panes create --repo \"WSL Pane\" --name issue-123 --agent codex --prompt \"Plan this issue\" --yes --json'`.", "Use --wait-ready when an agent needs to verify that an agent terminal started instead of only creating a pane.", "If readiness returns blocked, inspect blocked.suggestedCommand rather than guessing which prompt to answer."];
1238
1648
  };
1239
1649
  readonly "panels list": {
1240
1650
  readonly name: "panels list";
@@ -1289,7 +1699,7 @@ export declare const RUNPANE_CONTRACT: {
1289
1699
  }];
1290
1700
  readonly examples: readonly ["runpane panels output --panel <panel-id> --limit 200 --json"];
1291
1701
  readonly jsonSchemas: readonly ["panelOutputResult"];
1292
- readonly notes: readonly ["Default output is bounded to the latest 200 lines or records. Use a larger --limit only when hasMore is true and more history is needed.", "Use --json when an agent needs timestamps, record types, returnedCount, or hasMore.", "The output is intended to be agent-readable, but terminal prompts and shell echoes may still appear; use the newest relevant lines before concluding success."];
1702
+ readonly notes: readonly ["Default output is bounded to the latest 200 lines or records. Use a larger --limit only when hasMore is true and more history is needed.", "Use --json when an agent needs timestamps, record types, returnedCount, or hasMore.", "The output is intended to be agent-readable, but terminal prompts and shell echoes may still appear; use the newest relevant lines before concluding success.", "Prefer `panels screen` for a smaller current-state read before increasing output limits."];
1293
1703
  };
1294
1704
  readonly "panels input": {
1295
1705
  readonly name: "panels input";
@@ -1328,10 +1738,154 @@ export declare const RUNPANE_CONTRACT: {
1328
1738
  }];
1329
1739
  readonly examples: readonly ["printf 'Continue\\n' | runpane panels input --panel <panel-id> --input-file - --yes", "printf '\\003' | runpane panels input --panel <panel-id> --input-file - --yes", "runpane panels input --panel <panel-id> --text \"simple text\" --yes --json"];
1330
1740
  readonly jsonSchemas: readonly ["panelInputRequest", "panelInputResult"];
1331
- readonly notes: readonly ["Input is sent exactly as provided. Include a real newline byte when the terminal should receive Enter; across shells, `--input-file` is safer than `--text \"...\\n\"`.", "Use `--input-file -` or a temp file for multi-line input, quotes, Ctrl-C, or shell-sensitive text.", "If interrupting a running process, send Ctrl-C first, validate/read output, then send the next command in a separate `panels input` call so bytes are not dropped.", "After sending input, validate with `runpane panels output --panel <panel-id> --json` before reporting success.", "Runpane records action metadata and errors for observability, but should not log full input text by default."];
1741
+ readonly notes: readonly ["Input is sent exactly as provided. Include a real newline byte when the terminal should receive Enter; across shells, `--input-file` is safer than `--text \"...\\n\"`.", "Use `--input-file -` or a temp file for multi-line input, quotes, Ctrl-C, or shell-sensitive text.", "If interrupting a running process, send Ctrl-C first, validate/read output, then send the next command in a separate `panels input` call so bytes are not dropped.", "After sending input, validate with `runpane panels output --panel <panel-id> --json` before reporting success.", "Runpane records action metadata and errors for observability, but should not log full input text by default.", "For ordinary text plus Enter, prefer `panels submit` so the terminal receives a CR Enter byte."];
1742
+ };
1743
+ readonly "agents doctor": {
1744
+ readonly name: "agents doctor";
1745
+ readonly summary: "Diagnose whether a built-in agent command is available in a Pane repository environment.";
1746
+ readonly details: "Use this before creating Codex or Claude panes when PATH may differ between macOS/Linux/Windows/WSL or between the wrapper shell and Pane. The check runs through Pane project context, not the wrapper process.";
1747
+ readonly requiresPaneDaemon: true;
1748
+ readonly mutates: false;
1749
+ readonly arguments: readonly [{
1750
+ readonly name: "--agent";
1751
+ readonly value: "<codex|claude>";
1752
+ readonly required: true;
1753
+ readonly description: "Built-in agent command to diagnose.";
1754
+ }, {
1755
+ readonly name: "--repo";
1756
+ readonly value: "<selector>";
1757
+ readonly required: false;
1758
+ readonly description: "Repository selector; defaults to the active Pane repo.";
1759
+ }, {
1760
+ readonly name: "--json";
1761
+ readonly required: false;
1762
+ readonly description: "Print machine-readable output.";
1763
+ }, {
1764
+ readonly name: "--pane-dir";
1765
+ readonly value: "<path>";
1766
+ readonly required: false;
1767
+ readonly description: "Connect to a specific Pane data directory.";
1768
+ }];
1769
+ readonly examples: readonly ["runpane agents doctor --agent codex --repo active --json"];
1770
+ readonly jsonSchemas: readonly ["agentDoctorResult"];
1771
+ readonly notes: readonly ["For WSL repos, install the agent inside the WSL distro Pane uses, not only on Windows.", "This diagnoses built-in Codex/Claude templates only; custom commands should be validated by creating a pane and reading its screen."];
1772
+ };
1773
+ readonly "panels screen": {
1774
+ readonly name: "panels screen";
1775
+ readonly summary: "Read a compact current-screen view from a terminal panel.";
1776
+ readonly details: "Use this for token-safe current terminal state. It prefers active alternate-screen/TUI output, then live scrollback, then persisted output. Default output is bounded to 80 lines.";
1777
+ readonly requiresPaneDaemon: true;
1778
+ readonly mutates: false;
1779
+ readonly arguments: readonly [{
1780
+ readonly name: "--panel";
1781
+ readonly value: "<panel-id>";
1782
+ readonly required: true;
1783
+ readonly description: "Terminal panel id.";
1784
+ }, {
1785
+ readonly name: "--limit";
1786
+ readonly value: "<count>";
1787
+ readonly required: false;
1788
+ readonly description: "Maximum lines to return; defaults to 80.";
1789
+ }, {
1790
+ readonly name: "--json";
1791
+ readonly required: false;
1792
+ readonly description: "Print machine-readable output.";
1793
+ }, {
1794
+ readonly name: "--pane-dir";
1795
+ readonly value: "<path>";
1796
+ readonly required: false;
1797
+ readonly description: "Connect to a specific Pane data directory.";
1798
+ }];
1799
+ readonly examples: readonly ["runpane panels screen --panel <panel-id> --limit 80 --json"];
1800
+ readonly jsonSchemas: readonly ["panelScreenResult"];
1801
+ readonly notes: readonly ["Use this before `panels output` when an agent only needs the latest visible/current state.", "If hasMore is true and context is missing, rerun with a larger --limit or use `panels output`."];
1802
+ };
1803
+ readonly "panels submit": {
1804
+ readonly name: "panels submit";
1805
+ readonly summary: "Send text to a terminal panel and append a terminal Enter byte.";
1806
+ readonly 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`.";
1807
+ readonly requiresPaneDaemon: true;
1808
+ readonly mutates: true;
1809
+ readonly arguments: readonly [{
1810
+ readonly name: "--panel";
1811
+ readonly value: "<panel-id>";
1812
+ readonly required: true;
1813
+ readonly description: "Terminal panel id.";
1814
+ }, {
1815
+ readonly name: "--text";
1816
+ readonly value: "<text>";
1817
+ readonly required: false;
1818
+ readonly description: "Text to submit before Enter.";
1819
+ }, {
1820
+ readonly name: "--input-file";
1821
+ readonly value: "<path|->";
1822
+ readonly required: false;
1823
+ readonly description: "Read text from a file or stdin before Enter.";
1824
+ }, {
1825
+ readonly name: "--yes";
1826
+ readonly required: false;
1827
+ readonly description: "Skip confirmation for this mutating command.";
1828
+ }, {
1829
+ readonly name: "--json";
1830
+ readonly required: false;
1831
+ readonly description: "Print machine-readable output.";
1832
+ }, {
1833
+ readonly name: "--pane-dir";
1834
+ readonly value: "<path>";
1835
+ readonly required: false;
1836
+ readonly description: "Connect to a specific Pane data directory.";
1837
+ }];
1838
+ readonly examples: readonly ["runpane panels submit --panel <panel-id> --text \"2\" --yes --json", "printf \"echo hello\" | runpane panels submit --panel <panel-id> --input-file - --yes --json"];
1839
+ readonly jsonSchemas: readonly ["panelSubmitRequest", "panelSubmitResult"];
1840
+ readonly notes: readonly ["The response includes nextCommand for validation. Run it before reporting that the input worked.", "Use `panels input` for Ctrl-C, escape sequences, or any workflow requiring exact bytes."];
1841
+ };
1842
+ readonly "panels wait": {
1843
+ readonly name: "panels wait";
1844
+ readonly summary: "Wait for a terminal panel to initialize, become ready/idle, or contain text.";
1845
+ readonly details: "Use this to validate asynchronous terminal behavior without pulling large scrollback. It returns brief readiness state, blocker hints, a compact screen, and a next command.";
1846
+ readonly requiresPaneDaemon: true;
1847
+ readonly mutates: false;
1848
+ readonly arguments: readonly [{
1849
+ readonly name: "--panel";
1850
+ readonly value: "<panel-id>";
1851
+ readonly required: true;
1852
+ readonly description: "Terminal panel id.";
1853
+ }, {
1854
+ readonly name: "--for";
1855
+ readonly value: "<initialized|ready|idle|text>";
1856
+ readonly required: false;
1857
+ readonly description: "Condition to wait for. Defaults to ready for CLI panels and idle otherwise.";
1858
+ }, {
1859
+ readonly name: "--contains";
1860
+ readonly value: "<text>";
1861
+ readonly required: false;
1862
+ readonly description: "Text required for --for text; implies --for text when --for is omitted.";
1863
+ }, {
1864
+ readonly name: "--timeout-ms";
1865
+ readonly value: "<ms>";
1866
+ readonly required: false;
1867
+ readonly description: "Wait timeout; defaults to 30000.";
1868
+ }, {
1869
+ readonly name: "--interval-ms";
1870
+ readonly value: "<ms>";
1871
+ readonly required: false;
1872
+ readonly description: "Polling interval; defaults to 500.";
1873
+ }, {
1874
+ readonly name: "--json";
1875
+ readonly required: false;
1876
+ readonly description: "Print machine-readable output.";
1877
+ }, {
1878
+ readonly name: "--pane-dir";
1879
+ readonly value: "<path>";
1880
+ readonly required: false;
1881
+ readonly description: "Connect to a specific Pane data directory.";
1882
+ }];
1883
+ readonly examples: readonly ["runpane panels wait --panel <panel-id> --for ready --timeout-ms 30000 --json", "runpane panels wait --panel <panel-id> --contains \"Ready\" --json"];
1884
+ readonly jsonSchemas: readonly ["panelWaitResult"];
1885
+ readonly notes: readonly ["If blocked is present, do not assume success. Use blocked.suggestedCommand or inspect `panels screen`.", "The default timeout and screen are intentionally small for agent context safety."];
1332
1886
  };
1333
1887
  };
1334
- readonly managedBlock: readonly ["## Pane", "", "The developer is using Pane for this repository. Pane can manage saved repositories and create user-visible panes with terminal-backed tools for planning, discussion, and implementation work.", "", "Use `runpane agent-context` for a brief Pane command schema. Use `runpane agent-context --command \"panes create\"` or another command name for the detailed schema only when needed.", "", "After creating panes or sending terminal input, validate with bounded panel output before reporting success. Prefer `--input-file` for exact terminal bytes, newlines, Ctrl-C, quotes, or multi-line input.", "", "Common commands:", "- `runpane repos list --json`", "- `runpane repos add --path <repo> --yes --json`", "- `runpane panes create --repo active --name <name> --agent codex --prompt \"<task>\" --yes`", "- `runpane panels list --pane <pane-id> --json`", "- `runpane panels output --panel <panel-id> --limit 200 --json`", "- `runpane panels input --panel <panel-id> --input-file <path|-> --yes`", "", "WSL note: if `runpane repos list` cannot find `/tmp/pane-daemon.../daemon.sock` or `runpane` resolves to a broken Windows shim, Pane may be running on Windows. Try `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`, then create panes through the same PowerShell form using the saved WSL repo name or id."];
1888
+ readonly managedBlock: readonly ["## Pane", "", "The developer is using Pane for this repository. Pane can manage saved repositories and create user-visible panes with terminal-backed tools for planning, discussion, implementation, and review work.", "", "Use `runpane agent-context` for a brief Pane command schema. Use `runpane agent-context --command \"panels wait\"` or another command name for detailed schema only when needed.", "", "Default to context-safe validation: after creating panes or sending terminal input, run `runpane panels wait` or `runpane panels screen` before reporting success. Prefer `runpane panels submit` for normal text plus Enter; use `runpane panels input` only for exact bytes such as Ctrl-C or escape sequences.", "", "Common commands:", "- `runpane repos list --json`", "- `runpane repos add --path <repo> --yes --json`", "- `runpane agents doctor --agent codex --repo active --json`", "- `runpane panes create --repo active --name <name> --agent codex --prompt \"<task>\" --wait-ready --yes --json`", "- `runpane panels list --pane <pane-id> --json`", "- `runpane panels screen --panel <panel-id> --limit 80 --json`", "- `runpane panels wait --panel <panel-id> --for ready --timeout-ms 30000 --json`", "- `runpane panels submit --panel <panel-id> --text \"<answer>\" --yes --json`", "- `runpane panels input --panel <panel-id> --input-file <path|-> --yes --json`", "", "WSL note: if `runpane repos list` cannot find `/tmp/pane-daemon.../daemon.sock` or `runpane` resolves to a broken Windows shim, Pane may be running on Windows. Try `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`, then create panes through the same PowerShell form using the saved WSL repo name or id. Use `runpane agents doctor --agent codex --repo <selector> --json` to diagnose the repo environment Pane will actually use."];
1335
1889
  };
1336
1890
  };
1337
1891
  export type RunpaneCommand = typeof RUNPANE_CONTRACT.commands[number]['name'];