Add SessionStop hook and session-events.tsv duration tracking
- session-audit.json: add SessionStop entry pointing to new end-of-session scripts - report-hook-event-end.sh/.ps1: log payload to hook-events.log and write TSV row to session-events.tsv - report-hook-event.sh/.ps1: also write SessionStart TSV row to session-events.tsv so start/end pairs are queryable for duration
This commit is contained in:
@@ -7,6 +7,14 @@
|
||||
"linux": "bash ~/.copilot-resources/resources/scripts/report-hook-event.sh",
|
||||
"windows": "powershell -NoProfile -File \"$HOME/.copilot-resources/resources/scripts/report-hook-event.ps1\""
|
||||
}
|
||||
],
|
||||
"SessionStop": [
|
||||
{
|
||||
"type": "command",
|
||||
"osx": "bash ~/.copilot-resources/resources/scripts/report-hook-event-end.sh",
|
||||
"linux": "bash ~/.copilot-resources/resources/scripts/report-hook-event-end.sh",
|
||||
"windows": "powershell -NoProfile -File \"$HOME/.copilot-resources/resources/scripts/report-hook-event-end.ps1\""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$StateDir = if ($env:COPILOT_RESOURCES_STATE_DIR) { $env:COPILOT_RESOURCES_STATE_DIR } else { Join-Path $HOME '.copilot-resources-state' }
|
||||
New-Item -ItemType Directory -Path $StateDir -Force | Out-Null
|
||||
|
||||
$Payload = [Console]::In.ReadToEnd()
|
||||
$Payload | Add-Content -LiteralPath (Join-Path $StateDir 'hook-events.log')
|
||||
|
||||
# Append a TSV row to session-events.tsv for duration tracking.
|
||||
"$(Get-Date -AsUTC -Format o)`tSessionEnd" | Add-Content -LiteralPath (Join-Path $StateDir 'session-events.tsv')
|
||||
|
||||
'{"continue": true}'
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
state_dir="${COPILOT_RESOURCES_STATE_DIR:-$HOME/.copilot-resources-state}"
|
||||
mkdir -p -- "$state_dir"
|
||||
|
||||
event_payload="$(cat)"
|
||||
printf '%s\n' "$event_payload" >> "$state_dir/hook-events.log"
|
||||
|
||||
# Append a TSV row to session-events.tsv for duration tracking.
|
||||
printf '%s\tSessionEnd\n' "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> "$state_dir/session-events.tsv"
|
||||
|
||||
printf '{"continue": true}\n'
|
||||
@@ -6,6 +6,9 @@ New-Item -ItemType Directory -Path $StateDir -Force | Out-Null
|
||||
$Payload = [Console]::In.ReadToEnd()
|
||||
$Payload | Add-Content -LiteralPath (Join-Path $StateDir 'hook-events.log')
|
||||
|
||||
# Append a TSV row to session-events.tsv for duration tracking.
|
||||
"$(Get-Date -AsUTC -Format o)`tSessionStart" | Add-Content -LiteralPath (Join-Path $StateDir 'session-events.tsv')
|
||||
|
||||
$PortRegistryScript = Join-Path $PSScriptRoot 'update-port-registry.mjs'
|
||||
$NodeCommand = Get-Command node -ErrorAction SilentlyContinue
|
||||
if ($NodeCommand -and (Test-Path -LiteralPath $PortRegistryScript)) {
|
||||
|
||||
@@ -10,6 +10,9 @@ mkdir -p -- "$state_dir"
|
||||
event_payload="$(cat)"
|
||||
printf '%s\n' "$event_payload" >> "$state_dir/hook-events.log"
|
||||
|
||||
# Append a TSV row to session-events.tsv for duration tracking.
|
||||
printf '%s\tSessionStart\n' "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> "$state_dir/session-events.tsv"
|
||||
|
||||
if command -v node >/dev/null 2>&1 && [[ -f "$port_registry_script" ]]; then
|
||||
if ! printf '%s' "$event_payload" | node "$port_registry_script"; then
|
||||
printf '%s update-port-registry failed\n' "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> "$state_dir/project-ports-errors.log"
|
||||
|
||||
Reference in New Issue
Block a user