primocode 8.38.0 → 8.38.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/app/app.js +6 -2
- package/app/primo-marca.js +32 -10
- package/bin/primocode.js +22 -15
- package/lib/boas-vindas.js +4 -4
- package/package.json +1 -1
package/app/app.js
CHANGED
|
@@ -316,12 +316,16 @@
|
|
|
316
316
|
marcarEscolha("cores", "cor", cor);
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
+
/* A LOGO — a mesma do ícone do sistema e da barra lateral do Conecta. Onde
|
|
320
|
+
o produto se apresenta vai ela; o mascote em pixel fica para onde ele é
|
|
321
|
+
personagem. */
|
|
319
322
|
function desenharMarca() {
|
|
320
323
|
if (!window.PrimoMarca) return;
|
|
321
324
|
var t = document.getElementById("marcaTopo");
|
|
322
325
|
var g = document.getElementById("marcaGrande");
|
|
323
|
-
|
|
324
|
-
if (
|
|
326
|
+
var desenha = window.PrimoMarca.logo || window.PrimoMarca.svg;
|
|
327
|
+
if (t) t.innerHTML = desenha({ tamanho: 22 });
|
|
328
|
+
if (g) g.innerHTML = desenha({ tamanho: 82, rotulo: "PrimoCode" });
|
|
325
329
|
}
|
|
326
330
|
|
|
327
331
|
function quando(iso) {
|
package/app/primo-marca.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* primo-marca.js — o mascote do PrimoCode, desenhado em pixel.
|
|
3
3
|
*
|
|
4
|
-
* CÓPIA de conecta-primo-ai/frontend/primo-marca.js. São repositórios
|
|
5
|
-
* diferentes e não há como importar de um para o outro; o que dá para fazer é
|
|
6
|
-
* manter os dois IDÊNTICOS e o teste conferir isso — um mascote que muda num
|
|
7
|
-
* lado e não no outro é a marca do produto se partindo em duas sem ninguém
|
|
8
|
-
* ver.
|
|
9
|
-
*
|
|
10
4
|
* ── POR QUE MATRIZ, E NÃO O PNG ──────────────────────────────────────────
|
|
11
5
|
* O logo veio como imagem. Guardar o PNG funcionaria, mas ele já é pixel art:
|
|
12
6
|
* redesenhá-lo como MATRIZ dá o mesmo desenho nítido em qualquer tamanho —
|
|
@@ -103,11 +97,39 @@
|
|
|
103
97
|
+ '" height="' + lado + '"' + acessivel + ">" + partes.join("") + "</svg>";
|
|
104
98
|
}
|
|
105
99
|
|
|
106
|
-
|
|
100
|
+
/* A LOGO — a que o dono mandou, e a mesma do ícone do sistema
|
|
101
|
+
(`app/icone.svg` no PrimoCode): quadrado escuro arredondado, o chevron do
|
|
102
|
+
prompt e o sublinhado do cursor, em ciano. Onde o produto se apresenta
|
|
103
|
+
(botão da barra lateral, cabeçalho, favicon) vai ELA; o mascote em pixel
|
|
104
|
+
acima fica para onde ele é personagem, não marca. Foi por confundir os
|
|
105
|
+
dois que a barra lateral mostrou o bicho onde devia estar a logo. */
|
|
106
|
+
var LOGO_FUNDO = "#0a0f16";
|
|
107
|
+
var LOGO_TRACO = "#22d3ee";
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* A logo como SVG.
|
|
111
|
+
* @param {object} op
|
|
112
|
+
* @param {number} [op.tamanho] lado em px
|
|
113
|
+
* @param {string} [op.rotulo] texto alternativo; vazio = decorativo
|
|
114
|
+
*/
|
|
115
|
+
function logo(op) {
|
|
116
|
+
op = op || {};
|
|
117
|
+
var lado = op.tamanho || 32;
|
|
118
|
+
var acessivel = op.rotulo
|
|
119
|
+
? ' role="img" aria-label="' + String(op.rotulo).replace(/"/g, """) + '"'
|
|
120
|
+
: ' aria-hidden="true"';
|
|
121
|
+
return '<svg viewBox="0 0 32 32" width="' + lado + '" height="' + lado + '"' + acessivel + ">"
|
|
122
|
+
+ '<rect width="32" height="32" rx="7" fill="' + LOGO_FUNDO + '"/>'
|
|
123
|
+
+ '<path d="M8 10.5 13 16l-5 5.5" fill="none" stroke="' + LOGO_TRACO
|
|
124
|
+
+ '" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"/>'
|
|
125
|
+
+ '<path d="M16.5 22H24" fill="none" stroke="' + LOGO_TRACO + '" stroke-width="2.6" stroke-linecap="round"/>'
|
|
126
|
+
+ "</svg>";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** A logo como favicon, sem pedir arquivo ao servidor. */
|
|
107
130
|
function favicon() {
|
|
108
|
-
|
|
109
|
-
return "data:image/svg+xml," + encodeURIComponent(s);
|
|
131
|
+
return "data:image/svg+xml," + encodeURIComponent(logo({ tamanho: 32 }));
|
|
110
132
|
}
|
|
111
133
|
|
|
112
|
-
raiz.PrimoMarca = { svg: svg, favicon: favicon, MATRIZ: MATRIZ, CORPO: CORPO, DETALHE: DETALHE };
|
|
134
|
+
raiz.PrimoMarca = { svg: svg, logo: logo, favicon: favicon, MATRIZ: MATRIZ, CORPO: CORPO, DETALHE: DETALHE };
|
|
113
135
|
})(typeof window !== "undefined" ? window : globalThis);
|
package/bin/primocode.js
CHANGED
|
@@ -1269,26 +1269,33 @@ async function handleSlash(text) {
|
|
|
1269
1269
|
abrir: (u) => tools.openInBrowser(u),
|
|
1270
1270
|
contar: (info) => {
|
|
1271
1271
|
sp.stop();
|
|
1272
|
-
/* O código continua aparecendo — grande, partido em dois,
|
|
1273
|
-
porque é o que se lê de uma tela e se confere noutra. Mas
|
|
1274
|
-
agora ele já FOI para a página: o CLI serve o código em
|
|
1275
|
-
127.0.0.1 e a página pergunta ali; e foi para a área de
|
|
1276
|
-
transferência, para o "Colar" de um toque onde o
|
|
1277
|
-
navegador bloqueia o 127.0.0.1 (Safari). Digitar virou a
|
|
1278
|
-
terceira saída, não a primeira. */
|
|
1279
1272
|
const meio = info.codigo.length === 8
|
|
1280
1273
|
? info.codigo.slice(0, 4) + '-' + info.codigo.slice(4) : info.codigo;
|
|
1281
1274
|
console.log(c.muted(' Abrindo no navegador:'));
|
|
1282
1275
|
console.log(' ' + c.brand(info.url.replace(/[?&]porta=\d+/, '')));
|
|
1283
1276
|
console.log('');
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1277
|
+
if (info.porta) {
|
|
1278
|
+
/* COM O SERVIDOR LOCAL DE PÉ, NÃO HÁ CÓDIGO PARA LER. A
|
|
1279
|
+
página pergunta ao 127.0.0.1 desta máquina, recebe o
|
|
1280
|
+
código e aprova sozinha assim que a pessoa entra com a
|
|
1281
|
+
conta — "não precisa colocar código, não precisa pra
|
|
1282
|
+
nada, porque ele já libera". Mostrar as oito letras
|
|
1283
|
+
grandes aqui era pedir para ler o que ninguém precisa
|
|
1284
|
+
mais; elas ficam numa linha apagada, só para o caso
|
|
1285
|
+
de o navegador bloquear o 127.0.0.1 (Safari) e a
|
|
1286
|
+
página voltar a pedir. */
|
|
1287
|
+
console.log(' ' + c.white('Entre com a sua conta na página que abriu — o resto é automático.'));
|
|
1288
|
+
console.log(c.dim(` Se a página pedir um código: ${meio}${info.copiado ? ' (já copiado)' : ''}.`));
|
|
1289
|
+
} else {
|
|
1290
|
+
/* Sem porta local (ocupadas, ou bloqueadas), o código
|
|
1291
|
+
volta a ser o caminho — grande, partido em dois,
|
|
1292
|
+
porque é o que se lê de uma tela e se confere noutra. */
|
|
1293
|
+
console.log(' ' + c.bold(c.brand(meio.split('').join(' '))));
|
|
1294
|
+
console.log('');
|
|
1295
|
+
console.log(c.dim(' ' + (info.copiado ? 'O código já está copiado — cole na página.'
|
|
1296
|
+
: 'Digite o código na página.')));
|
|
1297
|
+
}
|
|
1298
|
+
console.log(c.dim(' Esperando o navegador…'));
|
|
1292
1299
|
},
|
|
1293
1300
|
});
|
|
1294
1301
|
sp.stop();
|
package/lib/boas-vindas.js
CHANGED
|
@@ -157,13 +157,13 @@ async function rodar({ perguntar, mostrar, cores: c, interativo = true,
|
|
|
157
157
|
mostrar('');
|
|
158
158
|
mostrar(c.bold(c.brand(' Bem-vindo ao PrimoCode.')));
|
|
159
159
|
mostrar(c.muted(' Primeiro, entre na sua conta do Conecta Primo AI.'));
|
|
160
|
-
mostrar(c.dim(' Vou abrir o navegador; é só
|
|
160
|
+
mostrar(c.dim(' Vou abrir o navegador; é só entrar com a conta por lá — o resto é automático.'));
|
|
161
161
|
mostrar('');
|
|
162
162
|
const r = await conectar();
|
|
163
163
|
if (!r || r.ok === false) {
|
|
164
164
|
mostrar('');
|
|
165
165
|
mostrar(c.err(' Não deu para conectar' + (r && r.error ? `: ${r.error}` : '.')));
|
|
166
|
-
mostrar(c.muted(' Tente de novo com ') + c.brand('/
|
|
166
|
+
mostrar(c.muted(' Tente de novo com ') + c.brand('/connect') + c.muted('.'));
|
|
167
167
|
return { liberado: false, motivo: 'sem-login' };
|
|
168
168
|
}
|
|
169
169
|
credencial = conectado ? conectado() : { plano: r.plano };
|
|
@@ -181,7 +181,7 @@ async function rodar({ perguntar, mostrar, cores: c, interativo = true,
|
|
|
181
181
|
} else if (!s || !s.ok) {
|
|
182
182
|
mostrar('');
|
|
183
183
|
mostrar(c.err(' Não consegui confirmar sua conta' + (s && s.error ? `: ${s.error}` : '.')));
|
|
184
|
-
mostrar(c.muted(' Entre de novo com ') + c.brand('/
|
|
184
|
+
mostrar(c.muted(' Entre de novo com ') + c.brand('/connect') + c.muted('.'));
|
|
185
185
|
return { liberado: false, motivo: 'sessao-invalida' };
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -195,7 +195,7 @@ async function rodar({ perguntar, mostrar, cores: c, interativo = true,
|
|
|
195
195
|
mostrar('');
|
|
196
196
|
mostrar(c.dim(' Assine em ') + c.brand('conecta-primo-ai.vercel.app')
|
|
197
197
|
+ c.dim(' e rode ') + c.brand('primo') + c.dim(' de novo.'));
|
|
198
|
-
mostrar(c.dim(' Já assinou? ') + c.brand('/
|
|
198
|
+
mostrar(c.dim(' Já assinou? ') + c.brand('/connect')
|
|
199
199
|
+ c.dim(' atualiza o plano nesta máquina.'));
|
|
200
200
|
mostrar('');
|
|
201
201
|
return { liberado: false, motivo: 'sem-plano', plano };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primocode",
|
|
3
|
-
"version": "8.38.
|
|
3
|
+
"version": "8.38.1",
|
|
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": {
|