auroq-os 2.4.18 → 2.4.19
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.
- package/.auroq-core/core-config.yaml +1 -1
- package/CHANGELOG.md +11 -0
- package/bin/auroq-os.js +33 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.19] — 2026-09-04
|
|
4
|
+
|
|
5
|
+
### O npx guarda cache por ambiente — o Codex abria "a frio" mesmo depois de aquecido
|
|
6
|
+
Medido em Windows limpo: com o pacote ja baixado no PowerShell (2s), a primeira abertura com o
|
|
7
|
+
ambiente que o Codex da ao MCP ainda levava 45-53s. Cada ambiente tem o seu cache. E o que
|
|
8
|
+
explica a aluna ver timeout (30s) ontem e "ferramenta indisponivel" hoje, com o `doctor` limpo.
|
|
9
|
+
- `init`, `update` e `register-mcp` aquecem os DOIS ambientes no Windows: o do terminal e o
|
|
10
|
+
do Codex (minimo + variaveis do registro).
|
|
11
|
+
- O `doctor` ja abria "como o Codex abre" (2.4.18); agora esse passo usa exatamente o mesmo
|
|
12
|
+
ambiente do aquecimento, entao ele tambem prepara a maquina.
|
|
13
|
+
|
|
3
14
|
## [2.4.18] — 2026-09-04
|
|
4
15
|
|
|
5
16
|
### Doctor faz o trabalho do suporte numa tela so (Codex)
|
package/bin/auroq-os.js
CHANGED
|
@@ -452,6 +452,9 @@ async function runDoctor(targetDir) {
|
|
|
452
452
|
// pacote, (3) o doctor mede o arranque de verdade em vez de so olhar o registro.
|
|
453
453
|
const ARCANE_MCP_PIN = 'arcane-mcp@0.4.1';
|
|
454
454
|
const CODEX_MCP_STARTUP_SEC = 120;
|
|
455
|
+
const CODEX_ENV_MINIMO = ['PATH', 'PATHEXT', 'USERNAME', 'USERDOMAIN', 'USERPROFILE', 'TEMP', 'TMP',
|
|
456
|
+
'HOME', 'LOGNAME', 'SHELL', 'TERM', 'USER'];
|
|
457
|
+
|
|
455
458
|
const MCP_ARRANQUE_LIMITE_MS = 9000; // abaixo do que o Codex tolera (10s)
|
|
456
459
|
|
|
457
460
|
// No Windows o Codex abre o MCP com um ambiente minimo (PATH, USERNAME, USERPROFILE,
|
|
@@ -501,15 +504,39 @@ function comandoNpx(args) {
|
|
|
501
504
|
};
|
|
502
505
|
}
|
|
503
506
|
|
|
507
|
+
// O ambiente que o Codex da ao MCP no Windows (minimo + o env do registro). Medido em
|
|
508
|
+
// 04/09/2026 (windows-latest): o npx guarda cache POR AMBIENTE — aquecido no PowerShell
|
|
509
|
+
// (2s), a primeira abertura pelo Codex ainda levava 45-53s. Por isso aquecemos os dois.
|
|
510
|
+
function envComoCodex({ plataforma = process.platform, env = process.env } = {}) {
|
|
511
|
+
const base = {};
|
|
512
|
+
for (const k of Object.keys(env)) {
|
|
513
|
+
if (CODEX_ENV_MINIMO.some(n => n.toLowerCase() === k.toLowerCase())) base[k] = env[k];
|
|
514
|
+
}
|
|
515
|
+
if (plataforma === 'win32') {
|
|
516
|
+
for (const nome of CODEX_ENV_WINDOWS) {
|
|
517
|
+
const chave = Object.keys(env).find(k => k.toLowerCase() === nome.toLowerCase());
|
|
518
|
+
if (chave && env[chave]) base[nome] = env[chave];
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return base;
|
|
522
|
+
}
|
|
523
|
+
|
|
504
524
|
function aquecerArcaneMcp() {
|
|
505
525
|
if (process.env.NODE_ENV === 'test' && process.env.AUROQ_SKIP_AUTH === '1') return true;
|
|
526
|
+
const c = comandoNpx(['-y', ARCANE_MCP_PIN, 'whoami']);
|
|
506
527
|
try {
|
|
507
|
-
const c = comandoNpx(['-y', ARCANE_MCP_PIN, 'whoami']);
|
|
508
528
|
execFileSync(c.cmd, c.args, { stdio: 'pipe', timeout: 240000, ...c.opts });
|
|
509
|
-
return true;
|
|
510
529
|
} catch {
|
|
511
530
|
return false;
|
|
512
531
|
}
|
|
532
|
+
if (process.platform === 'win32') {
|
|
533
|
+
try {
|
|
534
|
+
execFileSync(c.cmd, c.args, { stdio: 'pipe', timeout: 240000, env: envComoCodex(), ...c.opts });
|
|
535
|
+
} catch {
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return true;
|
|
513
540
|
}
|
|
514
541
|
|
|
515
542
|
// Abre o conteudo ao vivo do jeito que o Codex/Claude Code abrem e mede quanto tempo
|
|
@@ -578,8 +605,6 @@ async function guardarBootstrapLocal(targetDir, file, dst, dstExists) {
|
|
|
578
605
|
// abre o MCP com o mesmo ambiente minimo que o Codex usa no Windows (openai/codex#4180)
|
|
579
606
|
// mais o env do registro, lista as ferramentas e chama uma. Se aqui funciona e no
|
|
580
607
|
// Codex nao, o problema e do lado do Codex — e o log dele entra no relatorio.
|
|
581
|
-
const CODEX_ENV_MINIMO = ['PATH', 'PATHEXT', 'USERNAME', 'USERDOMAIN', 'USERPROFILE', 'TEMP', 'TMP',
|
|
582
|
-
'HOME', 'LOGNAME', 'SHELL', 'TERM', 'USER'];
|
|
583
608
|
|
|
584
609
|
function lerBlocoArcane(toml) {
|
|
585
610
|
const m = String(toml || '').match(/\[mcp_servers\.arcane\][\s\S]*?(?=\n\[|$(?![\s\S]))/);
|
|
@@ -601,10 +626,7 @@ function lerEnvDoBloco(bloco) {
|
|
|
601
626
|
function abrirComoCodex(pin, envBloco, limiteMs = 120000) {
|
|
602
627
|
return new Promise((resolve) => {
|
|
603
628
|
const { spawn } = require('child_process');
|
|
604
|
-
const env =
|
|
605
|
-
for (const k of Object.keys(process.env)) {
|
|
606
|
-
if (CODEX_ENV_MINIMO.some(n => n.toLowerCase() === k.toLowerCase())) env[k] = process.env[k];
|
|
607
|
-
}
|
|
629
|
+
const env = envComoCodex();
|
|
608
630
|
Object.assign(env, envBloco || {});
|
|
609
631
|
const c = comandoNpx(['-y', pin]);
|
|
610
632
|
const t0 = Date.now();
|
|
@@ -1157,7 +1179,7 @@ async function init({ pasta = null } = {}) {
|
|
|
1157
1179
|
}
|
|
1158
1180
|
await patchEnableAllProjectMcpServers(targetDir);
|
|
1159
1181
|
await writeArcaneMcpConfig(targetDir);
|
|
1160
|
-
step('Preparando o conteudo ao vivo (baixa uma vez; pode levar 1-
|
|
1182
|
+
step('Preparando o conteudo ao vivo (baixa uma vez; no Windows prepara tambem pro Codex; pode levar 1-3 min)...');
|
|
1161
1183
|
if (aquecerArcaneMcp()) success('Conteudo ao vivo pronto pra abrir rapido');
|
|
1162
1184
|
else warn('Nao consegui baixar o conteudo ao vivo agora — a primeira abertura vai demorar mais');
|
|
1163
1185
|
|
|
@@ -1435,7 +1457,7 @@ async function clone(repoArg) {
|
|
|
1435
1457
|
}
|
|
1436
1458
|
|
|
1437
1459
|
await writeArcaneMcpConfig(destDir);
|
|
1438
|
-
step('Preparando o conteudo ao vivo (baixa uma vez; pode levar 1-
|
|
1460
|
+
step('Preparando o conteudo ao vivo (baixa uma vez; no Windows prepara tambem pro Codex; pode levar 1-3 min)...');
|
|
1439
1461
|
if (aquecerArcaneMcp()) success('Conteudo ao vivo pronto pra abrir rapido');
|
|
1440
1462
|
else warn('Nao consegui baixar o conteudo ao vivo agora — a primeira abertura vai demorar mais');
|
|
1441
1463
|
|
|
@@ -1596,4 +1618,4 @@ if (command === 'init' || command === 'install') {
|
|
|
1596
1618
|
log('');
|
|
1597
1619
|
}
|
|
1598
1620
|
|
|
1599
|
-
if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane, lerBlocoArcane, lerEnvDoBloco, limparArcaneDoGlobal };
|
|
1621
|
+
if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane, lerBlocoArcane, lerEnvDoBloco, limparArcaneDoGlobal, envComoCodex };
|