@neetru/cli 2.19.1 → 2.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/commands/code.d.ts +8 -2
  3. package/dist/commands/code.js +474 -191
  4. package/dist/commands/code.js.map +1 -1
  5. package/dist/commands/config.js +2 -0
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/code-agent-files.d.ts +9 -1
  10. package/dist/lib/code-agent-files.js +37 -10
  11. package/dist/lib/code-agent-files.js.map +1 -1
  12. package/dist/lib/code-agent-gateway.js +2 -0
  13. package/dist/lib/code-agent-gateway.js.map +1 -1
  14. package/dist/lib/code-agent-git-tools.d.ts +56 -0
  15. package/dist/lib/code-agent-git-tools.js +212 -0
  16. package/dist/lib/code-agent-git-tools.js.map +1 -0
  17. package/dist/lib/code-agent-protocol.d.ts +8 -0
  18. package/dist/lib/code-agent-protocol.js.map +1 -1
  19. package/dist/lib/code-agent-session.d.ts +9 -1
  20. package/dist/lib/code-agent-session.js +58 -21
  21. package/dist/lib/code-agent-session.js.map +1 -1
  22. package/dist/lib/code-agent-settings.d.ts +24 -1
  23. package/dist/lib/code-agent-settings.js +53 -4
  24. package/dist/lib/code-agent-settings.js.map +1 -1
  25. package/dist/lib/code-agent-subagents.d.ts +105 -0
  26. package/dist/lib/code-agent-subagents.js +179 -0
  27. package/dist/lib/code-agent-subagents.js.map +1 -0
  28. package/dist/lib/code-agent-tools.js +16 -0
  29. package/dist/lib/code-agent-tools.js.map +1 -1
  30. package/dist/lib/code-agent-tui.js +44 -9
  31. package/dist/lib/code-agent-tui.js.map +1 -1
  32. package/dist/lib/code-agent-types.d.ts +51 -0
  33. package/dist/lib/code-agent-ui.js +15 -1
  34. package/dist/lib/code-agent-ui.js.map +1 -1
  35. package/dist/lib/config.d.ts +1 -0
  36. package/dist/lib/config.js +1 -0
  37. package/dist/lib/config.js.map +1 -1
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,33 @@
2
2
 
