# context_watch.ps1 - cat context ocupa sesiunea curenta Claude Code. # Citeste ultimul "usage" din transcriptul JSONL al sesiunii (input + cache_read + cache_creation). # Utilizare: # - ca hook (PostToolUse): primeste pe stdin JSON-ul hook-ului, cu transcript_path; # - manual: powershell -File context_watch.ps1 [-TranscriptPath ] [-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. # -StareFile : la pragul de avertisment/max, garanteaza ca fisierul exista si are un antet # datat pe primul rand (""), # inlocuit la fiecare rulare, nu acumulat. Restul continutului (scris de model) ramane neatins. [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]$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 [switch]$Subagent, # SubagentStop: masoara agent_transcript_path, nu transcriptul sesiunii [switch]$Json # emite {"hookSpecificOutput":{...,"additionalContext":...}} pe stdout ) # subagentii nu-si simt pragul singuri: se taie sarcina mai devreme decat la sesiunea principala if ($Subagent) { if (-not $PSBoundParameters.ContainsKey('Prag')) { $Prag = 150000 } if (-not $PSBoundParameters.ContainsKey('PragMax')) { $PragMax = 200000 } } function Scrie-AntetStare([string]$cale, [int]$tokeni, [string]$nivel) { $antet = "" if (Test-Path $cale) { $continut = Get-Content -Path $cale -Encoding UTF8 if ($continut.Count -gt 0 -and $continut[0] -match '^