auroq-os 2.5.10 → 2.5.11

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.5.10
4
+ version: 2.5.11
5
5
  installedAt: '2026-03-16'
6
6
 
7
7
  ide:
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 2.5.11 — 2026-09-21
2
+
3
+ ### O diagnostico passa a dizer o que achou (EMB-050)
4
+
5
+ - Sair com 1 no `doctor` nao e mais `INSTALL_FAILED`: agora e `DOCTOR_FINDINGS`. Pendencia encontrada e o diagnostico trabalhando, nao instalacao quebrada — na janela de 20/09 isso gerou 3 alarmes de gravidade maxima para zero instalacoes quebradas.
6
+ - O `doctor` grava o resultado em `~/.auroq/install.log`: `pendencias=N etiqueta,etiqueta` quando acha algo e `ok` quando fecha limpo. As etiquetas sao vocabulario fechado (`arquivos-faltando`, `motor-fora-do-perfil`, `sem-login`, ...) e nunca levam caminho, e-mail, token nem nome de maquina. O suporte pede uma linha: `cat ~/.auroq/install.log`.
7
+ - Registro MCP passa a `arcane-mcp@0.6.1` (publicado no npm em 21/09/2026), que conhece o codigo novo: os dois clientes compartilham a mesma fila local e qualquer um dos dois a envia, entao a lista de codigos tem que ser a mesma nos dois e no servidor. Feche e abra o Claude Code e o Codex depois da manutencao.
8
+ - Instaladores oficiais continuam fixando 2.5.10; promover a versao que instalacoes NOVAS recebem segue sendo ato explicito.
9
+
1
10
  ## 2.5.10 — 2026-09-19
2
11
 
3
12
  ### Conteudo ao vivo passa a usar o cliente 0.6.0
package/README.md CHANGED
@@ -230,12 +230,12 @@ agents/ → Seu exercito (companion, workers, minds, squads)
230
230
 
231
231
  ## Observabilidade do motor (candidato 2.5.2)
232
232
 
233
- Apos publicacao, `npx -y auroq-os@2.5.10 doctor` mostra a fila local segura e os comandos pinados de
234
- manutencao/diagnostico. `npx -y auroq-os@2.5.10 manutencao` preserva o caminho existente
233
+ Apos publicacao, `npx -y auroq-os@2.5.11 doctor` mostra a fila local segura e os comandos pinados de
234
+ manutencao/diagnostico. `npx -y auroq-os@2.5.11 manutencao` preserva o caminho existente
235
235
  de consentimento legado, studentFiles, customizacoes e dados do negocio. Nao ha
236
- migracao forcada. O registro MCP aponta para `arcane-mcp@0.6.0`, publicado no npm em
237
- 19/09/2026; `npm run release:verify` recusa publicar com um pin que o npm nao resolva.
238
- Os instaladores oficiais devem fixar 2.5.10 depois da publicacao e da verificacao do tarball.
236
+ migracao forcada. O registro MCP aponta para `arcane-mcp@0.6.1`, publicado no npm em
237
+ 21/09/2026; `npm run release:verify` recusa publicar com um pin que o npm nao resolva.
238
+ Os instaladores oficiais seguem em 2.5.10; promover pra 2.5.11 e ato explicito, depois da publicacao e da verificacao do tarball.
239
239
 
240
240
  O CLI inicia captura antes das dependencias pesadas e registra resultado ao sair.
241
241
  Eventos com identidade ja existente podem seguir pela rota autenticada na proxima
package/bin/auroq-os.js CHANGED
@@ -20,7 +20,10 @@ async function observedMain() {
20
20
  const record = (outcome, error_code) => telemetry.enqueue(owner,{endpoint:'lifecycle',stage,outcome,error_code});
21
21
  telemetry.setHost('auroq-os');telemetry.importInstallerSpool();record('started');
22
22
  let importing = true;
23
- process.once('exit',code=>record(code===0?'ok':'error',code===0?null:importing?'BOOTSTRAP_IMPORT':stage==='update'?'UPDATE_FAILED':'INSTALL_FAILED'));
23
+ // Sair com 1 no `doctor` e o diagnostico fazendo o trabalho dele, nao a instalacao quebrando:
24
+ // `DOCTOR_FINDINGS` = achou pendencia pra resolver. Chamar isso de INSTALL_FAILED gerava alarme
25
+ // de gravidade maxima pra aluno com o caminho inteiro de pe (Marinei e Alessandra, 20/09).
26
+ process.once('exit',code=>record(code===0?'ok':'error',code===0?null:importing?'BOOTSTRAP_IMPORT':stage==='update'?'UPDATE_FAILED':stage==='doctor'?'DOCTOR_FINDINGS':'INSTALL_FAILED'));
24
27
  process.once('uncaughtException',()=>{console.error('[auroq-os] RUNTIME_FAILURE');process.exit(1);});
25
28
  process.once('unhandledRejection',()=>{console.error('[auroq-os] RUNTIME_FAILURE');process.exit(1);});
26
29
  const cred = credentials.load();await telemetry.flush(cred?.user?.id,cred?.access_token);
@@ -28,7 +31,7 @@ async function observedMain() {
28
31
  telemetry.runtimeReady=()=>{importing=false;};
29
32
  runRuntime(telemetry);
30
33
  } catch {
31
- console.error('[auroq-os] '+(importing?'BOOTSTRAP_IMPORT':'RUNTIME_FAILURE')+'. Rode: npx -y auroq-os@2.5.10 doctor');
34
+ console.error('[auroq-os] '+(importing?'BOOTSTRAP_IMPORT':'RUNTIME_FAILURE')+'. Rode: npx -y auroq-os@2.5.11 doctor');
32
35
  process.exitCode=1;
33
36
  }
34
37
  }
