primocode 8.9.0 → 8.9.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/lib/referencia.js +29 -5
- package/package.json +1 -1
package/lib/referencia.js
CHANGED
|
@@ -224,13 +224,17 @@ const GENERICAS = new Set(['sobre', 'empresa', 'company', 'overview', 'about', '
|
|
|
224
224
|
* "paris" e não tem nada a ver). Consulta de uma palavra só se contenta com
|
|
225
225
|
* ela mesma.
|
|
226
226
|
*/
|
|
227
|
-
function
|
|
228
|
-
if (!palavras.length) return true;
|
|
227
|
+
function quantoBate(cand, palavras) {
|
|
229
228
|
const alvo = `${cand.titulo || ''} ${cand.url || ''}`
|
|
230
229
|
.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase();
|
|
231
230
|
let batidas = 0;
|
|
232
231
|
for (const p of palavras) if (alvo.includes(p)) batidas++;
|
|
233
|
-
return batidas
|
|
232
|
+
return batidas;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function relevante(cand, palavras) {
|
|
236
|
+
if (!palavras.length) return true;
|
|
237
|
+
return quantoBate(cand, palavras) >= Math.min(2, palavras.length);
|
|
234
238
|
}
|
|
235
239
|
|
|
236
240
|
/**
|
|
@@ -482,6 +486,9 @@ async function pesquisar({ consulta, paginas = 3 }) {
|
|
|
482
486
|
}
|
|
483
487
|
|
|
484
488
|
const lidas = [];
|
|
489
|
+
// Os chutes de domínio ficam de lado até o fim: só então dá para saber
|
|
490
|
+
// qual deles fala mais do assunto.
|
|
491
|
+
const chutesLidos = [];
|
|
485
492
|
for (const cand of candidatos) {
|
|
486
493
|
if (lidas.length >= paginas) break;
|
|
487
494
|
const html = await pegar(cand.url);
|
|
@@ -493,7 +500,16 @@ async function pesquisar({ consulta, paginas = 3 }) {
|
|
|
493
500
|
// parisgroup.com (um grupo de varejo no exterior) e parisgroup.ai (a
|
|
494
501
|
// empresa que o usuário quis). O nome não distingue os dois — o texto
|
|
495
502
|
// da página, sim. Sem esta prova o agente escreveria sobre a errada.
|
|
496
|
-
|
|
503
|
+
const ehChute = cand.nota === 'site provável da empresa';
|
|
504
|
+
if (ehChute) {
|
|
505
|
+
const nota = quantoBate({ titulo: texto.slice(0, 4000), url: cand.url }, palavras);
|
|
506
|
+
if (nota < Math.min(2, palavras.length)) continue;
|
|
507
|
+
// Passar não basta: entre dois domínios do MESMO nome, fica o que
|
|
508
|
+
// fala mais do assunto. parisgroup.ai e parisgroup.co os dois
|
|
509
|
+
// "batiam", e o agente recebia as duas empresas como se fossem uma.
|
|
510
|
+
chutesLidos.push({ nota, item: { titulo: cand.titulo, url: cand.url, nota: cand.nota, trecho: texto.slice(0, MAX_TEXTO) } });
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
497
513
|
lidas.push({
|
|
498
514
|
titulo: cand.titulo,
|
|
499
515
|
url: cand.url,
|
|
@@ -502,6 +518,14 @@ async function pesquisar({ consulta, paginas = 3 }) {
|
|
|
502
518
|
});
|
|
503
519
|
}
|
|
504
520
|
|
|
521
|
+
// O melhor chute entra na frente: quando a empresa tem site, ele é a
|
|
522
|
+
// fonte mais confiável que existe sobre ela.
|
|
523
|
+
if (chutesLidos.length) {
|
|
524
|
+
chutesLidos.sort((a, b) => b.nota - a.nota);
|
|
525
|
+
lidas.unshift(chutesLidos[0].item);
|
|
526
|
+
if (lidas.length > paginas) lidas.length = paginas;
|
|
527
|
+
}
|
|
528
|
+
|
|
505
529
|
if (!lidas.length) {
|
|
506
530
|
return {
|
|
507
531
|
ok: false,
|
|
@@ -524,4 +548,4 @@ async function pesquisar({ consulta, paginas = 3 }) {
|
|
|
524
548
|
}
|
|
525
549
|
|
|
526
550
|
module.exports = { pesquisar, buscar, stackoverflow, textoDe, buscarWikipedia, buscarRespostaDDG, pegar,
|
|
527
|
-
relevante, palavrasDaConsulta, sitesProvaveis, pareceCodigo };
|
|
551
|
+
relevante, quantoBate, palavrasDaConsulta, sitesProvaveis, pareceCodigo };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primocode",
|
|
3
|
-
"version": "8.9.
|
|
3
|
+
"version": "8.9.1",
|
|
4
4
|
"description": "PrimoCode — agente de engenharia com IA e cursor próprio. Modelos grátis. 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": {
|