dsh-prompt-history
已验证dsh-prompt-history · v1.2.15 · MIT · Web 界面
DSH web plugin: terminal-style input for the composer — bash-like Up/Down prompt history with prefix search and Ctrl+R, selection toolbar with copy and quote (Codex-style > blockquote), right-click paste, toggleable draggable chat TOC, fully international
安装
dsh plugin add dsh-prompt-history 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
⌨️ dsh-prompt-history
Entrada estilo terminal para o compositor da Web GUI do DeepSeek Harness: histórico de prompts tipo bash, copiar e citar, e colar com botão direito.
Pressione ↑ como num terminal — histórico, citações e colagem em um único plugin.
Compatibilidade
| Superfície | Estado |
|---|---|
| Plataforma | Somente Web GUI (plugin de cliente; estado local do navegador; sem rede, sem código nativo) |
| Node | >=20 |
| Modelo | Qualquer (não faz requisições ao modelo — comportamento puro de UI) |
| Idioma da interface | 中文 / English (segue o idioma do app DSH, alterável em Configurações) |
O que você obtém
dsh-prompt-history coloca o histórico de um terminal no compositor da Web GUI do DeepSeek Harness:
- Recuperação com setas estilo shell — com o rascunho vazio, ↑ recupera a mensagem enviada mais recente (a mais nova primeiro); com um prefixo digitado, ↑ salta para a mensagem mais recente que começa com esse prefixo (
history-search-backwarddo bash); continue pressionando ↑ para voltar pelas correspondências; ↓ avança (inclusive pelas correspondências de prefixo) e, na borda inferior, restaura a linha que você digitava antes de começar a navegar (comportamento pending-line do readline). - Editar sai da navegação — editar o rascunho durante a navegação volta para a linha ativa.
- Busca reversa com Ctrl+R — busca incremental no histórico com correspondência em tempo real (overlay estilo bash
(reverse-i-search)consulta``); Ctrl+R novamente vai para a correspondência mais antiga; Enter aceita, Escape cancela e restaura o rascunho anterior. - Copiar + citar (dois modos, em Configurações) — qualquer seleção não vazia na página — o campo do compositor, mensagens do chat, blocos de código — é tratada conforme o modo escolhido:
- Barra de ferramentas (padrão): botões Copiar / Citar aparecem acima da seleção — copiar grava na área de transferência apenas ao clicar (sem inundar o Win+V); Citar insere o TEXTO COMPLETO selecionado como um blockquote markdown limpo com prefixo
>no compositor (renderizado como citação ao enviar). - Auto (estilo terminal): copia a seleção direto para a área de transferência do sistema ao selecionar.
- Barra de ferramentas (padrão): botões Copiar / Citar aparecem acima da seleção — copiar grava na área de transferência apenas ao clicar (sem inundar o Win+V); Citar insere o TEXTO COMPLETO selecionado como um blockquote markdown limpo com prefixo
- Botão direito cola diretamente — um clique com o botão direito no compositor cola a área de transferência — sem menu de contexto, como num terminal Linux. A colagem usa o mesmo pipeline do Ctrl+V (imagens e chips de referência se comportam igual), com fallback da Clipboard API quando o caminho execCommand está bloqueado.
- Histórico entre sessões (alternância em Configurações, desligado por padrão) — mantém o histórico de ↑/↓ entre sessões, armazenado em localStorage do navegador (limite 200), sobrevive a recarregamentos e trocas de sessão.
- TOC do chat (índice da conversa) — quando a conversa fica longa, uma alça sutil, semitransparente e arrastável na borda esquerda do chat (acende no hover) expande um índice de cada mensagem de usuário em ordem — clique em qualquer item para saltar para aquele ponto e role por todas as entradas quando a lista ficar longa; clique fora ou pressione Esc para fechar. Pode ser desativado nas Configurações.
Comportamento puro de UI: sem eventos de sessão, sem mudanças no loop do agente, sem requisições ao modelo. O texto recuperado ou citado só entra no rascunho comum do compositor — chega ao modelo apenas se você pressionar Enter.
Início rápido
# 1. instale o bundle no seu perfil
dsh plugin --profile web add dsh-prompt-history
# 2. recarregue a página — sem necessidade de reiniciar o serviço
Instalar e desinstalar
- Canal npm (versões publicadas):
dsh plugin --profile web add dsh-prompt-history - Canal git (desenvolvimento local, último
main):dsh plugin --profile web add "github:Xiaofei-fei/dsh-prompt-history#main"(um checkout de código precisa ser compilado primeiro —pnpm run build; um bundle não compilado se recusa a iniciar) - Desinstalar:
dsh plugin --profile web remove dsh-prompt-history
Configuração
Abra Configurações → >_ Terminal Input (armazenado em localStorage do navegador, efeito imediato):
| Opção | Padrão | Significado |
|---|---|---|
| Modo de cópia (ao selecionar) | Barra de ferramentas |
Barra (recomendado; grava na área de transferência só ao clicar) / Copiar automaticamente ao selecionar (estilo terminal) |
| Histórico entre sessões | Desligado | O histórico de ↑/↓ persiste entre sessões em localStorage (limite 200) |
| TOC do chat | Ligado | Mostrar a alça arrastável na borda esquerda do chat; pode ser desativado |
| Colar com botão direito | Ligado | Desligado restaura o menu de contexto nativo do navegador |
O histórico de ↑/↓ está sempre ligado, independentemente dessas alternâncias.
Recursos
- O histórico vem do registro de mensagens da própria sessão: lê os nós de usuário (
user/steering) do snapshot da conversa e os anexa conforme chegam — estritamente consistente com a transcrição, persistido com a sessão, sobrevive a recarregamentos de página e não precisa de configuração nem armazenamento extra. - Duplicados consecutivos são colapsados; o estado de navegação é redefinido ao trocar de sessão.
- Interface internacionalizada: cada texto (configurações, barra de ferramentas, avisos, TOC, overlay de busca) segue o idioma do app DSH (中文 / English).
- O bundle do cliente pesa ~12 KB compactado e depende apenas dos pacotes peer oficiais
@deepseek-ai/*.
Limitações conhecidas
- Ctrl+R: com o compositor focado, Ctrl+R é busca reversa — ele não recarrega mais a página (clique fora do campo primeiro para recarregar).
- O diretório da conversa puxa automaticamente o histórico mais antigo do host (página por página até completar), então pode localizar qualquer posição anterior; a recuperação com ↑/↓ ainda cobre apenas a janela carregada.
- Apenas texto simples: mensagens só com imagens ou chips não são recuperadas; os rascunhos recuperados são texto simples.
Desenvolvimento
pnpm install
pnpm run typecheck # tsc --noEmit
pnpm run build # tsc (lib/types) + tsdown (lib/index.js / lib/invariant.js / lib/client.js)
A metade do navegador (src/client/) se registra no slot conversation.input.right; o build emite o formato de closure __ModuleLoader__ do DSH com react como único externo (o resto vem da tabela de módulos do navegador). Os dicionários vivem em src/client/locales.ts (zh autoritativo, en com paridade de chaves) e se registram via ctx.locale.register.
Como funciona
O plugin é uma entrada de slot invisível do compositor que monta um listener keydown em fase de captura no documento. Ele assume ↑/↓ apenas quando o alvo é o campo do compositor, sem modificadores pressionados, sem composição IME ativa, sem menu de sugestões aberto e com a sessão não ocupada — então escreve o texto recuperado via inputActions.setDraft. A lista de histórico é alimentada pelos nós user/steering do snapshot (deduplicados por seq); a posição de navegação (índice mais a linha pendente de restauração) vive em refs do componente.