sync SVN r18016: editare articole in factura de vanzare, precizie pret achizitie

ROAFACTURARE 2.11.15 (r18015): programe/ofacturare_editare.prg, programe/ofacturare_stoc.prg.
docs: conventia de encoding .sc2/.vc2 corectata la cp1250; cercetarile trans-proiect mutate
din ROAFACTURARE in docs/cercetare (r18014); actualizari reguli_lucru, oracle_export,
flux-editare-vfp-text, scripturi-migrare-db, flux-modificare-stergere-nota-jurnal, todos.
.gitignore: watchdog_out si PNG-urile din rularile headless (r18008).
Text FoxBin2Prg regenerat: clase/comun.vc2, ferestre/frm_import_note_facturi_clienti.sc2,
ferestre/frm_initializare_facturi_balanta.sc2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AV7dQbTLAqvrtQbH7zxXxw
This commit is contained in:
2026-08-20 14:07:12 +03:00
parent 13b4f65723
commit 6de489950c
27 changed files with 4547 additions and 67 deletions

View File

@@ -4,13 +4,16 @@
# - ca hook (PostToolUse): primeste pe stdin JSON-ul hook-ului, cu transcript_path;
# - manual: powershell -File context_watch.ps1 [-TranscriptPath <cale.jsonl>] [-Prag 250000]
# Iese cu 2 si scrie pe stderr cand contextul depaseste pragul (asa ajunge mesajul la agent).
# -OSinguraData: emite o singura data per prag per sesiune (marcaj in %TEMP%). Necesar pe PostToolUse,
# altfel mesajul s-ar repeta la fiecare apel de tool si ar deveni zgomot ignorat.
[CmdletBinding()]
param(
[string]$TranscriptPath,
[int]$Prag = 250000,
[int]$PragMax = 275000,
[switch]$Intotdeauna,
[switch]$Stdout # UserPromptSubmit: mesajul se scrie pe stdout si se iese cu 0
[switch]$Stdout, # UserPromptSubmit: mesajul se scrie pe stdout si se iese cu 0
[switch]$OSinguraData # PostToolUse: o singura alerta per prag atins, nu la fiecare tool
)
if (-not $TranscriptPath) {
@@ -50,12 +53,30 @@ foreach ($camp in @('input_tokens', 'cache_creation_input_tokens', 'cache_read_i
$k = [Math]::Round($total / 1000)
$mesaj = ''
$nivel = ''
if ($total -ge $PragMax) {
$mesaj = "CONTEXT ${k}k - peste limita de $([Math]::Round($PragMax/1000))k (regula 9): scrie handoff-ul in docs\progres.md si preda sesiunea acum."
$nivel = 'max'
$mesaj = "CONTEXT ${k}k - PESTE LIMITA de $([Math]::Round($PragMax/1000))k. REGULA ZERO, predare OBLIGATORIE ACUM: " +
"(1) opreste lucrul, nu incepe nimic nou, adu editarile in curs la o stare consistenta pe disc; " +
"(2) scrie handoff-ul PE DISC in docs\handoff_<subiect>.md (nu doar in mesaj) - inventar livrabile cu fisier:linie, " +
"ce e terminat si ce nu, DACA write-back-ul e facut per fisier, comanda de rulare a testelor, ce s-a stabilit deja, " +
"ce e interzis, starea datelor de test, capcanele de mediu; " +
"(3) confirma in doua randuri ce ramane si ce e intr-o stare periculoasa; (4) preda unei sesiuni noi. " +
"'Mai am putin' nu e motiv de amanare."
} elseif ($total -ge $Prag) {
$mesaj = "CONTEXT ${k}k - peste $([Math]::Round($Prag/1000))k (regula 9): actualizeaza docs\progres.md si pregateste predarea; deleaga la subagenti ce mai ai de citit/testat."
$nivel = 'avertisment'
$mesaj = "CONTEXT ${k}k - peste $([Math]::Round($Prag/1000))k. REGULA ZERO: incheie blocul curent, actualizeaza handoff-ul pe disc " +
"(docs\handoff_<subiect>.md / docs\progres.md) si pregateste predarea. Deleaga la subagenti tot ce mai ai de citit sau de testat - " +
"nu citi loguri brute si nu diagnostica prin citire de cod in sesiunea asta."
}
if ($mesaj) {
if ($OSinguraData -and $nivel) {
# marcaj per sesiune+prag: transcriptul identifica sesiunea, deci si numele fisierului de marcaj
$cheie = [IO.Path]::GetFileNameWithoutExtension($TranscriptPath) + '_' + $nivel
$marcaj = Join-Path $env:TEMP "claude_ctxwatch_$cheie.flag"
if (Test-Path $marcaj) { exit 0 }
New-Item -ItemType File -Path $marcaj -Force | Out-Null
}
if ($Stdout) { Write-Output $mesaj; exit 0 }
[Console]::Error.WriteLine($mesaj)
exit 2