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
This commit is contained in:
Juan Ibiapina 2026-01-31 13:22:31 +01:00 committed by Mario Zechner
parent d075291b08
commit 6f2d066342
4 changed files with 25 additions and 1 deletions

View file

@ -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

View file

@ -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 |

View file

@ -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<AppAction, KeyId | KeyId[]> = {
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 {

View file

@ -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;