auroq-os 2.4.13 → 2.4.16
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/.claude/commands/AuroqOS/agents/ops.md +4 -4
- package/.claude/commands/auroq-clone-forge.md +3 -3
- package/.claude/commands/auroq-companion.md +3 -3
- package/.claude/commands/auroq-consultor.md +3 -3
- package/.claude/commands/auroq-etlmaker.md +3 -3
- package/.claude/commands/auroq-mind-forge.md +3 -3
- package/.claude/commands/auroq-squad-forge.md +3 -3
- package/.claude/commands/auroq-worker-forge.md +3 -3
- package/.claude/rules/mcp-usage.md +3 -3
- package/CHANGELOG.md +56 -0
- package/bin/auroq-os.js +167 -7
- package/package.json +1 -1
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Bootstrap e operação do Auroq OS.
|
|
4
4
|
|
|
5
|
-
O corpo deste guia (FASES 0–N) vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `ops` e a fase atual.
|
|
5
|
+
O corpo deste guia (FASES 0–N) vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `ops` e a fase atual. Enquanto o servidor responder, nunca procurar o texto longo em disco.
|
|
6
6
|
|
|
7
7
|
**Pack Arcane — vence o MCP se ele estiver velho:** o Pack da mentoria chega ao vivo. NUNCA peça zip, `pack-arcane.zip`, caminho de arquivo nem `npx arcane-pack`. Se o aluno pedir o Pack: pasta do negócio, `/euriler` (Codex: `$euriler`), fale `oi`. Se não responder, é o cadeado da jornada (contrato ativo e assinado), não instalação faltando. Zip só vale pra agente que ELE criou. Única exceção ao `npx arcane-pack`: a parte executável dos squads híbridos (Edição, Carrossel, Anúncios, Tráfego, Low Ticket, Bia) chega por `npx arcane-pack update` na pasta do negócio — é o que se roda quando um desses squads reclama que `agents/<squad>/` não existe (ex.: `doctor.py` não encontrado); o método continua vindo ao vivo.
|
|
8
8
|
|
|
9
9
|
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.
|
|
10
10
|
|
|
11
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
11
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se existe `agents/ops/OPS-LOCAL.md` no disco (é o Bootstrap completo que morava no computador do aluno antes da migração; o instalador guarda ele ali). Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com o Bootstrap que já está no seu computador." — e siga por esse arquivo como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
12
12
|
|
|
13
|
-
**Migração (se você chegou aqui pelo `*update-auroq` de uma versão instalada antiga, procurando a lista ATUALIZA):** este arquivo não carrega mais a lista. NÃO chame a tool do MCP (o projeto antigo ainda não tem esse registro). ANTES de qualquer coisa, consentimento explícito — no sistema antigo os agentes moram no disco do expert; depois da migração o conteúdo deles chega ao vivo do servidor e só responde com acesso ativo. Explicar isso em linguagem comum ("seus dados, memórias e squads criados ficam intactos; os agentes da mentoria passam a
|
|
13
|
+
**Migração (se você chegou aqui pelo `*update-auroq` de uma versão instalada antiga, procurando a lista ATUALIZA):** este arquivo não carrega mais a lista. NÃO chame a tool do MCP (o projeto antigo ainda não tem esse registro). ANTES de qualquer coisa, consentimento explícito — no sistema antigo os agentes moram no disco do expert; depois da migração o conteúdo deles chega ao vivo do servidor e só responde com acesso ativo. Explicar isso em linguagem comum ("seus dados, memórias e squads criados ficam intactos; os agentes da mentoria passam a chegar ao vivo enquanto o acesso estiver ativo e, se o acesso acabar, voltam a rodar do que já está no seu computador") e SÓ seguir com um SIM explícito — sem o SIM, parar aqui e nada é alterado. Com o SIM: rodar `node /tmp/auroq-update/package/bin/auroq-os.js init` na raiz do projeto — ele sobrescreve só o framework, preserva os dados do expert e registra o conteúdo ao vivo (`.mcp.json` + `.codex/config.toml`). Depois: `npx auroq-os doctor`, e avise o expert pra FECHAR e abrir o Claude Code/Codex uma vez.
|
|
14
14
|
|
|
15
|
-
CRITICAL: Do not treat this file as the Bootstrap. Use the MCP `arcane` tools.
|
|
15
|
+
CRITICAL: Do not treat this file as the Bootstrap. Use the MCP `arcane` tools; fall back to `agents/ops/OPS-LOCAL.md` only after the MCP refused or failed and that file exists.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Clona mentes reais em agentes digitais.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `clone-forge` e a fase atual.
|
|
5
|
+
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `clone-forge` e a fase atual. Enquanto o servidor responder, nunca procurar arquivo local desta forja.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/clone-forge/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/clone-forge/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Parceiro cognitivo pessoal. Situa, lembra, pensa junto, roteia.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo deste agente vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `squad_ativar` com recurso_id `companion`.
|
|
5
|
+
Todo conteúdo deste agente vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `squad_ativar` com recurso_id `companion`. Enquanto o servidor responder, nunca procurar arquivo local deste agente.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/companion/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/companion/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Guia vivo do Auroq OS. Tira dúvidas, ensina e destrava o aluno.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo deste agente vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `squad_ativar` com recurso_id `consultor`.
|
|
5
|
+
Todo conteúdo deste agente vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `squad_ativar` com recurso_id `consultor`. Enquanto o servidor responder, nunca procurar arquivo local deste agente.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/consultor/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/consultor/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Extrai conhecimento de fontes brutas e estrutura em knowledge bases.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `etlmaker` e a fase atual.
|
|
5
|
+
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `etlmaker` e a fase atual. Enquanto o servidor responder, nunca procurar arquivo local desta forja.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/etlmaker/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/etlmaker/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Fábrica de mentes sintéticas e consultores.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `mind-forge` e a fase atual.
|
|
5
|
+
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `mind-forge` e a fase atual. Enquanto o servidor responder, nunca procurar arquivo local desta forja.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/mind-forge/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/mind-forge/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Cria squads multi-agente a partir dos seus processos.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `squad-forge` e a fase atual.
|
|
5
|
+
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `squad-forge` e a fase atual. Enquanto o servidor responder, nunca procurar arquivo local desta forja.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/squad-forge/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/squad-forge/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Cria workers especializados para automação e operações.
|
|
4
4
|
|
|
5
|
-
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `worker-forge` e a fase atual.
|
|
5
|
+
Todo conteúdo desta forja vem pelo MCP `arcane` (catálogo `auroq-core`). Chame a tool `forja_bundle` com forge_id `worker-forge` e a fase atual. Enquanto o servidor responder, nunca procurar arquivo local desta forja.
|
|
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
|
|
|
9
|
-
Se a tool recusar (acesso vencido, cancelado ou
|
|
9
|
+
Se a tool recusar (acesso vencido, cancelado, suspenso ou encerrado) ou falhar: confira se a pasta `agents/worker-forge/` existe no disco com arquivos. Se existir, avise em UMA linha — "O servidor não liberou o conteúdo ao vivo; seguindo com a versão que já está no seu computador." — e siga com o conteúdo dessa pasta como fonte da verdade, mostrando a mensagem do servidor junto. Se não existir, mostre a mensagem exatamente como veio, com o contato do suporte da Arcane, e pare. Nunca improvisar de memória, nunca tentar de novo sozinho. O que já estava no computador do aluno antes da migração continua dele.
|
|
10
10
|
|
|
11
|
-
CRITICAL:
|
|
11
|
+
CRITICAL: While the MCP `arcane` answers, do not read `agents/worker-forge/**`. Read that folder only after the MCP refused or failed and it exists on disk.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Usage — Auroq OS
|
|
2
2
|
|
|
3
|
-
> Carve-out Arcane: conteúdo licenciado (Companion interno, Consultor, forjas, Pack) vem
|
|
3
|
+
> Carve-out Arcane: conteúdo licenciado (Companion interno, Consultor, forjas, Pack) vem pelo MCP `arcane` **enquanto o servidor responder**. Esta regra vence a preferência genérica por ferramentas nativas **só nesse conteúdo**. Única exceção: o servidor recusou (acesso vencido, cancelado, suspenso, encerrado) ou falhou **e** a pasta do agente existe em `agents/` — aí o conteúdo local vale, com aviso de uma linha ao aluno. O que já estava no computador dele antes da migração continua dele.
|
|
4
4
|
|
|
5
5
|
## Prioridade de Ferramentas
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ SEMPRE preferir ferramentas nativas do Claude Code sobre MCP, **exceto** conteú
|
|
|
8
8
|
|
|
9
9
|
| Task | USAR | NAO USAR |
|
|
10
10
|
|------|------|----------|
|
|
11
|
-
| Conteúdo Arcane (persona, KB, forja, Pack) | MCP `arcane` | Read/Grep em `agents/` |
|
|
11
|
+
| Conteúdo Arcane (persona, KB, forja, Pack) | MCP `arcane` (servidor negou/falhou e `agents/<x>/` existe → disco, avisando) | Read/Grep em `agents/` enquanto o MCP responde |
|
|
12
12
|
| Ler arquivos do ALUNO (memória, docs, cockpit) | `Read` tool | MCP servers |
|
|
13
13
|
| Escrever arquivos | `Write` / `Edit` tools | MCP servers |
|
|
14
14
|
| Rodar comandos | `Bash` tool | MCP servers |
|
|
@@ -27,4 +27,4 @@ Outros agentes sao **consumidores** de MCP, nao administradores. Se precisar de
|
|
|
27
27
|
3. Playwright nos cenarios tecnicos
|
|
28
28
|
4. Ferramentas externas sem equivalente nativo
|
|
29
29
|
|
|
30
|
-
Se a tool `arcane` falhar: mostrar a mensagem e parar.
|
|
30
|
+
Se a tool `arcane` recusar ou falhar: a pasta do agente existe em `agents/`? Sim → avisar em uma linha e seguir pelo disco. Não → mostrar a mensagem e parar. Nunca improvisar de memoria.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.16] — 2026-09-04
|
|
4
|
+
|
|
5
|
+
### Codex no Windows: conteudo ao vivo abria, mas "Sem conexao com o servidor da Arcane" (EMB-028)
|
|
6
|
+
Aluna no Windows, depois do 2.4.15, entrou no Codex sem timeout — e ao chamar o Ops leu "Sem
|
|
7
|
+
conexao com o servidor da Arcane" com internet normal. Causa: o Codex abre o MCP com um ambiente
|
|
8
|
+
minimo (so PATH, PATHEXT, USERNAME, USERDOMAIN, USERPROFILE, TEMP, TMP) e deixa de fora
|
|
9
|
+
`SystemRoot`, `APPDATA`, `COMSPEC`... Sem `SystemRoot` o Node no Windows pode nao resolver DNS
|
|
10
|
+
(openai/codex#4180, #3311). Hipotese: o runner do CI nao reproduziu a falha. Por isso o pacote
|
|
11
|
+
tambem passa a MOSTRAR o motivo tecnico — e o que fecha o diagnostico.
|
|
12
|
+
|
|
13
|
+
- **Registro do Codex** passa os valores reais da maquina (`SystemRoot`, `windir`, `COMSPEC`,
|
|
14
|
+
`APPDATA`, `LOCALAPPDATA`, `ProgramData`, `ProgramFiles`, `HOMEDRIVE`, `HOMEPATH`,
|
|
15
|
+
`USERPROFILE`, `TEMP`, `TMP`) no bloco `[mcp_servers.arcane]`; so no Windows.
|
|
16
|
+
- **`arcane-mcp@0.4.1`** (pin novo): a falha de rede diz o motivo tecnico (ex.: `EAI_FAIL`) e
|
|
17
|
+
ganhou `npx -y arcane-mcp@0.4.1 verify`, que prova a conexao a partir do mesmo programa que o
|
|
18
|
+
Codex abre.
|
|
19
|
+
- Quem ja instalou: "atualiza o sistema" pelo Ops, ou `npx auroq-os@latest register-mcp` na pasta,
|
|
20
|
+
e FECHAR e abrir o Codex.
|
|
21
|
+
|
|
22
|
+
## [2.4.15] — 2026-09-03
|
|
23
|
+
|
|
24
|
+
### Aluno antigo migrado cai pro disco quando o servidor recusa (EMB-019, conserto)
|
|
25
|
+
Aluno antigo com contrato ativo leu no proprio Claude que "uma vez que nao esteja ativo, nao
|
|
26
|
+
vai mais usar os squads que ja tinha" — porque as cascas mandavam parar em qualquer recusa e
|
|
27
|
+
proibiam ler `agents/`. Contradizia a regra do Euriler (29/08): o que ja estava no computador
|
|
28
|
+
do aluno continua dele.
|
|
29
|
+
|
|
30
|
+
- **Cascas** (Companion, Consultor, 5 forjas, Ops) e a rule `mcp-usage.md`: enquanto o
|
|
31
|
+
servidor responder, nada muda. Se recusar ou falhar **e** a pasta do agente existir em
|
|
32
|
+
`agents/`, o atalho avisa em uma linha e segue pelo disco. Sem pasta, mostra a mensagem e para.
|
|
33
|
+
- **Migracao guarda o Bootstrap antigo:** antes de trocar o `ops.md` completo pela casca, o
|
|
34
|
+
`init` copia o original pra `agents/ops/OPS-LOCAL.md` (nunca sobrescreve um que ja exista). E
|
|
35
|
+
esse arquivo que o `/ops` usa quando o servidor recusa.
|
|
36
|
+
- **Consentimento da migracao** (casca e Ops servido) passa a dizer que, se o acesso acabar, os
|
|
37
|
+
agentes voltam a rodar do computador — nada e apagado.
|
|
38
|
+
- Do lado do Pack: `arcane-pack@1.4.2` gera os atalhos dos squads com a mesma queda pro disco;
|
|
39
|
+
a mensagem de recusa do servidor avisa que a versao local continua valendo.
|
|
40
|
+
|
|
41
|
+
## [2.4.14] — 2026-09-03
|
|
42
|
+
|
|
43
|
+
### Conteudo ao vivo dava "timeout" toda vez que o Codex abria (Windows)
|
|
44
|
+
Aluna com acesso ativo, `doctor` limpo, MCP registrado e servidor respondendo — e mesmo assim o
|
|
45
|
+
Codex desistia do MCP arcane em toda abertura. Medido num Windows limpo: a PRIMEIRA abertura do
|
|
46
|
+
`npx -y arcane-mcp@0.4.0` leva 48-59s (download + antivirus), as seguintes ~2s. O Codex espera 10s
|
|
47
|
+
(o Claude Code, 30s) e mata o processo antes de terminar. O `doctor` nao via nada porque so
|
|
48
|
+
conferia o registro, e o `npx arcane-mcp whoami` que a aluna rodava aquecia OUTRO cache (sem a
|
|
49
|
+
versao fixa). Com a correcao, medido no mesmo Windows: 1,4-2,2s.
|
|
50
|
+
|
|
51
|
+
- **Registro do Codex** ganha `startup_timeout_sec = 120`; `register-mcp` e `update` reescrevem o
|
|
52
|
+
bloco antigo (o resto do `config.toml` fica como estava).
|
|
53
|
+
- **`init`, `update` e `register-mcp`** baixam o pacote uma vez, com o mesmo nome do registro, antes
|
|
54
|
+
do aluno abrir o Codex ou o Claude Code.
|
|
55
|
+
- **`doctor`** abre o conteudo ao vivo de verdade e mede: acima de 9s, aponta o `register-mcp`;
|
|
56
|
+
registro do Codex sem o tempo de espera vira problema listado.
|
|
57
|
+
- Quem ja instalou: "atualiza o sistema" pelo Ops resolve; ou `npx auroq-os register-mcp` na pasta.
|
|
58
|
+
|
|
3
59
|
## [2.4.13] — 2026-09-03
|
|
4
60
|
|
|
5
61
|
### Squad Edicao ativava, mas nao tinha script nenhum no computador
|
package/bin/auroq-os.js
CHANGED
|
@@ -332,10 +332,16 @@ async function runDoctor(targetDir) {
|
|
|
332
332
|
problemas.push('Rode: npx auroq-os register-mcp (reescreve o registro). Depois feche e abra o Claude Code.');
|
|
333
333
|
}
|
|
334
334
|
const tomlPath = path.join(targetDir, '.codex', 'config.toml');
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
if (temToml
|
|
338
|
-
|
|
335
|
+
const tomlTexto = (await fs.pathExists(tomlPath)) ? await fs.readFile(tomlPath, 'utf8') : '';
|
|
336
|
+
const temToml = tomlTexto.includes('[mcp_servers.arcane]');
|
|
337
|
+
if (temToml && tomlTexto.includes('startup_timeout_sec')) {
|
|
338
|
+
success('MCP arcane registrado no Codex');
|
|
339
|
+
} else if (temToml) {
|
|
340
|
+
error('O registro do Codex esta sem o tempo de espera — a primeira abertura pode cair');
|
|
341
|
+
problemas.push('Rode: npx auroq-os register-mcp (reescreve o registro com o tempo certo). Depois feche e abra o Codex.');
|
|
342
|
+
} else {
|
|
343
|
+
log(` ${DIM}MCP arcane ainda nao registrado no Codex (so importa se voce usa o Codex)${RESET}`);
|
|
344
|
+
}
|
|
339
345
|
|
|
340
346
|
// 4. login e licenca — o unico jeito de saber se o conteudo vai chegar
|
|
341
347
|
const credPath = path.join(require('os').homedir(), '.arcane', 'credentials.json');
|
|
@@ -366,6 +372,24 @@ async function runDoctor(targetDir) {
|
|
|
366
372
|
problemas.push('Confira sua internet. Sem servidor, o conteudo ao vivo nao chega — o resto do Auroq continua.');
|
|
367
373
|
}
|
|
368
374
|
|
|
375
|
+
// 6. o conteudo ao vivo SOBE a tempo? (EMB-027: registro certo, servidor no ar, e mesmo
|
|
376
|
+
// assim o Codex/Claude Code desistiam antes do pacote terminar de baixar)
|
|
377
|
+
const semArranque = process.env.NODE_ENV === 'test' && process.env.AUROQ_SKIP_AUTH === '1';
|
|
378
|
+
if (pin && !semArranque) {
|
|
379
|
+
log(` ${DIM}Abrindo o conteudo ao vivo pra medir (na primeira vez pode levar 1-2 min)...${RESET}`);
|
|
380
|
+
aquecerArcaneMcp();
|
|
381
|
+
const ms = await medirArranqueArcaneMcp(pin);
|
|
382
|
+
if (ms === null) {
|
|
383
|
+
error('O conteudo ao vivo nao abriu nesta janela');
|
|
384
|
+
problemas.push(`Rode: npx -y ${pin} whoami — se der erro, mande o print pro suporte.`);
|
|
385
|
+
} else if (ms > MCP_ARRANQUE_LIMITE_MS) {
|
|
386
|
+
error(`O conteudo ao vivo levou ${(ms / 1000).toFixed(0)}s pra abrir; o Codex espera 10s`);
|
|
387
|
+
problemas.push('Rode: npx auroq-os register-mcp (da mais tempo ao Codex). Depois feche e abra o Codex.');
|
|
388
|
+
} else {
|
|
389
|
+
success(`Conteudo ao vivo abre em ${(ms / 1000).toFixed(1)}s`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
369
393
|
log('');
|
|
370
394
|
if (problemas.length === 0) {
|
|
371
395
|
success('Tudo certo. Pode chamar o Companion.');
|
|
@@ -378,8 +402,128 @@ async function runDoctor(targetDir) {
|
|
|
378
402
|
return 1;
|
|
379
403
|
}
|
|
380
404
|
|
|
405
|
+
// Conteudo ao vivo (MCP arcane). O pacote e baixado pelo npx na PRIMEIRA abertura:
|
|
406
|
+
// medido num Windows limpo em 03/09/2026, 52s a frio e 2s a quente. O Codex espera
|
|
407
|
+
// 10s e o Claude Code 30s antes de matar o processo (EMB-027). Num Windows limpo com
|
|
408
|
+
// internet rapida, tentativas mortas aos 10s ainda somam progresso; na maquina do aluno
|
|
409
|
+
// (rede domestica + antivirus) a aluna viu timeout em todas as que fez. Por isso:
|
|
410
|
+
// (1) o registro do Codex pede mais tempo, (2) instalacao/atualizacao ja baixam o
|
|
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.1';
|
|
413
|
+
const CODEX_MCP_STARTUP_SEC = 120;
|
|
414
|
+
const MCP_ARRANQUE_LIMITE_MS = 9000; // abaixo do que o Codex tolera (10s)
|
|
415
|
+
|
|
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);
|
|
439
|
+
return [
|
|
440
|
+
'[mcp_servers.arcane]',
|
|
441
|
+
'command = "npx"',
|
|
442
|
+
`args = ["-y", "${pin}"]`,
|
|
443
|
+
'# Primeira abertura baixa o pacote (ate 1-2 min no Windows); o padrao do Codex sao 10s.',
|
|
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] : []),
|
|
446
|
+
'',
|
|
447
|
+
].join('\n');
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Baixa o pacote do conteudo ao vivo com o MESMO nome que o registro usa (o cache do
|
|
451
|
+
// npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.4.1` sao caches diferentes).
|
|
452
|
+
function aquecerArcaneMcp() {
|
|
453
|
+
if (process.env.NODE_ENV === 'test' && process.env.AUROQ_SKIP_AUTH === '1') return true;
|
|
454
|
+
try {
|
|
455
|
+
execFileSync('npx', ['-y', ARCANE_MCP_PIN, 'whoami'], {
|
|
456
|
+
stdio: 'pipe', timeout: 240000, shell: process.platform === 'win32',
|
|
457
|
+
});
|
|
458
|
+
return true;
|
|
459
|
+
} catch {
|
|
460
|
+
return false;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Abre o conteudo ao vivo do jeito que o Codex/Claude Code abrem e mede quanto tempo
|
|
465
|
+
// ele leva pra responder ao aperto de mao. Devolve ms, ou null se nao respondeu.
|
|
466
|
+
function medirArranqueArcaneMcp(pin, limiteMs = 180000) {
|
|
467
|
+
return new Promise((resolve) => {
|
|
468
|
+
const { spawn } = require('child_process');
|
|
469
|
+
const t0 = Date.now();
|
|
470
|
+
let saida = '';
|
|
471
|
+
let fim = false;
|
|
472
|
+
let processo;
|
|
473
|
+
const fecha = (ms) => {
|
|
474
|
+
if (fim) return;
|
|
475
|
+
fim = true;
|
|
476
|
+
clearTimeout(timer);
|
|
477
|
+
try { processo.kill(); } catch { /* ja morreu */ }
|
|
478
|
+
resolve(ms);
|
|
479
|
+
};
|
|
480
|
+
const timer = setTimeout(() => fecha(null), limiteMs);
|
|
481
|
+
try {
|
|
482
|
+
processo = spawn('npx', ['-y', pin], {
|
|
483
|
+
stdio: ['pipe', 'pipe', 'pipe'], shell: process.platform === 'win32',
|
|
484
|
+
});
|
|
485
|
+
} catch {
|
|
486
|
+
clearTimeout(timer);
|
|
487
|
+
resolve(null);
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
processo.stdout.on('data', (d) => {
|
|
491
|
+
saida += d.toString();
|
|
492
|
+
if (saida.includes('"serverInfo"')) fecha(Date.now() - t0);
|
|
493
|
+
});
|
|
494
|
+
processo.stderr.on('data', () => {});
|
|
495
|
+
processo.on('exit', () => fecha(null));
|
|
496
|
+
processo.on('error', () => fecha(null));
|
|
497
|
+
const pedido = {
|
|
498
|
+
jsonrpc: '2.0', id: 1, method: 'initialize',
|
|
499
|
+
params: { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'auroq-doctor', version: '0' } },
|
|
500
|
+
};
|
|
501
|
+
try { processo.stdin.write(`${JSON.stringify(pedido)}\n`); } catch { fecha(null); }
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Aluno antigo tem o Bootstrap completo em `.claude/commands/AuroqOS/agents/ops.md`.
|
|
506
|
+
// A migracao troca esse arquivo pela casca (ponteiro pro MCP). Sem guardar o original,
|
|
507
|
+
// o Ops dele morre junto com o acesso — e a regra do Euriler (29/08) e que o que ja
|
|
508
|
+
// estava no computador continua dele. A casca do Ops cai pra este arquivo quando o
|
|
509
|
+
// servidor recusa (EMB-019). Nunca sobrescreve um OPS-LOCAL.md que ja exista.
|
|
510
|
+
async function guardarBootstrapLocal(targetDir, file, dst, dstExists) {
|
|
511
|
+
if (file !== '.claude/commands/AuroqOS/agents/ops.md' || !dstExists) return false;
|
|
512
|
+
let atual = '';
|
|
513
|
+
try { atual = await fs.readFile(dst, 'utf8'); } catch { return false; }
|
|
514
|
+
const eCasca = atual.includes('vem pelo MCP') || atual.length < 8000;
|
|
515
|
+
if (eCasca) return false;
|
|
516
|
+
const alvo = path.join(targetDir, 'agents', 'ops', 'OPS-LOCAL.md');
|
|
517
|
+
if (await fs.pathExists(alvo)) return false;
|
|
518
|
+
await fs.ensureDir(path.dirname(alvo));
|
|
519
|
+
const cabecalho = '<!-- Bootstrap completo que morava neste computador antes da migracao pro conteudo ao vivo. O atalho /ops usa este arquivo quando o servidor recusa o acesso. -->\n\n';
|
|
520
|
+
await fs.writeFile(alvo, cabecalho + atual);
|
|
521
|
+
success('Bootstrap antigo guardado em agents/ops/OPS-LOCAL.md (usado se o acesso acabar)');
|
|
522
|
+
return true;
|
|
523
|
+
}
|
|
524
|
+
|
|
381
525
|
async function writeArcaneMcpConfig(targetDir) {
|
|
382
|
-
const pin =
|
|
526
|
+
const pin = ARCANE_MCP_PIN;
|
|
383
527
|
const mcpPath = path.join(targetDir, '.mcp.json');
|
|
384
528
|
let json = { mcpServers: {} };
|
|
385
529
|
if (await fs.pathExists(mcpPath)) {
|
|
@@ -391,10 +535,14 @@ async function writeArcaneMcpConfig(targetDir) {
|
|
|
391
535
|
|
|
392
536
|
const tomlPath = path.join(targetDir, '.codex', 'config.toml');
|
|
393
537
|
await fs.ensureDir(path.dirname(tomlPath));
|
|
394
|
-
const block =
|
|
538
|
+
const block = blocoCodexArcane(pin);
|
|
395
539
|
let toml = '';
|
|
396
540
|
if (await fs.pathExists(tomlPath)) toml = await fs.readFile(tomlPath, 'utf8');
|
|
397
|
-
if (
|
|
541
|
+
if (toml.includes('[mcp_servers.arcane]')) {
|
|
542
|
+
// Reescreve o bloco (registro antigo nao tinha o tempo de espera); o resto do arquivo fica.
|
|
543
|
+
const semBloco = toml.replace(/\[mcp_servers\.arcane\][\s\S]*?(?=\n\[|$(?![\s\S]))/, block.trimEnd());
|
|
544
|
+
if (semBloco !== toml) await fs.writeFile(tomlPath, semBloco.endsWith('\n') ? semBloco : `${semBloco}\n`);
|
|
545
|
+
} else {
|
|
398
546
|
const next = (toml.trimEnd() ? `${toml.trimEnd()}\n\n` : '') + block;
|
|
399
547
|
await fs.writeFile(tomlPath, next);
|
|
400
548
|
}
|
|
@@ -785,6 +933,7 @@ async function init({ pasta = null } = {}) {
|
|
|
785
933
|
if (isStudentFile && dstExists) {
|
|
786
934
|
// Nao sobrescrever dados do aluno
|
|
787
935
|
} else {
|
|
936
|
+
await guardarBootstrapLocal(targetDir, file, dst, dstExists);
|
|
788
937
|
await fs.copy(src, dst, { overwrite: true });
|
|
789
938
|
}
|
|
790
939
|
copied++;
|
|
@@ -822,6 +971,9 @@ async function init({ pasta = null } = {}) {
|
|
|
822
971
|
}
|
|
823
972
|
await patchEnableAllProjectMcpServers(targetDir);
|
|
824
973
|
await writeArcaneMcpConfig(targetDir);
|
|
974
|
+
step('Preparando o conteudo ao vivo (baixa uma vez; pode levar 1-2 min)...');
|
|
975
|
+
if (aquecerArcaneMcp()) success('Conteudo ao vivo pronto pra abrir rapido');
|
|
976
|
+
else warn('Nao consegui baixar o conteudo ao vivo agora — a primeira abertura vai demorar mais');
|
|
825
977
|
|
|
826
978
|
// ─── Fase 4: Copiar Synapse Engine
|
|
827
979
|
step('Instalando Synapse Engine...');
|
|
@@ -1097,6 +1249,9 @@ async function clone(repoArg) {
|
|
|
1097
1249
|
}
|
|
1098
1250
|
|
|
1099
1251
|
await writeArcaneMcpConfig(destDir);
|
|
1252
|
+
step('Preparando o conteudo ao vivo (baixa uma vez; pode levar 1-2 min)...');
|
|
1253
|
+
if (aquecerArcaneMcp()) success('Conteudo ao vivo pronto pra abrir rapido');
|
|
1254
|
+
else warn('Nao consegui baixar o conteudo ao vivo agora — a primeira abertura vai demorar mais');
|
|
1100
1255
|
|
|
1101
1256
|
// ─── Fase 8: Health check
|
|
1102
1257
|
step('Verificando integridade...');
|
|
@@ -1216,6 +1371,9 @@ if (command === 'init' || command === 'install') {
|
|
|
1216
1371
|
await patchEnableAllProjectMcpServers(targetDir);
|
|
1217
1372
|
await writeArcaneMcpConfig(targetDir);
|
|
1218
1373
|
success('Conteudo ao vivo registrado (.mcp.json e .codex/config.toml).');
|
|
1374
|
+
log(`${DIM}Baixando o conteudo ao vivo uma vez (pode levar 1-2 min)...${RESET}`);
|
|
1375
|
+
if (aquecerArcaneMcp()) success('Conteudo ao vivo pronto pra abrir rapido');
|
|
1376
|
+
else warn('Nao consegui baixar o conteudo ao vivo agora — a primeira abertura vai demorar mais');
|
|
1219
1377
|
log(`${DIM}Feche e abra o Claude Code ou o Codex pra ele enxergar o registro.${RESET}`);
|
|
1220
1378
|
process.exit(0);
|
|
1221
1379
|
})().catch(err => {
|
|
@@ -1251,3 +1409,5 @@ if (command === 'init' || command === 'install') {
|
|
|
1251
1409
|
log(`${DIM}Uso: npx auroq-os init${RESET}`);
|
|
1252
1410
|
log('');
|
|
1253
1411
|
}
|
|
1412
|
+
|
|
1413
|
+
if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane };
|