auroq-os 2.8.1 → 2.8.2
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/como-funciona.md +4 -5
- package/.auroq-core/core-config.yaml +1 -1
- package/.claude/CLAUDE.md +2 -3
- package/.claude/rules/agent-authority.md +8 -5
- package/.claude/rules/mcp-usage.md +2 -2
- package/.claude/rules/memoria-inteligente.md +2 -2
- package/.claude/rules/operacao-autonoma.md +11 -2
- package/.claude/rules/puxar-e-entregar.md +7 -7
- package/.claude/settings.json +7 -0
- package/.synapse/agent-ops +1 -1
- package/AGENTS.md +40 -14
- package/CHANGELOG.md +75 -0
- package/README.md +46 -12
- package/agents/organizer/agents/organizer.md +4 -4
- package/bin/auroq-os.js +33 -5
- package/installer/install.ps1 +2 -2
- package/installer/install.sh +2 -2
- package/lib/cofre.js +1453 -0
- package/lib/infisical-api.js +670 -0
- package/lib/infisical-cli.js +869 -0
- package/lib/infisical.js +1271 -0
- package/lib/legacy-shims.json +2 -1
- package/lib/onepassword.js +1315 -22
- package/lib/runtime-integrity.json +23 -7
- package/package.json +3 -3
package/bin/auroq-os.js
CHANGED
|
@@ -39,6 +39,9 @@ runRuntime(telemetry);
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
if(process.env.AUROQ_EXPORTA_INTERNOS==='1')runRuntime({runtimeReady(){}});
|
|
42
|
+
// `segredo ler|gravar|listar|apagar|qual`: os agentes chamam isso a cada credencial. Caminho leve de proposito:
|
|
43
|
+
// sem telemetria, sem flush e sem banner (cada leitura que falha, como "nao encontrado", sairia como erro de instalacao).
|
|
44
|
+
else if(process.argv[2]==='segredo')require('../lib/cofre').segredoCli(process.argv.slice(3)).then(code=>{process.exitCode=code;}).catch(()=>{console.error('AUROQ_ERRO codigo=falha mensagem="Falha inesperada ao falar com o cofre."');process.exitCode=1;});
|
|
42
45
|
else observedMain().catch(()=>{console.error('[auroq-os] BOOTSTRAP_IMPORT');process.exitCode=1;});
|
|
43
46
|
|
|
44
47
|
function runRuntime(telemetry) {
|
|
@@ -234,6 +237,10 @@ function mudouAlgoDeAbertura(antes, depois) {
|
|
|
234
237
|
// controla vem do modelo; permissions/statusLine/env do aluno ficam; chave que o modelo nao tem
|
|
235
238
|
// fica; hooks do aluno ficam e os do framework sao trocados pelos do modelo, sem duplicar.
|
|
236
239
|
const HOOK_DO_FRAMEWORK = /(?:^|[\s"'\\/])(?:auroq-sync|synapse-engine|ahi-capture|precompact-session-digest)\.cjs\b/;
|
|
240
|
+
// Gancho de IA do sistema (type "prompt", sem `command`): o texto comeca com uma marca `[auroq-...]`.
|
|
241
|
+
// Sem ela, a manutencao o tomava por gancho do aluno e o duplicava a cada versao.
|
|
242
|
+
const MARCA_DO_FRAMEWORK = /^\s*\[auroq-[a-z-]+\]/;
|
|
243
|
+
const ehHookDoFramework = h => HOOK_DO_FRAMEWORK.test(String(h?.command || '')) || MARCA_DO_FRAMEWORK.test(String(h?.prompt || ''));
|
|
237
244
|
const CHAVES_DO_ALUNO = ['permissions', 'statusLine', 'env'];
|
|
238
245
|
const temChave = (obj, chave) => Object.prototype.hasOwnProperty.call(obj, chave);
|
|
239
246
|
|
|
@@ -243,7 +250,7 @@ function mesclarHooksDoProjeto(doModelo, doAluno) {
|
|
|
243
250
|
for (const evento of new Set([...Object.keys(doModelo), ...Object.keys(aluno)])) {
|
|
244
251
|
const proprios = (Array.isArray(aluno[evento]) ? aluno[evento] : [])
|
|
245
252
|
.map(g => (ehObjeto(g) && Array.isArray(g.hooks)
|
|
246
|
-
? { ...g, hooks: g.hooks.filter(h => !
|
|
253
|
+
? { ...g, hooks: g.hooks.filter(h => !ehHookDoFramework(h)) }
|
|
247
254
|
: g))
|
|
248
255
|
.filter(g => !(ehObjeto(g) && Array.isArray(g.hooks) && g.hooks.length === 0));
|
|
249
256
|
const grupos = [...(Array.isArray(doModelo[evento]) ? doModelo[evento] : []), ...proprios];
|
|
@@ -1693,7 +1700,7 @@ async function init({ pasta = null, maintenance = false, modoAgente = false, mig
|
|
|
1693
1700
|
log(`Rode: ${CYAN}npx auroq-os clone${RESET}`);
|
|
1694
1701
|
log('');
|
|
1695
1702
|
log(`${DIM}Ele baixa o seu negocio inteiro do GitHub — sistema, memoria e documentos —${RESET}`);
|
|
1696
|
-
log(`${DIM}e deixa tudo pronto. Depois e so reconectar o cofre com *conectar-
|
|
1703
|
+
log(`${DIM}e deixa tudo pronto. Depois e so reconectar o cofre com *conectar-cofre.${RESET}`);
|
|
1697
1704
|
log('');
|
|
1698
1705
|
process.exit(0);
|
|
1699
1706
|
}
|
|
@@ -2385,7 +2392,7 @@ ${DIM} Uma vez so, nesta maquina:${RESET}
|
|
|
2385
2392
|
${CYAN}cd ${destName}${RESET}
|
|
2386
2393
|
${CYAN}claude${RESET} ${DIM}ou${RESET} ${CYAN}codex${RESET}
|
|
2387
2394
|
${CYAN}/AuroqOS:agents:ops${RESET}
|
|
2388
|
-
${CYAN}*conectar-
|
|
2395
|
+
${CYAN}*conectar-cofre${RESET} ${DIM}— reconectar o cofre de senhas (1Password ou Infisical gratis; ele pergunta qual)${RESET}
|
|
2389
2396
|
${DIM}(dono do negocio: se o sistema pedir login em algum momento, ${RESET}${CYAN}npx auroq-os login${RESET}${DIM})${RESET}
|
|
2390
2397
|
|
|
2391
2398
|
${DIM} Ritual de todo dia, em toda maquina:${RESET}
|
|
@@ -2480,10 +2487,29 @@ if (['init', 'install', 'update'].includes(command)) {
|
|
|
2480
2487
|
});
|
|
2481
2488
|
} else if (command === 'conectar-1password' || command === 'connect-1password') {
|
|
2482
2489
|
const onepassword = require('../lib/onepassword');
|
|
2483
|
-
|
|
2490
|
+
// Padrao: cria o cofre Claude e a chave do agente sozinho (o aluno aprova uma vez no app).
|
|
2491
|
+
// `--agente` imprime a linha AUROQ_RESULTADO que o Ops le; `--manual` e o plano B escondido.
|
|
2492
|
+
onepassword.connect({ argv: process.argv.slice(3) }).then(r => {
|
|
2493
|
+
// Erro que o aluno ou o plano dele resolve (sem internet, conta de empresa, dois cofres Claude...) nao e
|
|
2494
|
+
// instalacao quebrada: mesmo desfecho "etapa do fluxo" da manutencao (chega como null, sem alarme).
|
|
2495
|
+
if (r && r.status === 'erro' && onepassword.isStudentActionable(r.codigo)) telemetry.codigoDoDesfecho = 'UPDATE_NEEDS_STUDENT';
|
|
2496
|
+
// Cofre ativo do aluno: o comando comum `segredo` precisa saber que e o 1Password (nunca falha a conexao).
|
|
2497
|
+
// Quem ja usa o Infisical (pronto) continua nele ate a migracao; o modo --manual termina ok sem devolver resultado.
|
|
2498
|
+
return require('../lib/cofre').registrarSeOk(r, '1password', {}, process.argv.slice(3));
|
|
2499
|
+
}).catch(e => {
|
|
2484
2500
|
error(`Falha ao conectar 1Password: ${e.message}`);
|
|
2485
2501
|
process.exit(1);
|
|
2486
2502
|
});
|
|
2503
|
+
} else if (command === 'conectar-cofre' || command === 'connect-vault') {
|
|
2504
|
+
// Escolha do cofre: 1Password (pago, recomendado) ou Infisical (gratis). Sem --cofre e sem cofre em andamento,
|
|
2505
|
+
// devolve a pergunta ao Ops/Companion (AUROQ_RESULTADO cofre=aguardando codigo=escolher-cofre).
|
|
2506
|
+
const cofre = require('../lib/cofre');
|
|
2507
|
+
cofre.conectarCofre(process.argv.slice(3)).then(r => {
|
|
2508
|
+
if (r && r.status === 'erro' && cofre.isStudentActionable(r)) telemetry.codigoDoDesfecho = 'UPDATE_NEEDS_STUDENT';
|
|
2509
|
+
}).catch(e => {
|
|
2510
|
+
error(`Falha ao conectar o cofre: ${e.message}`);
|
|
2511
|
+
process.exit(1);
|
|
2512
|
+
});
|
|
2487
2513
|
} else if (command === 'doctor' || command === 'diagnostico') {
|
|
2488
2514
|
// `auth.sair`: o doctor termina logo depois de falar com o servidor (Node 24 no Windows).
|
|
2489
2515
|
runDoctor(process.cwd(), { leve: process.argv.includes('--leve') }).then(code => auth.sair(code)).catch(e => {
|
|
@@ -2546,7 +2572,9 @@ if (['init', 'install', 'update'].includes(command)) {
|
|
|
2546
2572
|
log(` ${CYAN}register-mcp${RESET} Reescrever o registro do conteudo ao vivo (MCP arcane) no projeto`);
|
|
2547
2573
|
log(` ${CYAN}sync-codex${RESET} Gerar e verificar as skills locais do Codex CLI ($nome)`);
|
|
2548
2574
|
log(` ${CYAN}historico${RESET} Estado da captura do trabalho (prevista nos Termos de Uso; desliga em Minha Conta)`);
|
|
2549
|
-
log(` ${CYAN}conectar-
|
|
2575
|
+
log(` ${CYAN}conectar-cofre${RESET} Escolher e conectar o cofre de senhas: 1Password (pago, recomendado) ou Infisical (gratis)`);
|
|
2576
|
+
log(` ${CYAN}conectar-1password${RESET} Conectar o 1Password (cria o cofre e a chave sozinho; voce so aprova uma vez no app)`);
|
|
2577
|
+
log(` ${CYAN}segredo${RESET} Ler, gravar, listar ou apagar uma credencial no cofre do aluno (vale para 1Password e Infisical)`);
|
|
2550
2578
|
log('');
|
|
2551
2579
|
log(`${DIM}Primeira instalacao: https://arcane.arka.education/auroq${RESET}`);
|
|
2552
2580
|
log('');
|
package/installer/install.ps1
CHANGED
|
@@ -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.8.
|
|
592
|
+
& (Get-AuroqNpx) -y auroq-os@2.8.2 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.8.
|
|
680
|
+
& (Get-AuroqNpx) -y auroq-os@2.8.2 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.'
|
package/installer/install.sh
CHANGED
|
@@ -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.8.
|
|
222
|
+
npx -y auroq-os@2.8.2 "$@"
|
|
223
223
|
else
|
|
224
|
-
npx -y auroq-os@2.8.
|
|
224
|
+
npx -y auroq-os@2.8.2 "$@" < /dev/tty
|
|
225
225
|
fi
|
|
226
226
|
}
|
|
227
227
|
|