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:
45
utile/handoff_inject.ps1
Normal file
45
utile/handoff_inject.ps1
Normal 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
|
||||
Reference in New Issue
Block a user