Skip to content

Languagetool Integration#9

Open
BingqingLyu wants to merge 3 commits into
mainfrom
fork-pr-254-main
Open

Languagetool Integration#9
BingqingLyu wants to merge 3 commits into
mainfrom
fork-pr-254-main

Conversation

@BingqingLyu

@BingqingLyu BingqingLyu commented Apr 27, 2026

Copy link
Copy Markdown
Owner

Integra LanguageTool ao Qwen Code em três camadas: (1) documentação e /lt command, (2) verificação ao vivo no prompt com sublinhado e painel de sugestões, e (3) tool estruturada language_tool_check disponível ao modelo. Também melhora formatação determinística de números no painel de estatísticas, aperfeiçoa autocomplete de arquivos no @ topo do workspace e torna mensagens de “finish reason” mais claras.


Dive Deeper

O que foi adicionado

  • Docs & UX

    • README: nova seção “LanguageTool Integration” com setup, env vars, e uso.
    • Novo slash command: /lt (placeholder informativo por ora, útil para smoke test de argumentos).
  • CLI (Ink) / Editor

    • useLiveLanguageTool: faz debounce, chama POST /v2/check, aplica sugestões (estratégia “first”) e expõe:

      • matches (erros), corrected, changes, busy, error.
    • LanguageToolDisplay:

      • AnnotatedText: sublinha em vermelho os trechos com problema.
      • LanguageToolIndicator: contador de problemas, sugestões e erros de rede.
    • InputPrompt: integra o preview (histórico → edição → preview → sugestões).

  • Integração com fluxo do modelo

    • useGeminiStream:

      • Encaminha o texto do usuário por processWithLanguageTool(...) antes de enviar ao modelo (hook atual é no-op controlado por política; pronto para trocar pelo preprocess real).
      • Mensagens de finish reason tipadas e mais informativas.
  • Core

    • languageTool.ts (tool): language_tool_check com schema tipado (texto, idioma, policy first|best|none, regras, nível).

    • ltClient.ts: cliente fetch nativo + applySuggestions estável por offset.

    • preprocess.ts: pipeline reutilizável (políticas off | confirm | auto-first | auto-best) + preprocess.d.ts.

    • ltConfig.ts: defaults sensatos via env:

      • LT_ENABLED (default on), LT_POLICY (default confirm),
        LT_SERVER (default https://api.languagetool.org/),
        LT_LANG (default auto), LT_MOTHER_TONGUE, LT_RULES_ON, LT_RULES_OFF (merge com UPPERCASE_SENTENCE_START), LT_LEVEL (default).
    • Registro do tool no Config para descoberta automática.

  • Qualidade de vida

    • StatsDisplay: formatação en-US determinística para inteiros (padroniza contagens).

    • Autocomplete de arquivos:

      • Suporta pesquisa de top-level (prefixo vazio/@) retornando diretórios (glob com mark: true).
      • FileDiscoveryService pode ser nulo.
      • Listagem coerente por diretório base quando há /.
    • Tipagem/enum para FinishReason e MessageType.

Considerações de privacidade e desempenho

  • Por padrão o servidor é https://api.languagetool.org/. Para dados sensíveis, recomenda-se rodar localmente (java ... HTTPServer --port 8081) e definir LT_SERVER=http://localhost:8081.
  • Rede lenta ou indisponível: o preview mostra erro; o hook de envio está preparado para manter comportamento fail-open (texto original) até a troca para o preprocess real com política.

Itens futuros (seguimento sugerido)

  • Trocar o stub de useLanguageTool para usar preprocessUserInput(...) (com confirmFn em TTY).
  • Implementar ação completa em /lt (invocar language_tool_check e/ou preprocess).
  • Expor toggle rápido no UI para LT_POLICY e idioma detectado.

Reviewer Test Plan

  1. Setup do LanguageTool (opção A – local recomendado)

    • wget https://languagetool.org/download/LanguageTool-6.0.zip && unzip LanguageTool-6.0.zip && cd LanguageTool-6.0
    • java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081
    • export LT_SERVER=http://localhost:8081

    Ou (opção B – API pública)

    • Pular o passo acima e manter LT_SERVER default.
  2. Variáveis de ambiente

    • export LT_ENABLED=1
    • export LT_POLICY=confirm (testar também auto-first e auto-best)
    • export LT_LANG=auto
    • Opcional: export LT_MOTHER_TONGUE=pt-BR
    • Opcional: export LT_RULES_OFF=UPPERCASE_SENTENCE_START,EN_QUOTES (ver impacto)
  3. Rodar CLI

    • npm i na raiz; npm run build e npm run dev (ou o fluxo do seu workspace).

    • Digite um texto com erros no prompt (ex.: “Isto eh um teste.” / “Eu vai no mercado ontem.”).

    • Verifique:

      • Sublinhos vermelhos no preview.
      • Painel com contagem de problemas e sugestões.
      • Erro de rede quando derrubar o LT server.
  4. Comando /lt

    • Digite: /lt Este eh um teste basico.
    • Deve retornar mensagem informativa (placeholder aceitando argumentos).
  5. Integração com envio ao modelo

    • Envie uma mensagem normal com LT_POLICY=auto-first e observe no log o passo de pré-processamento.
    • (No estado atual, o hook é no-op; validar não-regressão do fluxo).
  6. Tool estruturada

    • Dispare language_tool_check via tool-call (prompt do modelo pedindo revisão).
      Verifique o JSON de saída (original, corrected, changes, matches).
  7. Autocomplete de arquivos

    • No campo de input, acione o modo de seleção de arquivos: teste @/prefixo vazio e confira a listagem de diretórios de topo.
    • Digite prefixos com e sem / e valide resultados consistentes.
  8. StatsDisplay

    • Gere sessões com muitos tokens e confirme formatação de inteiros (sem variação regional).

Testing Matrix

🍏 macOS 🪟 Windows 🐧 Linux
npm run build
npx
Docker
Podman - -
Seatbelt - -

✅ = validado pelo autor / ⏳ = não testado neste PR / - = não aplicável


Linked issues / bugs

  • Resolves #LT-001: Integração de revisão gramatical com toggle e políticas de correção.
  • Related to #UX-142: Realce inline de problemas no prompt.
  • Related to #DX-089: Autocomplete mais útil no topo do workspace.

Se quiser, troco os IDs acima pelos da sua lista real de issues.

… Core Integations, Preprocessing Helpers & Correction Strategies for Qwen-Code
…t, allowing for automatic grammar checking of user inputs. It includes configuration details and usage instructions.
…ng total requests, tokens used, and cache efficiency, with formatted numbers and color-coded highlights.
@BingqingLyu

BingqingLyu commented May 7, 2026

Copy link
Copy Markdown
Owner Author

Conflict Group 1

This PR shares modified functions with 9 other PR(s): #106, #107, #55, #6, #62, #74, #86, #87, #96.

These PRs should be reviewed as a batch — merging one may affect the others.

Function File Also modified by
loadCommands BuiltinCommandLoader.ts #107, #86, #87, #96
showCitations useGeminiStream.ts #106, #55, #6, #96
useCommandCompletion useCommandCompletion.tsx #62, #74
graph LR
    PR9["PR #9"]
    FloadCommands_7884["loadCommands<br>BuiltinCommandLoader.ts"]
    PR9 -->|modifies| FloadCommands_7884
    PR107["PR #107"]
    PR107 -->|modifies| FloadCommands_7884
    PR86["PR #86"]
    PR86 -->|modifies| FloadCommands_7884
    PR87["PR #87"]
    PR87 -->|modifies| FloadCommands_7884
    PR96["PR #96"]
    PR96 -->|modifies| FloadCommands_7884
    FshowCitations_6790["showCitations<br>useGeminiStream.ts"]
    PR9 -->|modifies| FshowCitations_6790
    PR106["PR #106"]
    PR106 -->|modifies| FshowCitations_6790
    PR55["PR #55"]
    PR55 -->|modifies| FshowCitations_6790
    PR6["PR #6"]
    PR6 -->|modifies| FshowCitations_6790
    PR96 -->|modifies| FshowCitations_6790
    FuseCommandCompletion_8197["useCommandCompletion<br>useCommandCompletion.tsx"]
    PR9 -->|modifies| FuseCommandCompletion_8197
    PR62["PR #62"]
    PR62 -->|modifies| FuseCommandCompletion_8197
    PR74["PR #74"]
    PR74 -->|modifies| FuseCommandCompletion_8197
Loading

Posted by codegraph-ai conflict detection.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

conflicting-group-1 Conflicting PR group 1 — review as a batch conflicting-pr Shares at least one cross-PR dependency with other PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants