packages/ai: - feat: expose provider responseId on AssistantMessage - feat: lazy-load provider modules for faster startup - fix: hash foreign Responses API tool call IDs exceeding 64-char limit - fix: ignore null chunks in openai-completions streams - fix: keep image tool results inline for Gemini 3+ and Antigravity - fix: correct Bedrock Claude 4.6 context window to 200k - fix: support prompt caching for Bedrock application inference profiles - fix: add OpenRouter reasoning payload format - fix: ignore placeholder Vertex API keys - fix: skip AJV validation in restricted runtimes - fix: Anthropic OAuth client injection and responseId extraction - fix: Codex incomplete/failed response status handling packages/agent: - fix: defer steering until after tool execution completes packages/tui: - feat: namespaced keybinding IDs with KeybindingsManager conflict detection - feat: configurable select list column sizing (#2154 by @markusylisiurunen) - fix: stream truncateToWidth for large strings - fix: skip Termux height redraws - fix: stop evicting unrelated default keybindings - fix: resolve raw backspace ambiguity on Windows Terminal - fix: clear stale scrollback on session switch (#2155 by @Perlence) - fix: remove trailing markdown block spacing (#2152 by @markusylisiurunen) packages/coding-agent: - feat: add resizable share sidebar (#2435 by @dmmulroy) - feat: emit OSC 133 command-executed marker - feat: reload custom themes from disk watcher - feat: add --fork session flag - feat: file mutation queue for serialized writes - feat: initial message consolidation utility - fix: keybindings migrated to namespaced IDs - fix: resolve waitForRetry() race when auto-retry produces tool calls - fix: handle slash-delimited /model refs - fix: refresh active model after provider updates - fix: extended transient error patterns for retry
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
import { KeybindingsManager, TUI_KEYBINDINGS } from "@oh-my-pi/pi-tui/keybindings";
|
|
|
|
describe("KeybindingsManager", () => {
|
|
it("does not evict selector confirm when input submit is rebound", () => {
|
|
const keybindings = new KeybindingsManager(TUI_KEYBINDINGS, {
|
|
"tui.input.submit": ["enter", "ctrl+enter"],
|
|
});
|
|
|
|
expect(keybindings.getKeys("tui.input.submit")).toEqual(["enter", "ctrl+enter"]);
|
|
expect(keybindings.getKeys("tui.select.confirm")).toEqual(["enter"]);
|
|
});
|
|
|
|
it("does not evict cursor bindings when another action reuses the same key", () => {
|
|
const keybindings = new KeybindingsManager(TUI_KEYBINDINGS, {
|
|
"tui.select.up": ["up", "ctrl+p"],
|
|
});
|
|
|
|
expect(keybindings.getKeys("tui.select.up")).toEqual(["up", "ctrl+p"]);
|
|
expect(keybindings.getKeys("tui.editor.cursorUp")).toEqual(["up"]);
|
|
});
|
|
|
|
it("still reports direct user binding conflicts without evicting defaults", () => {
|
|
const keybindings = new KeybindingsManager(TUI_KEYBINDINGS, {
|
|
"tui.input.submit": "ctrl+x",
|
|
"tui.select.confirm": "ctrl+x",
|
|
});
|
|
|
|
expect(keybindings.getConflicts()).toEqual([
|
|
{
|
|
key: "ctrl+x",
|
|
keybindings: ["tui.input.submit", "tui.select.confirm"],
|
|
},
|
|
]);
|
|
expect(keybindings.getKeys("tui.editor.cursorLeft")).toEqual(["left", "ctrl+b"]);
|
|
});
|
|
});
|