auroq-os 2.6.4 → 2.6.5

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.4
4
+ version: 2.6.5
5
5
  installedAt: '2026-03-16'
6
6
 
7
7
  ide:
package/.claude/CLAUDE.md CHANGED
@@ -4,6 +4,6 @@ Sistema operacional de IA para o negócio. Você manda e julga; a IA executa.
4
4
 
5
5
  Ative um agente pelo comando (`/companion`, `$companion`, `@companion`). Todo conteúdo Arcane (Companion interno, Consultor, forjas, Pack) vem pelo MCP `arcane` — nunca procurar em `agents/`.
6
6
 
7
- Sua memória, seus documentos e suas conversas nunca saem da sua máquina. O que registramos é qual conteúdo licenciado foi entregue, quando e pra qual conta — igual a uma nota de entrega.
7
+ Sua memória e seus documentos ficam na sua máquina e no seu GitHub privado (senhas e `business/vault/` ficam fora). O histórico das sessões com os squads só vai para a Arka se você autorizar na plataforma, e você pode retirar a autorização quando quiser. Além disso, a Arka registra qual conteúdo licenciado foi entregue, quando e pra qual conta — igual a uma nota de entrega.
8
8
 
9
9
  Rules em `.claude/rules/`. Constitution em `.auroq-core/constitution.md`.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## 2.6.5 — 2026-10-02
2
+
3
+ ### Pasta do negocio nunca vai inteira pro ar na Vercel
4
+
5
+ - O Bootstrap 1 ligava a publicacao automatica da Vercel (`vercel link` + `vercel git connect`) na raiz da pasta do negocio. Sem site, a Vercel publica a pasta inteira: memoria, `business/`, `docs/`, `.claude/`, `.synapse/` num endereco aberto (conferido com `vercel build` num projeto de teste).
6
+ - Ops (auroq-core 2.3.21): a FASE 6 so faz login e confere a trava. A publicacao automatica liga no primeiro site, com `--root-directory` na pasta do site e conferencia em `vercel project inspect` antes do `git connect`. Pasta ja ligada na raiz: o Ops aponta a raiz pro site ou desliga o git (sem apagar nada no ar).
7
+ - `instalar`, `manutencao`, `clone` e `fix-gitignore` gravam um `.vercelignore` que nega memoria, negocio, documentos e configuracao. Linhas proprias do aluno ficam; rodar de novo nao duplica.
8
+
9
+ ### Supabase sem segredo na conversa
10
+
11
+ - Ops FASE 7: o login do Supabase vai numa janela separada do Terminal/PowerShell aberta pelo aluno na pasta do negocio. Acabou o roteiro "gera token com validade Nunca e cola aqui no terminal" (o terminal, ali, era a conversa). Token, codigo e senha do banco colados por engano: o Ops avisa, nao repete e manda revogar.
12
+ - Windows: Supabase pelo instalador oficial (Scoop ou o `.exe` da pagina de releases), nunca `npm install -g`.
13
+ - Antes do `supabase link`, o Ops mostra os projetos da conta e o aluno confirma qual e deste negocio; projeto de outro produto ou de producao nao e usado.
14
+
15
+ ### Instalador do Mac nao tira mais o `claude` do caminho
16
+
17
+ - `auroq_aplicar_path` reescrevia o bloco do perfil so com a pasta da vez: no Mac sem Node, a pasta do motor (segunda chamada) apagava `~/.local/bin` e o aluno ficava com `claude: command not found`. O bloco agora guarda as duas pastas (motor na frente), sem duplicar ao reinstalar, descarta pasta que nao existe mais e aceita caminho com espaco. Testes com shell limpo (bash e zsh).
18
+
19
+ ### Texto de privacidade verdadeiro
20
+
21
+ - `casca/.claude/CLAUDE.md` dizia que memoria, documentos e conversas "nunca saem da sua maquina". Agora: ficam na maquina e no GitHub privado do aluno; o historico das sessoes com squads so vai para a Arka se ele autorizar na plataforma, e a autorizacao pode ser retirada.
22
+ - Mantem `arcane-mcp@0.7.0`. Instaladores do repositorio preparados para 2.6.5.
23
+
1
24
  ## 2.6.4 — 2026-09-29
2
25
 
3
26
  ### Companion com o nome do aluno nao trava mais a atualizacao
package/README.md CHANGED
@@ -55,6 +55,11 @@ O caminho manual antigo foi aposentado. Use a instalacao guiada acima. Em negoci
55
55
  | `auroq-os sync-codex` | Regenera e verifica as skills locais do Codex |
