auroq-os 2.4.3 → 2.4.4
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/.claude/hooks/auroq-sync.cjs +43 -3
- package/README.md +38 -1
- package/bin/auroq-os.js +22 -1
- package/package.json +1 -1
|
@@ -49,13 +49,52 @@ function describeCommits(range, limit) {
|
|
|
49
49
|
return out.split('\n').filter(Boolean).map(l => { const i = l.indexOf('|'); return `- ${l.slice(0, i)}: ${l.slice(i + 1)}`; });
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
// ─── Aviso de versao nova (1x por dia) ───────────────────
|
|
53
|
+
const VERSION_CHECK_EVERY_MS = 24 * 60 * 60 * 1000;
|
|
54
|
+
|
|
55
|
+
function localVersion() {
|
|
56
|
+
try {
|
|
57
|
+
const y = fs.readFileSync(path.join(CWD, '.auroq-core', 'core-config.yaml'), 'utf8');
|
|
58
|
+
const m = y.match(/^\s*version:\s*["']?(\d+\.\d+\.\d+)/m);
|
|
59
|
+
return m ? m[1] : null;
|
|
60
|
+
} catch { return null; }
|
|
61
|
+
}
|
|
62
|
+
function npmLatest() {
|
|
63
|
+
try {
|
|
64
|
+
const out = execFileSync('npm', ['view', 'auroq-os', 'version'], {
|
|
65
|
+
encoding: 'utf8', timeout: 8000, stdio: ['ignore', 'pipe', 'ignore'],
|
|
66
|
+
shell: process.platform === 'win32',
|
|
67
|
+
});
|
|
68
|
+
const v = String(out).trim();
|
|
69
|
+
return /^\d+\.\d+\.\d+$/.test(v) ? v : null;
|
|
70
|
+
} catch { return null; }
|
|
71
|
+
}
|
|
72
|
+
function cmpVer(a, b) {
|
|
73
|
+
const pa = a.split('.').map(Number), pb = b.split('.').map(Number);
|
|
74
|
+
for (let i = 0; i < 3; i++) { if ((pa[i] || 0) !== (pb[i] || 0)) return (pa[i] || 0) - (pb[i] || 0); }
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
function versionNotice() {
|
|
78
|
+
const local = localVersion();
|
|
79
|
+
if (!local) return null; // pasta sem Auroq OS instalado
|
|
80
|
+
const st = readState();
|
|
81
|
+
const now = Date.now();
|
|
82
|
+
if (st.lastVersionCheck && now - st.lastVersionCheck < VERSION_CHECK_EVERY_MS) return null;
|
|
83
|
+
st.lastVersionCheck = now; // marca ANTES da consulta — offline nao vira insistencia
|
|
84
|
+
writeState(st);
|
|
85
|
+
const latest = npmLatest();
|
|
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 *update do Ops aplica tudo e preserva os dados dele; antes de aplicar, ele mostra o que mudou).`;
|
|
88
|
+
}
|
|
89
|
+
|
|
52
90
|
function sessionStart() {
|
|
53
|
-
|
|
91
|
+
const vNotice = versionNotice();
|
|
92
|
+
if (!isRepo() || !hasRemote()) { emit('SessionStart', vNotice); return; }
|
|
54
93
|
const up = upstream();
|
|
55
|
-
if (!up) return;
|
|
94
|
+
if (!up) { emit('SessionStart', vNotice); return; }
|
|
56
95
|
const dirty = dirtyFiles();
|
|
57
96
|
if (tryGit(['fetch', '--quiet'], 8000) === null) {
|
|
58
|
-
emit('SessionStart', '[Auroq sync] Nao consegui checar o GitHub agora (sem conexao?). O trabalho local esta intacto. So mencione se o expert perguntar de sincronizacao.');
|
|
97
|
+
emit('SessionStart', [vNotice, '[Auroq sync] Nao consegui checar o GitHub agora (sem conexao?). O trabalho local esta intacto. So mencione se o expert perguntar de sincronizacao.'].filter(Boolean).join('\n'));
|
|
59
98
|
return;
|
|
60
99
|
}
|
|
61
100
|
const behind = countRange(`HEAD..${up}`);
|
|
@@ -86,6 +125,7 @@ function sessionStart() {
|
|
|
86
125
|
st.dirtySince = dirty.length ? (st.dirtySince || Date.now()) : 0;
|
|
87
126
|
st.lastRemind = 0;
|
|
88
127
|
writeState(st);
|
|
128
|
+
if (vNotice) lines.unshift(vNotice);
|
|
89
129
|
emit('SessionStart', lines.join('\n'));
|
|
90
130
|
}
|
|
91
131
|
|
package/README.md
CHANGED
|
@@ -80,6 +80,7 @@ grok
|
|
|
80
80
|
| `auroq-os logout` | Encerra sessao local (remove `~/.arcane/credentials.json`) |
|
|
81
81
|
| `auroq-os whoami` | Mostra usuario autenticado e status de acesso |
|
|
82
82
|
| `auroq-os doctor` | Diagnostico do suporte: arquivos, motor do sistema (e se o programa aberto pelo icone enxerga ele), registro do conteudo ao vivo, login e servidor |
|
|
83
|
+
| `auroq-os register-mcp` | Reescreve o registro do conteudo ao vivo no projeto (use se o `doctor` apontar que ele falta) |
|
|
83
84
|
| `auroq-os sync-codex` | Regenera e verifica as skills locais do Codex |
|
|
84
85
|
| `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) |
|
|
85
86
|
|
|
@@ -108,6 +109,42 @@ cofre 1Password com escopo) — nunca a senha do dono. **Colaborador nao precisa
|
|
|
108
109
|
aluno**: o acesso dele e o convite do GitHub (o `clone` nao pede login); quem atualiza
|
|
109
110
|
o sistema e o dono, e o colaborador recebe as atualizacoes automaticamente ao abrir o `claude`.
|
|
110
111
|
|
|
112
|
+
## Conteudo ao vivo
|
|
113
|
+
|
|
114
|
+
O Auroq OS tem duas partes:
|
|
115
|
+
|
|
116
|
+
- **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 `*update` atualiza.
|
|
118
|
+
- **Conteudo** (chega ao vivo): o cerebro dos agentes — Companion, Consultor, forjas e o
|
|
119
|
+
Pack Arcane — e servido em tempo real pelo servidor da mentoria, atraves de uma conexao
|
|
120
|
+
chamada MCP `arcane`. O instalador ja registra essa conexao no projeto; voce nao precisa
|
|
121
|
+
configurar nada.
|
|
122
|
+
|
|
123
|
+
Na pratica: melhorias de conteudo chegam pra voce **sozinhas**, sem atualizar nada.
|
|
124
|
+
So e preciso estar logado (mesmo email e senha da plataforma) e com o contrato ativo.
|
|
125
|
+
Se um agente nao responder, rode `npx auroq-os doctor` — ele confere a conexao, o login
|
|
126
|
+
e o servidor, e diz exatamente o que fazer.
|
|
127
|
+
|
|
128
|
+
## Atualizar o sistema
|
|
129
|
+
|
|
130
|
+
De tempos em tempos sai versao nova do **motor** (novos comandos, correcoes do instalador).
|
|
131
|
+
Voce nao precisa vigiar nada: ao abrir o Claude Code no seu projeto, o sistema avisa
|
|
132
|
+
sozinho quando existe versao nova (confere no maximo 1x por dia).
|
|
133
|
+
|
|
134
|
+
Pra atualizar, e uma frase — dentro do Claude Code, com o Ops ativo (`/AuroqOS:agents:ops`):
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
atualiza o sistema
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
O Ops confere seu acesso, mostra o que mudou, salva um ponto de restauracao (commit),
|
|
141
|
+
aplica a versao nova e roda o diagnostico no final. **Seus dados nunca sao tocados**:
|
|
142
|
+
memoria do Companion, documentos, cockpit, campanhas, squads que voce criou e
|
|
143
|
+
personalizacoes ficam exatamente como estavam. O que se atualiza e so o framework.
|
|
144
|
+
|
|
145
|
+
O historico do que mudou em cada versao fica no arquivo `CHANGELOG.md`, dentro do
|
|
146
|
+
proprio pacote — o Ops resume pra voce antes de aplicar.
|
|
147
|
+
|
|
111
148
|
## Estrutura
|
|
112
149
|
|
|
113
150
|
```
|
|
@@ -155,4 +192,4 @@ agents/ → Seu exercito (companion, workers, minds, squads)
|
|
|
155
192
|
|
|
156
193
|
---
|
|
157
194
|
|
|
158
|
-
*Auroq OS
|
|
195
|
+
*Auroq OS — by Euriler Jube / Arka*
|
package/bin/auroq-os.js
CHANGED
|
@@ -329,7 +329,7 @@ async function runDoctor(targetDir) {
|
|
|
329
329
|
success(`MCP arcane registrado no Claude Code (${pin})`);
|
|
330
330
|
} else {
|
|
331
331
|
error('MCP arcane nao registrado em .mcp.json');
|
|
332
|
-
problemas.push('Rode
|
|
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
335
|
const temToml = (await fs.pathExists(tomlPath)) &&
|
|
@@ -412,6 +412,7 @@ async function patchEnableAllProjectMcpServers(targetDir) {
|
|
|
412
412
|
}
|
|
413
413
|
if (json.enableAllProjectMcpServers === true) return;
|
|
414
414
|
json.enableAllProjectMcpServers = true;
|
|
415
|
+
await fs.ensureDir(path.dirname(settingsPath));
|
|
415
416
|
await fs.writeJSON(settingsPath, json, { spaces: 2 });
|
|
416
417
|
}
|
|
417
418
|
|
|
@@ -1143,6 +1144,25 @@ if (command === 'init' || command === 'install') {
|
|
|
1143
1144
|
error(`Falha no diagnostico: ${e.message}`);
|
|
1144
1145
|
process.exit(1);
|
|
1145
1146
|
});
|
|
1147
|
+
} else if (command === 'register-mcp') {
|
|
1148
|
+
// Reescreve o registro do conteudo ao vivo (MCP arcane) nos dois runtimes.
|
|
1149
|
+
// Usado pelo Ops no *update-auroq em projeto que veio de versao sem MCP.
|
|
1150
|
+
(async () => {
|
|
1151
|
+
const targetDir = process.cwd();
|
|
1152
|
+
if (!(await fs.pathExists(path.join(targetDir, '.auroq-core')))) {
|
|
1153
|
+
error('Esta pasta nao tem um Auroq OS instalado (.auroq-core ausente).');
|
|
1154
|
+
error('Rode este comando na raiz do seu negocio.');
|
|
1155
|
+
process.exit(1);
|
|
1156
|
+
}
|
|
1157
|
+
await patchEnableAllProjectMcpServers(targetDir);
|
|
1158
|
+
await writeArcaneMcpConfig(targetDir);
|
|
1159
|
+
success('Conteudo ao vivo registrado (.mcp.json e .codex/config.toml).');
|
|
1160
|
+
log(`${DIM}Feche e abra o Claude Code ou o Codex pra ele enxergar o registro.${RESET}`);
|
|
1161
|
+
process.exit(0);
|
|
1162
|
+
})().catch(err => {
|
|
1163
|
+
error(`Falha ao registrar o MCP: ${err.message}`);
|
|
1164
|
+
process.exit(1);
|
|
1165
|
+
});
|
|
1146
1166
|
} else if (command === 'sync-codex') {
|
|
1147
1167
|
// Regenera as skills do Codex CLI a partir dos comandos atuais do projeto.
|
|
1148
1168
|
try {
|
|
@@ -1165,6 +1185,7 @@ if (command === 'init' || command === 'install') {
|
|
|
1165
1185
|
log(` ${CYAN}check-access${RESET} Validar acesso ativo (online; exit 0=ativo, 1=bloqueado)`);
|
|
1166
1186
|
log(` ${CYAN}update${RESET} Atualizar (via Ops dentro do Claude Code)`);
|
|
1167
1187
|
log(` ${CYAN}doctor${RESET} Diagnostico: arquivos, Node, MCP arcane, login e servidor`);
|
|
1188
|
+
log(` ${CYAN}register-mcp${RESET} Reescrever o registro do conteudo ao vivo (MCP arcane) no projeto`);
|
|
1168
1189
|
log(` ${CYAN}sync-codex${RESET} Gerar e verificar as skills locais do Codex CLI ($nome)`);
|
|
1169
1190
|
log(` ${CYAN}conectar-1password${RESET} Conectar o 1Password CLI (token lido do Ctrl+C, nunca digitado)`);
|
|
1170
1191
|
log('');
|