auroq-os 2.4.19 → 2.4.20

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.
@@ -1,7 +1,7 @@
1
1
  project:
2
2
  name: "Auroq OS"
3
3
  type: greenfield
4
- version: 2.4.19
4
+ version: 2.4.20
5
5
  installedAt: '2026-03-16'
6
6
 
7
7
  ide:
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.20] — 2026-09-04
4
+
5
+ ### Dentro do Codex no Windows: "UNABLE_TO_VERIFY_LEAF_SIGNATURE" (EMB-028, causa vista na tela)
6
+ Com o motivo tecnico na mensagem (0.4.1), a aluna mostrou: dentro do Codex a conexao com o
7
+ servidor cai porque o Node nao confia no certificado que chega — algo entre o Codex e a internet
8
+ (antivirus, proxy ou o sandbox do Codex) reassina a conexao com um certificado que o Windows
9
+ conhece e o Node, por padrao, nao. No terminal funciona porque o ambiente carrega a confianca;
10
+ o Codex abre o MCP com ambiente minimo (openai/codex#29124).
11
+ - **`arcane-mcp@0.4.2`** (pin novo) confia tambem nos certificados do sistema, sem flag.
12
+ - **Registro do Codex** no Windows ganha `NODE_USE_SYSTEM_CA = '1'` e repassa, se existirem,
13
+ `NODE_EXTRA_CA_CERTS`, `SSL_CERT_FILE`, `SSL_CERT_DIR`, `NODE_OPTIONS`, `HTTPS_PROXY`,
14
+ `HTTP_PROXY`, `NO_PROXY`.
15
+ - **`doctor`** fecha o relatorio pedindo ao proprio Codex do aluno pra chamar o conteudo ao vivo
16
+ e imprime a resposta — o teste definitivo, na mesma tela.
17
+
3
18
  ## [2.4.19] — 2026-09-04
4
19
 
5
20
  ### O npx guarda cache por ambiente — o Codex abria "a frio" mesmo depois de aquecido
package/bin/auroq-os.js CHANGED
@@ -426,7 +426,16 @@ async function runDoctor(targetDir) {
426
426
  log(` ${DIM}Ultimas linhas do log do Codex sobre o arcane:${RESET}`);
427
427
  for (const l of rastro) log(` ${DIM} ${l}${RESET}`);
428
428
  }
429
- if (r.subiu === null || !r.temForja || !r.chamada || r.chamada.erro) {
429
+ let codexFalhou = false;
430
+ if (vCodex) {
431
+ log(` ${DIM}Pedindo ao proprio Codex pra chamar o conteudo ao vivo (pode levar 1-2 min)...${RESET}`);
432
+ const linhas = rodarNoCodex(targetDir);
433
+ const texto = linhas.join('\n');
434
+ codexFalhou = !/versao|catalogo_listar \(completed\)/i.test(texto) || /motivo t[eé]cnico|indispon[ií]vel|failed|timed out/i.test(texto);
435
+ (codexFalhou ? error : success)(codexFalhou ? 'Codex de verdade: NAO conseguiu usar o conteudo ao vivo' : 'Codex de verdade: usou o conteudo ao vivo');
436
+ for (const l of linhas) log(` ${DIM} ${l}${RESET}`);
437
+ }
438
+ if (r.subiu === null || !r.temForja || !r.chamada || r.chamada.erro || codexFalhou) {
430
439
  problemas.push('Mande o print desta tela INTEIRA pro suporte (11 93621-4486) — ela ja traz tudo que precisamos.');
431
440
  }
432
441
  }
@@ -450,7 +459,7 @@ async function runDoctor(targetDir) {
450
459
  // (rede domestica + antivirus) a aluna viu timeout em todas as que fez. Por isso:
451
460
  // (1) o registro do Codex pede mais tempo, (2) instalacao/atualizacao ja baixam o
452
461
  // pacote, (3) o doctor mede o arranque de verdade em vez de so olhar o registro.
453
- const ARCANE_MCP_PIN = 'arcane-mcp@0.4.1';
462
+ const ARCANE_MCP_PIN = 'arcane-mcp@0.4.2';
454
463
  const CODEX_MCP_STARTUP_SEC = 120;
455
464
  const CODEX_ENV_MINIMO = ['PATH', 'PATHEXT', 'USERNAME', 'USERDOMAIN', 'USERPROFILE', 'TEMP', 'TMP',
456
465
  'HOME', 'LOGNAME', 'SHELL', 'TERM', 'USER'];
@@ -464,7 +473,13 @@ const MCP_ARRANQUE_LIMITE_MS = 9000; // abaixo do que o Codex tolera (10s)
464
473
  const CODEX_ENV_WINDOWS = [
465
474
  'SystemRoot', 'windir', 'COMSPEC', 'SystemDrive', 'APPDATA', 'LOCALAPPDATA',
466
475
  'ProgramData', 'ProgramFiles', 'HOMEDRIVE', 'HOMEPATH', 'USERPROFILE', 'TEMP', 'TMP',
476
+ // Confianca e proxy que o terminal do aluno tem e o Codex tira do MCP (openai/codex#29124).
477
+ 'NODE_EXTRA_CA_CERTS', 'SSL_CERT_FILE', 'SSL_CERT_DIR', 'NODE_OPTIONS',
478
+ 'HTTPS_PROXY', 'HTTP_PROXY', 'NO_PROXY',
467
479
  ];
480
+ // Dentro do Codex no Windows a conexao caia com UNABLE_TO_VERIFY_LEAF_SIGNATURE (04/09):
481
+ // o Node por padrao ignora a loja de certificados do Windows. Node >= 22.15 aceita isto.
482
+ const CODEX_ENV_FIXO_WINDOWS = { NODE_USE_SYSTEM_CA: '1' };
468
483
 
469
484
  function envCodexArcane({ plataforma = process.platform, env = process.env } = {}) {
470
485
  if (plataforma !== 'win32') return null;
@@ -475,6 +490,7 @@ function envCodexArcane({ plataforma = process.platform, env = process.env } = {
475
490
  if (!valor || valor.includes("'") || /[\r\n]/.test(valor)) continue;
476
491
  pares.push(`${nome} = '${valor}'`); // string literal do TOML: barra invertida sem escape
477
492
  }
493
+ for (const [nome, valor] of Object.entries(CODEX_ENV_FIXO_WINDOWS)) pares.push(`${nome} = '${valor}'`);
478
494
  return pares.length ? `env = { ${pares.join(', ')} }` : null;
479
495
  }
480
496
 
@@ -492,7 +508,7 @@ function blocoCodexArcane(pin, opcoes) {
492
508
  }
493
509
 
494
510
  // Baixa o pacote do conteudo ao vivo com o MESMO nome que o registro usa (o cache do
495
- // npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.4.1` sao caches diferentes).
511
+ // npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.4.2` sao caches diferentes).
496
512
  // `npx` no Windows e um .cmd: sem shell o Node recusa (EINVAL) e com `shell: true` o Node 24
497
513
  // imprime um DeprecationWarning na tela do aluno (DEP0190). Chamar o cmd.exe direto, sem shell.
498
514
  function comandoNpx(args) {
@@ -517,6 +533,7 @@ function envComoCodex({ plataforma = process.platform, env = process.env } = {})
517
533
  const chave = Object.keys(env).find(k => k.toLowerCase() === nome.toLowerCase());
518
534
  if (chave && env[chave]) base[nome] = env[chave];
519
535
  }
536
+ Object.assign(base, CODEX_ENV_FIXO_WINDOWS);
520
537
  }
521
538
  return base;
522
539
  }
@@ -730,6 +747,26 @@ async function rastroDoCodex(limite = 8) {
730
747
  }
731
748
  }