3
3
  Convenção: [Keep a Changelog](https://keepachangelog.com/) + [SemVer](https://semver.org/).
4
4
 
5
+ ## [2.20.1] — 2026-07-11 (`neetru code` — retry automático quando o pool de IA fica sem capacidade)
6
+
7
+ > O fix de roteamento do 2.20.0 estava correto (o modelo recomendado É nativo do Groq), mas ainda batia em `503 Nenhum provider de IA disponível` — investigando via Firestore, achei a causa real: as 3 keys Groq do pool entraram em cooldown SIMULTÂNEO (429 do próprio Groq — rate-limit de conta, não bug de roteamento), com `cooldownUntil` ~60-90s no futuro. Sem nenhuma key elegível no momento, o Core responde 503 na hora — o usuário precisava reenviar a mesma mensagem manualmente.
8
+
9
+ ### Corrigido
10
+
11
+ - **Retry curto e automático (GAP-M1-21)** — `runAgentTask` agora tenta de novo automaticamente (até 2x, aguardando 20s e depois 40s, com o spinner mostrando a contagem) quando o erro é especificamente `503 ai_unavailable` (pool do provider forçado momentaneamente sem key elegível). Qualquer outro erro (payload, auth, etc.) continua falhando na hora — retry só faz sentido pra esse caso específico, que se autorresolve assim que o cooldown expira.
12
+
13
+ ## [2.20.0] — 2026-07-11 (`neetru code` — indicador único de progresso, fix 503 do catálogo, effort/ultracode/autosave)
14
+
15
+ > Feedback direto do uso real (transcript colado pelo usuário): o 2.19.1 ainda imprimia uma linha por evento (`[...] AI Gateway turno X/Y`, `[tool]`, `[ok]`) — poluição visual que já tínhamos tentado resolver antes com o painel persistente, mas faltava trocar o loop de turnos em si. No mesmo transcript, uma sessão real bateu em `503 Nenhum provider de IA disponível` mesmo com Groq saudável no pool.
16
+
17
+ ### Corrigido
18
+
19
+ - **Indicador de progresso único por tarefa** — `runAgentTask` (`commands/code.ts`) agora usa UM spinner vivo (turno/tool/resultado viram `detail` do mesmo spinner, não uma linha nova por evento) em vez de `printEvent` por turno/tool-call/tool-result. Avisos/erros reais (histórico compactado, streaming caiu pro fallback sem stream) continuam aparecendo como linha permanente — só o progresso normal ficou compacto.
20
+ - **503 "nenhum provider disponível" usando o modelo recomendado do catálogo** — `neetru code -m <nome nativo do catálogo>` sem `--provider`/`gatewayProvider` caía no roteamento livre (WRRR); se sorteasse uma key do provider errado, o modelo dava 404 lá (não-retryable) e a chamada inteira falhava mesmo com o provider certo saudável no pool. `resolveCodeProvider` agora infere o provider automaticamente quando o `model` bate com um nome nativo conhecido do catálogo curado (Groq/NVIDIA).
21
+ - **Aviso `DEP0190` do Node vazando por cima do spinner** — `run_tests` chamava `spawnSync('npm', ['test','--silent'], {shell:true})` no Windows; Node deprecia `shell:true` combinado com array de args. Corrigido montando o comando inteiro como string quando `shell` é necessário.
22
+ - **Warnings do processo (`process.emitWarning`, ex: o DEP0190 acima) vazavam por cima do painel fixo** — eles escrevem direto em `process.stderr.write`, contornando tanto a interceptação de stdout quanto `console.warn`/`console.error`. O painel Ink agora intercepta `process.stderr.write` também.
23
+
24
+ ### Adicionado
25
+
26
+ - **`--effort <low|medium|high>`** (flag do comando `code`) e **`/effort`** (slash command da sessão interativa) — controle de esforço de raciocínio, encaminhado como `reasoningEffort` pro AI Gateway do Core, que só repassa de verdade pra Groq/OpenAI (nunca pra NVIDIA — histórico de travar em campo OpenAI-compat desconhecido). Persistível via `neetru config set gatewayEffort <nivel>`.
27
+ - **`--ultracode`** (flag) e **`/ultracode`** (toggle na sessão interativa) — preset de sessão longa/densa: 24 turnos (vs 8 default), 32768 tokens, effort alto, tudo de uma vez em vez de lembrar de 3 flags.
28
+ - **Checkpoint automático de sessão** — a cada turno da sessão interativa, a conversa é salva silenciosamente em `.neetru/code/sessions/_autosave.md` (sobrescrito, não acumula 1 arquivo por turno). Aparece primeiro em `/resume`, marcado `[auto]` — sessão longa que fecha/crasha sem `/save` manual não fica mais irrecuperável.
29
+ - **Ferramentas que mutam estado — git/gh/shell (GAP-M1-19)** — `git_commit`/`git_branch`/`git_push`/`gh_pr_create`/`shell_exec` novas em `code-agent-git-tools.ts`. `git_commit`/`git_branch` são locais/reversíveis e seguem o padrão do patch (`--yes` dispensa confirmação); `git_push`, `gh_pr_create` e `shell_exec` **sempre** pedem confirmação mostrando a ação exata, **ignorando `--yes`** — nunca auto-executam, nem push forçado é suportado. `shell_exec` roda sandboxado no cwd do projeto, com timeout e saída redigida/clipada.
30
+ - **Subagentes — iniciar/parar tarefas delegadas (GAP-M1-20)** — `/agents start|list|stop|result|apply` na sessão interativa. Cada subagente roda concorrentemente em modo plano e silencioso (nunca aplica patch sozinho, nunca imprime durante a execução — só uma notificação ao terminar), histórico isolado, limite de 4 simultâneos. Aplicar um patch proposto por um subagente passa pelo mesmo fluxo de confirmação de um patch normal.
31
+
5
32
  ## [2.19.1] — 2026-07-11 (`neetru code` — crash "Maximum update depth exceeded" no painel persistente)
6
33
 
7
34
  > Achado imediatamente ao testar o 2.19.0 de verdade: o painel travava com um crash do React assim que abria.
@@ -1,7 +1,13 @@
1
1
  import { type CodeAgentState } from '../lib/code-agent-session.js';
2
- import type { CodeMessage, CodeCommandOptions, CodeSettings, ConfirmFn } from '../lib/code-agent-types.js';
2
+ import { type TurnSpinner } from '../lib/code-agent-ui.js';
3
+ import type { CodeMessage, CodeCommandOptions, CodeSettings, ConfirmFn, AgentTaskOutcome, RunAgentTaskOptions } from '../lib/code-agent-types.js';
3
4
  export type { CodeMessage, CodeCommandOptions, CodeSettings } from '../lib/code-agent-types.js';
4
5
  export declare function resolveSettings(opts: CodeCommandOptions): CodeSettings;
6
+ export declare function isProviderPoolUnavailable(error: unknown): boolean;
7
+ export declare function callGatewayWithProgressRetrying(settings: CodeSettings, messages: CodeMessage[], spinner: TurnSpinner, baseDetail: string, silent: boolean, signal?: AbortSignal): Promise<{
8
+ content: string;
9
+ spinner: TurnSpinner;
10
+ }>;
5
11
  /**
6
12
  * `history` e mutado e reaproveitado entre chamadas: e o que da ao modo
7
13
  * interativo memoria de conversa entre turnos do REPL (como Claude Code/Codex),
@@ -15,7 +21,7 @@ export declare function resolveSettings(opts: CodeCommandOptions): CodeSettings;
15
21
  * AI Gateway inteiro. Cada chamada de runAgentTask e um ciclo completo
16
22
  * (comeca e termina em idle/applied/failed/aborted).
17
23
  */
18
- export declare function runAgentTask(task: string, settings: CodeSettings, confirm: ConfirmFn, history?: CodeMessage[], onState?: (state: CodeAgentState) => void): Promise<void>;
24
+ export declare function runAgentTask(task: string, settings: CodeSettings, confirm: ConfirmFn, history?: CodeMessage[], onState?: (state: CodeAgentState) => void, options?: RunAgentTaskOptions): Promise<AgentTaskOutcome>;
19
25
  /**
20
26
  * Entrada a partir do menu interativo do CLI (`neetru` sem args / `neetru ui`).
21
27
  * Usa settings default (cwd do processo) e gerencia o raw-mode do stdin como