@neetru/cli 2.13.1 → 2.14.0

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 (43) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/commands/ai.js +8 -8
  3. package/dist/commands/autocomplete.d.ts +1 -1
  4. package/dist/commands/autocomplete.js +1 -0
  5. package/dist/commands/autocomplete.js.map +1 -1
  6. package/dist/commands/code.d.ts +48 -0
  7. package/dist/commands/code.js +433 -0
  8. package/dist/commands/code.js.map +1 -0
  9. package/dist/commands/fn.d.ts +6 -0
  10. package/dist/commands/fn.js +88 -0
  11. package/dist/commands/fn.js.map +1 -0
  12. package/dist/commands/init.js +147 -147
  13. package/dist/commands/marketplace.d.ts +36 -0
  14. package/dist/commands/marketplace.js +585 -0
  15. package/dist/commands/marketplace.js.map +1 -0
  16. package/dist/commands/ui.d.ts +1 -1
  17. package/dist/commands/ui.js +9 -0
  18. package/dist/commands/ui.js.map +1 -1
  19. package/dist/index.js +19 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/lib/ai/context.js +91 -91
  22. package/dist/lib/ai/orchestrator.js +6 -1
  23. package/dist/lib/ai/orchestrator.js.map +1 -1
  24. package/dist/lib/api-client.d.ts +1 -0
  25. package/dist/lib/api-client.js +4 -3
  26. package/dist/lib/api-client.js.map +1 -1
  27. package/dist/lib/code-agent-files.d.ts +9 -0
  28. package/dist/lib/code-agent-files.js +213 -0
  29. package/dist/lib/code-agent-files.js.map +1 -0
  30. package/dist/lib/code-agent-protocol.d.ts +16 -0
  31. package/dist/lib/code-agent-protocol.js +34 -0
  32. package/dist/lib/code-agent-protocol.js.map +1 -0
  33. package/dist/lib/code-agent-settings.d.ts +20 -0
  34. package/dist/lib/code-agent-settings.js +38 -0
  35. package/dist/lib/code-agent-settings.js.map +1 -0
  36. package/package.json +1 -1
  37. package/templates/auth/callback.ts +22 -22
  38. package/templates/auth/sign-in.tsx +41 -41
  39. package/templates/billing/checkout.ts +22 -22
  40. package/templates/billing/page.tsx +43 -43
  41. package/templates/support/ticket-form.tsx +68 -68
  42. package/templates/usage/track.ts +30 -30
  43. package/templates/users/profile.tsx +43 -43
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  Convenção: [Keep a Changelog](https://keepachangelog.com/) + [SemVer](https://semver.org/).
4
4
 
5
+ ## [2.14.0] — 2026-07-09 (`neetru code` — assistente local via AI Gateway)
6
+
7
+ > Novo subcomando, decisão B0 (ver `PLANO_NEETRU_AI_CODE_2026-07-02.md`): assistente de código local roteado pelo Neetru AI Gateway (Groq/NVIDIA — `llama-3.3-70b-versatile` default), não pelo Anthropic/OpenAI SDK direto. Fecha 3 HIGH + 1 MEDIUM de um review de segurança antes de mergear.
8
+
9
+ ### Adicionado
10
+
11
+ - **`neetru code [prompt...]`** — assistente local de código: modo one-shot (`neetru code "corrija esse bug"`) ou interativo. Autentica com a sessão de login da própria CLI, chama `POST /api/cli/v1/ai/chat` (Core), sem depender do `@neetru/sdk` (mesmo padrão do resto da CLI — fala direto com o Core via seus endpoints próprios).
12
+ - Protocolo textual próprio (`code-agent-protocol.ts`): o modelo emite `NEETRU_TOOL {...}` pra pedir contexto local (`read_file`/`list_files`/`search`) e `NEETRU_PATCH ... NEETRU_END` pra propor diff unificado, aplicado via `git apply` após confirmação (`--yes`/`--plan`/`--no-apply`).
13
+ - Hardening de segurança (`code-agent-files.ts`): contenção de path contra escape via symlink (realpath re-resolvido), blocklist de arquivos com aparência de segredo (`.env`, `.pem`, `id_rsa`, `credentials.json`, etc.), redação de segredo linha-a-linha mesmo em arquivos permitidos, extrator de patch com marcador estrito (sem fallback pra diffs soltos — evita diff injetado via prompt ser auto-aplicado com `--yes`).
14
+ - Flags: `--model`, `--cwd`, `-f/--file` (repetível), `--max-turns`, `--max-tokens`, `--temperature`, `--plan`/`--no-apply`, `--yes`.
15
+
5
16
  ## [2.13.1] — 2026-07-09 (`neetru deploy --version` finalmente funciona)
6
17
 
7
18
  > Achado ao redeployar um produto direto de um `--artifact-url` já existente (sem `neetru build` local) — sem manifest de build, o `--version` do usuário nunca chegava a valer nada.
@@ -11,14 +11,14 @@ const PROMPT_PREFIX = chalk.hex('#1E90FF').bold(' › ');
11
11
  const ASSISTANT_PREFIX = chalk.dim(' ◆ ');
12
12
  // Help público — sem /modelo (orchestrator escolhe). /debug:model é o
13
13
  // override avançado pra quem quer forçar.
14
- const HELP_TEXT = `
15
- Comandos:
16
- /sair /exit encerrar sessão
17
- /limpar /clear limpar histórico de contexto
18
- /agentes <pergunta> consultar 2+ modelos em paralelo e comparar
19
- /auth rodar wizard de configuração (claude/codex/gemini)
20
- /help mostrar este texto
21
- /debug:model <nome> forçar modelo (claude|openai|gemini|groq|nvidia|gateway|auto)
14
+ const HELP_TEXT = `
15
+ Comandos:
16
+ /sair /exit encerrar sessão
17
+ /limpar /clear limpar histórico de contexto
18
+ /agentes <pergunta> consultar 2+ modelos em paralelo e comparar
19
+ /auth rodar wizard de configuração (claude/codex/gemini)
20
+ /help mostrar este texto
21
+ /debug:model <nome> forçar modelo (claude|openai|gemini|groq|nvidia|gateway|auto)
22
22
  `.trim();
23
23
  const DEBUG_MODELS = ['claude', 'openai', 'gemini', 'groq', 'nvidia', 'gateway', 'auto'];
24
24
  /**
@@ -6,7 +6,7 @@ export type Shell = 'bash' | 'zsh' | 'pwsh';
6
6
  * IMPORTANTE: incluir TODOS os `program.command('X')` de `src/index.ts`.
7
7
  * O regression test `top-level-commands-coverage.test.ts` exige >=95%.
8
8
  */
9
- export declare const TOP_LEVEL_COMMANDS: readonly ["add", "admin", "agent", "ai", "api-catalog", "ar", "archive", "artifact-registry", "audit", "auth", "autocomplete", "billing", "bootstrap", "bug", "build", "builds", "cloud-run", "config", "customers", "db", "db-hosts", "deploy", "deployments", "dev", "dns", "docs", "doctor", "dr", "env", "hosting", "init", "login", "logout", "logs", "menu", "mocks", "new", "open", "ops", "products", "promote", "publish", "schema", "servers", "status", "support", "tenants", "ui", "upgrade", "validate", "vm", "whoami", "workspaces"];
9
+ export declare const TOP_LEVEL_COMMANDS: readonly ["add", "admin", "agent", "ai", "api-catalog", "ar", "archive", "artifact-registry", "audit", "auth", "autocomplete", "billing", "bootstrap", "bug", "build", "builds", "cloud-run", "code", "config", "customers", "db", "db-hosts", "deploy", "deployments", "dev", "dns", "docs", "doctor", "dr", "env", "hosting", "init", "login", "logout", "logs", "menu", "mocks", "new", "open", "ops", "products", "promote", "publish", "schema", "servers", "status", "support", "tenants", "ui", "upgrade", "validate", "vm", "whoami", "workspaces"];
10
10
  export interface AutocompleteOptions {
11
11
  shell?: string;
12
12
  }
@@ -45,6 +45,7 @@ export const TOP_LEVEL_COMMANDS = [
45
45
  'build',
46
46
  'builds',
47
47
  'cloud-run',
48
+ 'code',
48
49
  'config',
49
50
  'customers',
50
51
  'db',
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../src/commands/autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK;IACL,OAAO;IACP,OAAO;IACP,IAAI;IACJ,aAAa;IACb,IAAI,EAAE,6BAA6B;IACnC,SAAS;IACT,mBAAmB;IACnB,OAAO;IACP,MAAM;IACN,cAAc;IACd,SAAS;IACT,WAAW;IACX,KAAK;IACL,OAAO;IACP,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,WAAW;IACX,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,aAAa;IACb,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM,EAAE,cAAc;IACtB,OAAO;IACP,KAAK;IACL,MAAM;IACN,KAAK,EAAE,8FAA8F;IACrG,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ,EAAE,mDAAmD;IAC7D,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,IAAI;IACJ,SAAS;IACT,UAAU;IACV,IAAI;IACJ,QAAQ;IACR,YAAY;CACJ,CAAC;AAMX,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;;;;;;;gCAOuB,IAAI;;;;;CAKnC,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,0BAA0B;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO;;;;;EAKP,IAAI;;;;;;;CAOL,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO;;;;EAIP,IAAI;;;;;;CAML,CAAC;AACF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAY;IACrD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA4B,EAC5B,QAA6B,EAAE;IAE/B,MAAM,KAAK,GAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAU,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,mBAAmB,QAAQ,IAAI,EAAE,WAAW,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAC3E,CAAC;QACF,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,CAAU,CAAC,CAAC;IACtD,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../src/commands/autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK;IACL,OAAO;IACP,OAAO;IACP,IAAI;IACJ,aAAa;IACb,IAAI,EAAE,6BAA6B;IACnC,SAAS;IACT,mBAAmB;IACnB,OAAO;IACP,MAAM;IACN,cAAc;IACd,SAAS;IACT,WAAW;IACX,KAAK;IACL,OAAO;IACP,QAAQ;IACR,WAAW;IACX,MAAM;IACN,QAAQ;IACR,WAAW;IACX,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,aAAa;IACb,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM,EAAE,cAAc;IACtB,OAAO;IACP,KAAK;IACL,MAAM;IACN,KAAK,EAAE,8FAA8F;IACrG,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ,EAAE,mDAAmD;IAC7D,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,IAAI;IACJ,SAAS;IACT,UAAU;IACV,IAAI;IACJ,QAAQ;IACR,YAAY;CACJ,CAAC;AAMX,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;;;;;;;gCAOuB,IAAI;;;;;CAKnC,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,0BAA0B;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO;;;;;EAKP,IAAI;;;;;;;CAOL,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO;;;;EAIP,IAAI;;;;;;CAML,CAAC;AACF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAY;IACrD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA4B,EAC5B,QAA6B,EAAE;IAE/B,MAAM,KAAK,GAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAU,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,mBAAmB,QAAQ,IAAI,EAAE,WAAW,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAC3E,CAAC;QACF,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,CAAU,CAAC,CAAC;IACtD,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,48 @@
1
+ export type CodeRole = 'system' | 'user' | 'assistant';
2
+ export interface CodeMessage {
3
+ role: CodeRole;
4
+ content: string;
5
+ }
6
+ export interface CodeCommandOptions {
7
+ cwd?: string;
8
+ file?: string[];
9
+ model?: string;
10
+ maxTurns?: string | number;
11
+ maxTokens?: string | number;
12
+ temperature?: string | number;
13
+ plan?: boolean;
14
+ apply?: boolean;
15
+ yes?: boolean;
16
+ }
17
+ export interface CodeSettings {
18
+ cwd: string;
19
+ files: string[];
20
+ model: string;
21
+ modelWarning?: string;
22
+ maxTurns: number;
23
+ maxTokens: number;
24
+ temperature: number;
25
+ apply: boolean;
26
+ yes: boolean;
27
+ timeoutMs: number;
28
+ }
29
+ type ConfirmFn = (question: string) => Promise<boolean>;
30
+ export declare function resolveSettings(opts: CodeCommandOptions): CodeSettings;
31
+ /**
32
+ * `history` e mutado e reaproveitado entre chamadas: e o que da ao modo
33
+ * interativo memoria de conversa entre turnos do REPL (como Claude Code/Codex),
34
+ * em vez de cada linha digitada virar uma requisicao amnesica. O one-shot
35
+ * (`neetru code "tarefa"`) chama sem `history` — cada `runAgentTask` comeca do
36
+ * zero, igual sempre foi.
37
+ */
38
+ export declare function runAgentTask(task: string, settings: CodeSettings, confirm: ConfirmFn, history?: CodeMessage[]): Promise<void>;
39
+ /**
40
+ * Entrada a partir do menu interativo do CLI (`neetru` sem args / `neetru ui`).
41
+ * Usa settings default (cwd do processo) e gerencia o raw-mode do stdin como
42
+ * o loop de canal do Chat (`runChannelLoop` em chat-menu.ts) — sai do raw mode
43
+ * pro readline do REPL funcionar, restaura no finally pro menu principal
44
+ * retomar o controle do teclado.
45
+ */
46
+ export declare function runCodeMenu(): Promise<void>;
47
+ export declare function runCodeCommand(promptParts: string[] | undefined, opts?: CodeCommandOptions): Promise<void>;
48
+ export {};
@@ -0,0 +1,433 @@
1
+ import chalk from 'chalk';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import { spawnSync } from 'node:child_process';
5
+ import { createInterface } from 'node:readline/promises';
6
+ import { apiRequest } from '../lib/api-client.js';
7
+ import { config } from '../lib/config.js';
8
+ import { getActiveTokenSync } from '../lib/token-resolver.js';
9
+ import { log } from '../utils/logger.js';
10
+ import { setSafeExitCode } from '../utils/safe-exit.js';
11
+ import { parseToolRequest, extractPatch } from '../lib/code-agent-protocol.js';
12
+ import { applyUnifiedPatch, listFiles, readFileContext, renderColoredDiff, runCodeTool, } from '../lib/code-agent-files.js';
13
+ import { DEFAULT_CODE_MAX_TOKENS, DEFAULT_CODE_MAX_TURNS, DEFAULT_CODE_TEMPERATURE, parseBoundedNumber, resolveCodeModel, } from '../lib/code-agent-settings.js';
14
+ const AI_GATEWAY_CHAT_PATH = '/api/cli/v1/ai/chat';
15
+ const UI_MIN_WIDTH = 72;
16
+ const UI_MAX_WIDTH = 110;
17
+ const SYSTEM_PROMPT = `
18
+ Voce e o Neetru Code, um assistente local de codificacao da Neetru.
19
+ Voce conversa com modelos do AI Gateway do Neetru Core, normalmente Groq/NVIDIA.
20
+ Nao use Anthropic/Claude como caminho assumido.
21
+
22
+ Voce nao tem tool calling nativo. Use exatamente estes protocolos textuais:
23
+
24
+ NEETRU_TOOL {"tool":"read_file","path":"caminho/relativo.ext"}
25
+ NEETRU_TOOL {"tool":"list_files","pattern":"texto opcional"}
26
+ NEETRU_TOOL {"tool":"search","query":"texto literal"}
27
+
28
+ Regras:
29
+ - Peca arquivos antes de alterar codigo quando faltar contexto.
30
+ - Nunca invente conteudo de arquivo.
31
+ - Peca uma tool por resposta, no maximo.
32
+ - Quando estiver pronto para alterar, responda somente com um diff aplicavel por git:
33
+
34
+ NEETRU_PATCH
35
+ diff --git a/path b/path
36
+ ...
37
+ NEETRU_END
38
+
39
+ - Nao coloque explicacao dentro do bloco NEETRU_PATCH.
40
+ - Se a tarefa nao exigir alteracao, responda em texto curto.
41
+ `.trim();
42
+ function stripAnsi(text) {
43
+ return text.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, '');
44
+ }
45
+ function visibleLength(text) {
46
+ return Array.from(stripAnsi(text)).length;
47
+ }
48
+ function padVisible(text, width) {
49
+ return `${text}${' '.repeat(Math.max(0, width - visibleLength(text)))}`;
50
+ }
51
+ function terminalWidth() {
52
+ const raw = process.stdout.columns ?? 88;
53
+ return Math.max(UI_MIN_WIDTH, Math.min(UI_MAX_WIDTH, raw));
54
+ }
55
+ function truncateMiddle(text, max) {
56
+ if (visibleLength(text) <= max)
57
+ return text;
58
+ if (max <= 5)
59
+ return text.slice(0, max);
60
+ const clean = stripAnsi(text);
61
+ const left = Math.ceil((max - 3) / 2);
62
+ const right = Math.floor((max - 3) / 2);
63
+ return `${clean.slice(0, left)}...${clean.slice(clean.length - right)}`;
64
+ }
65
+ function wrapPlain(text, width) {
66
+ const clean = stripAnsi(text);
67
+ if (clean.length <= width)
68
+ return [clean];
69
+ const out = [];
70
+ let rest = clean;
71
+ while (rest.length > width) {
72
+ const slice = rest.slice(0, width + 1);
73
+ const breakAt = Math.max(slice.lastIndexOf(' '), slice.lastIndexOf('/'), slice.lastIndexOf('\\'));
74
+ const idx = breakAt > Math.floor(width * 0.45) ? breakAt : width;
75
+ out.push(rest.slice(0, idx).trimEnd());
76
+ rest = rest.slice(idx).trimStart();
77
+ }
78
+ if (rest)
79
+ out.push(rest);
80
+ return out;
81
+ }
82
+ function printBox(title, rows = []) {
83
+ const width = terminalWidth();
84
+ const inner = width - 2;
85
+ const label = title ? ` ${title} ` : '';
86
+ const top = `+${label}${'-'.repeat(Math.max(0, inner - visibleLength(label)))}+`;
87
+ console.log(chalk.dim(top));
88
+ for (const row of rows) {
89
+ const wrapped = wrapPlain(row, inner - 2);
90
+ for (const line of wrapped) {
91
+ console.log(chalk.dim('| ') + padVisible(truncateMiddle(line, inner - 2), inner - 2) + chalk.dim(' |'));
92
+ }
93
+ }
94
+ console.log(chalk.dim(`+${'-'.repeat(inner)}+`));
95
+ }
96
+ function printDivider(label) {
97
+ const width = terminalWidth();
98
+ if (!label) {
99
+ console.log(chalk.dim('-'.repeat(width)));
100
+ return;
101
+ }
102
+ const title = ` ${label} `;
103
+ console.log(chalk.dim(`${title}${'-'.repeat(Math.max(0, width - visibleLength(title)))}`));
104
+ }
105
+ function printEvent(kind, title, detail) {
106
+ const colors = {
107
+ wait: chalk.cyan,
108
+ tool: chalk.blue,
109
+ ok: chalk.green,
110
+ warn: chalk.yellow,
111
+ error: chalk.red,
112
+ };
113
+ const tag = colors[kind](kind.toUpperCase().padEnd(5));
114
+ const suffix = detail ? chalk.dim(` ${detail}`) : '';
115
+ console.log(`${tag} ${chalk.bold(title)}${suffix}`);
116
+ }
117
+ function toolDetail(tool) {
118
+ if (!tool)
119
+ return '';
120
+ if (tool.tool === 'read_file' && typeof tool.path === 'string')
121
+ return tool.path;
122
+ if (tool.tool === 'list_files' && typeof tool.pattern === 'string' && tool.pattern)
123
+ return tool.pattern;
124
+ if (tool.tool === 'search' && typeof tool.query === 'string')
125
+ return tool.query;
126
+ return '';
127
+ }
128
+ function summarizeToolResult(result) {
129
+ const lines = result.split(/\r?\n/).filter(Boolean).length;
130
+ const chars = result.length;
131
+ return `${lines} linha(s), ${chars} char(s)`;
132
+ }
133
+ function printAssistantText(content) {
134
+ printDivider('assistant');
135
+ process.stdout.write(`${content.trim()}\n`);
136
+ printDivider();
137
+ }
138
+ function printPatchPreview(patch) {
139
+ const files = Array.from(patch.matchAll(/^diff --git a\/(.+?) b\//gm)).map((m) => m[1]);
140
+ printBox('patch proposto', [
141
+ files.length ? `arquivos: ${files.join(', ')}` : 'arquivos: nao detectado',
142
+ 'aplicacao: git apply depois de confirmacao',
143
+ ]);
144
+ process.stdout.write(renderColoredDiff(patch));
145
+ }
146
+ function asOptionalString(value) {
147
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
148
+ }
149
+ function normalizeFiles(files) {
150
+ if (!files)
151
+ return [];
152
+ if (Array.isArray(files))
153
+ return files.filter((file) => typeof file === 'string' && !!file.trim());
154
+ if (typeof files === 'string' && files.trim())
155
+ return [files.trim()];
156
+ return [];
157
+ }
158
+ export function resolveSettings(opts) {
159
+ const cwd = path.resolve(opts.cwd ?? process.cwd());
160
+ const stat = fs.statSync(cwd);
161
+ if (!stat.isDirectory())
162
+ throw new Error(`cwd nao e diretorio: ${cwd}`);
163
+ const model = resolveCodeModel({
164
+ cliModel: asOptionalString(opts.model),
165
+ envModel: process.env.NEETRU_CODE_MODEL,
166
+ configuredGatewayModel: config.get('gatewayModel'),
167
+ });
168
+ return {
169
+ cwd,
170
+ files: normalizeFiles(opts.file),
171
+ model: model.model,
172
+ modelWarning: model.warning,
173
+ maxTurns: parseBoundedNumber(opts.maxTurns, DEFAULT_CODE_MAX_TURNS, {
174
+ min: 1,
175
+ max: 30,
176
+ integer: true,
177
+ }),
178
+ maxTokens: parseBoundedNumber(opts.maxTokens, DEFAULT_CODE_MAX_TOKENS, {
179
+ min: 256,
180
+ max: 32_768,
181
+ integer: true,
182
+ }),
183
+ temperature: parseBoundedNumber(opts.temperature, DEFAULT_CODE_TEMPERATURE, {
184
+ min: 0,
185
+ max: 2,
186
+ }),
187
+ apply: opts.apply !== false && opts.plan !== true,
188
+ yes: opts.yes === true,
189
+ timeoutMs: 120_000,
190
+ };
191
+ }
192
+ function renderHeader(settings, mode = 'oneshot') {
193
+ console.log();
194
+ printBox('Neetru Code', [
195
+ `AI Gateway ${AI_GATEWAY_CHAT_PATH}`,
196
+ `Model ${settings.model}`,
197
+ `Workspace ${truncateMiddle(settings.cwd, terminalWidth() - 18)}`,
198
+ `Mode ${mode} | patch ${settings.apply ? 'confirm' : 'plan-only'} | turns ${settings.maxTurns} | tokens ${settings.maxTokens}`,
199
+ ]);
200
+ if (settings.modelWarning)
201
+ log.warn(settings.modelWarning);
202
+ console.log();
203
+ }
204
+ function renderInteractiveHelp() {
205
+ printBox('controles', [
206
+ '/files listar arquivos do workspace',
207
+ '/model mostrar modelo atual',
208
+ '/clear limpar tela e esquecer o historico da conversa',
209
+ '/help mostrar estes controles',
210
+ '/exit sair',
211
+ ]);
212
+ console.log(chalk.dim('Digite uma tarefa em linguagem natural para a IA inspecionar e propor patch.'));
213
+ console.log();
214
+ }
215
+ function buildInitialPrompt(task, settings) {
216
+ const fileBlocks = [];
217
+ for (const file of settings.files) {
218
+ fileBlocks.push(readFileContext(settings.cwd, file));
219
+ }
220
+ return [
221
+ `Tarefa do usuario:\n${task}`,
222
+ `Cwd: ${settings.cwd}`,
223
+ fileBlocks.length
224
+ ? `Contexto inicial de arquivos:\n\n${fileBlocks.join('\n\n')}`
225
+ : 'Nenhum arquivo foi anexado inicialmente. Use NEETRU_TOOL para pedir contexto local.',
226
+ ].join('\n\n');
227
+ }
228
+ async function callGateway(settings, messages) {
229
+ const response = await apiRequest(AI_GATEWAY_CHAT_PATH, {
230
+ method: 'POST',
231
+ body: {
232
+ model: settings.model,
233
+ messages,
234
+ stream: false,
235
+ maxTokens: settings.maxTokens,
236
+ temperature: settings.temperature,
237
+ },
238
+ timeoutMs: settings.timeoutMs,
239
+ });
240
+ const content = response.choices?.[0]?.message?.content;
241
+ if (typeof content !== 'string') {
242
+ throw new Error('AI Gateway retornou resposta sem choices[0].message.content.');
243
+ }
244
+ return content;
245
+ }
246
+ async function defaultConfirm(question) {
247
+ if (!process.stdin.isTTY)
248
+ return false;
249
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
250
+ try {
251
+ const answer = await rl.question(question);
252
+ return /^(y|yes|s|sim)$/i.test(answer.trim());
253
+ }
254
+ finally {
255
+ rl.close();
256
+ }
257
+ }
258
+ /**
259
+ * `history` e mutado e reaproveitado entre chamadas: e o que da ao modo
260
+ * interativo memoria de conversa entre turnos do REPL (como Claude Code/Codex),
261
+ * em vez de cada linha digitada virar uma requisicao amnesica. O one-shot
262
+ * (`neetru code "tarefa"`) chama sem `history` — cada `runAgentTask` comeca do
263
+ * zero, igual sempre foi.
264
+ */
265
+ export async function runAgentTask(task, settings, confirm, history = []) {
266
+ if (!getActiveTokenSync()) {
267
+ throw new Error('Sessao Neetru ausente ou expirada. Rode `neetru login`.');
268
+ }
269
+ const messages = history;
270
+ const isFirstTurn = messages.length === 0;
271
+ if (isFirstTurn)
272
+ messages.push({ role: 'system', content: SYSTEM_PROMPT });
273
+ messages.push({
274
+ role: 'user',
275
+ content: isFirstTurn ? buildInitialPrompt(task, settings) : task,
276
+ });
277
+ for (let turn = 1; turn <= settings.maxTurns; turn++) {
278
+ printEvent('wait', 'AI Gateway', `turno ${turn}/${settings.maxTurns}`);
279
+ const content = await callGateway(settings, messages);
280
+ messages.push({ role: 'assistant', content });
281
+ const tool = parseToolRequest(content);
282
+ if (tool) {
283
+ printEvent('tool', tool.tool, toolDetail(tool));
284
+ const result = runCodeTool(settings.cwd, tool);
285
+ printEvent('ok', 'contexto local', summarizeToolResult(result));
286
+ messages.push({
287
+ role: 'user',
288
+ content: `Resultado da tool ${tool.tool}:\n\n${result}`,
289
+ });
290
+ continue;
291
+ }
292
+ const patch = extractPatch(content);
293
+ if (patch) {
294
+ console.log();
295
+ printPatchPreview(patch);
296
+ if (!settings.apply) {
297
+ printEvent('warn', 'Patch nao aplicado', '--plan/--no-apply');
298
+ return;
299
+ }
300
+ const approved = settings.yes || (await confirm('\nAplicar este patch? [y/N] '));
301
+ if (!approved) {
302
+ printEvent('warn', 'Patch nao aplicado');
303
+ return;
304
+ }
305
+ applyUnifiedPatch(settings.cwd, patch);
306
+ printEvent('ok', 'Patch aplicado', 'git apply');
307
+ return;
308
+ }
309
+ console.log();
310
+ printAssistantText(content);
311
+ return;
312
+ }
313
+ throw new Error(`Limite de turnos atingido (${settings.maxTurns}) sem resposta final.`);
314
+ }
315
+ function printFileSample(settings) {
316
+ const files = listFiles(settings.cwd).slice(0, 60);
317
+ if (files.length === 0) {
318
+ printEvent('warn', 'Nenhum arquivo encontrado');
319
+ return;
320
+ }
321
+ printBox('arquivos', [
322
+ ...files,
323
+ ...(files.length === 60 ? ['... lista truncada em 60 arquivos.'] : []),
324
+ ]);
325
+ }
326
+ async function runInteractive(settings) {
327
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
328
+ throw new Error('Modo interativo exige terminal TTY. Use: neetru code "tarefa".');
329
+ }
330
+ renderHeader(settings, 'interactive');
331
+ renderInteractiveHelp();
332
+ let history = [];
333
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
334
+ try {
335
+ for (;;) {
336
+ const line = (await rl.question(chalk.cyan('> '))).trim();
337
+ if (!line)
338
+ continue;
339
+ const lower = line.toLowerCase();
340
+ if (lower === '/exit' || lower === '/sair' || lower === 'exit' || lower === 'quit')
341
+ return;
342
+ if (lower === '/clear') {
343
+ history = [];
344
+ process.stdout.write('\x1B[2J\x1B[H');
345
+ renderHeader(settings, 'interactive');
346
+ renderInteractiveHelp();
347
+ continue;
348
+ }
349
+ if (lower === '/files') {
350
+ printFileSample(settings);
351
+ continue;
352
+ }
353
+ if (lower === '/model') {
354
+ printBox('modelo', [settings.model]);
355
+ continue;
356
+ }
357
+ if (lower === '/help' || lower === '/ajuda') {
358
+ renderInteractiveHelp();
359
+ continue;
360
+ }
361
+ try {
362
+ await runAgentTask(line, settings, async (question) => {
363
+ const answer = await rl.question(question);
364
+ return /^(y|yes|s|sim)$/i.test(answer.trim());
365
+ }, history);
366
+ }
367
+ catch (error) {
368
+ printEvent('error', 'Falha', error instanceof Error ? error.message : String(error));
369
+ }
370
+ }
371
+ }
372
+ finally {
373
+ rl.close();
374
+ }
375
+ }
376
+ function runDoctor(settings) {
377
+ const token = getActiveTokenSync();
378
+ const apiUrl = config.get('neetruApiUrl') ?? 'https://api.neetru.com';
379
+ const git = spawnSync('git', ['--version'], { cwd: settings.cwd, encoding: 'utf8' });
380
+ renderHeader(settings, 'doctor');
381
+ console.log(chalk.bold('Doctor'));
382
+ console.log(` token Neetru: ${token ? chalk.green('ok') : chalk.red('ausente')}`);
383
+ console.log(` Core API: ${chalk.dim(apiUrl)}`);
384
+ console.log(` git: ${git.status === 0 ? chalk.green('ok') : chalk.red('falhou')}`);
385
+ console.log(` modo patch: ${settings.apply ? 'aplica com confirmacao' : 'somente plano'}`);
386
+ console.log();
387
+ if (!token || git.status !== 0)
388
+ setSafeExitCode(1);
389
+ }
390
+ /**
391
+ * Entrada a partir do menu interativo do CLI (`neetru` sem args / `neetru ui`).
392
+ * Usa settings default (cwd do processo) e gerencia o raw-mode do stdin como
393
+ * o loop de canal do Chat (`runChannelLoop` em chat-menu.ts) — sai do raw mode
394
+ * pro readline do REPL funcionar, restaura no finally pro menu principal
395
+ * retomar o controle do teclado.
396
+ */
397
+ export async function runCodeMenu() {
398
+ const wasRaw = process.stdin.isRaw === true;
399
+ try {
400
+ if (typeof process.stdin.setRawMode === 'function') {
401
+ process.stdin.setRawMode(false);
402
+ }
403
+ await runInteractive(resolveSettings({}));
404
+ }
405
+ finally {
406
+ if (typeof process.stdin.setRawMode === 'function') {
407
+ process.stdin.setRawMode(wasRaw);
408
+ }
409
+ process.stdin.resume();
410
+ }
411
+ }
412
+ export async function runCodeCommand(promptParts, opts = {}) {
413
+ try {
414
+ const settings = resolveSettings(opts);
415
+ const parts = promptParts ?? [];
416
+ if (parts.length === 1 && parts[0].toLowerCase() === 'doctor') {
417
+ runDoctor(settings);
418
+ return;
419
+ }
420
+ const task = parts.join(' ').trim();
421
+ if (!task) {
422
+ await runInteractive(settings);
423
+ return;
424
+ }
425
+ renderHeader(settings, 'oneshot');
426
+ await runAgentTask(task, settings, defaultConfirm);
427
+ }
428
+ catch (error) {
429
+ log.error(error instanceof Error ? error.message : String(error));
430
+ setSafeExitCode(1);
431
+ }
432
+ }
433
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface FnDeployOptions {
2
+ version?: string;
3
+ channel?: 'stable' | 'beta' | 'alpha';
4
+ spec?: string;
5
+ }
6
+ export declare function runFnDeploy(opts?: FnDeployOptions): Promise<void>;