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).
|
# 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,
|
# -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.
|
# 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()]
|
[CmdletBinding()]
|
||||||
param(
|
param(
|
||||||
[string]$TranscriptPath,
|
[string]$TranscriptPath,
|
||||||
@@ -13,9 +16,25 @@ param(
|
|||||||
[int]$PragMax = 275000,
|
[int]$PragMax = 275000,
|
||||||
[switch]$Intotdeauna,
|
[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
|
[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) {
|
if (-not $TranscriptPath) {
|
||||||
$stdin = [Console]::In.ReadToEnd()
|
$stdin = [Console]::In.ReadToEnd()
|
||||||
if ($stdin) {
|
if ($stdin) {
|
||||||
@@ -70,6 +89,7 @@ if ($total -ge $PragMax) {
|
|||||||
"nu citi loguri brute si nu diagnostica prin citire de cod in sesiunea asta."
|
"nu citi loguri brute si nu diagnostica prin citire de cod in sesiunea asta."
|
||||||
}
|
}
|
||||||
if ($mesaj) {
|
if ($mesaj) {
|
||||||
|
if ($StareFile) { Scrie-AntetStare -cale $StareFile -tokeni $total -nivel $nivel }
|
||||||
if ($OSinguraData -and $nivel) {
|
if ($OSinguraData -and $nivel) {
|
||||||
# marcaj per sesiune+prag: transcriptul identifica sesiunea, deci si numele fisierului de marcaj
|
# marcaj per sesiune+prag: transcriptul identifica sesiunea, deci si numele fisierului de marcaj
|
||||||
$cheie = [IO.Path]::GetFileNameWithoutExtension($TranscriptPath) + '_' + $nivel
|
$cheie = [IO.Path]::GetFileNameWithoutExtension($TranscriptPath) + '_' + $nivel
|
||||||
|
|||||||
Reference in New Issue
Block a user