@danhachuel/pandanews 0.4.2 → 0.4.3
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/CHANGELOG.md +6 -0
- package/backend/app/main.py +1 -1
- package/package.json +1 -1
- package/scripts/start.js +1 -1
- package/scripts/test-start-isolation.mjs +15 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Todas as versões publicadas são registradas aqui antes do publish (regra em AGENTS.md). A etiqueta visual usa PATCH de dois dígitos (ex.: 0.1.00); o registry npm normaliza para a versão canônica (ex.: 0.1.0).
|
|
4
4
|
|
|
5
|
+
## 0.4.03 (2026-11-08)
|
|
6
|
+
|
|
7
|
+
- **Regra permanente no AGENTS.md**: é PROIBIDO criar/publicar versões que abram janelas de terminal (CMD/PowerShell/console Python) no computador do usuário — todo processo filho deve nascer com `windowsHide: true` + grupo isolado, rodar em background com saída apenas em log e ser encerrado por código; versão que exiba janela de console é inválida (hotfix + CHANGELOG)
|
|
8
|
+
- Teste de regressão reforçado: varre **todas** as chamadas `spawn`/`spawnSync` do launcher e falha se qualquer uma perder `windowsHide`/`detached` — o CI passa a barrar isso automaticamente
|
|
9
|
+
- `taskkill` do encerramento gracioso também com `detached: true` (uniformidade da regra)
|
|
10
|
+
|
|
5
11
|
## 0.4.02 (2026-11-08)
|
|
6
12
|
|
|
7
13
|
- **Seletor dinâmico de modelos NVIDIA NIM**: novo endpoint proxy `GET /api/v1/configuracoes/llm/nvidia/models` que consulta a NVIDIA em tempo real com a chave do usuário — a API key nunca é exposta ao frontend/Network tab
|
package/backend/app/main.py
CHANGED
package/package.json
CHANGED
package/scripts/start.js
CHANGED
|
@@ -87,7 +87,7 @@ async function findFreePort(base, maxTries) {
|
|
|
87
87
|
function encerrarPorPid(pid, motivo) {
|
|
88
88
|
try {
|
|
89
89
|
if (process.platform === 'win32') {
|
|
90
|
-
spawnSync('taskkill', ['/pid', String(pid), '/f', '/t'], { windowsHide: true });
|
|
90
|
+
spawnSync('taskkill', ['/pid', String(pid), '/f', '/t'], { windowsHide: true, detached: true });
|
|
91
91
|
} else {
|
|
92
92
|
process.kill(pid, 'SIGTERM');
|
|
93
93
|
}
|
|
@@ -33,6 +33,21 @@ for (const [regex, descricao] of verificacoes) {
|
|
|
33
33
|
if (!ok) falhas += 1;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
// Regra permanente (AGENTS.md): NENHUMA spawn do launcher pode abrir janela de
|
|
37
|
+
// console — toda chamada spawn/spawnSync precisa de windowsHide E detached.
|
|
38
|
+
const chamadasSpawn = [...src.matchAll(/\bspawn(?:Sync)?\(/g)];
|
|
39
|
+
for (const chamada of chamadasSpawn) {
|
|
40
|
+
const trecho = src.slice(chamada.index, chamada.index + 700);
|
|
41
|
+
const temJanelaOculta = /windowsHide:\s*true/.test(trecho);
|
|
42
|
+
const temGrupoIsolado = /detached:\s*true/.test(trecho);
|
|
43
|
+
if (temJanelaOculta && temGrupoIsolado) {
|
|
44
|
+
console.log('PASS — spawn com windowsHide + detached (sem janela de console no usuário)');
|
|
45
|
+
} else {
|
|
46
|
+
console.log(`FAIL — spawn sem windowsHide/detached: ${trecho.slice(0, 80).replace(/\n/g, ' ')}…`);
|
|
47
|
+
falhas += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
36
51
|
if (falhas > 0) {
|
|
37
52
|
console.error(`Isolamento de processos: ${falhas} verificação(ões) falharam.`);
|
|
38
53
|
process.exit(1);
|