56
56
  | `auroq-os conectar-1password` | Conecta o 1Password CLI — le o token de Service Account direto do Ctrl+C (nunca digitado nem exposto), instala o `op` se faltar, valida online e salva permanente (Mac/Windows) |
57
57
 
58
+ > **Seguranca do token 1Password:** o token fica salvo no computador e qualquer programa seu consegue usa-lo.
59
+ > Crie a Service Account com acesso a **um cofre so**, dedicado ao Auroq (o cofre `Claude`), sem senhas
60
+ > pessoais, de banco ou da empresa. Permissao **so leitura**; libere escrita apenas nesse cofre se quiser
61
+ > que o Auroq guarde ali as credenciais novas que voce conectar.
62
+
58
63
  Dentro do projeto instalado, os mesmos checks ficam disponiveis como
59
64
  `npm run auroq:sync:codex`, `npm run auroq:sync:codex:check` e
60
65
  `npm run auroq:validate`. O instalador adiciona esses scripts sem sobrescrever
@@ -241,13 +246,13 @@ agents/ → Seu exercito (companion, workers, minds, squads)
241
246
 
242
247
  ## Observabilidade e integridade do motor
243
248
 
244
- Apos publicacao, `npx -y auroq-os@2.6.4 doctor` mostra a fila local segura e os comandos pinados de
245
- manutencao/diagnostico. `npx -y auroq-os@2.6.4 manutencao` preserva o caminho existente
249
+ Apos publicacao, `npx -y auroq-os@2.6.5 doctor` mostra a fila local segura e os comandos pinados de
250
+ manutencao/diagnostico. `npx -y auroq-os@2.6.5 manutencao` preserva o caminho existente
246
251
  de consentimento legado, studentFiles, customizacoes e dados do negocio. Nao ha
247
252
  migracao forcada. O registro MCP aponta para `arcane-mcp@0.7.0` — o pin mora no campo
248
253
  `arcaneMcpPin` do package.json (fonte unica; o servidor le o mesmo campo no npm).
249
254
  `npm run release:verify` recusa publicar com um pin que o npm nao resolva.
250
- Os instaladores do repositorio ficam preparados para 2.6.4; as copias publicas so recebem
255
+ Os instaladores do repositorio ficam preparados para 2.6.5; as copias publicas so recebem
251
256
  a versao apos os gates nativos e a verificacao do tarball publicado.
252
257
  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.
253
258
 
package/bin/auroq-os.js CHANGED
@@ -353,6 +353,30 @@ async function untrackSecrets(targetDir) {
353
353
  return tracked;
354
354
  }
355
355
 
