Add runpane pane orchestration CLI#256
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e9616d7b5b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const result = await invokeDaemon<PaneCreateResult>('runpane:panes:create', [request], { | ||
| paneDir: parsed.paneDir, | ||
| timeoutMs: (parsed.timeoutMs ?? 120_000) + 10_000, |
There was a problem hiding this comment.
Scale daemon timeout for multi-pane creates
When --from-json contains multiple panes, the daemon handler processes normalized.panes sequentially and applies timeoutMs to each createSessionAndWait call, but this client RPC timeout is only one pane timeout plus 10s for the entire request. Two panes that each finish within the documented per-pane timeout can still make the wrapper abort before the daemon returns; scale the RPC timeout by request.panes.length or otherwise account for the whole batch.
Useful? React with 👍 / 👎.
Summary
Closes #252.
Adds a stable runpane orchestration surface for agents:
runpane repos listandrunpane panes create--initial-inputplus the agent-friendly--promptaliasrunpane:*IPC handlersVisual Overview
flowchart LR subgraph Before["Before: no stable CLI contract"] A["Agent wants to start issue work"] --> B{"How do I make a pane?"} B --> C["Manual/UI-only path"] C --> D["No reliable repo/pane/first-message automation"] end subgraph After["After: contract-backed orchestration"] E["Agent calls runpane CLI"] --> F["Shared contract<br/>repos list<br/>panes create"] F --> G["Generated Node/Python clients"] G --> H["Daemon IPC<br/>runpane:repos:list<br/>runpane:panes:create"] H --> I["Pane creates project/session/panel<br/>and seeds initial input"] endTruth statement: agents get a small generated command surface, while Pane still owns validation and UI mutations through the running daemon.
Term note: IPC here means the app-internal message path between the runpane wrapper and the running Pane daemon.
Matching Excalidraw source is saved locally at
/tmp/codex-pr-diagrams/runpane-pane-orchestration/runpane-pane-orchestration.excalidraw.Testing
Passed:
pnpm run generate-runpane-contractpnpm run test:runpane-contractpython3 -m compileall -q packages/runpane-py/src/runpanepnpm --filter runpane typecheckpnpm --filter runpane lintpnpm typecheckpnpm lintpnpm --filter main exec vitest run src/ipc/runpane.test.tspnpm --filter main exec vitest run src/core/importBoundary.test.tspnpm --filter main exec vitest runpnpm run build:mainpnpm run test:runpane-package-smokepanes create --promptpanes create --promptBlocked locally:
pnpm buildreaches frontend/main build, then fails in Electron packaging/native rebuild in this local environment. The machine is on Nodev20.19.3while the repo requires>=22.14.0, and the native rebuild formsgpackr-extractrejects-m64on linux arm64.better_sqlite3.node.