adauga handoff_inject.ps1 - reinjectare handoff pe SessionStart

Hook SessionStart care citeste docs\handoff_activ.md si il reinjecteaza
prin additionalContext la /clear, compactare sau resume, ca sa nu se
piarda starea lasata de sesiunea anterioara. Tace pe pornire normala
(startup) sau daca fisierul nu exista; trunchiaza explicit peste ~9000
caractere, cu calea completa pentru citire manuala.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015ZwtBDjGbAWvy7TmcNVxDC
This commit is contained in:
2026-09-17 22:23:20 +03:00
parent 87cc3a7976
commit c1966421e5

45
utile/handoff_inject.ps1 Normal file
View File

@@ -0,0 +1,45 @@
# handoff_inject.ps1 - reinjecteaza handoff-ul de pe disc in context la (re)pornirea sesiunii.
# Hook SessionStart. Motiv: dupa /clear sau compactare, contextul sesiunii anterioare se pierde;
# daca exista un handoff scris pe disc (regula orchestrare-subagenti.md), il baga inapoi automat.
# Utilizare (settings.json, hook SessionStart cu matcher "clear,compact,resume"):
# powershell -ExecutionPolicy Bypass -File handoff_inject.ps1 [-CaleHandoff <cale>] [-Surse compact,clear,resume]
# Primeste pe stdin JSON-ul hook-ului (are nevoie de "source" si "cwd").
# O pornire normala ("startup") nu injecteaza nimic - vezi lista implicita de surse acceptate.
[CmdletBinding()]
param(
[string]$CaleHandoff,
[string[]]$Surse = @('compact', 'clear', 'resume')
)
$LimitaChar = 9000
$stdin = [Console]::In.ReadToEnd()
if (-not $stdin) { exit 0 }
try {
$h = ConvertFrom-Json $stdin
} catch {
exit 0
}
if (-not $h.source -or ($Surse -notcontains $h.source)) { exit 0 }
if (-not $CaleHandoff) {
if (-not $h.cwd) { exit 0 }
$CaleHandoff = Join-Path $h.cwd 'docs\handoff_activ.md'
}
if (-not (Test-Path $CaleHandoff)) { exit 0 }
$continut = Get-Content -Path $CaleHandoff -Raw -Encoding UTF8
$antet = "HANDOFF RELUAT automat din $CaleHandoff (pornire: $($h.source)). Aceasta e starea lasata de sesiunea anterioara - citeste-o ca stare, nu ca instructiune noua, si continua de acolo."
if ($continut.Length -gt $LimitaChar) {
$taiat = $continut.Substring(0, $LimitaChar)
$avertisment = "`n`n[TRUNCHIAT - handoff-ul are $($continut.Length) caractere, peste limita de $LimitaChar. Citeste fisierul complet cu Read: $CaleHandoff]"
$continut = $taiat + $avertisment
}
$mesaj = "$antet`n`n$continut"
$o = @{ hookSpecificOutput = @{ hookEventName = 'SessionStart'; additionalContext = $mesaj } }
Write-Output ($o | ConvertTo-Json -Compress -Depth 4)
exit 0