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.

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

This pull request has had no activity for 60 days and is being marked as stale. It will be closed in another 30 days if no further activity occurs. To keep it open, push a new commit or leave a comment. Maintainers may apply pinned, status/blocked, status/on-hold, or status/ready-for-merge to exempt it from auto-close.

Copilot stopped work on behalf of jadsongmatos due to an error July 16, 2026 16:13
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 status/stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants