auroq-os 2.4.15 → 2.4.17

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.15
4
+ version: 2.4.17
5
5
  installedAt: '2026-03-16'
6
6
 
7
7
  ide:
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.17] — 2026-09-04
4
+
5
+ ### Doctor no Windows: tela limpa
6
+ - O `doctor` (e o `init`/`register-mcp`) abriam o `npx` com `shell: true` no Windows, e o Node 24
7
+ imprimia um `DeprecationWarning` no meio do diagnostico do aluno. Agora chama o `cmd.exe`
8
+ direto — sem aviso.
9
+ - Aluno com Node proprio (sem o motor de bolso) recebia um X — "O motor esta valendo nesta
10
+ janela" — e a ordem de rodar o instalador de novo, com tudo funcionando. No Windows o caminho
11
+ e da conta, nao da janela: motor encontrado = OK.
12
+
13
+ ## [2.4.16] — 2026-09-04
14
+
15
+ ### Codex no Windows: conteudo ao vivo abria, mas "Sem conexao com o servidor da Arcane" (EMB-028)
16
+ Aluna no Windows, depois do 2.4.15, entrou no Codex sem timeout — e ao chamar o Ops leu "Sem
17
+ conexao com o servidor da Arcane" com internet normal. Causa: o Codex abre o MCP com um ambiente
18
+ minimo (so PATH, PATHEXT, USERNAME, USERDOMAIN, USERPROFILE, TEMP, TMP) e deixa de fora
19
+ `SystemRoot`, `APPDATA`, `COMSPEC`... Sem `SystemRoot` o Node no Windows pode nao resolver DNS
20
+ (openai/codex#4180, #3311). Hipotese: o runner do CI nao reproduziu a falha. Por isso o pacote
21
+ tambem passa a MOSTRAR o motivo tecnico — e o que fecha o diagnostico.
22
+
23
+ - **Registro do Codex** passa os valores reais da maquina (`SystemRoot`, `windir`, `COMSPEC`,
24
+ `APPDATA`, `LOCALAPPDATA`, `ProgramData`, `ProgramFiles`, `HOMEDRIVE`, `HOMEPATH`,
25
+ `USERPROFILE`, `TEMP`, `TMP`) no bloco `[mcp_servers.arcane]`; so no Windows.
26
+ - **`arcane-mcp@0.4.1`** (pin novo): a falha de rede diz o motivo tecnico (ex.: `EAI_FAIL`) e
27
+ ganhou `npx -y arcane-mcp@0.4.1 verify`, que prova a conexao a partir do mesmo programa que o
28
+ Codex abre.
29
+ - Quem ja instalou: "atualiza o sistema" pelo Ops, ou `npx auroq-os@latest register-mcp` na pasta,
30
+ e FECHAR e abrir o Codex.
31
+
3
32
  ## [2.4.15] — 2026-09-03
4
33
 
5
34
  ### Aluno antigo migrado cai pro disco quando o servidor recusa (EMB-019, conserto)
package/bin/auroq-os.js CHANGED
@@ -409,29 +409,62 @@ async function runDoctor(targetDir) {
409
409
  // (rede domestica + antivirus) a aluna viu timeout em todas as que fez. Por isso:
410
410
  // (1) o registro do Codex pede mais tempo, (2) instalacao/atualizacao ja baixam o
411
411
  // pacote, (3) o doctor mede o arranque de verdade em vez de so olhar o registro.
412
- const ARCANE_MCP_PIN = 'arcane-mcp@0.4.0';
412
+ const ARCANE_MCP_PIN = 'arcane-mcp@0.4.1';
413
413
  const CODEX_MCP_STARTUP_SEC = 120;
414
414
  const MCP_ARRANQUE_LIMITE_MS = 9000; // abaixo do que o Codex tolera (10s)
415
415
 
416
- function blocoCodexArcane(pin) {
416
+ // No Windows o Codex abre o MCP com um ambiente minimo (PATH, USERNAME, USERPROFILE,
417
+ // TEMP...) e deixa de fora SystemRoot, APPDATA, COMSPEC etc. Sem SystemRoot o Node nao
418
+ // resolve DNS (EAI_FAIL) e o aluno le "Sem conexao com o servidor da Arcane" mesmo com
419
+ // internet — openai/codex#4180 e #3311. Passamos os valores reais da maquina no registro.
420
+ const CODEX_ENV_WINDOWS = [
421
+ 'SystemRoot', 'windir', 'COMSPEC', 'SystemDrive', 'APPDATA', 'LOCALAPPDATA',
422
+ 'ProgramData', 'ProgramFiles', 'HOMEDRIVE', 'HOMEPATH', 'USERPROFILE', 'TEMP', 'TMP',
423
+ ];
424
+
425
+ function envCodexArcane({ plataforma = process.platform, env = process.env } = {}) {
426
+ if (plataforma !== 'win32') return null;
427
+ const pares = [];
428
+ for (const nome of CODEX_ENV_WINDOWS) {
429
+ const chave = Object.keys(env).find(k => k.toLowerCase() === nome.toLowerCase());
430
+ const valor = chave ? env[chave] : '';
431
+ if (!valor || valor.includes("'") || /[\r\n]/.test(valor)) continue;
432
+ pares.push(`${nome} = '${valor}'`); // string literal do TOML: barra invertida sem escape
433
+ }
434
+ return pares.length ? `env = { ${pares.join(', ')} }` : null;
435
+ }
436
+
437
+ function blocoCodexArcane(pin, opcoes) {
438
+ const env = envCodexArcane(opcoes);
417
439
  return [
418
440
  '[mcp_servers.arcane]',
419
441
  'command = "npx"',
420
442
  `args = ["-y", "${pin}"]`,
421
443
  '# Primeira abertura baixa o pacote (ate 1-2 min no Windows); o padrao do Codex sao 10s.',
422
444
  `startup_timeout_sec = ${CODEX_MCP_STARTUP_SEC}`,
445
+ ...(env ? ['# Codex no Windows abre o MCP sem as variaveis basicas do sistema; sem elas nao ha DNS.', env] : []),
423
446
  '',
424
447
  ].join('\n');
425
448
  }
426
449
 
427
450
  // Baixa o pacote do conteudo ao vivo com o MESMO nome que o registro usa (o cache do
428
- // npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.4.0` sao caches diferentes).
451
+ // npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.4.1` sao caches diferentes).
452
+ // `npx` no Windows e um .cmd: sem shell o Node recusa (EINVAL) e com `shell: true` o Node 24
453
+ // imprime um DeprecationWarning na tela do aluno (DEP0190). Chamar o cmd.exe direto, sem shell.
454
+ function comandoNpx(args) {
455
+ if (process.platform !== 'win32') return { cmd: 'npx', args, opts: {} };
456
+ return {
457
+ cmd: process.env.ComSpec || 'cmd.exe',
458
+ args: ['/d', '/s', '/c', `npx ${args.join(' ')}`],
459
+ opts: { windowsVerbatimArguments: true },
460
+ };
461
+ }
462
+
429
463
  function aquecerArcaneMcp() {
430
464
  if (process.env.NODE_ENV === 'test' && process.env.AUROQ_SKIP_AUTH === '1') return true;
431
465
  try {
432
- execFileSync('npx', ['-y', ARCANE_MCP_PIN, 'whoami'], {
433
- stdio: 'pipe', timeout: 240000, shell: process.platform === 'win32',
434
- });
466
+ const c = comandoNpx(['-y', ARCANE_MCP_PIN, 'whoami']);
467
+ execFileSync(c.cmd, c.args, { stdio: 'pipe', timeout: 240000, ...c.opts });
435
468
  return true;
436
469
  } catch {
437
470
  return false;
@@ -456,9 +489,8 @@ function medirArranqueArcaneMcp(pin, limiteMs = 180000) {
456
489
  };
457
490
  const timer = setTimeout(() => fecha(null), limiteMs);
458
491
  try {
459
- processo = spawn('npx', ['-y', pin], {
460
- stdio: ['pipe', 'pipe', 'pipe'], shell: process.platform === 'win32',
461
- });
492
+ const c = comandoNpx(['-y', pin]);
493
+ processo = spawn(c.cmd, c.args, { stdio: ['pipe', 'pipe', 'pipe'], ...c.opts });
462
494
  } catch {
463
495
  clearTimeout(timer);
464
496
  resolve(null);
@@ -1386,3 +1418,5 @@ if (command === 'init' || command === 'install') {
1386
1418
  log(`${DIM}Uso: npx auroq-os init${RESET}`);
1387
1419
  log('');
1388
1420
  }
1421
+
1422
+ if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane };
@@ -38,11 +38,13 @@ function appEnxergaMotor({ homeDir, pathAtual = '', caminhoMotor = '', plataform
38
38
  const partes = String(pathAtual).split(plataforma === 'win32' ? ';' : ':').filter(Boolean);
39
39
 
40
40
  if (plataforma === 'win32') {
41
- const temAuroq = partes.some((p) => /auroq/i.test(p));
41
+ // No Windows o caminho e da conta do usuario, nao da janela: o que vale aqui vale
42
+ // pro icone. Aluno com Node proprio (sem o motor de bolso) nao e defeito — acusar
43
+ // isso mandava gente com tudo funcionando "rodar o instalador de novo" (04/09).
42
44
  return {
43
- visivel: partes.length > 0,
45
+ visivel: partes.length > 0 || Boolean(caminhoMotor),
44
46
  perfisSemBloco: [],
45
- motivo: temAuroq ? '' : 'O motor esta valendo nesta janela.',
47
+ motivo: (partes.length > 0 || caminhoMotor) ? '' : 'Nenhum motor no caminho desta conta.',
46
48
  };
47
49
  }
48
50
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auroq-os",
3
- "version": "2.4.15",
3
+ "version": "2.4.17",
4
4
  "description": "Auroq OS — Sistema Operacional de IA para Experts",
5
5
  "bin": {
6
6
  "auroq-os": "bin/auroq-os.js"