mirror of
https://github.com/stablyai/orca.git
synced 2026-10-31 00:57:45 +00:00
* Verify pinned transcript reads and stream Codex usage aggregation * Resume Claude usage scans with compact token checkpoints * Harden transcript snapshots and reject incomplete discovery * Keep Codex race fixtures inside their temporary data home * Verify pinned transcript rotation with portable file moves * test: keep Claude usage mock registration in test suites * Compress saved Claude usage without dropping history * Keep Claude cache writes bound to their original request * Register Claude contracts without conflicting with chat contracts * Assert unchanged Claude sources skip the actual cache writer
163 lines
5.8 KiB
JavaScript
163 lines
5.8 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from 'node:assert/strict'
|
|
import { appendFile, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'
|
|
import { createHash } from 'node:crypto'
|
|
import { tmpdir } from 'node:os'
|
|
import { join } from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
import { parseArgs } from 'node:util'
|
|
import { runProcessSync } from '@orca/process-host'
|
|
import {
|
|
loadClaudeUsageBenchmarkScanner,
|
|
readClaudeUsageBenchmarkBaselineSources
|
|
} from './claude-usage-benchmark-scanner.mjs'
|
|
|
|
const ROOT = fileURLToPath(new URL('../..', import.meta.url))
|
|
const STORE_PATH = 'src/main/claude-usage/store.ts'
|
|
const { values } = parseArgs({
|
|
options: {
|
|
'baseline-ref': { type: 'string', default: '51e7181850b022bae2d41091fe1229accef4bd50' },
|
|
'usage-keys': { type: 'string', default: '16384' },
|
|
output: { type: 'string' }
|
|
}
|
|
})
|
|
const usageKeys = Number(values['usage-keys'])
|
|
assert(
|
|
Number.isSafeInteger(usageKeys) && usageKeys > 7,
|
|
'usage-keys must be an integer above seven'
|
|
)
|
|
process.env.ORCA_CLAUDE_USAGE_APPEND_BENCH_BASELINE = values['baseline-ref']
|
|
|
|
function serializationIndent(source) {
|
|
const indent = /jsonIndent:\s*(\d+)/.exec(source)
|
|
return indent ? Number(indent[1]) : undefined
|
|
}
|
|
|
|
function sourceHash(source) {
|
|
return createHash('sha256').update(source).digest('hex')
|
|
}
|
|
|
|
function persistedState(result) {
|
|
return {
|
|
schemaVersion: 6,
|
|
worktreeFingerprint: '[]',
|
|
processedFiles: result.processedFiles,
|
|
sessions: result.sessions,
|
|
dailyAggregates: result.dailyAggregates,
|
|
scanState: {
|
|
enabled: true,
|
|
lastScanStartedAt: 1,
|
|
lastScanCompletedAt: 2,
|
|
lastScanError: null
|
|
}
|
|
}
|
|
}
|
|
|
|
function usageRecord(cwd, index, inputTokens = 100) {
|
|
return `${JSON.stringify({
|
|
type: 'assistant',
|
|
sessionId: 'active-session',
|
|
timestamp: new Date(Date.UTC(2026, 9, 9, 12, 0, index)).toISOString(),
|
|
requestId: `request-${index}`,
|
|
cwd,
|
|
gitBranch: 'benchmark',
|
|
message: {
|
|
id: `message-${index}`,
|
|
model: 'claude-sonnet-4-6',
|
|
usage: {
|
|
input_tokens: inputTokens,
|
|
output_tokens: 10,
|
|
cache_read_input_tokens: 0,
|
|
cache_creation_input_tokens: 20,
|
|
cache_creation: { ephemeral_1h_input_tokens: 5 }
|
|
}
|
|
}
|
|
})}\n`
|
|
}
|
|
|
|
const home = await mkdtemp(join(tmpdir(), 'orca-claude-cache-representation-'))
|
|
try {
|
|
const project = join(home, '.claude', 'projects', 'benchmark')
|
|
const cwd = join(home, 'repo')
|
|
await mkdir(project, { recursive: true })
|
|
await mkdir(cwd)
|
|
const transcriptPath = join(project, 'active-session.jsonl')
|
|
const history = Array.from({ length: usageKeys }, (_, index) => usageRecord(cwd, index)).join('')
|
|
const baseline = await readClaudeUsageBenchmarkBaselineSources()
|
|
const storeRead = runProcessSync({
|
|
program: 'git',
|
|
args: ['show', `${baseline.baselineCommit}:${STORE_PATH}`],
|
|
cwd: ROOT,
|
|
timeoutMs: 10_000,
|
|
maxOutputBytes: 1024 * 1024,
|
|
env: { ...process.env, ORCA_BACKGROUND_LAUNCH: '1' }
|
|
})
|
|
assert.equal(storeRead.code, 0, storeRead.stderr)
|
|
const currentStore = await readFile(join(ROOT, ...STORE_PATH.split('/')), 'utf8')
|
|
const stores = { baseline: storeRead.stdout, current: currentStore }
|
|
const loaded = await Promise.all([
|
|
loadClaudeUsageBenchmarkScanner(home, baseline.sources, new Map(), baseline.baselineCommit),
|
|
loadClaudeUsageBenchmarkScanner(home)
|
|
])
|
|
const arms = {}
|
|
const results = []
|
|
for (const [index, arm] of ['baseline', 'current'].entries()) {
|
|
const { scanner, bundleSha256, sourceFingerprints } = loaded[index]
|
|
await writeFile(transcriptPath, history)
|
|
const cold = await scanner.scanClaudeUsageFiles([], [], undefined, [])
|
|
await appendFile(transcriptPath, usageRecord(cwd, 7, 2_000))
|
|
const result = await scanner.scanClaudeUsageFiles(
|
|
[],
|
|
JSON.parse(JSON.stringify(cold.processedFiles)),
|
|
undefined,
|
|
[]
|
|
)
|
|
const fresh = await scanner.scanClaudeUsageFiles([], [], undefined, [])
|
|
assert.deepEqual(result, fresh, `${arm} resume differs from a fresh scan`)
|
|
assert.equal(result.processedFiles[0].ownedDedupeKeys.length, usageKeys)
|
|
assert.equal(result.sessions[0].totalInputTokens, usageKeys * 100 + 1_900)
|
|
const state = persistedState(result)
|
|
const compact = JSON.stringify(state)
|
|
const indented = JSON.stringify(state, null, 2)
|
|
const indent = serializationIndent(stores[arm])
|
|
assert.deepEqual(JSON.parse(compact), JSON.parse(indented))
|
|
assert.deepEqual(structuredClone(state), state)
|
|
arms[arm] = {
|
|
compactFullStateBytes: Buffer.byteLength(compact),
|
|
indentedFullStateBytes: Buffer.byteLength(indented),
|
|
productionFullStateBytes: Buffer.byteLength(JSON.stringify(state, null, indent)),
|
|
productionIndent: indent ?? null,
|
|
storeSha256: sourceHash(stores[arm]),
|
|
ownedKeys: result.processedFiles[0].ownedDedupeKeys.length,
|
|
bundleSha256,
|
|
sourceFingerprints
|
|
}
|
|
results.push(result)
|
|
}
|
|
assert.deepEqual(results[0].sessions, results[1].sessions)
|
|
assert.deepEqual(results[0].dailyAggregates, results[1].dailyAggregates)
|
|
const report = {
|
|
purpose: 'Actual scanner cache representation byte counts; no timing or peak-memory claim.',
|
|
node: process.version,
|
|
platform: process.platform,
|
|
arch: process.arch,
|
|
baselineRef: baseline.baselineRef,
|
|
baselineCommit: baseline.baselineCommit,
|
|
usageKeys,
|
|
historyBytes: Buffer.byteLength(history),
|
|
stateFields: 'schema v6; source cache, session/daily projections and fixed scan-state metadata',
|
|
exactColdParity: true,
|
|
crossArmProjectionParity: true,
|
|
serializationParity: true,
|
|
structuredCloneParity: true,
|
|
toolingSha256: sourceHash(await readFile(import.meta.filename)),
|
|
arms
|
|
}
|
|
if (values.output) {
|
|
await writeFile(values.output, `${JSON.stringify(report, null, 2)}\n`)
|
|
}
|
|
console.log(JSON.stringify(report))
|
|
} finally {
|
|
await rm(home, { recursive: true, force: true })
|
|
}
|