docs: adiciona dossiê técnico (movido do repo thc-cli, atualizado)
Wilker
10e4b23
Reescreve o dossiê com o estado real verificado em 2026-07-25:
- github/main e origin/main agora sincronizados (estavam ~24 commits
divergentes)
- confirma ausência de referência a thc_cli em app.py (pendência
antiga de separação de repo já resolvida)
- registra regressão real: warnings de tool calling não suportado em
transformers/gguf/kilo se perderam nos reverts ce54b53->dbb524c
- lista pendências de teste ainda não verificadas (streaming, outros
backends, chat/completions pós-fix)
fix(app): reordena schemas de tools/Anthropic e adiciona from __future__ import annotations
Wilker
01dc751
Revert "fix(app): restaura campos tools/tool_choice perdidos no revert de ChatRequest"
Wilker
c58fbd9
This reverts commit f85e1a35273a5f4f7f3b97545f5f6883978766d6.
fix(app): restaura campos tools/tool_choice perdidos no revert de ChatRequest
Wilker
f85e1a3
feat(app): /v1/messages agora suporta tools e formato Anthropic
Wilker
025f2a2
fix(app): restaura suporte a tool calling sem SyntaxError
Wilker
dbb524c
Revert "feat: adiciona suporte a tool calling (groq/mistral/openrouter/gemini)"
Wilker
5ccd423
This reverts commit ce54b536fac46cfffdc3688a1a73bbfe049ed3cb.
feat: adiciona suporte a tool calling (groq/mistral/openrouter/gemini)
Wilker
ce54b53
chore: remove CLI do HF Space — migrada para github.com/wilkertoigo/thc-cli
Wilker
d3880a1
fix: faxina de testes pré-existentes + bug real em compaction
Wilker
54808d8
Suíte agora 171 testes, 0 failures, 0 errors, 6 skipped (documentados
como flaky/dependentes de rede real em test_agente_real_pexpect.py).
Bug real corrigido: generate_session_report() criava system_prompt do
zero ao compactar sessão, descartando skill ativa/memórias pinned/tools
do system_prompt original. Agora recebe e reaproveita o system_prompt
real passado por run_agent().
docs: relatorio do incidente de seguranca em andamento
Wilker
e42b704
seguranca: ban rapido por padrao de fuzzing (5 hits/30s) + excecao X-THC-Key no rate limit
Wilker
3352d77
seguranca: rate limit por IP real via X-Forwarded-For + secret de sessao obrigatoria
Wilker
36bfdf8
feat: prioriza Mistral sobre Gemini nos operários de tool_call
Wilker
a1672aa
Baseado em limites reais de rate: Gemini restrito a RPD baixo (20) na
maioria dos modelos, exceto gemma-4-26b-a4b-it/gemma-4-31b-it (14.4K RPD)
e gemini-3.5-flash-lite (500 RPD) - mantidos como fallback. Mistral tem
throughput por TPM/RPS bem mais generoso, priorizado com fallback
sequencial entre 9 modelos antes de cair para Gemini.
chore: script para listar modelos que respondem para chat
Wilker
43b01ba
feat: arquitetura mestre de obra / operário para tool_call
Wilker
5d621c4
Implementa delegação automática de tool_calls em run_agent():
- Se o modelo ativo não está em TOOL_CAPABLE_MODELS, delega a formalização
e execução do tool_call para um operário especializado (mistral/gemini)
- Operário monta o JSON correto, executa a tool e injeta resultado no
histórico do modelo ativo
- Feedback visual via on_tool_result('delegation', ...)
- Teste real confirmado: gemini-3.1-flash-lite (fraco) + tool github ->
gemini-3.5-flash (operário) executou grep corretamente
feat: adiciona provider huggingface via router.huggingface.co
Wilker
0f505b0
Migrado do endpoint descontinuado api-inference.huggingface.co (410 Gone)
para router.huggingface.co/v1/chat/completions (Inference Providers).
Payload formato OpenAI (model+messages). Validado ao vivo com resposta
real do modelo meta-llama/Llama-3.1-8B-Instruct. Chave resolvida via
painel, provider_id huggingface_inference (separada da chave huggingface
pré-existente).
17 modelos validados ao vivo (chat simples 200 OK). Com MCP tools habilitado
dá 413 Payload Too Large (limite de contexto do provider). Token resolvido
via painel (provider_id github_models, escopo Models:Read-only).
- Causa raiz: parser validava nome de tool só contra TOOLS_BY_NAME (tools
internas), descartando tool_calls válidos de tools MCP (ex: github__list_issues)
- Fix: _parse_tool_call/_extract_tool_calls aceitam tools_registry incluindo MCP tools
- Truncagem de description de tools MCP no system prompt (~150 chars) para reduzir
tokens e aliviar 413 Payload Too Large em providers com limite menor (Groq)
- Token do github migrado de ~/.thcrc (texto puro) para ~/.painel_keys, resolvido
via prefixo painel:<provider_id>
- model_strategy_agent adicionado: recomenda mistral-tiny-latest, codestral-latest,
gemini-3.5-flash-lite, gemini-3.6-flash para uso com --agent
- Validado: tool_call real via github__list_issues funcionando ponta a ponta
- Testes: 160 rodados, 5 failures + 7 errors pré-existentes (confirmados iguais
ao commit 70f8b69, sem regressão nova)
feat: Fase 6 - suporte a MCP (Model Context Protocol)
Wilker
70f8b69
MCPClient (stdio/http), MCPTool wrapper, comando thc mcp list/tools,
config mcp_servers em ~/.thcrc, integração em run_agent respeitando
tools_allowed de skills. Aumentado timeout do handshake initialize
para 30s para cobrir cold-start de servidores via npx.
docs: alinha PROJECT_SPEC.md com estado real do git
Wilker
02dfa51
Fase 5.1 e 5.2 agora commitadas, remove divergencia entre SPEC e git log
chore: atualizacao de modelos free validados ao vivo
Wilker
dd1236b
Gemini 3->8, Mistral 6->13, OpenRouter 6->11, ajustes em Groq
fix: sanitizacao de chaves + fallback ~/.painel_keys
Wilker
a8fce0b
prioridade env > ~/.thcrc > ~/.painel_keys
feat: Fase 5.2 - compactacao automatica de sessao
Wilker
f8651ac
should_compact, generate_session_report, build_compacted_messages,
gatilho no loop do agente e no REPL, 12 testes
feat: Fase 5.1 - modelos free por padrao + resolucao configuravel de modelo
Wilker
37b8916
model_strategy (quality|speed) e model_fallback_within_provider em ~/.thcrc,
resolve_default_model() em BaseProvider, comando thc models --provider
fix: corrige sintaxe em MASTER_CLI_KEY (token acidentalmente inline)
Wilker
d07fc84
fix: remove hardcoded THC_MASTER_CLI_KEY, lê de variável de ambiente
Wilker
7234844
feat: Fase 5 — Provider padrão + fallback automático por rate limit
Wilker
6de4e4d
- Default provider: openrouter (era thc)
- ProviderRateLimitError uniforme em base.py + 4 providers (429 e RESOURCE_EXHAUSTED)
- chat_completion_with_fallback: ordem configurável via ~/.thcrc, dedupe, thc fora da cadeia
- Integração em agent.py (run_agent) e chat.py (single-shot + REPL), com aviso ao usuário na troca
- Fix: NameError em messages_to_send no bloco single-shot (não existia nesse escopo)
- Guard: run_agent com fallback_order + config=None carrega config padrão via load_config()
- 18 testes novos (test_provider_fallback.py + test_providers_rate_limit.py)
- PROJECT_SPEC.md atualizado (Fase 3, 4, 5 concluídas; renumeração das fases seguintes)
116 testes, 1 skip esperado (test_alucinacao_fallback_llama_8b), 0 failures.