context_watch: parametru -StareFile pentru fisierul de progres
Scrie/inlocuieste un singur antet pe primul rand al fisierului de stare (data, ora, tokeni, nivel), fara sa atinga restul continutului. Garanteaza ca fisierul de progres exista si e datat chiar daca sesiunea se opreste inainte sa apuce modelul sa scrie handoff-ul. Fara -StareFile comportamentul ramane neschimbat. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015ZwtBDjGbAWvy7TmcNVxDC
This commit is contained in:
@@ -6,6 +6,9 @@
|
||||
# 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.
|
||||
# -StareFile <cale>: la pragul de avertisment/max, garanteaza ca fisierul exista si are un antet
|
||||
# datat pe primul rand ("<!-- context_watch: DD.MM.YYYY HH:mm | tokeni: N | nivel: ... -->"),
|
||||
# inlocuit la fiecare rulare, nu acumulat. Restul continutului (scris de model) ramane neatins.
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$TranscriptPath,
|
||||
@@ -13,9 +16,25 @@ param(
|
||||
[int]$PragMax = 275000,
|
||||
[switch]$Intotdeauna,
|
||||
[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
|
||||
[switch]$OSinguraData, # PostToolUse: o singura alerta per prag atins, nu la fiecare tool
|
||||
[string]$StareFile # optional: fisier de stare cu antet datat, actualizat la prag atins
|
||||
)
|
||||
|
||||
function Scrie-AntetStare([string]$cale, [int]$tokeni, [string]$nivel) {
|
||||
$antet = "<!-- context_watch: $(Get-Date -Format 'dd.MM.yyyy HH:mm') | tokeni: $tokeni | nivel: $nivel -->"
|
||||
if (Test-Path $cale) {
|
||||
$continut = Get-Content -Path $cale -Encoding UTF8
|
||||
if ($continut.Count -gt 0 -and $continut[0] -match '^<!-- context_watch:') {
|
||||
$continut[0] = $antet
|
||||
} else {
|
||||
$continut = ,$antet + $continut
|
||||
}
|
||||
} else {
|
||||
$continut = ,$antet
|
||||
}
|
||||
Set-Content -Path $cale -Value $continut -Encoding UTF8
|
||||
}
|
||||
|
||||
if (-not $TranscriptPath) {
|
||||
$stdin = [Console]::In.ReadToEnd()
|
||||
if ($stdin) {
|
||||
@@ -70,6 +89,7 @@ if ($total -ge $PragMax) {
|
||||
"nu citi loguri brute si nu diagnostica prin citire de cod in sesiunea asta."
|
||||
}
|
||||
if ($mesaj) {
|
||||
if ($StareFile) { Scrie-AntetStare -cale $StareFile -tokeni $total -nivel $nivel }
|
||||
if ($OSinguraData -and $nivel) {
|
||||
# marcaj per sesiune+prag: transcriptul identifica sesiunea, deci si numele fisierului de marcaj
|
||||
$cheie = [IO.Path]::GetFileNameWithoutExtension($TranscriptPath) + '_' + $nivel
|
||||
|
||||
Reference in New Issue
Block a user