356
+ // ─── TRAVA DA VERCEL (.vercelignore canonico) ────────────
357
+ // A pasta do negocio nao e um site. Se alguem ligar a Vercel na raiz do repositorio
358
+ // (Bootstrap antigo: `vercel link` + `vercel git connect` sem site), sem esta trava a
359
+ // Vercel publica memoria, documentos e configuracao num endereco aberto. Com a raiz
360
+ // na pasta do site (o certo), este arquivo nem e lido. Linhas proprias do expert ficam.
361
+ const VERCELIGNORE_HEADER = '# ── Trava do Auroq OS: a pasta do negocio nao vai ao ar (adicionada automaticamente) ──';
362
+ const VERCELIGNORE_PROTECTIONS = [
363
+ '.claude/', '.codex/', '.agents/', '.synapse/', '.auroq-core/', '.auroq/', '.git/',
364
+ 'agents/', 'business/', 'docs/', 'memoria/', 'memory/', 'squads/',
365
+ 'AGENTS.md', 'CLAUDE.md', '*.md', '.env', '.env.*', '*.key', '*.pem', '.npmrc',
366
+ ];
367
+
368
+ async function ensureVercelignore(targetDir) {
369
+ const viPath = path.join(targetDir, '.vercelignore');
370
+ const existing = (await fs.pathExists(viPath)) ? await fs.readFile(viPath, 'utf8') : '';
371
+ const have = new Set(existing.split('\n').map(l => l.trim()).filter(Boolean));
372
+ const missing = VERCELIGNORE_PROTECTIONS.filter(l => !have.has(l));
373
+ if (!missing.length) return [];
374
+ const base = existing.trim().length ? existing.replace(/\s*$/, '\n\n') : '';
375
+ const header = have.has(VERCELIGNORE_HEADER) ? '' : `${VERCELIGNORE_HEADER}\n`;
376
+ await fs.writeFile(viPath, base + header + missing.join('\n') + '\n');
377
+ return missing;
378
+ }
379
+
356
380
  async function applySecretProtections(targetDir) {
357
381
  const added = await ensureGitignore(targetDir);
358
382
  if (added.length) {
@@ -360,6 +384,10 @@ async function applySecretProtections(targetDir) {
360
384
  } else {
361
385
  success('.gitignore ja protege segredos e runtime');
362
386
  }
387
+ const travaVercel = await ensureVercelignore(targetDir);
388
+ if (travaVercel.length) {
389
+ success('Trava da Vercel no lugar: memoria, documentos e configuracao do negocio nunca vao ao ar');
390
+ }
363
391
  const untracked = await untrackSecrets(targetDir);
364
392
  if (untracked.length) {
365
393
  warn(`${untracked.length} arquivo(s) sensivel(is) removido(s) do controle de versao (continuam no seu disco):`);
@@ -2430,6 +2458,6 @@ if (['init', 'install', 'update'].includes(command)) {
2430
2458
  log('');
2431
2459
  }
2432
2460
 
2433
- if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane, lerBlocoArcane, lerEnvDoBloco, limparArcaneDoGlobal, envComoCodex, argumentosCodexSmoke, avaliarEventosCodex, rotulo, ARCANE_MCP_PIN };
2461
+ if (process.env.AUROQ_EXPORTA_INTERNOS === '1') module.exports = { blocoCodexArcane, envCodexArcane, lerBlocoArcane, lerEnvDoBloco, limparArcaneDoGlobal, envComoCodex, argumentosCodexSmoke, avaliarEventosCodex, rotulo, ARCANE_MCP_PIN, ensureVercelignore, VERCELIGNORE_PROTECTIONS };
2434
2462
 
2435
2463
  }
@@ -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.4 check-access
592
+ & (Get-AuroqNpx) -y auroq-os@2.6.5 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.4 instalar
680
+ & (Get-AuroqNpx) -y auroq-os@2.6.5 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.4 "$@"
222
+ npx -y auroq-os@2.6.5 "$@"
223
223
  else
224
- npx -y auroq-os@2.6.4 "$@" < /dev/tty
224
+ npx -y auroq-os@2.6.5 "$@" < /dev/tty
225
225
  fi
226
226
  }
227
227
 
