runpane 2.3.6 → 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> --text <text> --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> --text <text> --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: {
@@ -297,17 +349,17 @@ export declare const RUNPANE_CONTRACT: {
297
349
  readonly npmCommands: readonly ["npx --yes runpane@latest", "npx --yes runpane@latest setup", "npx --yes runpane@latest install client", "npx --yes runpane@latest install daemon --label \"My Server\"", "pnpm dlx runpane@latest", "pnpm dlx runpane@latest install daemon --label \"My Server\"", "npm i -g runpane && runpane", "npm i -g runpane && runpane setup", "npm i -g runpane && runpane install daemon --label \"My Server\"", "pnpm add -g runpane && runpane", "pnpm add -g runpane && runpane setup", "pnpm add -g runpane && runpane install daemon --label \"My Server\"", "yarn dlx runpane@latest install daemon --label \"My Server\"", "bunx runpane@latest install daemon --label \"My Server\""];
298
350
  readonly pythonCommands: readonly ["pipx run runpane", "pipx run runpane setup", "python -m pip install runpane", "runpane", "runpane setup", "python -m runpane setup", "runpane install daemon --label \"My Server\"", "pipx install runpane", "runpane", "runpane setup", "pipx run runpane install daemon --label \"My Server\"", "uvx runpane@latest", "uvx runpane@latest setup", "uvx runpane@latest install daemon --label \"My Server\"", "python -m runpane install daemon --label \"My Server\""];
299
351
  readonly packageManagerNotes: readonly ["Use `pnpm dlx` for one-shot pnpm execution and `pnpm add -g` for persistent CLI installation.", "Do not document `pnpm install runpane` as the public CLI install path."];
300
- readonly commandUsages: readonly ["runpane", "runpane setup", "runpane install", "runpane install client", "runpane install daemon", "runpane update", "runpane version", "runpane doctor", "runpane agent-context", "runpane agent-context --command \"panes create\" --json", "runpane repos list --json", "runpane repos add --path /path/to/repo --name Pane --yes --json", "runpane panes list --repo active --json", "runpane panes create --repo active --name issue-252 --agent codex --prompt \"Kick off the discussion skill for issue 252\" --yes", "runpane panes create --from-json panes.json --yes --json", "runpane panels list --pane <pane-id> --json", "runpane panels output --panel <panel-id> --limit 200 --json", "runpane panels input --panel <panel-id> --text \"Continue\\n\" --yes --json", "runpane help", "runpane <command> --help"];
301
- readonly commandDescriptions: readonly ["`runpane` with no arguments and `runpane setup` open an interactive wizard when stdin and stdout are TTYs. In non-interactive shells or CI, both forms must print help and exit successfully instead of waiting for input.", "`runpane install` is an alias for `runpane install client`.", "`runpane install client` downloads the selected Pane desktop artifact and installs, opens, or launches it for the current platform.", "`runpane install daemon` downloads or installs Pane, resolves a stable Pane executable path, and spawns `<pane executable> --remote-setup <forwarded remote setup args>`.", "The wrapper must stream Pane stdout/stderr without reformatting because `pane --remote-setup` prints the one-time `pane-remote://...` connection code.", "`runpane update` uses the same release resolution and installer path as `install client`.", "`runpane version` prints the wrapper package version, the installed Pane version when detectable, and the latest GitHub release version when reachable.", "`runpane doctor` checks platform support, release metadata reachability, download URL selection, installed Pane detection, and remote-daemon hints.", "`runpane agent-context` prints a brief, token-efficient command schema for coding agents without connecting to the Pane daemon.", "`runpane agent-context --command \"panes create\"` prints the detailed definition for one command. Add `--json` for machine-readable output.", "`runpane repos list` connects to the running local Pane daemon and prints saved repository records.", "`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.", "`runpane panes list` lists Pane sessions, optionally scoped to one saved repository.", "`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.", "`runpane panels list` lists tool panels inside one Pane session.", "`runpane panels output` reads bounded recent terminal output from one panel.", "`runpane panels input` sends exact input bytes to one terminal panel. Include a newline in the input when the agent means Enter.", "`runpane panes create --prompt` is an alias for `--initial-input`; request JSON and daemon payloads should use the canonical `initialInput` field.", "When running from WSL while Pane is installed on Windows, the Linux wrapper may look for a missing `/tmp/pane-daemon.../daemon.sock`. In that case invoke the Windows wrapper through PowerShell, for example `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`."];
352
+ readonly commandUsages: readonly ["runpane", "runpane setup", "runpane install", "runpane install client", "runpane install daemon", "runpane update", "runpane version", "runpane doctor", "runpane agent-context", "runpane agent-context --command \"panes create\" --json", "runpane repos list --json", "runpane repos add --path /path/to/repo --name Pane --yes --json", "runpane panes list --repo active --json", "runpane panes create --repo active --name issue-252 --agent codex --prompt \"Kick off the discussion skill for issue 252\" --yes", "runpane panes create --from-json panes.json --yes --json", "runpane panels list --pane <pane-id> --json", "runpane panels output --panel <panel-id> --limit 200 --json", "printf 'Continue\\n' | runpane panels input --panel <panel-id> --input-file - --yes --json", "runpane help", "runpane <command> --help"];
353
+ readonly commandDescriptions: readonly ["`runpane` with no arguments and `runpane setup` open an interactive wizard when stdin and stdout are TTYs. In non-interactive shells or CI, both forms must print help and exit successfully instead of waiting for input.", "`runpane install` is an alias for `runpane install client`.", "`runpane install client` downloads the selected Pane desktop artifact and installs, opens, or launches it for the current platform.", "`runpane install daemon` downloads or installs Pane, resolves a stable Pane executable path, and spawns `<pane executable> --remote-setup <forwarded remote setup args>`.", "The wrapper must stream Pane stdout/stderr without reformatting because `pane --remote-setup` prints the one-time `pane-remote://...` connection code.", "`runpane update` uses the same release resolution and installer path as `install client`.", "`runpane version` prints the wrapper package version, the installed Pane version when detectable, and the latest GitHub release version when reachable.", "`runpane doctor` checks platform support, release metadata reachability, download URL selection, installed Pane detection, and remote-daemon hints.", "`runpane agent-context` prints a brief, token-efficient command schema for coding agents without connecting to the Pane daemon.", "`runpane agent-context --command \"panes create\"` prints the detailed definition for one command. Add `--json` for machine-readable output.", "`runpane repos list` connects to the running local Pane daemon and prints saved repository records.", "`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.", "`runpane panes list` lists Pane sessions, optionally scoped to one saved repository.", "`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.", "`runpane panels list` lists tool panels inside one Pane session.", "`runpane panels output` reads bounded recent terminal output from one panel and strips common terminal control noise for agent use.", "`runpane panels input` sends exact input bytes to one terminal panel. Prefer `--input-file` for newlines, Ctrl-C, quotes, or shell-sensitive text.", "`runpane panes create --prompt` is an alias for `--initial-input`; request JSON and daemon payloads should use the canonical `initialInput` field.", "When running from WSL while Pane is installed on Windows, the Linux wrapper may look for a missing `/tmp/pane-daemon.../daemon.sock` or resolve to a Windows shim such as Volta. In that case invoke the Windows wrapper through PowerShell from a Windows cwd, for example `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`."];
302
354
  readonly 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.";
303
- readonly localControlFlagNote: "`runpane repos list`, `runpane panes list`, `runpane panes create`, and `runpane panels ...` commands 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. `runpane agent-context` is local/offline and can be used before Pane is running. From WSL, if the user runs Windows Pane, call the Windows wrapper through `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane ...'` so the command can reach the Windows named-pipe daemon.";
355
+ readonly localControlFlagNote: "`runpane repos list`, `runpane panes list`, `runpane panes create`, and `runpane panels ...` commands 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. `runpane agent-context` is local/offline and can be used before Pane is running. From WSL, if the user runs Windows Pane, call the Windows wrapper through `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane ...'` so the command can reach the Windows named-pipe daemon and avoid UNC cwd issues.";
304
356
  readonly 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.";
305
357
  readonly downloadAttribution: readonly ["The npm package uses `source=npm` for all npm-registry consumers, including `npx`, `pnpm dlx`, `yarn dlx`, `bunx`, and global npm/pnpm installs.", "The PyPI package uses `source=pip` for all Python consumers, including pip, pipx, uvx, and `python -m runpane`.", "Wrappers should prefer `https://runpane.com/api/download?platform=<platform>&arch=<arch>&format=<format>&version=<version>&channel=<channel>&source=<npm|pip>`.", "If the website route cannot satisfy the download, wrappers may fall back to the matching GitHub release asset and print a warning that website attribution may be incomplete for that run.", "Wrappers also emit best-effort lifecycle telemetry to `https://runpane.com/api/runpane/telemetry` for command start/success/failure, download request/success/failure, and GitHub fallback usage.", "Wrapper telemetry uses a persisted anonymous `install_id` in the form `install_<uuid>` and PostHog `distinct_id = install:<install_id>` so distinct wrapper users can be counted with `count(DISTINCT properties.install_id)`.", "Wrapper telemetry must be disabled in CI and when `RUNPANE_TELEMETRY_DISABLED` is set, and must not include raw paths, labels, prompts, raw error text, or environment values."];
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 find `/tmp/pane-daemon.../daemon.sock`, 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.", "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>", "--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: {
@@ -1117,7 +1513,7 @@ export declare const RUNPANE_CONTRACT: {
1117
1513
  }];
1118
1514
  readonly examples: readonly ["runpane repos list --json"];
1119
1515
  readonly jsonSchemas: readonly ["repoListResult"];
1120
- readonly notes: readonly ["Requires a running Pane app or daemon for the selected Pane data directory.", "If this fails from WSL with a missing `/tmp/pane-daemon.../daemon.sock`, the user may be running Windows Pane. Retry via `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`."];
1516
+ readonly notes: readonly ["Requires a running Pane app or daemon for the selected Pane data directory.", "If this fails from WSL with a missing `/tmp/pane-daemon.../daemon.sock`, `volta: command not found`, or a Windows shim error, the user may be running Windows Pane. Retry via `powershell.exe -NoProfile -Command 'Set-Location $env:TEMP; runpane repos list --json'`.", "When using PowerShell from WSL, set a Windows cwd such as `$env:TEMP` or `$env:USERPROFILE` before running runpane to avoid UNC cwd issues."];
1121
1517
  };
1122
1518
  readonly "repos add": {
1123
1519
  readonly name: "repos add";
@@ -1185,7 +1581,7 @@ export declare const RUNPANE_CONTRACT: {
1185
1581
  readonly "panes create": {
1186
1582
  readonly name: "panes create";
1187
1583
  readonly summary: "Create one or more Pane sessions in a saved repository and open a terminal-backed tool tab.";
1188
- readonly details: "Use this to set up user-visible panes for work. Select a saved repository, choose a built-in agent or custom terminal command, and optionally send initial input after the tool starts.";
1584
+ readonly details: "Use this to set up user-visible panes for work. Select a saved repository, choose a built-in agent or custom terminal command, and optionally send initial input after the tool starts. For multi-step shell setup, pass a shell command through --tool-command rather than adding a new runpane primitive.";
1189
1585
  readonly requiresPaneDaemon: true;
1190
1586
  readonly mutates: true;
1191
1587
  readonly arguments: readonly [{
@@ -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.", "When the JSON result includes nextCommand, run it to validate that the terminal produced output before reporting success.", "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";
@@ -1264,7 +1674,7 @@ export declare const RUNPANE_CONTRACT: {
1264
1674
  readonly "panels output": {
1265
1675
  readonly name: "panels output";
1266
1676
  readonly summary: "Read recent terminal output from a panel.";
1267
- readonly details: "Use this to inspect recent terminal output from a terminal-backed panel without loading the full history by default. Live terminal scrollback is returned as bounded recent lines; persisted output fallback is returned as bounded records.";
1677
+ readonly details: "Use this to inspect recent terminal output from a terminal-backed panel without loading the full history by default. Live terminal scrollback is returned as bounded recent lines; persisted output fallback is returned as bounded records. Terminal control noise is stripped before returning text.";
1268
1678
  readonly requiresPaneDaemon: true;
1269
1679
  readonly mutates: false;
1270
1680
  readonly arguments: readonly [{
@@ -1289,12 +1699,12 @@ 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."];
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";
1296
1706
  readonly summary: "Send input bytes to a terminal panel.";
1297
- readonly details: "Use this to answer prompts or continue an agent inside an existing Pane terminal panel.";
1707
+ readonly details: "Use this to answer prompts or continue an agent inside an existing Pane terminal panel. Input is byte-oriented; choose --input-file for exact control over newlines and control characters.";
1298
1708
  readonly requiresPaneDaemon: true;
1299
1709
  readonly mutates: true;
1300
1710
  readonly arguments: readonly [{
@@ -1326,12 +1736,156 @@ export declare const RUNPANE_CONTRACT: {
1326
1736
  readonly required: false;
1327
1737
  readonly description: "Connect to a specific Pane data directory.";
1328
1738
  }];
1329
- readonly examples: readonly ["runpane panels input --panel <panel-id> --text \"Continue\\n\" --yes --json", "printf 'Continue\\n' | runpane panels input --panel <panel-id> --input-file - --yes"];
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 `\\n` or `\\r` when the terminal should receive Enter.", "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.", "", "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> --text \"<input>\" --yes`", "", "WSL note: if `runpane repos list` cannot find `/tmp/pane-daemon.../daemon.sock`, 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'];