auroq-os 2.4.20 → 2.5.1
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 -2
- package/.claude/commands/instalacaoBia.md +1 -1
- package/.claude/commands/squad-anuncios-arcane.md +2 -2
- package/.claude/commands/squad-carrossel-arcane.md +1 -1
- package/.claude/commands/squad-edicao-arcane.md +1 -1
- package/.claude/commands/squad-low-ticket-arcane.md +1 -1
- package/.claude/commands/trafegoArcane.md +1 -1
- package/.claude/hooks/auroq-sync.cjs +1 -1
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +12 -0
- package/README.md +4 -33
- package/bin/auroq-os.js +40 -62
- package/installer/README.md +1 -1
- package/installer/install.ps1 +2 -2
- package/installer/install.sh +3 -3
- package/lib/legacy-shims.json +20 -0
- package/package.json +2 -2
- package/scripts/sync-codex-skills.mjs +4 -0
|
@@ -4,12 +4,14 @@ Bootstrap e operação do Auroq OS.
|
|
|
4
4
|
|
|
5
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
|
+
O Pack chega ao vivo pelo MCP. NUNCA peça zip nem instalacao do Pack.
|
|
8
|
+
|
|
9
|
+
**Execucao preparada pelo MCP:** Edicao, Carrossel, Trafego, Low Ticket e Bia recebem seus arquivos por `squad_passo` com o recurso_id do squad e passo `preparar-execucao`. O agente executa o script retornado na pasta do negocio e continua o trabalho. Anuncios funciona sem arquivos locais. Nao instalar nem atualizar Pack; nao pedir ZIP. Os arquivos locais servem apenas para executar o passo, nunca como fonte do metodo.
|
|
8
10
|
|
|
9
11
|
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
12
|
|
|
11
13
|
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
14
|
|
|
13
|
-
**
|
|
15
|
+
**Comandos antigos aposentados:** `*update-auroq`, `*update`, `*update-packarcane` e instalacao do Pack nao autorizam copiar arquivos antigos ou instalar ZIP. Para conteudo, usar o MCP. Para cuidar do motor, consultar `forja_bundle` com forge_id `ops` e fase `manutencao`. Se este negocio ainda nao tem MCP, explicar a mudanca e exigir SIM explicito antes da migracao; usar `npx -y auroq-os@latest manutencao` na raiz do negocio. O CLI preserva o que ja pertence ao aluno e pede consentimento quando falta MCP. Nunca seguir a antiga lista ATUALIZA nem extrair pacote em /tmp/auroq-update. Depois rodar `npx -y auroq-os@latest doctor`.
|
|
14
16
|
|
|
15
17
|
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.
|
|
@@ -8,6 +8,6 @@ Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas
|
|
|
8
8
|
|
|
9
9
|
Se a tool recusar porque o Pack ainda não abriu (cadeado da jornada: contrato ativo e assinado), mostre a mensagem exatamente como veio — não é defeito, é o contrato. Se recusar por acesso vencido, cancelado ou suspenso, mostre a mensagem com o contato do suporte da Arcane e pare. Não improvisar, não tentar de novo, não usar memória.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Execucao local preparada pelo MCP:** quando o passo exigir arquivos, chame `squad_passo` com recurso_id `instalacao-bia` e passo `preparar-execucao`. Execute o script retornado na pasta do negocio e continue o passo. O proprio MCP entrega os arquivos autorizados e preserva dados existentes. Nunca pedir instalacao ou atualizacao do Pack, ZIP ou script inventado.
|
|
12
12
|
|
|
13
13
|
CRITICAL: Do not read `agents/instalacao-bia/**` looking for instructions — use the MCP `arcane` tools. Use those files only to EXECUTE what a step asks.
|
|
@@ -8,6 +8,6 @@ Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas
|
|
|
8
8
|
|
|
9
9
|
Se a tool recusar porque o Pack ainda não abriu (cadeado da jornada: contrato ativo e assinado), mostre a mensagem exatamente como veio — não é defeito, é o contrato. Se recusar por acesso vencido, cancelado ou suspenso, mostre a mensagem com o contato do suporte da Arcane e pare. Não improvisar, não tentar de novo, não usar memória.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Este squad funciona pelo MCP e nao exige instalacao de arquivos locais.
|
|
12
12
|
|
|
13
|
-
CRITICAL:
|
|
13
|
+
CRITICAL: Use the MCP `arcane` tools for this squad.
|
|
@@ -8,6 +8,6 @@ Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas
|
|
|
8
8
|
|
|
9
9
|
Se a tool recusar porque o Pack ainda não abriu (cadeado da jornada: contrato ativo e assinado), mostre a mensagem exatamente como veio — não é defeito, é o contrato. Se recusar por acesso vencido, cancelado ou suspenso, mostre a mensagem com o contato do suporte da Arcane e pare. Não improvisar, não tentar de novo, não usar memória.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Execucao local preparada pelo MCP:** quando o passo exigir arquivos, chame `squad_passo` com recurso_id `squad-carrossel-arcane` e passo `preparar-execucao`. Execute o script retornado na pasta do negocio e continue o passo. O proprio MCP entrega os arquivos autorizados e preserva dados existentes. Nunca pedir instalacao ou atualizacao do Pack, ZIP ou script inventado.
|
|
12
12
|
|
|
13
13
|
CRITICAL: Do not read `agents/squad-carrossel-arcane/**` looking for instructions — use the MCP `arcane` tools. Use those files only to EXECUTE what a step asks.
|
|
@@ -8,6 +8,6 @@ Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas
|
|
|
8
8
|
|
|
9
9
|
Se a tool recusar porque o Pack ainda não abriu (cadeado da jornada: contrato ativo e assinado), mostre a mensagem exatamente como veio — não é defeito, é o contrato. Se recusar por acesso vencido, cancelado ou suspenso, mostre a mensagem com o contato do suporte da Arcane e pare. Não improvisar, não tentar de novo, não usar memória.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Execucao local preparada pelo MCP:** quando o passo exigir arquivos, chame `squad_passo` com recurso_id `squad-edicao-arcane` e passo `preparar-execucao`. Execute o script retornado na pasta do negocio e continue o passo. O proprio MCP entrega os arquivos autorizados e preserva dados existentes. Nunca pedir instalacao ou atualizacao do Pack, ZIP ou script inventado.
|
|
12
12
|
|
|
13
13
|
CRITICAL: Do not read `agents/squad-edicao-arcane/**` looking for instructions — use the MCP `arcane` tools. Use those files only to EXECUTE what a step asks.
|
|
@@ -8,6 +8,6 @@ Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas
|
|
|
8
8
|
|
|
9
9
|
Se a tool recusar porque o Pack ainda não abriu (cadeado da jornada: contrato ativo e assinado), mostre a mensagem exatamente como veio — não é defeito, é o contrato. Se recusar por acesso vencido, cancelado ou suspenso, mostre a mensagem com o contato do suporte da Arcane e pare. Não improvisar, não tentar de novo, não usar memória.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Execucao local preparada pelo MCP:** quando o passo exigir arquivos, chame `squad_passo` com recurso_id `squad-low-ticket-arcane` e passo `preparar-execucao`. Execute o script retornado na pasta do negocio e continue o passo. O proprio MCP entrega os arquivos autorizados e preserva dados existentes. Nunca pedir instalacao ou atualizacao do Pack, ZIP ou script inventado.
|
|
12
12
|
|
|
13
13
|
CRITICAL: Do not read `agents/squad-low-ticket-arcane/**` looking for instructions — use the MCP `arcane` tools. Use those files only to EXECUTE what a step asks.
|
|
@@ -8,6 +8,6 @@ Ao ativar, mostre o selo de acesso que a tool devolver (as duas primeiras linhas
|
|
|
8
8
|
|
|
9
9
|
Se a tool recusar porque o Pack ainda não abriu (cadeado da jornada: contrato ativo e assinado), mostre a mensagem exatamente como veio — não é defeito, é o contrato. Se recusar por acesso vencido, cancelado ou suspenso, mostre a mensagem com o contato do suporte da Arcane e pare. Não improvisar, não tentar de novo, não usar memória.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Execucao local preparada pelo MCP:** quando o passo exigir arquivos, chame `squad_passo` com recurso_id `trafego-arcane` e passo `preparar-execucao`. Execute o script retornado na pasta do negocio e continue o passo. O proprio MCP entrega os arquivos autorizados e preserva dados existentes. Nunca pedir instalacao ou atualizacao do Pack, ZIP ou script inventado.
|
|
12
12
|
|
|
13
13
|
CRITICAL: Do not read `agents/trafego-arcane/**` looking for instructions — use the MCP `arcane` tools. Use those files only to EXECUTE what a step asks.
|
|
@@ -84,7 +84,7 @@ function versionNotice() {
|
|
|
84
84
|
writeState(st);
|
|
85
85
|
const latest = npmLatest();
|
|
86
86
|
if (!latest || cmpVer(latest, local) <= 0) return null;
|
|
87
|
-
return `[Auroq update] Saiu versao nova do sistema: v${local} instalada → v${latest} disponivel. Avise o expert em 1 linha e ofereca: "quer que eu atualize agora?" (o *
|
|
87
|
+
return `[Auroq update] Saiu versao nova do sistema: v${local} instalada → v${latest} disponivel. Avise o expert em 1 linha e ofereca: "quer que eu atualize agora?" (o *manutencao do Ops aplica tudo e preserva os dados dele; antes de aplicar, ele mostra o que mudou).`;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
function sessionStart() {
|
package/AGENTS.md
CHANGED
|
@@ -9,11 +9,11 @@ Sistema operacional de IA. Runtimes oficiais desta versão: Claude Code e Codex.
|
|
|
9
9
|
|
|
10
10
|
Todo conteúdo Arcane vem pelo MCP `arcane` (catálogos `auroq-core` e `arcane-pack`). Nunca procurar esse conteúdo em `agents/`. Se a tool falhar, mostre a mensagem e pare.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
**Execucao preparada pelo MCP:** Edicao, Carrossel, Trafego, Low Ticket e Bia recebem seus arquivos por `squad_passo` com o recurso_id do squad e passo `preparar-execucao`. O agente executa o script retornado na pasta do negocio e continua o trabalho. Anuncios funciona sem arquivos locais. Nao instalar nem atualizar Pack; nao pedir ZIP. Os arquivos locais servem apenas para executar o passo, nunca como fonte do metodo.
|
|
13
13
|
|
|
14
14
|
## O que fica no disco
|
|
15
15
|
|
|
16
|
-
Motor (CLI, hooks, scripts), pastas, git, casca (estes ponteiros), a parte executável dos squads híbridos do Pack (
|
|
16
|
+
Motor (CLI, hooks, scripts), pastas, git, casca (estes ponteiros), a parte executável dos squads híbridos do Pack (preparada pelo MCP) e o que VOCÊ criar (memória, docs, cockpit).
|
|
17
17
|
|
|
18
18
|
## O que vem ao vivo
|
|
19
19
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## 2.5.1 — 2026-09-04
|
|
2
|
+
|
|
3
|
+
- Motor registra arcane-mcp 0.5.0: diagnostico de tentativas, erros, ambiente e reenvio apos falha de rede. Conteudo de conversas e arquivos nao e coletado. Instaladores fixam esta versao validada.
|
|
4
|
+
|
|
5
|
+
## 2.5.0 — 2026-09-04
|
|
6
|
+
|
|
7
|
+
- Instaladores fixam o motor validado 2.5.0; novas publicacoes nao alteram silenciosamente um instalador antigo.
|
|
8
|
+
- Aposenta init/install/update: apenas orientam e saem sem alterar o negocio. Instalador oficial usa instalar; manutencao do motor usa manutencao.
|
|
9
|
+
- Conteudo e execucao de squads pelo MCP; remove receitas de Pack, ZIP e copia manual do Ops.
|
|
10
|
+
- Preserva pastas e comandos antigos, documentos, cockpit e CLAUDE.md existentes. Atualiza atalhos MCP antigos somente por hash exato, preservando agentes completos e personalizados.
|
|
11
|
+
- Migracao de negocio sem MCP exige consentimento antes de qualquer alteracao.
|
|
12
|
+
|
|
1
13
|
# Changelog
|
|
2
14
|
|
|
3
15
|
## [2.4.20] — 2026-09-04
|
package/README.md
CHANGED
|
@@ -29,43 +29,14 @@ irm https://arka.education/install.ps1 | iex
|
|
|
29
29
|
Depois, **feche e abra** o Claude Code ou o Codex — senao ele nao enxerga o que
|
|
30
30
|
acabou de ser instalado.
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
<summary>Caminho manual (se o instalador nao servir na sua maquina)</summary>
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
# 1. Crie uma pasta pro seu negocio
|
|
37
|
-
mkdir meu-negocio && cd meu-negocio
|
|
38
|
-
|
|
39
|
-
# 2. Instale o Auroq OS (gate: email + senha da Mentoria Arcane)
|
|
40
|
-
npx auroq-os init
|
|
41
|
-
|
|
42
|
-
# 3A. Abra o Claude Code
|
|
43
|
-
claude
|
|
44
|
-
|
|
45
|
-
# 4A. Ative o Companion
|
|
46
|
-
/auroq-companion
|
|
47
|
-
|
|
48
|
-
# OU 3B. Abra o Codex CLI
|
|
49
|
-
codex
|
|
50
|
-
|
|
51
|
-
# 4B. Ative o Companion
|
|
52
|
-
$companion
|
|
53
|
-
|
|
54
|
-
# OU 3C. Abra o Grok Build (no diretorio do negocio)
|
|
55
|
-
grok
|
|
56
|
-
|
|
57
|
-
# 4C. Ative o Companion (Grok le .claude/commands nativo — mesmo fluxo do Claude)
|
|
58
|
-
/auroq-companion
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
</details>
|
|
32
|
+
O caminho manual antigo foi aposentado. Use a instalacao guiada acima. Em negocio existente, peca ao Ops "manutencao do motor". Os agentes e squads chegam pelo MCP, sem instalacao ou atualizacao de Pack.
|
|
62
33
|
|
|
63
34
|
|
|
64
35
|
> **Grok:** nao precisa de `sync:codex`. Ele descobre `.claude/commands/`,
|
|
65
36
|
> `.claude/rules/` e `AGENTS.md` sozinho. Use Claude/Grok com slash commands;
|
|
66
37
|
> use Codex com `$nome` apos o sync de skills.
|
|
67
38
|
|
|
68
|
-
> **Acesso exclusivo para alunos da Mentoria Arcane.** O
|
|
39
|
+
> **Acesso exclusivo para alunos da Mentoria Arcane.** O instalador pede o mesmo email + senha
|
|
69
40
|
> que voce usa em [mentoria-arcane.vercel.app](https://mentoria-arcane.vercel.app).
|
|
70
41
|
> A sessao fica salva em `~/.arcane/credentials.json` e renova automaticamente.
|
|
71
42
|
|
|
@@ -73,7 +44,7 @@ grok
|
|
|
73
44
|
|
|
74
45
|
| Comando | O que faz |
|
|
75
46
|
|---------|-----------|
|
|
76
|
-
| `auroq-os
|
|
47
|
+
| `auroq-os manutencao` | Manutencao do motor no negocio existente; conteudo vem pelo MCP |
|
|
77
48
|
| `auroq-os clone` | Continua o SEU negocio em outra maquina (ou na maquina de um colaborador) — baixa tudo do GitHub, ja instalado |
|
|
78
49
|
| `auroq-os fix-gitignore` | Garante as protecoes de segredo no .gitignore (vault, .env, midia) e destraqueia segredos versionados |
|
|
79
50
|
| `auroq-os login` | Forca novo login (substitui credencial atual) |
|
|
@@ -114,7 +85,7 @@ o sistema e o dono, e o colaborador recebe as atualizacoes automaticamente ao ab
|
|
|
114
85
|
O Auroq OS tem duas partes:
|
|
115
86
|
|
|
116
87
|
- **Motor** (mora no seu computador): a estrutura de pastas, o git, os comandos e as regras.
|
|
117
|
-
E o que o instalador monta e o que o `*
|
|
88
|
+
E o que o instalador monta e o que o `*manutencao` atualiza.
|
|
118
89
|
- **Conteudo** (chega ao vivo): o cerebro dos agentes — Companion, Consultor, forjas e o
|
|
119
90
|
Pack Arcane — e servido em tempo real pelo servidor da mentoria, atraves de uma conexao
|
|
120
91
|
chamada MCP `arcane`. O instalador ja registra essa conexao no projeto; voce nao precisa
|
package/bin/auroq-os.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Auroq OS — Installer
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* npx
|
|
8
|
-
* node bin/auroq-os.js
|
|
7
|
+
* npx auroq-os@latest instalar (instalador oficial)
|
|
8
|
+
* node bin/auroq-os.js manutencao (negocio existente)
|
|
9
9
|
*
|
|
10
10
|
* @module auroq-os/installer
|
|
11
11
|
*/
|
|
@@ -278,7 +278,7 @@ async function runDoctor(targetDir) {
|
|
|
278
278
|
success(`Arquivos do sistema: ${HEALTH_CHECKS.length}/${HEALTH_CHECKS.length} no lugar`);
|
|
279
279
|
} else {
|
|
280
280
|
error(`Arquivos do sistema: faltam ${faltando}`);
|
|
281
|
-
problemas.push('
|
|
281
|
+
problemas.push('Peca manutencao do motor ao Ops dentro do Claude Code pra repor o que falta.');
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
// 2. O motor — e, principalmente, se quem abre pelo icone vai enxergar ele.
|
|
@@ -459,7 +459,7 @@ async function runDoctor(targetDir) {
|
|
|
459
459
|
// (rede domestica + antivirus) a aluna viu timeout em todas as que fez. Por isso:
|
|
460
460
|
// (1) o registro do Codex pede mais tempo, (2) instalacao/atualizacao ja baixam o
|
|
461
461
|
// pacote, (3) o doctor mede o arranque de verdade em vez de so olhar o registro.
|
|
462
|
-
const ARCANE_MCP_PIN = 'arcane-mcp@0.
|
|
462
|
+
const ARCANE_MCP_PIN = 'arcane-mcp@0.5.0';
|
|
463
463
|
const CODEX_MCP_STARTUP_SEC = 120;
|
|
464
464
|
const CODEX_ENV_MINIMO = ['PATH', 'PATHEXT', 'USERNAME', 'USERDOMAIN', 'USERPROFILE', 'TEMP', 'TMP',
|
|
465
465
|
'HOME', 'LOGNAME', 'SHELL', 'TERM', 'USER'];
|
|
@@ -508,7 +508,7 @@ function blocoCodexArcane(pin, opcoes) {
|
|
|
508
508
|
}
|
|
509
509
|
|
|
510
510
|
// Baixa o pacote do conteudo ao vivo com o MESMO nome que o registro usa (o cache do
|
|
511
|
-
// npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.
|
|
511
|
+
// npx e por nome+versao: `arcane-mcp` e `arcane-mcp@0.5.0` sao caches diferentes).
|
|
512
512
|
// `npx` no Windows e um .cmd: sem shell o Node recusa (EINVAL) e com `shell: true` o Node 24
|
|
513
513
|
// imprime um DeprecationWarning na tela do aluno (DEP0190). Chamar o cmd.exe direto, sem shell.
|
|
514
514
|
function comandoNpx(args) {
|
|
@@ -810,7 +810,10 @@ async function patchEnableAllProjectMcpServers(targetDir) {
|
|
|
810
810
|
}
|
|
811
811
|
|
|
812
812
|
// ─── INSTALACAO ──────────────────────────────────────────
|
|
813
|
-
async function init({ pasta = null } = {}) {
|
|
813
|
+
async function init({ pasta = null, maintenance = false } = {}) {
|
|
814
|
+
if (maintenance && (pasta || !(await fs.pathExists(path.join(process.cwd(), '.auroq-core'))))) {
|
|
815
|
+
throw new Error('Manutencao exige a raiz de um negocio existente, sem --pasta. Primeira instalacao pela plataforma.');
|
|
816
|
+
}
|
|
814
817
|
showBanner();
|
|
815
818
|
await sleep(500);
|
|
816
819
|
|
|
@@ -829,7 +832,7 @@ async function init({ pasta = null } = {}) {
|
|
|
829
832
|
error('');
|
|
830
833
|
error(` ${CYAN}mkdir meu-negocio${RESET}`);
|
|
831
834
|
error(` ${CYAN}cd meu-negocio${RESET}`);
|
|
832
|
-
error(` ${CYAN}npx auroq-os
|
|
835
|
+
error(` ${CYAN}npx auroq-os@latest instalar${RESET}`);
|
|
833
836
|
error('');
|
|
834
837
|
error('Troque "meu-negocio" pelo nome que quiser pro seu projeto.');
|
|
835
838
|
process.exit(1);
|
|
@@ -838,6 +841,17 @@ async function init({ pasta = null } = {}) {
|
|
|
838
841
|
// ─── GUARDRAIL: segunda maquina usa clone, nao init
|
|
839
842
|
// So pergunta em instalacao NOVA (pasta sem .auroq-core) — update/reinstall pula direto.
|
|
840
843
|
const isNewInstall = !(await fs.pathExists(path.join(targetDir, '.auroq-core')));
|
|
844
|
+
if (!isNewInstall) {
|
|
845
|
+
let hasMcp = false;
|
|
846
|
+
try { hasMcp = !!(await fs.readJson(path.join(targetDir, '.mcp.json'))).mcpServers?.arcane; } catch {}
|
|
847
|
+
if (!hasMcp) {
|
|
848
|
+
log('Este negocio usa o sistema antigo. Seus arquivos locais serao preservados.');
|
|
849
|
+
log('O conteudo novo passa a chegar pelo MCP enquanto seu acesso estiver ativo.');
|
|
850
|
+
if (!(await askYesNo('Quer migrar este negocio para o MCP? (s/N) '))) {
|
|
851
|
+
throw new Error('Migracao nao autorizada. Nada foi alterado.');
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
}
|
|
841
855
|
if (isNewInstall && process.env.AUROQ_INIT_MODE !== 'novo') {
|
|
842
856
|
const jaUsa = await askYesNo(` Voce JA usa o Auroq OS em outra maquina e quer continuar o MESMO negocio aqui? ${DIM}(s/N)${RESET} `);
|
|
843
857
|
if (jaUsa) {
|
|
@@ -884,7 +898,8 @@ async function init({ pasta = null } = {}) {
|
|
|
884
898
|
success('Gate de acesso ignorado em ambiente de teste');
|
|
885
899
|
} else {
|
|
886
900
|
try {
|
|
887
|
-
await auth.getValidSession();
|
|
901
|
+
if (isNewInstall) await auth.getValidSession();
|
|
902
|
+
else await auth.requireActiveAccess();
|
|
888
903
|
} catch (e) {
|
|
889
904
|
error(`Falha na autenticacao: ${e.message}`);
|
|
890
905
|
process.exit(1);
|
|
@@ -1079,45 +1094,9 @@ async function init({ pasta = null } = {}) {
|
|
|
1079
1094
|
log(`${DIM} Companion personalizado detectado: ${customName} — pulando companion.md generico${RESET}`);
|
|
1080
1095
|
}
|
|
1081
1096
|
|
|
1082
|
-
// Limpar commands antigos em camelCase (versoes anteriores usavam camelCase)
|
|
1083
|
-
const legacyCommands = ['cloneForge.md', 'mindForge.md', 'squadForge.md', 'workerForge.md', 'etlmaker.md'];
|
|
1084
|
-
// Nota: etlmaker.md nao muda de nome, os outros sim
|
|
1085
|
-
const camelToKebab = { 'cloneForge.md': 'clone-forge.md', 'mindForge.md': 'mind-forge.md', 'squadForge.md': 'squad-forge.md', 'workerForge.md': 'worker-forge.md' };
|
|
1086
|
-
let legacyCleaned = 0;
|
|
1087
|
-
for (const legacy of Object.keys(camelToKebab)) {
|
|
1088
|
-
const legacyPath = path.join(commandsDir, legacy);
|
|
1089
|
-
if (await fs.pathExists(legacyPath)) {
|
|
1090
|
-
await fs.remove(legacyPath);
|
|
1091
|
-
legacyCleaned++;
|
|
1092
|
-
}
|
|
1093
|
-
}
|
|
1094
|
-
if (legacyCleaned > 0) {
|
|
1095
|
-
log(`${DIM} Removidos ${legacyCleaned} commands antigos (camelCase → kebab-case)${RESET}`);
|
|
1096
|
-
}
|
|
1097
1097
|
}
|
|
1098
1098
|
|
|
1099
|
-
//
|
|
1100
|
-
const legacySquadsDir = path.join(targetDir, 'squads');
|
|
1101
|
-
if (await fs.pathExists(legacySquadsDir)) {
|
|
1102
|
-
const metaSquadNames = ['squad-forge', 'mind-forge', 'worker-forge', 'clone-forge', 'etlmaker', 'organizer', 'companion'];
|
|
1103
|
-
let migrated = 0;
|
|
1104
|
-
for (const name of metaSquadNames) {
|
|
1105
|
-
const oldPath = path.join(legacySquadsDir, name);
|
|
1106
|
-
if (await fs.pathExists(oldPath)) {
|
|
1107
|
-
await fs.remove(oldPath);
|
|
1108
|
-
migrated++;
|
|
1109
|
-
}
|
|
1110
|
-
}
|
|
1111
|
-
if (migrated > 0) {
|
|
1112
|
-
log(`${DIM} Removidos ${migrated} meta squads antigos de squads/ (agora ficam em agents/)${RESET}`);
|
|
1113
|
-
}
|
|
1114
|
-
// Se squads/ ficou vazia, remover a pasta
|
|
1115
|
-
const remaining = await fs.readdir(legacySquadsDir);
|
|
1116
|
-
if (remaining.length === 0) {
|
|
1117
|
-
await fs.remove(legacySquadsDir);
|
|
1118
|
-
log(`${DIM} Pasta squads/ vazia removida${RESET}`);
|
|
1119
|
-
}
|
|
1120
|
-
}
|
|
1099
|
+
// Pastas e comandos antigos pertencem ao aluno. Nunca excluir na manutencao.
|
|
1121
1100
|
|
|
1122
1101
|
// Atalhos do Pack Arcane. O conteudo chega ao vivo pelo MCP, mas o /comando
|
|
1123
1102
|
// (ex: /euriler) so existe se o arquivo estiver no disco — sem ele o Claude Code
|
|
@@ -1175,7 +1154,7 @@ async function init({ pasta = null } = {}) {
|
|
|
1175
1154
|
const dstExists = await fs.pathExists(dst);
|
|
1176
1155
|
// Framework files: SEMPRE sobrescrever (atualizar)
|
|
1177
1156
|
// Student files: so copiar se NAO existem (preservar dados)
|
|
1178
|
-
if (isStudentFile && dstExists) {
|
|
1157
|
+
if ((isStudentFile || file.startsWith('business/') || file.startsWith('docs/knowledge/') || file === '.claude/CLAUDE.md') && dstExists) {
|
|
1179
1158
|
// Nao sobrescrever dados do aluno
|
|
1180
1159
|
} else {
|
|
1181
1160
|
await guardarBootstrapLocal(targetDir, file, dst, dstExists);
|
|
@@ -1193,7 +1172,10 @@ async function init({ pasta = null } = {}) {
|
|
|
1193
1172
|
for (const file of packShimFiles) {
|
|
1194
1173
|
const src = path.join(sourceDir, file);
|
|
1195
1174
|
const dst = path.join(targetDir, file);
|
|
1196
|
-
|
|
1175
|
+
const exists = await fs.pathExists(dst);
|
|
1176
|
+
const known = require('../lib/legacy-shims.json')[file] || [];
|
|
1177
|
+
const officialOldShim = exists && known.includes(require('crypto').createHash('sha256').update(await fs.readFile(dst)).digest('hex'));
|
|
1178
|
+
if ((await fs.pathExists(src)) && (!exists || officialOldShim)) {
|
|
1197
1179
|
await fs.copy(src, dst);
|
|
1198
1180
|
shimsCriados++;
|
|
1199
1181
|
}
|
|
@@ -1246,7 +1228,7 @@ async function init({ pasta = null } = {}) {
|
|
|
1246
1228
|
const srcPath = path.join(sourceDir, src);
|
|
1247
1229
|
const dstPath = path.join(targetDir, src);
|
|
1248
1230
|
if (await fs.pathExists(srcPath)) {
|
|
1249
|
-
await fs.copy(srcPath, dstPath, { overwrite:
|
|
1231
|
+
await fs.copy(srcPath, dstPath, { overwrite: !src.startsWith('agents/') });
|
|
1250
1232
|
dirsCopied++;
|
|
1251
1233
|
}
|
|
1252
1234
|
}
|
|
@@ -1531,12 +1513,17 @@ ${DIM} Auroq OS v${PKG_VERSION} — Sistema Operacional de IA para Experts${RES
|
|
|
1531
1513
|
// ─── CLI ─────────────────────────────────────────────────
|
|
1532
1514
|
const command = process.argv[2];
|
|
1533
1515
|
|
|
1534
|
-
if (
|
|
1516
|
+
if (['init', 'install', 'update'].includes(command)) {
|
|
1517
|
+
error('Comando aposentado. Nada foi instalado ou alterado.');
|
|
1518
|
+
error('Primeira instalacao: https://arcane.arka.education/auroq');
|
|
1519
|
+
error('No negocio existente, peca ao Ops: manutencao do motor. Conteudo chega pelo MCP.');
|
|
1520
|
+
process.exitCode = 1;
|
|
1521
|
+
} else if (command === 'instalar' || command === 'manutencao') {
|
|
1535
1522
|
// `--pasta <nome>`: o instalador manda o CLI criar e entrar na pasta do negocio,
|
|
1536
1523
|
// em vez de depender de um `cd` ter dado certo la fora (PRD Embarque §6).
|
|
1537
1524
|
const iPasta = process.argv.indexOf('--pasta');
|
|
1538
1525
|
const pasta = iPasta !== -1 ? process.argv[iPasta + 1] : null;
|
|
1539
|
-
init({ pasta }).catch(err => {
|
|
1526
|
+
init({ pasta, maintenance: command === 'manutencao' }).catch(err => {
|
|
1540
1527
|
error(`Falha na instalacao: ${err.message}`);
|
|
1541
1528
|
process.exit(1);
|
|
1542
1529
|
});
|
|
@@ -1583,15 +1570,6 @@ if (command === 'init' || command === 'install') {
|
|
|
1583
1570
|
error(`Falha ao verificar acesso: ${err.message}`);
|
|
1584
1571
|
process.exit(1);
|
|
1585
1572
|
});
|
|
1586
|
-
} else if (command === 'update') {
|
|
1587
|
-
// Update e feito pelo Ops dentro do Claude Code, nao pelo CLI diretamente
|
|
1588
|
-
log(`${BOLD}Para atualizar o Auroq OS:${RESET}`);
|
|
1589
|
-
log('');
|
|
1590
|
-
log(` 1. Abra o Claude Code: ${CYAN}claude${RESET}`);
|
|
1591
|
-
log(` 2. Ative o Ops: ${CYAN}/AuroqOS:agents:ops${RESET}`);
|
|
1592
|
-
log(` 3. Digite: ${CYAN}*update${RESET}`);
|
|
1593
|
-
log('');
|
|
1594
|
-
log(`${DIM}O Ops atualiza o framework sem tocar nos seus dados.${RESET}`);
|
|
1595
1573
|
} else if (command === 'conectar-1password' || command === 'connect-1password') {
|
|
1596
1574
|
const onepassword = require('../lib/onepassword');
|
|
1597
1575
|
onepassword.connect().catch(e => {
|
|
@@ -1638,20 +1616,20 @@ if (command === 'init' || command === 'install') {
|
|
|
1638
1616
|
} else {
|
|
1639
1617
|
showBanner();
|
|
1640
1618
|
log(`${BOLD}Comandos disponiveis:${RESET}`);
|
|
1641
|
-
log(` ${CYAN}
|
|
1619
|
+
log(` ${CYAN}instalar${RESET} Instalar o motor pelo instalador oficial da plataforma`);
|
|
1642
1620
|
log(` ${CYAN}clone${RESET} Continuar o seu negocio NESTA maquina (segunda maquina / colaborador)`);
|
|
1643
1621
|
log(` ${CYAN}fix-gitignore${RESET} Garantir protecoes de segredo no .gitignore (vault, .env)`);
|
|
1644
1622
|
log(` ${CYAN}login${RESET} Autenticar com email + senha da Mentoria Arcane`);
|
|
1645
1623
|
log(` ${CYAN}logout${RESET} Encerrar sessao local`);
|
|
1646
1624
|
log(` ${CYAN}whoami${RESET} Mostrar usuario autenticado`);
|
|
1647
1625
|
log(` ${CYAN}check-access${RESET} Validar acesso ativo (online; exit 0=ativo, 1=bloqueado)`);
|
|
1648
|
-
log(` ${CYAN}
|
|
1626
|
+
log(` ${CYAN}manutencao${RESET} Manter o motor e a conexao MCP de um negocio existente`);
|
|
1649
1627
|
log(` ${CYAN}doctor${RESET} Diagnostico: arquivos, Node, MCP arcane, login e servidor`);
|
|
1650
1628
|
log(` ${CYAN}register-mcp${RESET} Reescrever o registro do conteudo ao vivo (MCP arcane) no projeto`);
|
|
1651
1629
|
log(` ${CYAN}sync-codex${RESET} Gerar e verificar as skills locais do Codex CLI ($nome)`);
|
|
1652
1630
|
log(` ${CYAN}conectar-1password${RESET} Conectar o 1Password CLI (token lido do Ctrl+C, nunca digitado)`);
|
|
1653
1631
|
log('');
|
|
1654
|
-
log(`${DIM}
|
|
1632
|
+
log(`${DIM}Primeira instalacao: https://arcane.arka.education/auroq${RESET}`);
|
|
1655
1633
|
log('');
|
|
1656
1634
|
}
|
|
1657
1635
|
|
package/installer/README.md
CHANGED
|
@@ -96,7 +96,7 @@ em vez do original, o teste quebra e diz qual é o certo.
|
|
|
96
96
|
|
|
97
97
|
## `--pasta`, no CLI
|
|
98
98
|
|
|
99
|
-
`npx auroq-os
|
|
99
|
+
`npx -y auroq-os@latest instalar --pasta minha-empresa` cria a pasta e instala dentro dela.
|
|
100
100
|
Existe pra quem não pode depender de um `cd` ter funcionado. O instalador do Mac
|
|
101
101
|
entra na pasta antes de chamar o `init`, então não precisa da opção — mas ela é a
|
|
102
102
|
rede de segurança de qualquer outro chamador.
|
package/installer/install.ps1
CHANGED
|
@@ -486,7 +486,7 @@ function Invoke-AuroqLogin {
|
|
|
486
486
|
# sucesso. Usado como pergunta de sim/nao, ele dizia "voce ja estava logado"
|
|
487
487
|
# pra quem nunca logou, pulava o portao e deixava a conta sem acesso chegar ate
|
|
488
488
|
# a criacao da pasta.
|
|
489
|
-
& (Get-AuroqNpx) -y auroq-os@
|
|
489
|
+
& (Get-AuroqNpx) -y auroq-os@2.5.1 check-access
|
|
490
490
|
if ($LASTEXITCODE -ne 0) {
|
|
491
491
|
Write-AuroqLog 'login' 'recusado'
|
|
492
492
|
Write-Host ''
|
|
@@ -574,7 +574,7 @@ function Invoke-AuroqInit {
|
|
|
574
574
|
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Sistema - seria montado aqui'; return }
|
|
575
575
|
|
|
576
576
|
Set-Location $script:AuroqPastaAlvo
|
|
577
|
-
& (Get-AuroqNpx) -y auroq-os@
|
|
577
|
+
& (Get-AuroqNpx) -y auroq-os@2.5.1 instalar
|
|
578
578
|
if ($LASTEXITCODE -ne 0) {
|
|
579
579
|
Write-AuroqLog 'init' 'falhou'
|
|
580
580
|
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.'
|
package/installer/install.sh
CHANGED
|
@@ -151,9 +151,9 @@ auroq_tem_terminal() {
|
|
|
151
151
|
# recebem pedaco do script no lugar da resposta dele.
|
|
152
152
|
auroq_npx_aluno() {
|
|
153
153
|
if [ -t 0 ]; then
|
|
154
|
-
npx -y auroq-os@
|
|
154
|
+
npx -y auroq-os@2.5.1 "$@"
|
|
155
155
|
else
|
|
156
|
-
npx -y auroq-os@
|
|
156
|
+
npx -y auroq-os@2.5.1 "$@" < /dev/tty
|
|
157
157
|
fi
|
|
158
158
|
}
|
|
159
159
|
|
|
@@ -552,7 +552,7 @@ auroq_rodar_init() {
|
|
|
552
552
|
cd "$PASTA_ALVO" || auroq_erro "Nao consegui entrar na pasta ${PASTA_ALVO}." "Rode o mesmo comando de novo."
|
|
553
553
|
# ligado no terminal de verdade: o `init` ainda pergunta se ele ja usa o Auroq
|
|
554
554
|
# em outra maquina (3a pergunta do §4.4), e essa resposta e do aluno.
|
|
555
|
-
if ! auroq_npx_aluno
|
|
555
|
+
if ! auroq_npx_aluno instalar; then
|
|
556
556
|
auroq_registrar_log "init" "falhou"
|
|
557
557
|
auroq_erro "A montagem do sistema parou no meio." "Rode o mesmo comando de novo. Se repetir, mande pro suporte o arquivo ~/.auroq/install.log"
|
|
558
558
|
fi
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
".claude/commands/trafegoArcane.md": [
|
|
3
|
+
"548a0ae1602dd33d86f43c127ade64fcd9239916e45674f78fa85809912fe7cf"
|
|
4
|
+
],
|
|
5
|
+
".claude/commands/squad-low-ticket-arcane.md": [
|
|
6
|
+
"6fa42102f4e42b87de63a7c4ec56808b087466e0fde9565b16b55453ee0860de"
|
|
7
|
+
],
|
|
8
|
+
".claude/commands/squad-anuncios-arcane.md": [
|
|
9
|
+
"0a1289830a291c5892dc40584825a535af86f1ac41188cceeffa98b54f2f941d"
|
|
10
|
+
],
|
|
11
|
+
".claude/commands/squad-carrossel-arcane.md": [
|
|
12
|
+
"bf1229d86f56639d37406e74fc6f611c710614b7affa874c6a870153c78624fe"
|
|
13
|
+
],
|
|
14
|
+
".claude/commands/squad-edicao-arcane.md": [
|
|
15
|
+
"f239366b9bc2284cbbf34c50f93545f831875a9dd8e2e0bdc2306de82c8d061a"
|
|
16
|
+
],
|
|
17
|
+
".claude/commands/instalacaoBia.md": [
|
|
18
|
+
"4ce63268ca2d3099ee5b171130a1234ddb6df96993b7512fe030893dd7b6ed28"
|
|
19
|
+
]
|
|
20
|
+
}
|
package/package.json
CHANGED
|
@@ -74,6 +74,10 @@ function collectSkills() {
|
|
|
74
74
|
for (const entry of fs.readdirSync(commandRoot, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
75
75
|
if (!entry.isFile() || !entry.name.endsWith('.md')) continue;
|
|
76
76
|
const basename = entry.name.replace(/\.md$/, '');
|
|
77
|
+
// Aposentar distribuicao nao apaga comandos vitalicios. Se as duas grafias
|
|
78
|
+
// oficiais coexistem, a ponte usa a antiga preservada; nao mascara outras colisoes.
|
|
79
|
+
const legacyAlias = { 'clone-forge': 'cloneForge', 'mind-forge': 'mindForge', 'squad-forge': 'squadForge', 'worker-forge': 'workerForge' }[basename.replace(/^auroq-/, '')];
|
|
80
|
+
if (legacyAlias && fs.existsSync(path.join(commandRoot, `${legacyAlias}.md`))) continue;
|
|
77
81
|
const name = kebab(basename.replace(/^auroq-/, ''));
|
|
78
82
|
registerSkill(name, path.join(commandRoot, entry.name));
|
|
79
83
|
}
|