From 6f2d066342d993989af013032bee74bf591145c9 Mon Sep 17 00:00:00 2001 From: Juan Ibiapina Date: Sat, 31 Jan 2026 13:22:31 +0100 Subject: [PATCH] feat(coding-agent): add keybinding actions for /tree, /fork, and /new Add newSession, tree, and fork as configurable keybinding actions. All unbound by default. Users can configure in keybindings.json. Closes #1088 --- packages/coding-agent/CHANGELOG.md | 4 ++++ packages/coding-agent/docs/keybindings.md | 8 ++++++++ packages/coding-agent/src/core/keybindings.ts | 11 ++++++++++- .../src/modes/interactive/interactive-mode.ts | 3 +++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 9823a168..ab26f5a0 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Added + +- Added `newSession`, `tree`, and `fork` keybinding actions for `/new`, `/tree`, and `/fork` commands. All unbound by default. ([#1114](https://github.com/badlogic/pi-mono/pull/1114) by [@juanibiapina](https://github.com/juanibiapina)) + ## [0.50.7] - 2026-01-31 ### Fixed diff --git a/packages/coding-agent/docs/keybindings.md b/packages/coding-agent/docs/keybindings.md index bcc07b8f..f44d267d 100644 --- a/packages/coding-agent/docs/keybindings.md +++ b/packages/coding-agent/docs/keybindings.md @@ -76,6 +76,14 @@ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, etc. | `suspend` | `ctrl+z` | Suspend to background | | `externalEditor` | `ctrl+g` | Open in external editor (`$VISUAL` or `$EDITOR`) | +### Session + +| Action | Default | Description | +|--------|---------|-------------| +| `newSession` | *(none)* | Start a new session (`/new`) | +| `tree` | *(none)* | Open session tree navigator (`/tree`) | +| `fork` | *(none)* | Fork current session (`/fork`) | + ### Models & Thinking | Action | Default | Description | diff --git a/packages/coding-agent/src/core/keybindings.ts b/packages/coding-agent/src/core/keybindings.ts index 12661f79..d0258dbe 100644 --- a/packages/coding-agent/src/core/keybindings.ts +++ b/packages/coding-agent/src/core/keybindings.ts @@ -28,7 +28,10 @@ export type AppAction = | "externalEditor" | "followUp" | "dequeue" - | "pasteImage"; + | "pasteImage" + | "newSession" + | "tree" + | "fork"; /** * All configurable actions. @@ -60,6 +63,9 @@ export const DEFAULT_APP_KEYBINDINGS: Record = { followUp: "alt+enter", dequeue: "alt+up", pasteImage: "ctrl+v", + newSession: [], + tree: [], + fork: [], }; /** @@ -86,6 +92,9 @@ const APP_ACTIONS: AppAction[] = [ "followUp", "dequeue", "pasteImage", + "newSession", + "tree", + "fork", ]; function isAppAction(action: string): action is AppAction { diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index f40fe6ab..73f47da9 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -1776,6 +1776,9 @@ export class InteractiveMode { this.defaultEditor.onAction("externalEditor", () => this.openExternalEditor()); this.defaultEditor.onAction("followUp", () => this.handleFollowUp()); this.defaultEditor.onAction("dequeue", () => this.handleDequeue()); + this.defaultEditor.onAction("newSession", () => this.handleClearCommand()); + this.defaultEditor.onAction("tree", () => this.showTreeSelector()); + this.defaultEditor.onAction("fork", () => this.showUserMessageSelector()); this.defaultEditor.onChange = (text: string) => { const wasBashMode = this.isBashMode;