primocode 8.42.0 → 8.42.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/README.md +2 -2
- package/bin/primocode.js +54 -22
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# PrimoCode v8.42.
|
|
1
|
+
# PrimoCode v8.42.2
|
|
2
2
|
|
|
3
3
|
Agente de engenharia brasileiro para o terminal, no estilo Claude Code.
|
|
4
4
|
Cria arquivos de verdade, roda comandos, **controla o navegador e o desktop** —
|
|
@@ -11,7 +11,7 @@ do Claude ou do GPT escolhe isso na abertura, com as setinhas, e passa a usar a
|
|
|
11
11
|
assinatura dele.
|
|
12
12
|
|
|
13
13
|
```
|
|
14
|
-
▐▛███▜▌ Primo Code v8.42.
|
|
14
|
+
▐▛███▜▌ Primo Code v8.42.2
|
|
15
15
|
▝▜█████▛▘ Bem-vindo de volta, Joel
|
|
16
16
|
▘▘ ▝▝ ~/primocode · /dir <pasta> muda
|
|
17
17
|
```
|
package/bin/primocode.js
CHANGED
|
@@ -344,6 +344,26 @@ function makePrompt() {
|
|
|
344
344
|
}
|
|
345
345
|
function refreshPrompt() { if (rl) rl.setPrompt(makePrompt()); }
|
|
346
346
|
|
|
347
|
+
/**
|
|
348
|
+
* O portão do plano (`state.liberado`) SÓ era decidido uma vez, na abertura.
|
|
349
|
+
* Quem conectava DEPOIS — `/connect` manual, `/connect trocar`, `/logout` —
|
|
350
|
+
* mudava a conta de verdade e o portão continuava com a resposta antiga.
|
|
351
|
+
*
|
|
352
|
+
* "conecta mas depois de uns 10 segundos desconecta": era exatamente isto.
|
|
353
|
+
* A pessoa via "Conectado. Plano premium" — real, acabou de vir do
|
|
354
|
+
* servidor — e no pedido seguinte caía em "O PrimoCode pede o plano
|
|
355
|
+
* Premium ou Super", porque `state.liberado` tinha ficado `false` de uma
|
|
356
|
+
* tentativa anterior (sem plano, ou login que não deu) e nada o atualizava.
|
|
357
|
+
*
|
|
358
|
+
* Toda vez que a conexão muda, chame isto com o que se sabe AGORA — o
|
|
359
|
+
* `{ pro }` que já veio de `conta.entrar()` ou de `conta.atual()`, sem ir à
|
|
360
|
+
* rede de novo: essas chamadas já confirmaram o servidor há segundos.
|
|
361
|
+
*/
|
|
362
|
+
function sincronizarLiberacao({ pro, motivo } = {}) {
|
|
363
|
+
state.liberado = !!pro;
|
|
364
|
+
state.motivoBloqueio = pro ? null : (motivo || 'sem-plano');
|
|
365
|
+
}
|
|
366
|
+
|
|
347
367
|
// Enquanto uma pergunta está no ar, a próxima linha digitada é a RESPOSTA dela
|
|
348
368
|
// — não um novo comando. Sem isso o "s" de confirmação virava prompt para a IA.
|
|
349
369
|
let pendingAsk = null;
|
|
@@ -1323,6 +1343,11 @@ async function handleSlash(text) {
|
|
|
1323
1343
|
console.log(c.muted(' Já conectado como ') + c.brand(jaEsta.uid.slice(0, 12) + '…')
|
|
1324
1344
|
+ c.muted(` · plano ${jaEsta.plano}`));
|
|
1325
1345
|
console.log(c.dim(' Para entrar com outra conta: ') + c.brand('/connect trocar'));
|
|
1346
|
+
// Sem isto, quem tinha sido barrado na abertura (plano velho,
|
|
1347
|
+
// login que não deu a tempo) e depois só confere com um
|
|
1348
|
+
// `/connect` continuava barrado: este comando não passava por
|
|
1349
|
+
// `entrar()`, e nada reabria o portão.
|
|
1350
|
+
sincronizarLiberacao(jaEsta);
|
|
1326
1351
|
break;
|
|
1327
1352
|
}
|
|
1328
1353
|
if (rest === 'trocar') conta.sair();
|
|
@@ -1332,31 +1357,29 @@ async function handleSlash(text) {
|
|
|
1332
1357
|
abrir: (u) => tools.openInBrowser(u),
|
|
1333
1358
|
contar: (info) => {
|
|
1334
1359
|
sp.stop();
|
|
1335
|
-
|
|
1336
|
-
|
|
1360
|
+
/* O CÓDIGO NÃO APARECE MAIS NO TERMINAL.
|
|
1361
|
+
*
|
|
1362
|
+
* "Pode tirar essa parte no login onde aparece o código
|
|
1363
|
+
* — o terminal mandou o código, pode tirar."
|
|
1364
|
+
*
|
|
1365
|
+
* A página do token já resolve o pareamento sozinha: ela
|
|
1366
|
+
* pergunta o código ao 127.0.0.1 desta máquina, e onde o
|
|
1367
|
+
* navegador bloqueia isso (Safari) ela oferece "Colar" —
|
|
1368
|
+
* o código continua indo para a área de transferência,
|
|
1369
|
+
* que é o caminho sem leitura. Oito letras impressas aqui
|
|
1370
|
+
* eram uma tarefa para a pessoa que o produto já não
|
|
1371
|
+
* precisa, e a tela ficava dizendo que talvez precisasse.
|
|
1372
|
+
*
|
|
1373
|
+
* O código continua existindo no protocolo (lib/conta.js)
|
|
1374
|
+
* — some da TELA, não do pareamento. */
|
|
1337
1375
|
console.log(c.muted(' Abrindo no navegador:'));
|
|
1338
1376
|
console.log(' ' + c.brand(info.url.replace(/[?&]porta=\d+/, '')));
|
|
1339
1377
|
console.log('');
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
nada, porque ele já libera". Mostrar as oito letras
|
|
1346
|
-
grandes aqui era pedir para ler o que ninguém precisa
|
|
1347
|
-
mais; elas ficam numa linha apagada, só para o caso
|
|
1348
|
-
de o navegador bloquear o 127.0.0.1 (Safari) e a
|
|
1349
|
-
página voltar a pedir. */
|
|
1350
|
-
console.log(' ' + c.white('Entre com a sua conta na página que abriu — o resto é automático.'));
|
|
1351
|
-
console.log(c.dim(` Se a página pedir um código: ${meio}${info.copiado ? ' (já copiado)' : ''}.`));
|
|
1352
|
-
} else {
|
|
1353
|
-
/* Sem porta local (ocupadas, ou bloqueadas), o código
|
|
1354
|
-
volta a ser o caminho — grande, partido em dois,
|
|
1355
|
-
porque é o que se lê de uma tela e se confere noutra. */
|
|
1356
|
-
console.log(' ' + c.bold(c.brand(meio.split('').join(' '))));
|
|
1357
|
-
console.log('');
|
|
1358
|
-
console.log(c.dim(' ' + (info.copiado ? 'O código já está copiado — cole na página.'
|
|
1359
|
-
: 'Digite o código na página.')));
|
|
1378
|
+
console.log(' ' + c.white('Entre com a sua conta na página que abriu — o resto é automático.'));
|
|
1379
|
+
if (!info.porta && info.copiado) {
|
|
1380
|
+
// Sem a porta local, quem fecha o pareamento é a área de
|
|
1381
|
+
// transferência: a página pede um toque em "Colar".
|
|
1382
|
+
console.log(c.dim(' Se a página pedir para colar, é só colar — já está na sua área de transferência.'));
|
|
1360
1383
|
}
|
|
1361
1384
|
console.log(c.dim(' Esperando o navegador…'));
|
|
1362
1385
|
},
|
|
@@ -1365,6 +1388,11 @@ async function handleSlash(text) {
|
|
|
1365
1388
|
if (!r.ok) { console.log(c.err(` ${r.error}`)); break; }
|
|
1366
1389
|
console.log(c.ok(' Conectado.')
|
|
1367
1390
|
+ c.muted(` Plano ${r.plano}${r.pro ? '' : ' — assine Premium no app para liberar tudo'}`));
|
|
1391
|
+
// O QUE FALTAVA: sem isto, "Conectado. Plano premium" na tela e o
|
|
1392
|
+
// PRÓXIMO pedido caindo em "O PrimoCode pede Premium ou Super" —
|
|
1393
|
+
// porque o portão (`state.liberado`) só era decidido na abertura,
|
|
1394
|
+
// e um /connect no meio da sessão nunca o reabria.
|
|
1395
|
+
sincronizarLiberacao(r);
|
|
1368
1396
|
break;
|
|
1369
1397
|
}
|
|
1370
1398
|
|
|
@@ -1422,6 +1450,10 @@ async function handleSlash(text) {
|
|
|
1422
1450
|
conta.sair();
|
|
1423
1451
|
console.log(c.ok(' Desconectado deste computador.')
|
|
1424
1452
|
+ c.dim(' A conta continua intacta; entre de novo com /connect.'));
|
|
1453
|
+
// O mesmo portão do connect: sem login não há como confirmar
|
|
1454
|
+
// Premium/Super, e deixar `state.liberado` de pé seria a mesma
|
|
1455
|
+
// dessincronia ao contrário — trabalhando sem estar conectado.
|
|
1456
|
+
sincronizarLiberacao({ pro: false, motivo: 'sem-login' });
|
|
1425
1457
|
break;
|
|
1426
1458
|
}
|
|
1427
1459
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primocode",
|
|
3
|
-
"version": "8.42.
|
|
3
|
+
"version": "8.42.2",
|
|
4
4
|
"description": "PrimoCode — agente de engenharia com IA e cursor próprio. Requer conta Conecta Primo AI (Premium ou Super). Cria arquivos, roda comandos, controla navegador e desktop: abre apps, clica em botões e ícones pelo nome, digita e usa atalhos.",
|
|
5
5
|
"main": "bin/primocode.js",
|
|
6
6
|
"bin": {
|