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.
Files changed (2) hide show
  1. package/lib/referencia.js +29 -5
  2. 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 relevante(cand, palavras) {
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 >= Math.min(2, palavras.length);
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
- if (cand.nota === 'site provável da empresa' && !relevante({ titulo: texto.slice(0, 3000), url: cand.url }, palavras)) continue;
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.0",
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": {