83 lines
2.6 KiB
PowerShell
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
|