Configuração, personalização, ajustes de plataforma e referências de API para Pi.

Atalhos de teclado

Todos os atalhos de teclado podem ser personalizados via ~/.pi/agent/keybindings.json. Cada ação pode estar vinculada a uma ou mais chaves.

O arquivo de configuração usa os mesmos ids de atalho de teclado com namespace que pi usa internamente e que os autores de extensão usam nos gerenciadores keyHint() e keybindings injetados.

Configurações mais antigas usando IDs com namespace pré-como cursorUp ou expandTools são migradas automaticamente para os IDs com namespace na inicialização.

Após editar keybindings.json, execute /reload em pi para aplicar as alterações sem reiniciar a sessão.

Formato chave

modifier+key onde os modificadores são ctrl, shift, alt, super (combináveis) e as chaves são:

  • Letras: a-z
  • Dígitos: 0-9
  • Teclas especiais: escape, esc, enter, return, tab, space, backspace, delete, insert, clear, home, end, pageUp, pageDown, up, down, left, right
  • Teclas de função: f1-f12
  • Símbolos: `, -, =, [, ], \, ;, ', ,, ., /, !, @, #, $, %, ^, &, *, (, ), _, +, |, ~, {, }, :, <, >, ?

Combinações de modificadores: ctrl+shift+x, alt+ctrl+x, ctrl+shift+alt+x, super+k, ctrl+super+k, ctrl+1, etc.

As ligações super requerem um terminal que reporte o modificador separadamente, normalmente por meio do protocolo de teclado Kitty. Eles podem não funcionar em terminais sem esse suporte.

Todas as ações

TUI Movimento do Cursor do Editor

ID de atalho de teclado Padrão Descrição
tui.editor.cursorUp up Mova o cursor para cima, navegando pelo histórico antigo na parte superior
tui.editor.cursorDown down Mova o cursor para baixo, navegando pelo histórico mais recente na parte inferior
tui.editor.historyPrevious (nenhum) Selecione a entrada anterior do histórico de prompts
tui.editor.historyNext (nenhum) Selecione a próxima entrada do histórico de prompt
tui.editor.cursorLeft left, ctrl+b Mova o cursor para a esquerda
tui.editor.cursorRight right, ctrl+f Mova o cursor para a direita
tui.editor.cursorWordLeft alt+left, ctrl+left, alt+b Mover a palavra do cursor para a esquerda
tui.editor.cursorWordRight alt+right, ctrl+right, alt+f Mova a palavra do cursor para a direita
tui.editor.cursorLineStart home, ctrl+home, ctrl+a Mover para o início da linha
tui.editor.cursorLineEnd end, ctrl+end, ctrl+e Mover para o fim da linha
tui.editor.jumpForward ctrl+] Avance para o personagem
tui.editor.jumpBackward ctrl+alt+] Pule para trás para o personagem
tui.editor.pageUp pageUp, ctrl+pageUp Rolar para cima por página
tui.editor.pageDown pageDown, ctrl+pageDown Role para baixo por página

As ações de histórico dedicadas sempre alteram as entradas do histórico, independentemente da posição do cursor em um prompt multilinha. As ligações explícitas do histórico têm precedência sobre as ações do aplicativo enquanto o editor principal está em foco, portanto, a ligação tui.editor.historyPrevious a ctrl+p substitui o ciclo do modelo nesse contexto sem alterar Ctrl+P nos seletores.

TUI Exclusão do Editor

ID de atalho de teclado Padrão Descrição
tui.editor.deleteCharBackward backspace Excluir caractere para trás
tui.editor.deleteCharForward delete, ctrl+d Excluir caractere para frente
tui.editor.deleteWordBackward ctrl+w, alt+backspace Excluir palavra para trás
tui.editor.deleteWordForward alt+d, alt+delete Excluir palavra adiante
tui.editor.deleteToLineStart ctrl+u Excluir para início da linha
tui.editor.deleteToLineEnd ctrl+k Excluir até o final da linha

TUI Entrada

ID de atalho de teclado Padrão Descrição
tui.input.newLine shift+enter, ctrl+j Inserir nova linha
tui.input.submit enter Enviar entrada
tui.input.tab tab Guia/preenchimento automático

TUI Anel de Morte

ID de atalho de teclado Padrão Descrição
tui.editor.yank ctrl+y Colar o texto excluído mais recentemente
tui.editor.yankPop alt+y Percorrer o texto excluído após arrancar
tui.editor.undo ctrl+- Desfazer última edição

TUI Área de transferência e seleção

ID de atalho de teclado Padrão Descrição
tui.input.copy ctrl+c Copiar seleção
tui.select.up up Mover seleção para cima
tui.select.down down Mover seleção para baixo
tui.select.pageUp pageUp Subir página na lista
tui.select.pageDown pageDown Página para baixo na lista
tui.select.confirm enter Confirmar seleção
tui.select.cancel escape, ctrl+c Cancelar seleção

TUI Janela de visualização em tela cheia

Essas ações se aplicam quando o modo interativo usa --tui-mode fullscreen e tem como alvo a região de rolagem da transcrição primária. O trackpad com dois dedos e a roda do mouse rolam a região sob o ponteiro, retornando à transcrição sobre o encaixe fixo de editor/status/rodapé. Clicar em um hiperlink OSC 8 o abre no manipulador padrão. Arrastar com o botão principal do mouse seleciona o texto e o copia para a área de transferência; segurar a borda superior ou inferior da transcrição rola automaticamente para o conteúdo fora da tela.

As vinculações de transcrição em tela cheia têm precedência sobre as vinculações do editor. As teclas de navegação padrão não modificadas, portanto, controlam a transcrição no modo de tela cheia, enquanto suas variantes ctrl continuam a controlar o editor. Fora do modo de tela cheia, ambas as variantes controlam o editor.

Chave Modo padrão Modo tela cheia
home, end Editor Transcrição
ctrl+home, ctrl+end Editor Editor
pageUp, pageDown Editor Transcrição
ctrl+pageUp, ctrl+pageDown Editor Editor

Este roteamento permanece configurável através das ligações de ações comuns. Por exemplo, "tui.altScreen.pageUp": "ctrl+pageUp" faz com que pageUp controle o editor e ctrl+pageUp controle a transcrição no modo de tela cheia. Vincule tui.altScreen.halfPageUp e tui.altScreen.halfPageDown para etapas de transcrição menores, mantendo as encadernações de página inteira. A configuração "tui.altScreen.pageUp": [] desativa totalmente esse atalho de transcrição. As ligações de usuário substituem os padrões dessa ação.

ID de atalho de teclado Padrão Descrição
tui.altScreen.pageUp pageUp Role a transcrição uma página para cima
tui.altScreen.pageDown pageDown Role a transcrição uma página para baixo
tui.altScreen.halfPageUp (nenhum) Role a transcrição meia página para cima
tui.altScreen.halfPageDown (nenhum) Role a transcrição meia página para baixo
tui.altScreen.previousPrompt ctrl+shift+up Ir para a mensagem marcada anteriormente
tui.altScreen.nextPrompt ctrl+shift+down Ir para a próxima mensagem marcada
tui.altScreen.top home Role até o início da transcrição
tui.altScreen.bottom end Role até o final da transcrição e siga a nova saída

Aplicativo

ID de atalho de teclado Padrão Descrição
app.interrupt escape Cancelar/abortar
app.clear ctrl+c Limpar editor (primeiro) / sair (segundo)
app.exit ctrl+d Sair (quando o editor estiver vazio)
app.suspend ctrl+z (nenhum no Windows) Suspender para segundo plano
app.editor.external ctrl+g Abra em editor externo (externalEditor, $VISUAL, $EDITOR, Bloco de notas no Windows ou nano em outro lugar)
app.clipboard.pasteImage ctrl+v (alt+v no Windows) Colar imagem ou texto da área de transferência

Sessões

ID de atalho de teclado Padrão Descrição
app.session.new (nenhum) Iniciar uma nova sessão (/new)
app.session.tree (nenhum) Abra o navegador session tree (/tree)
app.session.fork (nenhum) Bifurcar sessão atual (/fork)
app.session.resume (nenhum) Abrir seletor de currículo de sessão (/resume)
app.session.togglePath ctrl+p Alternar exibição do caminho
app.session.toggleSort ctrl+s Alternar modo de classificação
app.session.toggleNamedFilter ctrl+n Alternar filtro somente nomeado
app.session.rename ctrl+r Renomear sessão
app.session.delete ctrl+d Excluir sessão
app.session.deleteNoninvasive ctrl+backspace Excluir sessão quando a consulta estiver vazia

Models e pensando

ID de atalho de teclado Padrão Descrição
app.model.select ctrl+l Abrir seletor de modelo
app.model.cycleForward ctrl+p Alternar para o próximo modelo
app.model.cycleBackward shift+ctrl+p Alternar para o modelo anterior
app.thinking.cycle shift+tab Nível de pensamento de ciclo
app.thinking.toggle ctrl+t Recolher ou expandir blocos de pensamento

Fila de exibição e mensagens

ID de atalho de teclado Padrão Descrição
app.tools.expand ctrl+o Recolher ou expandir a saída da ferramenta
app.message.copy ctrl+x Copie a última mensagem do assistente ou a mensagem selecionada em /tree
app.message.followUp alt+enter Mensagem de acompanhamento da fila
app.message.dequeue alt+up Restaurar mensagens na fila para o editor
ID de atalho de teclado Padrão Descrição
app.tree.foldOrUp ctrl+left, alt+left Dobre o segmento de ramificação atual ou pule para o início do segmento anterior
app.tree.unfoldOrDown ctrl+right, alt+right Desdobre o segmento de ramificação atual ou pule para o início ou final do próximo segmento
app.tree.editLabel shift+l Edite o rótulo no nó da árvore selecionado
app.tree.toggleLabelTimestamp shift+t Alternar carimbos de data/hora do rótulo na árvore
app.tree.filter.default ctrl+d Definir filtro de árvore para visualização padrão
app.tree.filter.noTools ctrl+t Alternar filtro de árvore que oculta os resultados da ferramenta
app.tree.filter.userOnly ctrl+u Alternar filtro de árvore que mostra apenas mensagens do usuário
app.tree.filter.labeledOnly ctrl+l Alternar filtro de árvore que mostra apenas entradas rotuladas
app.tree.filter.all ctrl+a Alternar filtro de árvore que mostra todas as entradas
app.tree.filter.cycleForward ctrl+o Ciclo de filtro de árvore para frente
app.tree.filter.cycleBackward shift+ctrl+o Ciclo de filtro de árvore para trás

Escopo Models Seletor

Usado dentro do seletor de modelos com escopo (aberto via /scoped-models).

ID de atalho de teclado Padrão Descrição
app.models.save ctrl+s Salvar a seleção do modelo atual nas configurações
app.models.enableAll ctrl+a Habilite todos os modelos (ou todos que correspondam à pesquisa atual)
app.models.clearAll ctrl+x Limpar todos os modelos (ou todos que correspondam à pesquisa atual)
app.models.toggleProvider ctrl+p Alternar todos os modelos para o provedor atual
app.models.reorderUp alt+up Mova o modelo selecionado para cima na ordem do ciclo
app.models.reorderDown alt+down Mova o modelo selecionado para baixo na ordem do ciclo

Configuração personalizada

Crie ~/.pi/agent/keybindings.json:

{
  "tui.editor.historyPrevious": "ctrl+p",
  "tui.editor.historyNext": "ctrl+n",
  "tui.editor.deleteWordBackward": ["ctrl+w", "alt+backspace"]
}

Cada ação pode ter uma única chave ou um conjunto de chaves. A configuração do usuário substitui os padrões.

No Windows nativo, app.suspend não possui ligação padrão porque os terminais do Windows não suportam controle de trabalho Unix. Se você vinculá-lo manualmente, pi mostrará uma mensagem de status em vez de suspender. No WSL, o comportamento normal do Linux ctrl+z/fg ainda se aplica.

Exemplo Emacs

{
  "tui.editor.historyPrevious": "ctrl+p",
  "tui.editor.historyNext": "ctrl+n",
  "tui.editor.cursorLeft": ["left", "ctrl+b"],
  "tui.editor.cursorRight": ["right", "ctrl+f"],
  "tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
  "tui.editor.cursorWordRight": ["alt+right", "alt+f"],
  "tui.editor.deleteCharForward": ["delete", "ctrl+d"],
  "tui.editor.deleteCharBackward": ["backspace", "ctrl+h"],
  "tui.input.newLine": ["shift+enter", "ctrl+j"]
}

Exemplo de Vim

{
  "tui.editor.cursorUp": ["up", "alt+k"],
  "tui.editor.cursorDown": ["down", "alt+j"],
  "tui.editor.cursorLeft": ["left", "alt+h"],
  "tui.editor.cursorRight": ["right", "alt+l"],
  "tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
  "tui.editor.cursorWordRight": ["alt+right", "alt+w"]
}