auroq-os 2.6.1 → 2.6.3

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.6.1
4
+ version: 2.6.3
5
5
  installedAt: '2026-03-16'
6
6
 
7
7
  ide:
@@ -1,8 +1,8 @@
1
1
  # Clone Euriler
2
2
 
3
- Clone Euriler — mentor da Arcane, modo consultor estratégico, ao vivo.
3
+ Clone Euriler — o clone do Euriler (não ele em pessoa), mentor da Arcane no modo consultor estratégico.
4
4
 
5
- Todo conteúdo deste agente vem pelo MCP `arcane` (catálogo `arcane-pack`). Chame a tool `squad_ativar` com recurso_id `euriler-mentor-clone-v4`; o índice devolvido mostra os tópicos, e as tools `squad_passo` e `squad_conhecimento` trazem cada parte. Nunca procurar arquivo local deste agente; se a tool falhar, mostrar a mensagem e parar — não improvisar de memória.
5
+ A primeira coisa desta conversa é chamar a tool `squad_ativar` com recurso_id `euriler-mentor-clone-v4` — antes de responder qualquer coisa, inclusive perguntas diretas do aluno, e antes de abrir arquivos ou configurações. Todo conteúdo deste agente vem pelo MCP `arcane` (catálogo `arcane-pack`); o índice devolvido mostra os tópicos, e as tools `squad_passo` e `squad_conhecimento` trazem cada parte. Nunca procurar arquivo local deste agente; se a tool falhar, mostrar a mensagem e parar — não improvisar de memória.
6
6
 
7
7
  Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas) antes de qualquer outra coisa — é como o aluno vê que a licença dele foi conferida agora.
