claude-usage-widget/scripts/seed-fake-jsonl.ps1

83 lines
2.6 KiB
PowerShell

# Verification helper: append a synthetic assistant line to a JSONL under one
# of the resolved roots, so the watcher/poll can be exercised without running
# a real Claude Code session.
#
# Usage (from PowerShell on the Windows host):
# .\scripts\seed-fake-jsonl.ps1
# .\scripts\seed-fake-jsonl.ps1 -InputTokens 5000 -OutputTokens 1500 -Model claude-sonnet-4-6
# .\scripts\seed-fake-jsonl.ps1 -OffsetHours -6 # back-date by 6h to test block boundary
[CmdletBinding()]
param(
[string] $Distro = $null, # null → first distro found
[string] $Model = "claude-opus-4-7",
[int] $InputTokens = 100,
[int] $OutputTokens = 500,
[int] $CacheCreate = 0,
[int] $CacheRead = 0,
[double] $OffsetHours = 0, # back/forward date the timestamp
[string] $Path = $null # explicit JSONL path; overrides discovery
)
function Find-RootJsonl {
param([string] $Distro)
if ($Path) { return $Path }
$candidates = @()
# Native first.
$native = Join-Path $env:USERPROFILE ".claude\projects"
if (Test-Path $native) { $candidates += $native }
# WSL.
if (-not $Distro) {
$distros = (& wsl.exe -l -q) | Where-Object { $_ -and $_.Trim() }
if ($distros) { $Distro = $distros[0].Trim() }
}
if ($Distro) {
$homeDir = "\\wsl$\$Distro\home"
if (Test-Path $homeDir) {
Get-ChildItem $homeDir -Directory | ForEach-Object {
$p = Join-Path $_.FullName ".claude\projects"
if (Test-Path $p) { $candidates += $p }
}
}
}
if (-not $candidates) { throw "No .claude/projects found (native or WSL)." }
$root = $candidates[0]
Write-Host "Using root: $root"
# Use a dedicated synthetic project dir so we don't pollute real transcripts.
$project = Join-Path $root "-fake-claude-usage-widget"
New-Item -ItemType Directory -Force -Path $project | Out-Null
return Join-Path $project "synthetic.jsonl"
}
$target = Find-RootJsonl -Distro $Distro
$ts = (Get-Date).ToUniversalTime().AddHours($OffsetHours).ToString("o")
$uuid = [guid]::NewGuid().ToString()
$reqId = "req_" + ([guid]::NewGuid().ToString("N").Substring(0, 16))
$line = @{
type = "assistant"
timestamp = $ts
sessionId = $uuid
requestId = $reqId
uuid = $uuid
message = @{
model = $Model
usage = @{
input_tokens = $InputTokens
output_tokens = $OutputTokens
cache_creation_input_tokens = $CacheCreate
cache_read_input_tokens = $CacheRead
}
}
} | ConvertTo-Json -Compress -Depth 6
Add-Content -Path $target -Value $line -Encoding UTF8
Write-Host "Appended to $target"
Write-Host $line