@@ -245,6 +245,32 @@ auroq_aplicar_path() {
245
245
  local bin="${2:-}"
246
246
  local tmp="${arquivo}.auroq-tmp.$$"
247
247
  [ -f "$arquivo" ] || : > "$arquivo"
248
+ # O instalador publica DUAS pastas, em chamadas separadas: a da ferramenta
249
+ # (~/.local/bin, onde mora o `claude`) e a do motor. Reescrever o bloco so com
250
+ # a pasta da vez apagava a outra: Mac sem Node terminava com `claude: command
251
+ # not found`. Agora o bloco guarda todas as pastas do Auroq que ainda existem,
252
+ # a da vez na frente (o motor entra por ultimo e fica na frente do Node velho).
253
+ local pastas="$bin"
254
+ local antiga
255
+ while IFS= read -r antiga; do
256
+ [ -n "$antiga" ] || continue
257
+ [ "$antiga" = "$bin" ] && continue
258
+ [ -d "$antiga" ] || continue
259
+ case ":${pastas}:" in *":${antiga}:"*) continue ;; esac
260
+ pastas="${pastas}:${antiga}"
261
+ done <<EOF
262
+ $(awk '
263
+ /^# >>> auroq >>>$/ { dentro=1; next }
264
+ /^# <<< auroq <<<$/ { dentro=0; next }
265
+ dentro == 1 && /^export PATH="/ {
266
+ linha=$0
267
+ sub(/^export PATH="/, "", linha)
268
+ sub(/:\$PATH"$/, "", linha)
269
+ n=split(linha, partes, ":")
270
+ for (i=1; i<=n; i++) if (partes[i] != "") print partes[i]
271
+ }
272
+ ' "$arquivo" 2>/dev/null)
273
+ EOF
248
274
  # tira o bloco antigo (se houver) e escreve o novo — nunca empilha
249
275
  awk '
250
276
  /^# >>> auroq >>>$/ { pulando=1; next }
@@ -253,8 +279,8 @@ auroq_aplicar_path() {
253
279
  ' "$arquivo" > "$tmp" 2>/dev/null || cp "$arquivo" "$tmp"
254
280
  {
255
281
  printf '# >>> auroq >>>\n'
256
- printf '# Motor do Auroq OS. Bloco gerado pelo instalador — pode apagar se desinstalar.\n'
257
- printf 'export PATH="%s:$PATH"\n' "$bin"
282
+ printf '# Motor e ferramentas do Auroq OS. Bloco gerado pelo instalador — pode apagar se desinstalar.\n'
283
+ printf 'export PATH="%s:$PATH"\n' "$pastas"
258
284
  printf '# <<< auroq <<<\n'
259
285
  } >> "$tmp"
260
286
  mv "$tmp" "$arquivo"
@@ -191,6 +191,19 @@ function persistToken(token) {
191
191
 
192
192
  // ─── Comando principal ───────────────────────────────────
193
193
 
194
+ // Orientacao de escopo: o token fica salvo no computador e qualquer programa do
195
+ // aluno consegue usa-lo, entao a Service Account deve alcancar so um cofre
196
+ // dedicado. "Claude" e o cofre que os agentes do Auroq usam (ops.md).
197
+ function accessTips() {
198
+ log(`${BOLD}Seguranca do token (recomendado):${RESET}`);
199
+ log(' - Crie a Service Account com acesso a UM cofre so, dedicado ao Auroq');
200
+ log(` (o cofre ${CYAN}"Claude"${RESET}), sem suas senhas pessoais, de banco ou da empresa.`);
201
+ log(' - Permissao: so leitura. Se quiser que o Auroq guarde credenciais novas');
202
+ log(' pra voce nesse cofre, libere tambem escrita — mas so nesse cofre.');
203
+ log(` ${DIM}- O token fica salvo neste computador e qualquer programa seu consegue usa-lo:${RESET}`);
204
+ log(` ${DIM} com o cofre dedicado, um vazamento so alcanca o que esta nele.${RESET}`);
205
+ }
206
+
194
207
  async function connect() {
195
208
  console.log(`\n${PURPLE}${BOLD} Conectar 1Password — Auroq OS${RESET}`);
196
209
 
@@ -223,6 +236,8 @@ async function connect() {
223
236
  log(`${BOLD}Como resolver:${RESET}`);
224
237
  log(` 1. Abra o 1Password e copie o seu token de Service Account (${CYAN}Ctrl/Cmd + C${RESET})`);
225
238
  log(` 2. ${BOLD}Sem copiar mais nada${RESET}, rode este comando de novo`);
239
+ log('');
240
+ accessTips();
226
241
  process.exit(1);
227
242
  }
228
243
  ok('Token encontrado (formato valido)');
@@ -258,6 +273,8 @@ ${GREEN}${BOLD} ✅ 1Password conectado com sucesso.${RESET}
258
273
  ${DIM} A conexao e permanente — voce nao precisa repetir este processo.${RESET}
259
274
  ${restartHint}
260
275
  `);
276
+ accessTips();
277
+ log('');
261
278
  }
262
279
 
263
280
  module.exports = {
@@ -2,7 +2,7 @@
2
2
  "schema": 1,
3
3
  "algorithm": "sha256",
4
4
  "scope": "packaged-runtime-and-cascas",
5
- "version": "2.6.4",
5
+ "version": "2.6.5",
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": "3052aab9e21a7b36788f5141a7d34ce6baa87c482ac18762c306b84b24ffc5c9"
13
+ "sha256": "8134b48404278f57dd5fa423638a486ffc0b9d6fd8e0c8207ee0332e6ffc3456"
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": "7a9fd719e1ddc2fb18000b9f237ec2fdb0b605ed111c6e58dccef890f2d68cb1"
209
+ "sha256": "f0cfd3e5434118c618a1a48b93902ff38eb70b340c44a5af13bcc7130b45c853"
210
210
  },
211
211
  {
212
212
  "path": "lib/ahi/client.mjs",
@@ -242,7 +242,7 @@
242
242
  },
243
243
  {
244
244
  "path": "lib/onepassword.js",
245
- "sha256": "a65d425182e0698d3f80b8d81bb088b13c5e5b60ae1aa92b095ab38d60e22ea9"
245
+ "sha256": "e14a7b5347e46f48d7f319c010e019f503f206d6dee8a37455ae71c77bed2635"
246
246
  },
247
247
  {
248
248
  "path": "lib/supabase.js",
@@ -258,7 +258,7 @@
258
258
  },
259
259
  {
260
260
  "path": "package.json",
261
- "sha256": "9c2cafc77bfc679534da059fbcb7a847ca284da5d9074e138308d329aa6aef76"
261
+ "sha256": "687f311ba5fadb11f900e924d16ac3ec683f6459d3164907a008229621889444"
262
262
  },
263
263
  {
264
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.4",
3
+ "version": "2.6.5",
4
4
  "arcaneMcpPin": "0.7.0",
5
5
  "description": "Auroq OS — Sistema Operacional de IA para Experts",
6
6
  "bin": {