primocode 8.34.0 → 8.34.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/primocode.js +45 -3
- package/package.json +1 -1
package/bin/primocode.js
CHANGED
|
@@ -268,9 +268,31 @@ function refreshPrompt() { if (rl) rl.setPrompt(makePrompt()); }
|
|
|
268
268
|
// — não um novo comando. Sem isso o "s" de confirmação virava prompt para a IA.
|
|
269
269
|
let pendingAsk = null;
|
|
270
270
|
|
|
271
|
+
/* ── O QUE A PESSOA ADIANTA ──────────────────────────────────────────────
|
|
272
|
+
* Enquanto a abertura corre — e ela demora, porque confere o plano no
|
|
273
|
+
* servidor — o que for digitado não é comando nem resposta ainda: a pergunta
|
|
274
|
+
* ainda não apareceu. Fica aqui.
|
|
275
|
+
*
|
|
276
|
+
* Sem isto, esse texto caía como PEDIDO no agente. Medido no pacote
|
|
277
|
+
* publicado: o "2" da escolha da IA virou pergunta no chat e o modelo
|
|
278
|
+
* respondeu "Oi! Como posso ajudar?".
|
|
279
|
+
*
|
|
280
|
+
* E guardar não bastava: preso na fila de comandos, ele nunca chegava à
|
|
281
|
+
* pergunta que veio depois. Por isso o `ask` olha aqui ANTES de esperar uma
|
|
282
|
+
* linha nova — quem digitou 2 antes de ver o menu escolheu a 2, e a escolha
|
|
283
|
+
* dela vale.
|
|
284
|
+
*/
|
|
285
|
+
let segurando = false;
|
|
286
|
+
const adiantadas = [];
|
|
287
|
+
|
|
271
288
|
function ask(question) {
|
|
272
289
|
return new Promise((resolve) => {
|
|
273
|
-
if (rl) {
|
|
290
|
+
if (rl) {
|
|
291
|
+
process.stdout.write(question);
|
|
292
|
+
if (adiantadas.length) { const a = adiantadas.shift(); process.stdout.write(a + '\n'); return resolve(a); }
|
|
293
|
+
pendingAsk = resolve;
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
274
296
|
const tmp = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
275
297
|
tmp.question(question, (a) => { tmp.close(); resolve(a); });
|
|
276
298
|
});
|
|
@@ -1527,6 +1549,8 @@ async function main() {
|
|
|
1527
1549
|
|
|
1528
1550
|
rl.on('line', (line) => {
|
|
1529
1551
|
if (pendingAsk) { const resolve = pendingAsk; pendingAsk = null; resolve(line); return; }
|
|
1552
|
+
// Abertura correndo: guarda em vez de mandar ao agente.
|
|
1553
|
+
if (segurando) { adiantadas.push(line); return; }
|
|
1530
1554
|
queue.push(line);
|
|
1531
1555
|
drain();
|
|
1532
1556
|
});
|
|
@@ -1540,6 +1564,18 @@ async function main() {
|
|
|
1540
1564
|
* para pegar. Quem colasse dois comandos perdia o segundo, e quem
|
|
1541
1565
|
* fechasse a entrada saía sem nem o "Até logo". Digitando devagar ninguém
|
|
1542
1566
|
* via — os ouvintes ficam prontos milissegundos depois. */
|
|
1567
|
+
/* A FILA FICA SEGURA ENQUANTO A ABERTURA CORRE.
|
|
1568
|
+
*
|
|
1569
|
+
* `busy` já é o freio do `drain`, e é ele que se usa aqui. Sem isso, tudo
|
|
1570
|
+
* o que a pessoa digitar antes de a pergunta aparecer — e ela demora,
|
|
1571
|
+
* porque confere o plano no servidor — cai como PEDIDO no agente. Medido
|
|
1572
|
+
* no pacote publicado: o "2" da escolha da IA virou uma pergunta no chat,
|
|
1573
|
+
* e o modelo respondeu "Oi! Como posso ajudar?".
|
|
1574
|
+
*
|
|
1575
|
+
* O ouvinte de `line` continua atendendo o `ask` normalmente: ele olha o
|
|
1576
|
+
* `pendingAsk` antes da fila. O que fica retido é só o que não era
|
|
1577
|
+
* resposta a nada. */
|
|
1578
|
+
segurando = true;
|
|
1543
1579
|
boasVindas.rodar({
|
|
1544
1580
|
perguntar: ask,
|
|
1545
1581
|
mostrar: (t) => console.log(t),
|
|
@@ -1555,8 +1591,14 @@ async function main() {
|
|
|
1555
1591
|
// o primocode-server, que tem a chave do provedor.
|
|
1556
1592
|
state.liberado = !r || r.liberado !== false;
|
|
1557
1593
|
state.motivoBloqueio = r && r.motivo;
|
|
1558
|
-
|
|
1559
|
-
|
|
1594
|
+
}).catch(() => { state.liberado = true; }).then(() => {
|
|
1595
|
+
// O que sobrou de adiantado não era resposta de nada: vira comando,
|
|
1596
|
+
// na ordem em que foi digitado. Nada se perde, só esperou a vez.
|
|
1597
|
+
segurando = false;
|
|
1598
|
+
while (adiantadas.length) queue.push(adiantadas.shift());
|
|
1599
|
+
if (queue.length) drain();
|
|
1600
|
+
else if (!closed) rl.prompt();
|
|
1601
|
+
});
|
|
1560
1602
|
}
|
|
1561
1603
|
|
|
1562
1604
|
main().catch((e) => { console.error(c.err(e.message || e)); process.exit(1); });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primocode",
|
|
3
|
-
"version": "8.34.
|
|
3
|
+
"version": "8.34.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": {
|