@@ -214,13 +217,45 @@ function registrarInstallLog(evento, detalhe = '') {
214
217
  const dir = path.join(require('os').homedir(), '.auroq');
215
218
  fs.ensureDirSync(dir);
216
219
  const quando = new Date().toISOString().replace(/\.\d+Z$/, 'Z');
217
- const limpo = String(detalhe).replace(/[^\w .:=+/\\-]/g, '');
220
+ const limpo = String(detalhe).replace(/[^\w ,.:=+/\\-]/g, '');
218
221
  fs.appendFileSync(path.join(dir, 'install.log'), `${quando}\t${evento}\t${limpo}\n`);
219
222
  } catch {
220
223
  /* registro e conveniencia pro suporte */
221
224
  }
222
225
  }
223
226
 
227
+ /**
228
+ * Etiqueta curta e FIXA pra cada pendencia que o `doctor` lista (EMB-050).
229
+ *
230
+ * O suporte precisa saber "falhou no que", nao so "falhou": a lista do doctor morria na tela do
231
+ * aluno e o plantao ficava adivinhando (da Alessandra nunca soubemos qual item era). A etiqueta e
232
+ * vocabulario fechado de proposito — nunca caminho, e-mail, token, nome de maquina nem o texto da
233
+ * pendencia. O casamento e por trecho estavel da mensagem; o teste `doctor-recibo` reprova qualquer
234
+ * pendencia nova que caia em `outro`.
235
+ */
236
+ const ETIQUETAS_DOCTOR = [
237
+ ['repor o que falta', 'arquivos-faltando'],
238
+ ['sem tirar nada seu', 'synapse-nao-registrado'],
239
+ ['Synapse antigo', 'synapse-antigo'],
240
+ ['no Windows, install.ps1', 'motor-ausente'],
241
+ ['FECHE e abra', 'motor-fora-do-perfil'],
242
+ ['2 minutos de espera', 'mcp-timeout-curto'],
243
+ ['com o tempo certo', 'codex-timeout-curto'],
244
+ ['mais tempo ao Codex', 'arranque-lento'],
245
+ ['reescreve o registro)', 'mcp-nao-registrado'],
246
+ ['register-mcp na pasta. Depois', 'mcp-pin-antigo'],
247
+ ['arcane-mcp login', 'sem-login'],
248
+ ['fora do ar', 'servidor-fora'],
249
+ ['Confira sua internet', 'servidor-fora'],
250
+ ['whoami', 'mcp-nao-abre'],
251
+ ['tela INTEIRA', 'codex-sem-conteudo'],
252
+ ];
253
+ function rotulo(pendencia) {
254
+ const texto = String(pendencia || '');
255
+ for (const [marca, etiqueta] of ETIQUETAS_DOCTOR) if (texto.includes(marca)) return etiqueta;
256
+ return 'outro';
257
+ }
258
+
224
259
  /**
225
260
  * Identificador curto e nao reversivel da maquina — so pro suporte casar dois
226
261
  * registros do mesmo computador. Nao sai da maquina e nao contem nome nem e-mail.
@@ -503,12 +538,22 @@ async function runDoctor(targetDir) {
503
538
  }
504
539
 
505
540
  log('');
541
+ // Recibo duravel pro suporte, inclusive quando fechou limpo: sem o historico completo o plantao
542
+ // nao sabe se a pendencia de ontem foi resolvida. Conveniencia — nunca pode derrubar o doctor,
543
+ // por isso montar o texto tambem fica DENTRO do try.
544
+ const recibo = pendencias => {
545
+ try {
546
+ registrarInstallLog('doctor', pendencias.length ? `pendencias=${pendencias.length} ${pendencias.map(p => rotulo(p)).join(',')}` : 'ok');
547
+ } catch { /* recibo e conveniencia pro suporte */ }
548
+ };
506
549
  if (problemas.length === 0) {
507
550
  success('Tudo certo. Pode chamar o Companion.');
551
+ recibo(problemas);
508
552
  return 0;
509
553
  }
510
554
  error(`${problemas.length} coisa(s) pra resolver:`);
511
555
  for (const p of problemas) log(` ${DIM}- ${p}${RESET}`);
556
+ recibo(problemas);
512
557
  log('');
513
558
  log(`${DIM}Se travar, chame o suporte: 11 93621-4486${RESET}`);
514
559
  return 1;