732
749
 
750
+
751
+ // O teste definitivo: o proprio Codex do aluno chamando a ferramenta. E o unico jeito de
752
+ // ver o que o Codex faz com o MCP (sandbox, proxy, certificado) sem pedir print atras de print.
753
+ function rodarNoCodex(pasta) {
754
+ const prompt = 'Chame a ferramenta MCP catalogo_listar do servidor arcane e responda SOMENTE com a primeira linha do resultado, ou com a mensagem de erro exata que a ferramenta devolveu.';
755
+ const args = ['exec', '--skip-git-repo-check', '-C', pasta, prompt];
756
+ const c = process.platform === 'win32'
757
+ ? { cmd: process.env.ComSpec || 'cmd.exe', args: ['/d', '/s', '/c', `codex exec --skip-git-repo-check -C "${pasta}" "${prompt}"`], opts: { windowsVerbatimArguments: true } }
758
+ : { cmd: 'codex', args, opts: {} };
759
+ let saida = '';
760
+ try {
761
+ saida = execFileSync(c.cmd, c.args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], timeout: 300000, ...c.opts });
762
+ } catch (e) {
763
+ saida = `${e.stdout || ''}\n${e.stderr || ''}\n[codex saiu com ${e.status ?? e.code ?? 'erro'}]`;
764
+ }
765
+ return saida.split('\n').map(l => l.replace(/\u001b\[[0-9;]*m/g, '').trim())
766
+ .filter(l => l && !/^hook:|^warning: Skill|usage limit|^Tip:|^tokens used|^[0-9.]+$/i.test(l))
767
+ .slice(-8).map(l => l.slice(0, 220));
768
+ }
769
+
733
770
  async function writeArcaneMcpConfig(targetDir) {
734
771
  const pin = ARCANE_MCP_PIN;
735
772
  const mcpPath = path.join(targetDir, '.mcp.json');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auroq-os",
3
- "version": "2.4.19",
3
+ "version": "2.4.20",
4
4
  "description": "Auroq OS — Sistema Operacional de IA para Experts",
5
5
  "bin": {
6
6
  "auroq-os": "bin/auroq-os.js"