8
8
 
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## 2.6.3 — 2026-09-29
2
+
3
+ ### Codex no Windows volta a ler e gravar na pasta (EMB-063)
4
+
5
+ - Desde o Codex 0.157 (25/09) o sandbox padrao do Windows ("elevated") refaz as permissoes da pasta antes de cada comando e aborta tudo no primeiro erro: `helper_unknown_error: setup refresh had errors`. O agente (Clone incluido) nao le nem grava nada; o MCP conecta normal porque nao passa pelo sandbox. Bug aberto na OpenAI ate o 0.159 (openai/codex#48517, #48979, #49017, #49234; dono da pasta #46441).
6
+ - `register-mcp`, `instalar`, `manutencao` e `clone` gravam no `.codex/config.toml` da pasta `[windows] sandbox = "unelevated"`: o modo do proprio Codex que aplica a mesma regra (escreve so na pasta do negocio) sem o passo que quebra. Escolha que a pasta ja tinha fica. Fora do Windows o Codex ignora a chave.
7
+ - No Windows grava tambem `[features] daemon_auto_start = false`: o servidor de fundo que o Codex 0.157 liga por padrao abre janelas pretas vazias a cada hook e comando (#47179, #44768, #48074).
8
+ - `doctor` no Windows mostra o modo do sandbox, ajusta a pasta se estiver no padrao e traduz a ultima falha do log `~/.codex/.sandbox`.
9
+ - Hooks de fim de turno do Codex (`Stop`, `SubagentStop`) passam de 3 s para 10 s: Node frio + janela de console passavam de 3 s e o aluno via "Hook failed: timed out after 3s". `SessionEnd`/`Interrupt` seguem em 3 s; Claude Code sem mudanca.
10
+ - Workflow manual `codex-windows-sandbox.yml` prova no windows-latest com o Codex 0.157.0.
11
+ - Mantem `arcane-mcp@0.7.0`.
12
+
13
+ ## 2.6.2 — 2026-09-24
14
+
15
+ - Atalho `/euriler` (e a skill do Codex): o Clone Euriler se apresenta como o clone do Euriler, nunca como ele em pessoa ou "ao vivo", e chama `squad_ativar` antes de responder qualquer coisa, inclusive perguntas diretas do aluno, e antes de abrir arquivos ou configurações. Sem isso, o modelo às vezes respondia como assistente genérico antes de o clone ser ativado.
16
+ - Ops: o Companion Externo instala o `gog` pelo próprio Companion, sem download manual (auroq-core 2.3.14).
17
+ - README e ajuda do `historico`: a captura só vale para quem marcou "sim" na pergunta da plataforma (desmarcada = não); para não guardar não é preciso desligar o MCP nem os hooks. Texto anterior à trava de consentimento de 18/09.
18
+ - Mantém `arcane-mcp@0.7.0`. Instaladores do repositório preparados para 2.6.2.
19
+
1
20
  ## 2.6.1 — 2026-09-21
2
21
 
3
22
  - Adiciona `/squad-apps-auroq` e a skill Codex correspondente para criar ou continuar aplicativos pelo conteudo licenciado ao vivo. A abertura, o metodo e a preparacao dos arquivos chegam pelo MCP; nao sao duplicados no motor.
package/README.md CHANGED
@@ -127,9 +127,12 @@ proprio pacote.
127
127
  ## Historico de uso (AHI)
128
128
 
129
129
  `auroq-os historico status` mostra captura comprovada, fila pendente, ultimo ACK,
130
- exclusoes e problemas. O registro comeca quando a sessao usa o MCP Arcane, com
131
- conta autenticada, licenca validada pelo servidor e captura habilitada. Desligar
132
- esse MCP interrompe a captura. Instalar ou apenas abrir o projeto nao prova captura.
130
+ exclusoes e problemas. So ha registro para quem marcou "sim" na pergunta unica da
131
+ plataforma Arcane (caixa desmarcada = nao), e so quando a sessao usa o MCP Arcane
132
+ com conta autenticada e licenca validada pelo servidor. Para nao guardar, basta
133
+ deixar a caixa desmarcada; quem ja marcou pode tirar a autorizacao pelo proprio
134
+ agente (ele registra o "nao") ou pelo e-mail euriler@arka.education. Nao e preciso
135
+ desligar o MCP nem os hooks. Instalar ou apenas abrir o projeto nao prova captura.
133
136
 
134
137
  O adaptador `ahi-hooks-v2` registra mensagens e entradas/saidas de ferramentas
135
138
  que os hooks visiveis do Claude Code/Codex disponibilizam. A cobertura e parcial:
@@ -238,13 +241,13 @@ agents/ → Seu exercito (companion, workers, minds, squads)
238
241
 
239
242
  ## Observabilidade e integridade do motor
240
243
 
241
- Apos publicacao, `npx -y auroq-os@2.6.1 doctor` mostra a fila local segura e os comandos pinados de
242
- manutencao/diagnostico. `npx -y auroq-os@2.6.1 manutencao` preserva o caminho existente
244
+ Apos publicacao, `npx -y auroq-os@2.6.3 doctor` mostra a fila local segura e os comandos pinados de
245
+ manutencao/diagnostico. `npx -y auroq-os@2.6.3 manutencao` preserva o caminho existente
243
246
  de consentimento legado, studentFiles, customizacoes e dados do negocio. Nao ha
244
247
  migracao forcada. O registro MCP aponta para `arcane-mcp@0.7.0` — o pin mora no campo
245
248
  `arcaneMcpPin` do package.json (fonte unica; o servidor le o mesmo campo no npm).
246
249
  `npm run release:verify` recusa publicar com um pin que o npm nao resolva.
247
- Os instaladores do repositorio ficam preparados para 2.6.1; as copias publicas so recebem
250
+ Os instaladores do repositorio ficam preparados para 2.6.3; as copias publicas so recebem
248
251
  a versao apos os gates nativos e a verificacao do tarball publicado.
249
252
  O pacote inclui `lib/runtime-integrity.json`: inventario SHA-256 gerado depois da montagem da casca, verificavel com `npm run integrity:verify` dentro do pacote extraido. Ele comprova consistencia do conteudo; nao e uma assinatura de autoria.
250
253
 
package/bin/auroq-os.js CHANGED
@@ -442,6 +442,7 @@ const ETIQUETAS_DOCTOR = [
442
442
  ['Confira sua internet', 'servidor-fora'],
443
443
  ['whoami', 'mcp-nao-abre'],
444
444
  ['tela INTEIRA', 'codex-sem-conteudo'],
445
+ ['setup refresh had errors', 'codex-sandbox-windows'],
445
446
  ];
446
447
  function rotulo(pendencia) {
447
448
  const texto = String(pendencia || '');
@@ -714,6 +715,28 @@ async function runDoctor(targetDir) {
714
715
  }
715
716
  if (r.stderr) for (const l of r.stderr.split('\n').slice(-4)) log(` ${DIM} stderr: ${l.slice(0, 160)}${RESET}`);
716
717
 
718
+ // EMB-063: sandbox do Codex no Windows. "setup refresh had errors" = modo elevated.
719
+ if (process.platform === 'win32') {
720
+ const cw = require('../lib/codex-windows.cjs');
721
+ let modo = cw.modoDoSandbox(tomlTexto);
722
+ if (!modo) {
723
+ try {
724
+ await fs.writeFile(tomlPath, cw.ajustarConfigCodex(tomlTexto, { semJanelas: true }));
725
+ modo = 'unelevated';
726
+ warn('Codex estava no sandbox padrao, que no Windows da "setup refresh had errors". Ajustei esta pasta; feche e abra o Codex.');
727
+ } catch (e) {
728
+ warn(`Nao consegui ajustar o sandbox do Codex (${e.code || e.message})`);
729
+ }
730
+ }
731
+ (modo === 'unelevated' ? success : warn)(`Sandbox do Codex nesta pasta: ${modo || 'elevated (padrao)'}`);
732
+ const d = cw.diagnosticoDoLog();
733
+ if (d.arquivo && d.causa) {
734
+ warn(`Log do sandbox (${d.arquivo}): ${d.causa === 'dono-da-pasta' ? 'o Windows negou permissao na pasta' : d.causa === 'caminho-longo' ? 'caminho longo demais no Codex' : 'erro do sandbox'}`);
735
+ for (const l of d.linhas.slice(-3)) log(` ${DIM} ${l.slice(0, 160)}${RESET}`);
736
+ }
737
+ if (modo !== 'unelevated') problemas.push(`Codex no Windows: esta pasta pede o sandbox "${modo || 'elevated'}", que da "setup refresh had errors". Troque para "unelevated" em .codex/config.toml ([windows] sandbox) ou mande este print pro suporte.`);
738
+ }
739
+
717
740
  const rastro = await rastroDoCodex();
718
741
  if (rastro.length) {
719
742
  log(` ${DIM}Ultimas linhas do log do Codex sobre o arcane:${RESET}`);
@@ -1187,7 +1210,9 @@ async function acertarVersaoNoRegistro(targetDir, versao) {
1187
1210
  const novoDentro = PAR_VERSAO_TOML.test(dentro) ? dentro.replace(PAR_VERSAO_TOML, par) : (dentro ? `${dentro}, ${par}` : par);
1188
1211
  blocoNovo = bloco.replace(linha[0], `env = { ${novoDentro} }`);
1189
1212
  } else {
1190
- blocoNovo = `${bloco.replace(/\s*$/, '')}\nenv = { ${par} }\n`;
1213
+ // O que vinha depois do bloco (linha em branco antes da proxima tabela, ou nada) fica.
1214
+ const depoisDoBloco = bloco.match(/\s*$/)[0] || (toml.endsWith(bloco) ? '\n' : '');
1215
+ blocoNovo = `${bloco.replace(/\s*$/, '')}\nenv = { ${par} }${depoisDoBloco}`;
1191
1216
  }
1192
1217
  novo = toml.replace(bloco, blocoNovo);
1193
1218
  }
@@ -1256,6 +1281,15 @@ async function writeArcaneMcpConfig(targetDir, { versaoMotor = null } = {}) {
1256
1281
  const next = (toml.trimEnd() ? `${toml.trimEnd()}\n\n` : '') + block;
1257
1282
  await fs.writeFile(tomlPath, next);
1258
1283
  }
1284
+ // Codex no Windows (EMB-063): sandbox "unelevated" e sem servidor de fundo abrindo janela preta.
1285
+ // Escolha que a pasta ja tem (aluno/suporte) fica; fora do Windows o Codex ignora [windows].
1286
+ try {
1287
+ const atual = await fs.readFile(tomlPath, 'utf8');
1288
+ const ajustado = require('../lib/codex-windows.cjs').ajustarConfigCodex(atual, { semJanelas: process.platform === 'win32' });
1289
+ if (ajustado !== atual) await fs.writeFile(tomlPath, ajustado);
1290
+ } catch (e) {
1291
+ warn(`Nao consegui ajustar o sandbox do Codex em .codex/config.toml (${e.code || e.message}).`);
1292
+ }
1259
1293
  // Codex reads its own native hooks.json; do not alter its trust decisions or other hooks.
1260
1294
  const codexHooksPath = path.join(targetDir, '.codex', 'hooks.json');
1261
1295
  try {
@@ -2360,7 +2394,7 @@ if (['init', 'install', 'update'].includes(command)) {
2360
2394
  log(` ${CYAN}doctor${RESET} Diagnostico: arquivos, Node, MCP arcane, login e servidor`);
2361
2395
  log(` ${CYAN}register-mcp${RESET} Reescrever o registro do conteudo ao vivo (MCP arcane) no projeto`);
2362
2396
  log(` ${CYAN}sync-codex${RESET} Gerar e verificar as skills locais do Codex CLI ($nome)`);
2363
- log(` ${CYAN}historico${RESET} Estado da captura do trabalho (ligada com o MCP Arcane)`);
2397
+ log(` ${CYAN}historico${RESET} Estado da captura do trabalho (so com o "sim" dado na plataforma)`);
2364
2398
  log(` ${CYAN}conectar-1password${RESET} Conectar o 1Password CLI (token lido do Ctrl+C, nunca digitado)`);
2365
2399
  log('');
2366
2400
  log(`${DIM}Primeira instalacao: https://arcane.arka.education/auroq${RESET}`);
@@ -589,7 +589,7 @@ function Invoke-AuroqLogin {
589
589
  # sucesso. Usado como pergunta de sim/nao, ele dizia "voce ja estava logado"
590
590
  # pra quem nunca logou, pulava o portao e deixava a conta sem acesso chegar ate
591
591
  # a criacao da pasta.
592
- & (Get-AuroqNpx) -y auroq-os@2.6.1 check-access
592
+ & (Get-AuroqNpx) -y auroq-os@2.6.3 check-access
593
593
  if ($LASTEXITCODE -ne 0) {
594
594
  Write-AuroqLog 'login' 'recusado'
595
595
  Write-Host ''
@@ -677,7 +677,7 @@ function Invoke-AuroqInit {
677
677
  if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Sistema - seria montado aqui'; return }
678
678
 
679
679
  Set-Location $script:AuroqPastaAlvo
680
- & (Get-AuroqNpx) -y auroq-os@2.6.1 instalar
680
+ & (Get-AuroqNpx) -y auroq-os@2.6.3 instalar
681
681
  if ($LASTEXITCODE -ne 0) {
682
682
  Write-AuroqLog 'init' 'falhou'
683
683
  Write-AuroqErro 'A montagem do sistema parou no meio.' 'Rode o mesmo comando de novo. Se repetir, mande pro suporte o arquivo install.log da pasta .auroq.'
@@ -219,9 +219,9 @@ auroq_tem_terminal() {
219
219
  # recebem pedaco do script no lugar da resposta dele.
220
220
  auroq_npx_aluno() {
221
221
  if [ -t 0 ]; then
222
- npx -y auroq-os@2.6.1 "$@"
222
+ npx -y auroq-os@2.6.3 "$@"
223
223
  else
224
- npx -y auroq-os@2.6.1 "$@" < /dev/tty
224
+ npx -y auroq-os@2.6.3 "$@" < /dev/tty
225
225
  fi
226
226
  }
227
227
 
@@ -2,6 +2,14 @@
2
2
  const path = require('node:path');
3
3
  const TERMINAL = ['Stop', 'SubagentStop', 'StopFailure', 'SessionEnd'];
4
4
  const EVENTS = ['SessionStart', 'UserPromptSubmit', 'PreToolUse', 'PostToolUse', 'Stop', 'SubagentStop', 'SessionEnd'];
5
+ // Codex no Windows (EMB-063): o Node frio + a janela de console que o Codex 0.157 abre para cada
6
+ // hook passam de 3 s e o aluno ve "Hook failed: timed out after 3s" no fim de toda resposta. O
7
+ // hook so grava na fila local e sai; 10 s e folga, nao espera. SessionEnd/Interrupt ficam em 3.
8
+ const CODEX_FIM_DE_TURNO = ['Stop', 'SubagentStop'];
9
+ function timeoutDoHook(event, host) {
10
+ if (host === 'codex' && CODEX_FIM_DE_TURNO.includes(event)) return 10;
11
+ return [...TERMINAL, 'Interrupt'].includes(event) ? 3 : 10;
12
+ }
5
13
  function mergeHooks(settings, project, host) {
6
14
  const original = JSON.stringify(settings);
7
15
  if (!settings.hooks || typeof settings.hooks !== 'object' || Array.isArray(settings.hooks)) settings.hooks = {};
@@ -12,7 +20,7 @@ function mergeHooks(settings, project, host) {
12
20
  for (const event of events) {
13
21
  const groups = Array.isArray(settings.hooks[event]) ? settings.hooks[event] : [];
14
22
  const kept = groups.map(group => ({ ...group, hooks: (Array.isArray(group.hooks) ? group.hooks : []).filter(h => !String(h.command || '').includes('ahi-capture.cjs')) })).filter(g => g.hooks.length);
15
- kept.push({ matcher: '', hooks: [{ type: 'command', command: `node "${script}" --host ${host}`, ...(TERMINAL.includes(event) ? {} : { async: true }), timeout: [...TERMINAL, 'Interrupt'].includes(event) ? 3 : 10 }] });
23
+ kept.push({ matcher: '', hooks: [{ type: 'command', command: `node "${script}" --host ${host}`, ...(TERMINAL.includes(event) ? {} : { async: true }), timeout: timeoutDoHook(event, host) }] });
16
24
  settings.hooks[event] = kept;
17
25
  }
18
26
  return JSON.stringify(settings) !== original;
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+ /**
3
+ * Codex no Windows: "helper_unknown_error: setup refresh had errors" (EMB-063).
4
+ *
5
+ * Desde o Codex 0.157 (25/09/2026) o sandbox padrao do Windows ("elevated") refaz, antes de
6
+ * CADA comando, as permissoes da pasta para as contas do sandbox ("setup refresh"). Esse
7
+ * passo roda sem administrador e aborta tudo no primeiro erro de permissao: pasta com dono
8
+ * BUILTIN\Administradores (criada num PowerShell de administrador), caminho longo no runtime
9
+ * do Codex, provisionamento que falha. Sintoma: o agente nao le nem grava nada na pasta; o MCP
10
+ * continua conectando (ele nao passa pelo sandbox). O Claude Code nao usa esse sandbox, por isso
11
+ * na mesma pasta ele funciona. Referencias: openai/codex#31414, #46441, #46388, #47892, #48517,
12
+ * #48979, #49017, #49234 (abertas no 0.159).
13
+ *
14
+ * O modo "unelevated" do proprio Codex aplica a mesma regra (escreve so na pasta do projeto),
15
+ * sem o passo que quebra, e ignora a falha de uma permissao isolada. Este modulo grava esse modo
16
+ * no .codex/config.toml da pasta e le o log do sandbox para o doctor dizer a causa.
17
+ */
18
+ const fs = require('fs');
19
+ const os = require('os');
20
+ const path = require('path');
21
+
22
+ /** Modo do sandbox num config.toml do Codex: 'elevated' | 'unelevated' | 'mxc' | null (padrao = elevated). */
23
+ function modoDoSandbox(toml) {
24
+ const texto = String(toml || '');
25
+ const tabela = texto.match(/^\[windows\][^\n]*\n([\s\S]*?)(?=^\[|(?![\s\S]))/m);
26
+ const dentro = tabela ? tabela[1].match(/^\s*sandbox\s*=\s*["']([a-z]+)["']/m) : null;
27
+ if (dentro) return dentro[1];
28
+ const pontilhado = texto.match(/^\s*windows\.sandbox\s*=\s*["']([a-z]+)["']/m);
29
+ return pontilhado ? pontilhado[1] : null;
30
+ }
31
+
32
+ /**
33
+ * Config do Codex desta pasta com o sandbox que funciona nessas maquinas.
34
+ * - [windows] sandbox = "unelevated" (so se a pasta ainda nao escolheu um modo: escolha do
35
+ * aluno ou do suporte fica). Fora do Windows o Codex ignora a chave.
36
+ * - [features] daemon_auto_start = false quando `semJanelas`: no 0.157 o Codex passou a ligar um
37
+ * servidor de fundo por padrao (#47179) e, no Windows, ele abre uma janela preta vazia para
38
+ * cada hook e comando (#44768, #48074). Mesma regra: valor que ja existe fica.
39
+ * O resto do arquivo (o registro do arcane, o que for do aluno) fica como esta.
40
+ */
41
+ function ajustarConfigCodex(toml, { semJanelas = false } = {}) {
42
+ let texto = String(toml || '');
43
+ const garantir = (tabela, chave, valorToml) => {
44
+ if (new RegExp(`^\\s*${tabela}\\.${chave}\\s*=`, 'm').test(texto)) return; // pontilhado na raiz
45
+ const m = texto.match(new RegExp(`^\\[${tabela}\\][^\\n]*\\n?`, 'm'));
46
+ if (!m) {
47
+ texto = `${texto.replace(/\s*$/, '')}${texto.trim() ? '\n\n' : ''}[${tabela}]\n${chave} = ${valorToml}\n`;
48
+ return;
49
+ }
50
+ const inicio = m.index + m[0].length;
51
+ const resto = texto.slice(inicio);
52
+ const fim = resto.search(/^\[/m);
53
+ const corpo = fim === -1 ? resto : resto.slice(0, fim);
54
+ if (new RegExp(`^\\s*${chave}\\s*=`, 'm').test(corpo)) return;
55
+ texto = `${texto.slice(0, inicio)}${m[0].endsWith('\n') ? '' : '\n'}${chave} = ${valorToml}\n${resto}`;
56
+ };
57
+ garantir('windows', 'sandbox', '"unelevated"');
58
+ if (semJanelas) garantir('features', 'daemon_auto_start', 'false');
59
+ return texto.replace(/\s*$/, '\n');
60
+ }
61
+
62
+ /**
63
+ * Le as ultimas linhas de erro do log do sandbox do Codex e diz a causa em linguagem de gente.
64
+ * causa: 'dono-da-pasta' | 'caminho-longo' | 'outro' | null (sem erro no log).
65
+ */
66
+ function causaNoLog(texto) {
67
+ const linhas = String(texto || '').split(/\r?\n/).filter(l => /fail|error|denied/i.test(l));
68
+ const ultimas = linhas.slice(-6);
69
+ if (!ultimas.length) return { causa: null, linhas: [] };
70
+ const junto = ultimas.join('\n');
71
+ let causa = 'outro';
72
+ if (/SetNamedSecurityInfoW failed[^\n]*:\s*5\b|(write|deny) ACE (grant )?failed|os error 5\b/i.test(junto)) causa = 'dono-da-pasta';
73
+ else if (/runtime read\/execute validation failed|CreateFileW failed|cua_node|long path/i.test(junto)) causa = 'caminho-longo';
74
+ return { causa, linhas: ultimas.map(l => l.trim().slice(0, 300)) };
75
+ }
76
+
77
+ /** O log mais recente em <CODEX_HOME>/.sandbox (sandbox*.log). */
78
+ function logMaisRecente(codexHome = process.env.CODEX_HOME || path.join(os.homedir(), '.codex')) {
79
+ const dir = path.join(codexHome, '.sandbox');
80
+ let nomes = [];
81
+ try { nomes = fs.readdirSync(dir).filter(n => /^sandbox.*\.log$/i.test(n)); } catch { return null; }
82
+ if (!nomes.length) return null;
83
+ return nomes.map(n => path.join(dir, n)).map(f => ({ f, t: fs.statSync(f).mtimeMs })).sort((a, b) => b.t - a.t)[0].f;
84
+ }
85
+
86
+ function diagnosticoDoLog(codexHome) {
87
+ const arquivo = logMaisRecente(codexHome);
88
+ if (!arquivo) return { arquivo: null, causa: null, linhas: [] };
89
+ try {
90
+ const st = fs.statSync(arquivo);
91
+ const tam = Math.min(64 * 1024, st.size);
92
+ const buf = Buffer.alloc(tam);
93
+ const fd = fs.openSync(arquivo, 'r');
94
+ try { fs.readSync(fd, buf, 0, tam, st.size - tam); } finally { fs.closeSync(fd); }
95
+ return { arquivo, ...causaNoLog(buf.toString('utf8')) };
96
+ } catch { return { arquivo, causa: null, linhas: [] }; }
97
+ }
98
+
99
+ module.exports = { ajustarConfigCodex, modoDoSandbox, causaNoLog, logMaisRecente, diagnosticoDoLog };
@@ -2,7 +2,7 @@
2
2
  "schema": 1,
3
3
  "algorithm": "sha256",
4
4
  "scope": "packaged-runtime-and-cascas",
5
- "version": "2.6.1",
5
+ "version": "2.6.3",
6
6
  "files": [
7
7
  {
8
8
  "path": ".auroq-core/constitution.md",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  {
12
12
  "path": ".auroq-core/core-config.yaml",
13
- "sha256": "fc964977b194a117a6d8090a38376d2fd2be49e91eeb3fd8b6014a3cae87542c"
13
+ "sha256": "791b732e0e56651111feeec49d53bf4399bc2590c0c51d7ee2e8f3fd2ac54e24"
14
14
  },
15
15
  {
16
16
  "path": ".auroq-core/core/synapse/context/context-builder.js",
@@ -206,7 +206,7 @@
206
206
  },
207
207
  {
208
208
  "path": "bin/auroq-os.js",
209
- "sha256": "4f26946e3930353bdeb1696c533eeb46daa234019b4b6c86626a47eeb253fcfc"
209
+ "sha256": "167c9c92e3e247cfc61f8b9fcde69deec85debd8938181708d980142b45cef95"
210
210
  },
211
211
  {
212
212
  "path": "lib/ahi/client.mjs",
@@ -218,12 +218,16 @@
218
218
  },
219
219
  {
220
220
  "path": "lib/ahi/install.cjs",
221
- "sha256": "f3a9fec92e64b8624fb45e062b51777788831337dec6a89ce8222d7813baca9d"
221
+ "sha256": "bc06e1dd61bd5bbfe3346d439960b7201b75547b7ed96e25b69d682174f0d696"
222
222
  },
223
223
  {
224
224
  "path": "lib/auth.js",
225
225
  "sha256": "5f1ddefbf2d4b9005e562380b40525e5bf823641e05a7bdb71568e15a5179869"
226
226
  },
227
+ {
228
+ "path": "lib/codex-windows.cjs",
229
+ "sha256": "d6307d0106bad3e69142052d6450cef3f6252544049d3f3340aec55fc99005d1"
230
+ },
227
231
  {
228
232
  "path": "lib/credentials.js",
229
233
  "sha256": "93f810df94db4f9c64e0e48308c10f2696a3af850fe6b9820cb4c4d5cf3e2fd5"
@@ -254,7 +258,7 @@
254
258
  },
255
259
  {
256
260
  "path": "package.json",
257
- "sha256": "849a4fe025989bee5737d2d979ed11c06b468aefa0e323489db792e392ae8e3b"
261
+ "sha256": "d26aeecec853f39b5b0a1c6a78a6a3bafe5ce025e310c6f0fbd3f05e4a7567bf"
258
262
  },
259
263
  {
260
264
  "path": "scripts/build-pack.mjs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auroq-os",
3
- "version": "2.6.1",
3
+ "version": "2.6.3",
4
4
  "arcaneMcpPin": "0.7.0",
5
5
  "description": "Auroq OS — Sistema Operacional de IA para Experts",
6
6
  "bin": {
@@ -19,7 +19,7 @@
19
19
  "auroq:sync:codex:check": "npm run sync:codex:check",
20
20
  "auroq:validate": "npm run validate:hybrid",
21
21
  "validate:hybrid": "node scripts/validate-hybrid.mjs",
22
- "lint": "node --check bin/auroq-os.js && node --check lib/auth.js && node --check lib/diagnostico.js && node --check lib/credentials.js && node --check lib/onepassword.js && node --check lib/supabase.js && node --check scripts/sync-codex-skills.mjs && node --check scripts/validate-hybrid.mjs && node --check scripts/prepack-casca.mjs && node --check scripts/postpack-casca.mjs && node --check scripts/assert-mcp-pin.mjs && node --check lib/telemetry.mjs && node --check scripts/synapse-hashes.mjs && node --check lib/ahi/historico.mjs && node --check .claude/hooks/ahi-capture.cjs && node --check .claude/hooks/ahi/security.cjs && node --check .claude/hooks/ahi/runtime.cjs && node --check .claude/hooks/ahi/worker.cjs && node --check lib/ahi/install.cjs && node --check .claude/hooks/ahi/auth-config.cjs && node --check lib/ahi/client.mjs && node --check scripts/build-pack.mjs && node --check scripts/assert-native-release.mjs && node --check scripts/runtime-integrity.mjs && node --check scripts/pack-state.mjs",
22
+ "lint": "node --check bin/auroq-os.js && node --check lib/auth.js && node --check lib/diagnostico.js && node --check lib/credentials.js && node --check lib/onepassword.js && node --check lib/supabase.js && node --check scripts/sync-codex-skills.mjs && node --check scripts/validate-hybrid.mjs && node --check scripts/prepack-casca.mjs && node --check scripts/postpack-casca.mjs && node --check scripts/assert-mcp-pin.mjs && node --check lib/telemetry.mjs && node --check scripts/synapse-hashes.mjs && node --check lib/ahi/historico.mjs && node --check .claude/hooks/ahi-capture.cjs && node --check .claude/hooks/ahi/security.cjs && node --check .claude/hooks/ahi/runtime.cjs && node --check .claude/hooks/ahi/worker.cjs && node --check lib/ahi/install.cjs && node --check lib/codex-windows.cjs && node --check .claude/hooks/ahi/auth-config.cjs && node --check lib/ahi/client.mjs && node --check scripts/build-pack.mjs && node --check scripts/assert-native-release.mjs && node --check scripts/runtime-integrity.mjs && node --check scripts/pack-state.mjs",
23
23
  "typecheck": "npm run validate:hybrid",
24
24
  "test": "node --test tests/*.test.mjs",
25
25
  "release:verify": "node scripts/assert-mcp-pin.mjs && node scripts/assert-native-release.mjs",