@@ -524,7 +569,7 @@ async function runDoctor(targetDir) {
524
569
  // 2.5.4/2.5.5 pinaram uma versao que ainda nao estava no npm e o MCP fechava a conexao.
525
570
  // Por isso `scripts/assert-mcp-pin.mjs` (release:verify/prepublishOnly) recusa publicar
526
571
  // com um pin que o `npm view` nao resolva exatamente. Trocar o pin aqui exige o pacote ja publicado.
527
- const ARCANE_MCP_PIN = 'arcane-mcp@0.6.0';
572
+ const ARCANE_MCP_PIN = 'arcane-mcp@0.6.1';
528
573
  const CODEX_MCP_STARTUP_SEC = 120;
529
574
  // O Claude Code tambem desistia aos 30s (MCP_TIMEOUT) e o aluno via CONNECT_TIMEOUT com o
530
575
  // servidor no ar e nenhum pedido chegando nele (11/09, EMB-041). Ele le o tempo do `env` das
@@ -577,7 +622,7 @@ function blocoCodexArcane(pin, opcoes) {
577
622
  }
578
623
 
579
624
  // Baixa o pacote do conteudo ao vivo com o MESMO nome que o registro usa (o cache do
580
- // npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.6.0` sao caches diferentes).
625
+ // npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.6.1` sao caches diferentes).
581
626
  // `npx` no Windows e um .cmd: sem shell o Node recusa (EINVAL) e com `shell: true` o Node 24
582
627
  // imprime um DeprecationWarning na tela do aluno (DEP0190). Chamar o cmd.exe direto, sem shell.
583
628
  function comandoNpx(args) {
@@ -1803,7 +1848,7 @@ if (['init', 'install', 'update'].includes(command)) {
1803
1848
  error('Comando aposentado. Nada foi instalado ou alterado.');
1804
1849
  error('Primeira instalacao: https://arcane.arka.education/auroq');
1805
1850
  error('No negocio existente, peca ao Ops: manutencao do motor. Conteudo chega pelo MCP.');
1806
- error('Diagnostico: npx -y auroq-os@2.5.10 doctor. Manutencao: npx -y auroq-os@2.5.10 manutencao.');
1851
+ error('Diagnostico: npx -y auroq-os@2.5.11 doctor. Manutencao: npx -y auroq-os@2.5.11 manutencao.');
1807
1852
  process.exitCode = 1;
1808
1853
  } else if (command === 'instalar' || command === 'manutencao') {
1809
1854
  // `--pasta <nome>`: o instalador manda o CLI criar e entrar na pasta do negocio,
@@ -1930,6 +1975,6 @@ if (['init', 'install', 'update'].includes(command)) {
1930
1975
  log('');
1931
1976
  }
1932
1977
 
1933
- if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane, lerBlocoArcane, lerEnvDoBloco, limparArcaneDoGlobal, envComoCodex, argumentosCodexSmoke, avaliarEventosCodex, ARCANE_MCP_PIN };
1978
+ if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane, lerBlocoArcane, lerEnvDoBloco, limparArcaneDoGlobal, envComoCodex, argumentosCodexSmoke, avaliarEventosCodex, rotulo, ARCANE_MCP_PIN };
1934
1979
 
1935
1980
  }
package/lib/telemetry.mjs CHANGED
@@ -20,7 +20,10 @@ export function networkCode(e) {
20
20
  }
21
21
  const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
22
22
  const uuid = v => typeof v === 'string' && UUID.test(v) ? v : null;
23
- const ERRORS = new Set(['NETWORK_TLS','NETWORK_DNS','NETWORK_TIMEOUT','NETWORK_OTHER','AUTH_MISSING','AUTH_REFRESH','HTTP_ERROR','CLIENT_ERROR','BOOTSTRAP_IMPORT','RUNTIME_FAILURE','INSTALL_FAILED','UPDATE_FAILED']);
23
+ // DOCTOR_FINDINGS: o doctor achou pendencia e saiu com 1 — diagnostico trabalhando, nao instalacao
24
+ // quebrada. Os dois clientes gravam no MESMO outbox e qualquer um faz o flush, entao a lista tem que
25
+ // ser a mesma nos dois (e no servidor): o que falta aqui vira null e apaga o alarme (EMB-050).
26
+ const ERRORS = new Set(['NETWORK_TLS','NETWORK_DNS','NETWORK_TIMEOUT','NETWORK_OTHER','AUTH_MISSING','AUTH_REFRESH','HTTP_ERROR','CLIENT_ERROR','BOOTSTRAP_IMPORT','RUNTIME_FAILURE','INSTALL_FAILED','UPDATE_FAILED','DOCTOR_FINDINGS']);
24
27
  const STAGES = new Set(['startup','runtime','install','update','doctor','login','bootstrap','git','node','access','folder','framework']);
25
28
  const tools = new Set(['catalogo_listar','squad_ativar','squad_passo','squad_conhecimento','forja_bundle','busca']);
26
29
  const TTL = 7*86400000;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auroq-os",
3
- "version": "2.5.10",
3
+ "version": "2.5.11",
4
4
  "description": "Auroq OS — Sistema Operacional de IA para Experts",
5
5
  "bin": {
6
6
  "auroq-os": "bin/auroq-os.js"