auroq-os 2.4.0 → 2.4.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/bin/auroq-os.js +2 -2
- package/installer/install.ps1 +81 -44
- package/installer/install.sh +60 -7
- package/lib/auth.js +1 -1
- package/package.json +1 -1
package/bin/auroq-os.js
CHANGED
|
@@ -237,7 +237,7 @@ async function runHealthChecks(targetDir) {
|
|
|
237
237
|
} else {
|
|
238
238
|
error(`${passed}/${HEALTH_CHECKS.length} verificacoes OK — arquivo de autoload faltando:`);
|
|
239
239
|
for (const item of missing) error(` - ${item}`);
|
|
240
|
-
error('Nenhum arquivo de autoload pode faltar em silencio. Contato: 11
|
|
240
|
+
error('Nenhum arquivo de autoload pode faltar em silencio. Contato: 11 93621-4486');
|
|
241
241
|
process.exit(1);
|
|
242
242
|
}
|
|
243
243
|
return { passed, total: HEALTH_CHECKS.length };
|
|
@@ -360,7 +360,7 @@ async function runDoctor(targetDir) {
|
|
|
360
360
|
error(`${problemas.length} coisa(s) pra resolver:`);
|
|
361
361
|
for (const p of problemas) log(` ${DIM}- ${p}${RESET}`);
|
|
362
362
|
log('');
|
|
363
|
-
log(`${DIM}Se travar, chame o suporte: 11
|
|
363
|
+
log(`${DIM}Se travar, chame o suporte: 11 93621-4486${RESET}`);
|
|
364
364
|
return 1;
|
|
365
365
|
}
|
|
366
366
|
|
package/installer/install.ps1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Auroq OS
|
|
1
|
+
# Auroq OS - instalador do Windows.
|
|
2
2
|
#
|
|
3
3
|
# irm https://arka.education/install.ps1 | iex
|
|
4
4
|
#
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# de execucao nao entra aqui: ela so afeta arquivo .ps1 salvo em disco, e este
|
|
7
7
|
# script roda em memoria. Exigir elevacao era resto da era npm.
|
|
8
8
|
#
|
|
9
|
-
# Ordem obrigatoria (PRD "Embarque em 2 passos"
|
|
9
|
+
# Ordem obrigatoria (PRD "Embarque em 2 passos" sec. 4.2):
|
|
10
10
|
# diagnostico -> Git -> motor -> login da mentoria -> pasta do negocio -> init
|
|
11
11
|
#
|
|
12
12
|
# O `init` e quem escreve o registro do conteudo ao vivo (ADR-7).
|
|
@@ -14,14 +14,27 @@
|
|
|
14
14
|
# Modo biblioteca (usado pelos testes): $env:AUROQ_INSTALL_LIB='1'; . install.ps1
|
|
15
15
|
# Modo ensaio (nao toca em nada): $env:AUROQ_INSTALL_DRY_RUN='1'
|
|
16
16
|
|
|
17
|
-
# TLS 1.2 antes de qualquer download
|
|
17
|
+
# TLS 1.2 antes de qualquer download - sem isto o Windows 10 antigo estoura em SSL.
|
|
18
|
+
# ATENCAO: este arquivo e ASCII PURO de proposito. Nao coloque acento, travessao
|
|
19
|
+
# nem simbolo aqui.
|
|
20
|
+
#
|
|
21
|
+
# O Windows PowerShell 5.1 (o que vem no Windows, e o que o aluno usa) le script
|
|
22
|
+
# sem BOM na codepage do sistema - Windows-1252 no Brasil. Cada caractere UTF-8
|
|
23
|
+
# de dois ou tres bytes vira lixo, e o parser morre com "Missing closing '}'"
|
|
24
|
+
# antes de executar UMA linha. Provado numa maquina Windows real: lido como
|
|
25
|
+
# Windows-1252 => 4 erros de sintaxe; lido como UTF-8 => nenhum.
|
|
26
|
+
#
|
|
27
|
+
# ASCII puro resolve os dois caminhos de uma vez: rodar o arquivo do disco e
|
|
28
|
+
# baixar por `irm ... | iex`, onde a decodificacao depende do que o servidor
|
|
29
|
+
# declara.
|
|
30
|
+
|
|
18
31
|
try {
|
|
19
32
|
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
|
|
20
33
|
} catch {
|
|
21
34
|
# PowerShell 7 ja negocia TLS moderno sozinho
|
|
22
35
|
}
|
|
23
36
|
|
|
24
|
-
$AuroqSuporte = '11
|
|
37
|
+
$AuroqSuporte = '11 93621-4486'
|
|
25
38
|
$AuroqNodeMin = 20
|
|
26
39
|
$AuroqBuildMin = 17763 # Windows 10 1809
|
|
27
40
|
$AuroqDiscoMinMb = 2048
|
|
@@ -38,7 +51,7 @@ function Get-AuroqNodeDir {
|
|
|
38
51
|
return (Join-Path $base 'Auroq\node')
|
|
39
52
|
}
|
|
40
53
|
|
|
41
|
-
#
|
|
54
|
+
# --- Fala com o aluno ---------------------------------------------------------
|
|
42
55
|
|
|
43
56
|
function Write-AuroqTitulo { param([string]$Texto) Write-Host ''; Write-Host " $Texto" -ForegroundColor Magenta; Write-Host '' }
|
|
44
57
|
function Write-AuroqPasso { param([string]$Texto) Write-Host ''; Write-Host " > $Texto" -ForegroundColor Cyan }
|
|
@@ -60,7 +73,7 @@ function Write-AuroqErro {
|
|
|
60
73
|
exit 1
|
|
61
74
|
}
|
|
62
75
|
|
|
63
|
-
#
|
|
76
|
+
# --- Registro pro suporte (sec. 5.7) ----------------------------------------------
|
|
64
77
|
# Uma linha por evento. Nunca entra senha, token ou e-mail.
|
|
65
78
|
|
|
66
79
|
function Write-AuroqLog {
|
|
@@ -76,7 +89,7 @@ function Write-AuroqLog {
|
|
|
76
89
|
}
|
|
77
90
|
}
|
|
78
91
|
|
|
79
|
-
#
|
|
92
|
+
# --- Decisoes puras (testadas uma a uma) --------------------------------------
|
|
80
93
|
|
|
81
94
|
# So letras minusculas, numeros e hifen. -cmatch porque o -match do PowerShell
|
|
82
95
|
# ignora maiuscula por padrao e deixaria passar "MinhaEmpresa".
|
|
@@ -104,7 +117,7 @@ function Get-AuroqNodeZip {
|
|
|
104
117
|
return "node-v$Versao-win-$alvo.zip"
|
|
105
118
|
}
|
|
106
119
|
|
|
107
|
-
# nova | vazia | auroq | ocupada
|
|
120
|
+
# nova | vazia | auroq | ocupada - decidido ANTES de escrever qualquer coisa.
|
|
108
121
|
function Get-AuroqEstadoPasta {
|
|
109
122
|
param([string]$Caminho = '')
|
|
110
123
|
if (-not (Test-Path $Caminho)) { return 'nova' }
|
|
@@ -115,9 +128,9 @@ function Get-AuroqEstadoPasta {
|
|
|
115
128
|
return 'ocupada'
|
|
116
129
|
}
|
|
117
130
|
|
|
118
|
-
#
|
|
131
|
+
# --- O motor visivel pra quem abre pelo icone (sec. 5.4) --------------------------
|
|
119
132
|
# No Windows o programa aberto pelo Menu Iniciar herda o ambiente do USUARIO.
|
|
120
|
-
# Gravar no escopo da maquina inteira exigiria elevacao
|
|
133
|
+
# Gravar no escopo da maquina inteira exigiria elevacao - o PRD proibe pedir isso.
|
|
121
134
|
|
|
122
135
|
function Set-AuroqPath {
|
|
123
136
|
param([string]$Bin = '')
|
|
@@ -129,7 +142,7 @@ function Set-AuroqPath {
|
|
|
129
142
|
$env:Path = "$Bin;$env:Path"
|
|
130
143
|
}
|
|
131
144
|
|
|
132
|
-
#
|
|
145
|
+
# --- Passo 1: diagnostico (sec. 5.1) ----------------------------------------------
|
|
133
146
|
|
|
134
147
|
function Test-AuroqMaquina {
|
|
135
148
|
Write-AuroqPasso 'Vendo o seu computador...'
|
|
@@ -150,7 +163,7 @@ function Test-AuroqMaquina {
|
|
|
150
163
|
|
|
151
164
|
$chip = $env:PROCESSOR_ARCHITECTURE
|
|
152
165
|
if (-not $chip) { $chip = 'AMD64' }
|
|
153
|
-
Write-AuroqOk "Windows 64 bits, compilacao $build
|
|
166
|
+
Write-AuroqOk "Windows 64 bits, compilacao $build - serve"
|
|
154
167
|
|
|
155
168
|
$livreMb = 999999
|
|
156
169
|
if ($env:AUROQ_INSTALL_FAKE_DISCO_MB) {
|
|
@@ -181,7 +194,7 @@ function Test-AuroqMaquina {
|
|
|
181
194
|
Write-AuroqLog 'diagnostico' "build=$build chip=$chip disco_mb=$livreMb"
|
|
182
195
|
}
|
|
183
196
|
|
|
184
|
-
#
|
|
197
|
+
# --- Passo 2: Git (sec. 5.2) ------------------------------------------------------
|
|
185
198
|
|
|
186
199
|
function Test-AuroqGitResponde {
|
|
187
200
|
try {
|
|
@@ -190,10 +203,19 @@ function Test-AuroqGitResponde {
|
|
|
190
203
|
} catch {
|
|
191
204
|
# segue pro caminho padrao
|
|
192
205
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
206
|
+
# Dois lugares, porque sao duas instalacoes possiveis: com administrador o Git
|
|
207
|
+
# vai pra Program Files; sem administrador ele vai pra pasta do usuario. Olhar
|
|
208
|
+
# so o primeiro fazia o script jurar que o Git nao existe e ficar esperando sem fim.
|
|
209
|
+
$candidatos = @(
|
|
210
|
+
(Join-Path $env:ProgramFiles 'Git\cmd\git.exe'),
|
|
211
|
+
(Join-Path ${env:ProgramFiles(x86)} 'Git\cmd\git.exe'),
|
|
212
|
+
(Join-Path $env:LOCALAPPDATA 'Programs\Git\cmd\git.exe')
|
|
213
|
+
)
|
|
214
|
+
foreach ($padrao in $candidatos) {
|
|
215
|
+
if ($padrao -and (Test-Path $padrao)) {
|
|
216
|
+
$env:Path = "$(Split-Path $padrao);$env:Path"
|
|
217
|
+
return $true
|
|
218
|
+
}
|
|
197
219
|
}
|
|
198
220
|
return $false
|
|
199
221
|
}
|
|
@@ -201,7 +223,7 @@ function Test-AuroqGitResponde {
|
|
|
201
223
|
function Install-AuroqGit {
|
|
202
224
|
Write-AuroqPasso 'Verificando o Git (o programa que guarda as versoes do seu trabalho)...'
|
|
203
225
|
|
|
204
|
-
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Git
|
|
226
|
+
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Git - seria verificado aqui'; return }
|
|
205
227
|
|
|
206
228
|
if (Test-AuroqGitResponde) {
|
|
207
229
|
Write-AuroqOk 'Git ja estava instalado'
|
|
@@ -218,7 +240,10 @@ function Install-AuroqGit {
|
|
|
218
240
|
}
|
|
219
241
|
|
|
220
242
|
if ($temWinget) {
|
|
221
|
-
Write-AuroqAviso 'Falta instalar. Vai aparecer uma janela pedindo permissao
|
|
243
|
+
Write-AuroqAviso 'Falta instalar o Git. Vai aparecer uma janela pedindo permissao.'
|
|
244
|
+
Write-AuroqDiz ' Se ela perguntar so "Sim ou Nao", clique em Sim.'
|
|
245
|
+
Write-AuroqDiz ' Se ela pedir SENHA DE ADMINISTRADOR e voce nao tiver, pode fechar:'
|
|
246
|
+
Write-AuroqDiz ' eu instalo de outro jeito, que nao precisa de administrador.'
|
|
222
247
|
& winget install --id Git.Git -e --source winget --accept-package-agreements --accept-source-agreements | Out-Null
|
|
223
248
|
Start-Sleep -Seconds 3
|
|
224
249
|
if (Test-AuroqGitResponde) {
|
|
@@ -226,19 +251,31 @@ function Install-AuroqGit {
|
|
|
226
251
|
Write-AuroqLog 'git' 'instalado-winget'
|
|
227
252
|
return
|
|
228
253
|
}
|
|
229
|
-
|
|
254
|
+
# Nao morre aqui. Quem nao e administrador NUNCA vai conseguir passar dessa
|
|
255
|
+
# janela, e mandar "rode de novo e clique em Sim" tranca essa pessoa num
|
|
256
|
+
# loop. O caminho de baixo instala sem administrador nenhum.
|
|
257
|
+
Write-AuroqAviso 'A janela de permissao nao passou. Vou pelo caminho que nao precisa de administrador.'
|
|
258
|
+
Write-AuroqLog 'git' 'winget-nao-passou'
|
|
230
259
|
}
|
|
231
260
|
|
|
232
|
-
# Windows 10 antigo
|
|
233
|
-
|
|
261
|
+
# Duas situacoes caem aqui: Windows 10 antigo sem winget, e aluno sem direito
|
|
262
|
+
# de administrador. O instalador oficial do Git resolve as duas: ele declara
|
|
263
|
+
# `PrivilegesRequired=none` e sabe instalar so pro usuario, em %LOCALAPPDATA%.
|
|
264
|
+
Write-AuroqAviso 'Vou abrir a pagina oficial do Git no seu navegador.'
|
|
234
265
|
Write-AuroqDiz ' 1. Baixe o instalador que a pagina oferecer'
|
|
235
266
|
Write-AuroqDiz ' 2. De dois cliques no arquivo baixado'
|
|
236
|
-
Write-AuroqDiz ' 3.
|
|
237
|
-
Write-AuroqDiz '
|
|
267
|
+
Write-AuroqDiz ' 3. Se ele perguntar para quem instalar, escolha a opcao de instalar'
|
|
268
|
+
Write-AuroqDiz ' SO PRA VOCE - ela nao pede senha de administrador'
|
|
269
|
+
Write-AuroqDiz ' 4. Clique em "Next" em todas as telas e depois em "Install"'
|
|
270
|
+
Write-AuroqDiz ' 5. No fim, clique em "Finish" e volte pra ca - eu espero'
|
|
238
271
|
Start-Process 'https://git-scm.com/downloads/win'
|
|
239
272
|
|
|
273
|
+
# 20 minutos de espera pelo aluno. O teto e regulavel so pra maquina limpa do
|
|
274
|
+
# CI nao gastar 20 minutos de runner provando uma mensagem.
|
|
275
|
+
$teto = 1200
|
|
276
|
+
if ($env:AUROQ_INSTALL_ESPERA_GIT) { $teto = [int]$env:AUROQ_INSTALL_ESPERA_GIT }
|
|
240
277
|
$esperou = 0
|
|
241
|
-
while ($esperou -lt
|
|
278
|
+
while ($esperou -lt $teto) {
|
|
242
279
|
if (Test-AuroqGitResponde) {
|
|
243
280
|
Write-AuroqOk 'Git instalado'
|
|
244
281
|
Write-AuroqLog 'git' 'instalado-manual'
|
|
@@ -248,15 +285,15 @@ function Install-AuroqGit {
|
|
|
248
285
|
$esperou = $esperou + 10
|
|
249
286
|
if (($esperou % 120) -eq 0) { Write-AuroqDiz " ainda esperando... ($esperou s)" }
|
|
250
287
|
}
|
|
251
|
-
Write-AuroqErro 'A instalacao do Git nao terminou.' 'Termine a instalacao e rode o mesmo comando de novo
|
|
288
|
+
Write-AuroqErro 'A instalacao do Git nao terminou.' 'Termine a instalacao e rode o mesmo comando de novo - nada do que ja foi feito se perde.'
|
|
252
289
|
}
|
|
253
290
|
|
|
254
|
-
#
|
|
291
|
+
# --- Passo 3: o motor (sec. 5.3) --------------------------------------------------
|
|
255
292
|
|
|
256
293
|
function Install-AuroqNode {
|
|
257
294
|
Write-AuroqPasso 'Verificando o motor do sistema...'
|
|
258
295
|
|
|
259
|
-
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Motor
|
|
296
|
+
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Motor - seria instalado em uma pasta sua, sem senha'; return }
|
|
260
297
|
|
|
261
298
|
$atual = ''
|
|
262
299
|
try {
|
|
@@ -309,7 +346,7 @@ function Install-AuroqNode {
|
|
|
309
346
|
}
|
|
310
347
|
if (-not $esperado -or ($esperado.ToLower() -ne $obtido.ToLower())) {
|
|
311
348
|
Remove-Item $destino -Force -ErrorAction SilentlyContinue
|
|
312
|
-
Write-AuroqErro 'O arquivo do motor baixou com defeito.' 'Rode o mesmo comando de novo
|
|
349
|
+
Write-AuroqErro 'O arquivo do motor baixou com defeito.' 'Rode o mesmo comando de novo - o arquivo estragado ja foi apagado.'
|
|
313
350
|
}
|
|
314
351
|
|
|
315
352
|
# mark-of-the-web: sem desbloquear, o Windows recusa abrir o que veio da internet
|
|
@@ -336,12 +373,12 @@ function Install-AuroqNode {
|
|
|
336
373
|
Write-AuroqLog 'motor' "instalado versao=$versao chip=$chip"
|
|
337
374
|
}
|
|
338
375
|
|
|
339
|
-
#
|
|
376
|
+
# --- Passo 4: login da mentoria (sec. 5.5) ----------------------------------------
|
|
340
377
|
|
|
341
378
|
function Invoke-AuroqLogin {
|
|
342
379
|
Write-AuroqPasso 'Agora entre com o seu acesso da Mentoria Arcane.'
|
|
343
380
|
|
|
344
|
-
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Login
|
|
381
|
+
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Login - seria pedido aqui (e-mail e senha da plataforma)'; return }
|
|
345
382
|
|
|
346
383
|
# `check-access` e a mesma regua do resto do sistema: sai com sucesso so com
|
|
347
384
|
# contrato ativo conferido agora. Sem sessao salva, ele mesmo pede e-mail e
|
|
@@ -355,7 +392,7 @@ function Invoke-AuroqLogin {
|
|
|
355
392
|
if ($LASTEXITCODE -ne 0) {
|
|
356
393
|
Write-AuroqLog 'login' 'recusado'
|
|
357
394
|
Write-Host ''
|
|
358
|
-
Write-Host ' Sem acesso ativo, a instalacao para aqui
|
|
395
|
+
Write-Host ' Sem acesso ativo, a instalacao para aqui - e nada foi criado no seu computador.' -ForegroundColor DarkGray
|
|
359
396
|
Write-Host " O que fazer agora: fale com o suporte $AuroqSuporte" -ForegroundColor DarkGray
|
|
360
397
|
Write-Host ''
|
|
361
398
|
exit 1
|
|
@@ -363,11 +400,11 @@ function Invoke-AuroqLogin {
|
|
|
363
400
|
Write-AuroqLog 'login' 'ok'
|
|
364
401
|
}
|
|
365
402
|
|
|
366
|
-
#
|
|
403
|
+
# --- Passo 5: pasta do negocio (sec. 5.6) -----------------------------------------
|
|
367
404
|
|
|
368
405
|
function Get-AuroqPasta {
|
|
369
406
|
Write-AuroqPasso 'Qual o nome da pasta do seu negocio?'
|
|
370
|
-
Write-AuroqDiz '(so letras minusculas e hifen
|
|
407
|
+
Write-AuroqDiz '(so letras minusculas e hifen - ex: minha-empresa)'
|
|
371
408
|
|
|
372
409
|
$nome = $env:AUROQ_INSTALL_PASTA
|
|
373
410
|
$tentativas = 0
|
|
@@ -380,7 +417,7 @@ function Get-AuroqPasta {
|
|
|
380
417
|
$estado = Get-AuroqEstadoPasta $alvo
|
|
381
418
|
if ($estado -eq 'auroq') {
|
|
382
419
|
Write-Host ''
|
|
383
|
-
Write-AuroqAviso "Ja existe um Auroq em $alvo
|
|
420
|
+
Write-AuroqAviso "Ja existe um Auroq em $alvo - nao vou mexer nele."
|
|
384
421
|
Write-AuroqDiz 'Pra conferir se esta tudo certo la, abra essa pasta e rode:'
|
|
385
422
|
Write-AuroqDiz ' auroq-os doctor'
|
|
386
423
|
Write-AuroqLog 'pasta' 'ja-tinha-auroq'
|
|
@@ -394,7 +431,7 @@ function Get-AuroqPasta {
|
|
|
394
431
|
break
|
|
395
432
|
}
|
|
396
433
|
} elseif ([string]::IsNullOrWhiteSpace($nome)) {
|
|
397
|
-
# Enter vazio so repete a pergunta
|
|
434
|
+
# Enter vazio so repete a pergunta - o aluno ainda nao escreveu nada.
|
|
398
435
|
$nome = ''
|
|
399
436
|
} else {
|
|
400
437
|
Write-AuroqDiz 'Esse nome nao serve: use so letras minusculas, numeros e hifen.'
|
|
@@ -408,7 +445,7 @@ function Get-AuroqPasta {
|
|
|
408
445
|
}
|
|
409
446
|
}
|
|
410
447
|
|
|
411
|
-
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk "Pasta $script:AuroqPastaAlvo
|
|
448
|
+
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk "Pasta $script:AuroqPastaAlvo - seria criada aqui"; return }
|
|
412
449
|
|
|
413
450
|
try {
|
|
414
451
|
if (-not (Test-Path $script:AuroqPastaAlvo)) {
|
|
@@ -420,12 +457,12 @@ function Get-AuroqPasta {
|
|
|
420
457
|
Write-AuroqLog 'pasta' 'criada'
|
|
421
458
|
}
|
|
422
459
|
|
|
423
|
-
#
|
|
460
|
+
# --- Passo 6: montar o Auroq --------------------------------------------------
|
|
424
461
|
|
|
425
462
|
function Invoke-AuroqInit {
|
|
426
463
|
Write-AuroqPasso "Montando o Auroq dentro de $script:AuroqPastaAlvo..."
|
|
427
464
|
|
|
428
|
-
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Sistema
|
|
465
|
+
if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Sistema - seria montado aqui'; return }
|
|
429
466
|
|
|
430
467
|
Set-Location $script:AuroqPastaAlvo
|
|
431
468
|
& npx -y auroq-os@latest init
|
|
@@ -436,19 +473,19 @@ function Invoke-AuroqInit {
|
|
|
436
473
|
Write-AuroqLog 'init' 'ok'
|
|
437
474
|
}
|
|
438
475
|
|
|
439
|
-
#
|
|
476
|
+
# --- Passo 7: fecho -----------------------------------------------------------
|
|
440
477
|
|
|
441
478
|
function Write-AuroqFecho {
|
|
442
479
|
$nome = Split-Path $script:AuroqPastaAlvo -Leaf
|
|
443
480
|
Write-Host ''
|
|
444
|
-
Write-Host '
|
|
481
|
+
Write-Host ' ---------------------------------------------' -ForegroundColor Magenta
|
|
445
482
|
Write-Host ''
|
|
446
483
|
Write-AuroqDiz "Pronto. O Auroq esta em $script:AuroqPastaAlvo"
|
|
447
484
|
Write-Host ''
|
|
448
485
|
Write-AuroqDiz 'Falta um detalhe importante:'
|
|
449
486
|
Write-Host ''
|
|
450
487
|
Write-AuroqDiz ' 1. FECHE o Claude Code (ou o Codex) por completo e abra de novo'
|
|
451
|
-
Write-AuroqDiz '
|
|
488
|
+
Write-AuroqDiz ' - sem isso ele nao enxerga o que acabou de ser instalado'
|
|
452
489
|
Write-AuroqDiz " 2. Abra a pasta $nome"
|
|
453
490
|
Write-AuroqDiz ' 3. Chame o Ops: /AuroqOS:agents:ops (no Codex: $ops)'
|
|
454
491
|
Write-AuroqDiz ' 4. Digite: *bootstrap'
|
|
@@ -458,10 +495,10 @@ function Write-AuroqFecho {
|
|
|
458
495
|
Write-AuroqLog 'fim' "ok pasta=$nome"
|
|
459
496
|
}
|
|
460
497
|
|
|
461
|
-
#
|
|
498
|
+
# --- Fluxo --------------------------------------------------------------------
|
|
462
499
|
|
|
463
500
|
function Invoke-AuroqInstalacao {
|
|
464
|
-
Write-AuroqTitulo 'Auroq OS
|
|
501
|
+
Write-AuroqTitulo 'Auroq OS - instalacao'
|
|
465
502
|
Test-AuroqMaquina
|
|
466
503
|
Install-AuroqGit
|
|
467
504
|
Install-AuroqNode
|
package/installer/install.sh
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
set -u
|
|
20
20
|
|
|
21
|
-
SUPORTE="11
|
|
21
|
+
SUPORTE="11 93621-4486"
|
|
22
22
|
NODE_MIN=20
|
|
23
23
|
MACOS_MIN=13
|
|
24
24
|
DISCO_MIN_MB=2048
|
|
@@ -174,12 +174,46 @@ auroq_aplicar_path() {
|
|
|
174
174
|
mv "$tmp" "$arquivo"
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
# O motor precisa aparecer em DOIS lugares diferentes, por motivos diferentes.
|
|
178
|
+
#
|
|
179
|
+
# Os arquivos do zsh sao obrigatorios sempre: e por eles que o Claude Code e o
|
|
180
|
+
# Codex abertos pelo ICONE montam o ambiente. Sem isso o app sobe sem erro
|
|
181
|
+
# nenhum e o Companion "nao sabe de nada" (§5.4 do PRD).
|
|
182
|
+
#
|
|
183
|
+
# Os do shell do aluno sao pra janela que ele digita. O macOS 13+ usa zsh e os
|
|
184
|
+
# dois coincidem — mas quem trocou pra bash instalava com sucesso, nao via erro,
|
|
185
|
+
# e depois nenhum comando era reconhecido. Falha silenciosa e a pior de todas:
|
|
186
|
+
# nao tem o que pesquisar, entao a conclusao vira "esse sistema e ruim".
|
|
177
187
|
auroq_publicar_node_no_path() {
|
|
178
188
|
local bin="${1:-}"
|
|
179
189
|
local arquivo
|
|
190
|
+
|
|
191
|
+
# Sempre: o app aberto pelo icone le daqui.
|
|
180
192
|
for arquivo in "${HOME}/.zshrc" "${HOME}/.zprofile"; do
|
|
181
193
|
auroq_aplicar_path "$arquivo" "$bin"
|
|
182
194
|
done
|
|
195
|
+
|
|
196
|
+
case "${SHELL:-}" in
|
|
197
|
+
*zsh )
|
|
198
|
+
: # ja coberto acima
|
|
199
|
+
;;
|
|
200
|
+
*bash )
|
|
201
|
+
for arquivo in "${HOME}/.bash_profile" "${HOME}/.bashrc"; do
|
|
202
|
+
auroq_aplicar_path "$arquivo" "$bin"
|
|
203
|
+
done
|
|
204
|
+
;;
|
|
205
|
+
'' )
|
|
206
|
+
: # sem SHELL definido (roda dentro de outro programa): o zsh cobre
|
|
207
|
+
;;
|
|
208
|
+
* )
|
|
209
|
+
# Nao invento a sintaxe de um shell que nao sei testar. Melhor o aluno
|
|
210
|
+
# saber agora, com nome e saida, do que descobrir que "nada funciona".
|
|
211
|
+
aviso "O seu terminal (${SHELL##*/}) nao e o padrao do Mac, entao eu nao consigo"
|
|
212
|
+
diz " deixar o sistema pronto nele. Use o app Terminal (que vem no Mac) pra"
|
|
213
|
+
diz " trabalhar com o Auroq, ou chame o suporte ${SUPORTE} pra ajustar o seu."
|
|
214
|
+
auroq_registrar_log "path" "shell-nao-suportado=${SHELL##*/}"
|
|
215
|
+
;;
|
|
216
|
+
esac
|
|
183
217
|
}
|
|
184
218
|
|
|
185
219
|
# ─── Passo 1: diagnostico (§5.1) ──────────────────────────────────────────────
|
|
@@ -275,6 +309,30 @@ auroq_garantir_git() {
|
|
|
275
309
|
# Fica numa pasta do proprio aluno. Sem senha, sem sudo, sem tocar no que ele ja
|
|
276
310
|
# tinha instalado: se ja existe um motor bom, usamos o dele.
|
|
277
311
|
|
|
312
|
+
# Abre o pacote do motor direto na pasta final.
|
|
313
|
+
#
|
|
314
|
+
# A versao anterior descompactava ao lado e movia com `mv .../node-v*-darwin-* destino`.
|
|
315
|
+
# O curinga pegava DOIS caminhos — a pasta aberta e o proprio .tar.gz, que mora no
|
|
316
|
+
# mesmo lugar — e `mv` com duas origens exige que o destino ja seja uma pasta. Como
|
|
317
|
+
# o destino tinha acabado de ser renomeado pra `.antigo`, ele nao existia: todo aluno
|
|
318
|
+
# sem motor na maquina batia em "Nao consegui guardar o motor na sua pasta".
|
|
319
|
+
#
|
|
320
|
+
# Aqui nao existe curinga: `--strip-components=1` joga o conteudo direto no destino.
|
|
321
|
+
auroq_desempacotar_node() {
|
|
322
|
+
local pacote="$1" destino="$2"
|
|
323
|
+
|
|
324
|
+
rm -rf "${destino}.antigo" 2>/dev/null || true
|
|
325
|
+
if [ -d "$destino" ]; then
|
|
326
|
+
mv "$destino" "${destino}.antigo" 2>/dev/null || return 1
|
|
327
|
+
fi
|
|
328
|
+
|
|
329
|
+
mkdir -p "$destino" 2>/dev/null || return 1
|
|
330
|
+
tar -xzf "$pacote" -C "$destino" --strip-components=1 2>/dev/null || return 1
|
|
331
|
+
|
|
332
|
+
# So e sucesso se o motor de fato ficou de pe.
|
|
333
|
+
[ -x "${destino}/bin/node" ] || return 1
|
|
334
|
+
}
|
|
335
|
+
|
|
278
336
|
auroq_garantir_node() {
|
|
279
337
|
passo "Verificando o motor do sistema..."
|
|
280
338
|
|
|
@@ -324,12 +382,7 @@ auroq_garantir_node() {
|
|
|
324
382
|
auroq_erro "O arquivo do motor baixou com defeito." "Rode o mesmo comando de novo — o arquivo estragado ja foi apagado."
|
|
325
383
|
fi
|
|
326
384
|
|
|
327
|
-
|
|
328
|
-
tar -xzf "${tmpdir}/${tarball}" -C "$tmpdir" 2>/dev/null \
|
|
329
|
-
|| { rm -rf "$tmpdir"; auroq_erro "Nao consegui abrir o arquivo do motor." "Rode o mesmo comando de novo."; }
|
|
330
|
-
rm -rf "${NODE_DIR}.antigo" 2>/dev/null || true
|
|
331
|
-
[ -d "$NODE_DIR" ] && mv "$NODE_DIR" "${NODE_DIR}.antigo" 2>/dev/null || true
|
|
332
|
-
mv "${tmpdir}/node-v${versao}-darwin-"* "$NODE_DIR" 2>/dev/null \
|
|
385
|
+
auroq_desempacotar_node "${tmpdir}/${tarball}" "$NODE_DIR" \
|
|
333
386
|
|| { rm -rf "$tmpdir"; auroq_erro "Nao consegui guardar o motor na sua pasta." "Rode o mesmo comando de novo."; }
|
|
334
387
|
rm -rf "$tmpdir" "${NODE_DIR}.antigo"
|
|
335
388
|
|
package/lib/auth.js
CHANGED
|
@@ -5,7 +5,7 @@ const { createAuthClient } = require('./supabase');
|
|
|
5
5
|
const credentials = require('./credentials');
|
|
6
6
|
|
|
7
7
|
const PLATFORM_URL = 'https://arcane.arka.education';
|
|
8
|
-
const SUPPORT_CONTACT = '11
|
|
8
|
+
const SUPPORT_CONTACT = '11 93621-4486';
|
|
9
9
|
const MAX_LOGIN_ATTEMPTS = 3;
|
|
10
10
|
|
|
11
11
|
const PURPLE = '\x1b[38;2;120;80;200m';
|