From 021fa681b479af5764ce37766df7b5dac16dd146 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Tue, 11 Aug 2026 23:00:24 -0400 Subject: [PATCH 01/13] fix(dashboard): report metric coverage and stabilize graphs --- hooks-core/metrics.mjs | 95 ++++++++++++++++++- .../hooks/token-optimizer/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/codex/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- .../codex/plugin/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- .../copilot/.github/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/cursor/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/gemini/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/kilo/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/opencode/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/qwen/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- integrations/windsurf/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- plugin/hooks/lib/metrics.mjs | 95 ++++++++++++++++++- scripts/verify-live-dashboard.mjs | 50 ++++++++-- src/dashboard/public/css/tokens.css | 8 +- src/dashboard/public/js/graph3d.js | 25 ++++- src/dashboard/public/js/wiki.js | 52 +++++++--- tests/hooks/adapter-injection-e2e.test.mjs | 3 + tests/hooks/injection-e2e.test.mjs | 11 ++- tests/hooks/injection.test.mjs | 28 +++++- tests/hooks/refusal-feedback.test.mjs | 4 + 20 files changed, 1247 insertions(+), 74 deletions(-) diff --git a/hooks-core/metrics.mjs b/hooks-core/metrics.mjs index b56d7b55b..33391d1b7 100644 --- a/hooks-core/metrics.mjs +++ b/hooks-core/metrics.mjs @@ -736,7 +736,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -834,9 +834,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -867,11 +887,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -884,9 +962,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/codex/hooks/lib/metrics.mjs b/integrations/codex/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/codex/hooks/lib/metrics.mjs +++ b/integrations/codex/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/codex/plugin/hooks/lib/metrics.mjs b/integrations/codex/plugin/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/codex/plugin/hooks/lib/metrics.mjs +++ b/integrations/codex/plugin/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/copilot/.github/hooks/lib/metrics.mjs b/integrations/copilot/.github/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/copilot/.github/hooks/lib/metrics.mjs +++ b/integrations/copilot/.github/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/cursor/hooks/lib/metrics.mjs b/integrations/cursor/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/cursor/hooks/lib/metrics.mjs +++ b/integrations/cursor/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/gemini/hooks/lib/metrics.mjs b/integrations/gemini/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/gemini/hooks/lib/metrics.mjs +++ b/integrations/gemini/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/kilo/hooks/lib/metrics.mjs b/integrations/kilo/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/kilo/hooks/lib/metrics.mjs +++ b/integrations/kilo/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/opencode/hooks/lib/metrics.mjs b/integrations/opencode/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/opencode/hooks/lib/metrics.mjs +++ b/integrations/opencode/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/qwen/hooks/lib/metrics.mjs b/integrations/qwen/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/qwen/hooks/lib/metrics.mjs +++ b/integrations/qwen/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/integrations/windsurf/hooks/lib/metrics.mjs b/integrations/windsurf/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/integrations/windsurf/hooks/lib/metrics.mjs +++ b/integrations/windsurf/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/plugin/hooks/lib/metrics.mjs b/plugin/hooks/lib/metrics.mjs index 0bb08f1bc..eccd90db3 100644 --- a/plugin/hooks/lib/metrics.mjs +++ b/plugin/hooks/lib/metrics.mjs @@ -738,7 +738,7 @@ function canonicalKeyish(p) { * arms, multiplied by treated touches. Reporting it as a measured fact would be * the same overclaiming this project criticises competitors for. */ -function buildReport(events, balance) { +function buildReport(events, balance, sourceCoverage = {}) { // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // @@ -836,9 +836,29 @@ function buildReport(events, balance) { const perTouchSaving = withheldCost - treatedCost; const estimatedAvoided = Math.max(0, Math.round(perTouchSaving * treated.length)); + const downstreamSamples = injections.filter((event) => { + if (event.downstream != null) return true; + const key = `${event.sessionId || ''}|${event.anchor}`; + return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); + }).length; + // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; + const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const lastEventAt = Math.max( + 0, + ...events.map((event) => Number(event.at) || 0), + ...balance.map((event) => Number(event.at) || 0) + ); + const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const metric = (status, source, samples, extra = {}) => ({ + status, + source, + samples, + ...extra, + }); + return { memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, @@ -869,11 +889,69 @@ function buildReport(events, balance) { : estimatedAvoided > injectedTokens + harvestTokens ? 'the graph is saving more than it costs' : 'the graph is NOT yet paying for itself', + measurement: { + schemaVersion: 1, + generatedAt: new Date().toISOString(), + sourceCoverage: { + projects: Number(sourceCoverage.projects) || 1, + projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), + projectsWithBalanceEvents: + Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithoutTelemetry: Math.max( + 0, + (Number(sourceCoverage.projects) || 1) - + (telemetryProjects || (measured ? 1 : 0)) + ), + }, + freshness: { + lastEventAt: lastEventAt || null, + ageMs: lastEventAt ? Math.max(0, Date.now() - lastEventAt) : null, + status: !lastEventAt + ? 'not-measured' + : Date.now() - lastEventAt <= 7 * 86_400_000 + ? 'fresh' + : 'stale', + }, + metrics: { + memoryDeliveries: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the treated arm', + allInjections.filter((event) => !event.holdout).length + ), + memoryHoldouts: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: inject events in the withheld arm', + allInjections.filter((event) => event.holdout).length + ), + rememberingCost: metric( + measured ? 'measured' : 'not-measured', + 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', + allInjections.length + balance.filter((event) => event.kind === 'harvest').length + ), + readingAvoided: metric( + !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + 'stratified file-touch holdout joined to downstream read events', + downstreamSamples, + { + treated: treated.length, + holdouts: withheld.length, + requiredTreated: 20, + requiredHoldouts: 5, + } + ), + }, + }, }; } export function report(dir) { - return buildReport(readAll(dir), readBalance(dir)); + const events = readAll(dir); + const balance = readBalance(dir); + return buildReport(events, balance, { + projects: 1, + projectsWithTelemetry: events.length || balance.length ? 1 : 0, + projectsWithBalanceEvents: balance.length ? 1 : 0, + }); } /** @@ -886,9 +964,18 @@ export function report(dir) { */ export function reportMany(dirs) { const unique = [...new Set((dirs || []).map((dir) => String(dir)))]; + const eventSources = unique.map((dir) => readAll(dir)); + const balanceSources = unique.map((dir) => readBalance(dir)); const report = buildReport( - unique.flatMap((dir) => readAll(dir)), - unique.flatMap((dir) => readBalance(dir)) + eventSources.flat(), + balanceSources.flat(), + { + projects: unique.length, + projectsWithTelemetry: eventSources.filter( + (events, index) => events.length || balanceSources[index].length + ).length, + projectsWithBalanceEvents: balanceSources.filter((events) => events.length).length, + } ); return { ...report, projects: unique.length }; } diff --git a/scripts/verify-live-dashboard.mjs b/scripts/verify-live-dashboard.mjs index 8373f5dc9..80877eba3 100644 --- a/scripts/verify-live-dashboard.mjs +++ b/scripts/verify-live-dashboard.mjs @@ -22,6 +22,31 @@ page.on('requestfailed', (request) => errors.push(`request:${request.url()}:${request.failure()?.errorText}`) ); +async function waitForCount(selector, minimum, label) { + try { + await page.waitForFunction( + ({ selector: query, minimum: expected }) => + document.querySelectorAll(query).length >= expected, + { selector, minimum }, + { timeout: 30_000 } + ); + } catch (error) { + const diagnostic = await page.evaluate((query) => ({ + url: location.href, + count: document.querySelectorAll(query).length, + status: + document.querySelector('#hook-health-status')?.textContent?.trim() || + null, + state: + document.querySelector('#hook-health-status')?.dataset.state || null, + }), selector); + throw new Error( + `${label} did not render: ${JSON.stringify(diagnostic)}`, + { cause: error } + ); + } +} + async function measureCameraStability(host) { return host.evaluate(async (element) => { const samples = []; @@ -78,9 +103,7 @@ try { await page.goto(`${base}/wiki`, { waitUntil: 'networkidle' }); await page.waitForSelector('#wiki-list li'); - await page.waitForFunction( - () => document.querySelectorAll('#hook-health-grid .stat-card').length === 6 - ); + await waitForCount('#hook-health-grid .stat-card', 6, 'hook health cards'); const captureHealth = await page.evaluate(() => { const values = [...document.querySelectorAll('#hook-health-grid .stat-card')] .map((card) => ({ @@ -118,9 +141,7 @@ try { })); const detailVisible = await page.locator('#wiki-detail').isVisible(); await page.locator('.wiki-tab[data-tab="evidence"]').click(); - await page.waitForFunction( - () => document.querySelectorAll('#evidence-summary .stat-card').length === 6 - ); + await waitForCount('#evidence-summary .stat-card', 6, 'evidence cards'); await page.waitForFunction( () => document.querySelectorAll('#ucr-missing tbody tr').length > 0 ); @@ -170,6 +191,17 @@ try { value: card.querySelector('.stat-value')?.textContent?.trim() || '', })) ), + balanceContract: await page.evaluate(async () => { + const report = await fetch('/api/wiki/balance?scope=all').then((response) => + response.json() + ); + return { + coverage: report.measurement?.sourceCoverage || null, + freshness: report.measurement?.freshness || null, + metrics: report.measurement?.metrics || null, + method: document.querySelector('#balance-method')?.textContent?.trim() || '', + }; + }), captureHealth, graph3d, cameraStability, @@ -221,6 +253,12 @@ try { wiki.aggregateCoverage.missingProjects >= 1 && wiki.balanceCards.length === 4 && wiki.balanceCards.every(({ value }) => value.length > 0 && value !== '—') && + wiki.balanceContract.coverage?.projects >= 1 && + wiki.balanceContract.coverage?.projectsWithTelemetry >= 1 && + wiki.balanceContract.freshness?.lastEventAt && + ['memoryDeliveries', 'memoryHoldouts', 'rememberingCost', 'readingAvoided'] + .every((key) => wiki.balanceContract.metrics?.[key]?.source) && + /selected projects have telemetry/i.test(wiki.balanceContract.method) && wiki.captureHealth.values.length === 6 && wiki.captureHealth.values.some( ({ label, value }) => label === 'Hook runs' && Number(value.replaceAll(',', '')) > 0 diff --git a/src/dashboard/public/css/tokens.css b/src/dashboard/public/css/tokens.css index 67e40027b..c450c6a34 100644 --- a/src/dashboard/public/css/tokens.css +++ b/src/dashboard/public/css/tokens.css @@ -404,13 +404,17 @@ a:focus-visible, .knowledge-graph-3d { position: relative; width: 100%; - height: 100%; - min-height: inherit; overflow: hidden; isolation: isolate; + /* The host owns its height (the overview and wiki stages have different + constraints). A percentage height here made the canvas participate in its + parent's intrinsic sizing, so ResizeObserver could grow the card forever. */ + contain: layout paint; } .knowledge-graph-canvas { + position: absolute; + inset: 0; display: block; width: 100%; height: 100%; diff --git a/src/dashboard/public/js/graph3d.js b/src/dashboard/public/js/graph3d.js index ccee6002f..37fa91de4 100644 --- a/src/dashboard/public/js/graph3d.js +++ b/src/dashboard/public/js/graph3d.js @@ -123,6 +123,7 @@ export function createKnowledgeGraph3D(host, initial, options = {}) { let moved = false; let previous = { x: 0, y: 0 }; let destroyed = false; + let resizeFrame = 0; function prepare() { const nodes = (graph.nodes || []).slice(0, options.cap || 150); @@ -156,10 +157,20 @@ export function createKnowledgeGraph3D(host, initial, options = {}) { // host two pixels larger. ResizeObserver observed the growth and repeated // it forever, which looked like a camera continuously zooming into the // overview graph while the entire canvas expanded without bound. - width = Math.max(1, Math.round(host.clientWidth)); - height = Math.max(1, Math.round(host.clientHeight)); - canvas.width = Math.round(width * ratio); - canvas.height = Math.round(height * ratio); + const nextWidth = Math.max(1, Math.round(host.clientWidth)); + const nextHeight = Math.max(1, Math.round(host.clientHeight)); + const nextCanvasWidth = Math.round(nextWidth * ratio); + const nextCanvasHeight = Math.round(nextHeight * ratio); + if ( + nextWidth === width && + nextHeight === height && + canvas.width === nextCanvasWidth && + canvas.height === nextCanvasHeight + ) return; + width = nextWidth; + height = nextHeight; + canvas.width = nextCanvasWidth; + canvas.height = nextCanvasHeight; // CSS owns the display size (100% x 100%). Setting pixel dimensions here // would reintroduce the child -> auto-sized parent feedback loop. canvas.style.removeProperty('width'); @@ -478,7 +489,10 @@ export function createKnowledgeGraph3D(host, initial, options = {}) { chrome.querySelector('.graph-3d-reset').addEventListener('click', reset); - const observer = new ResizeObserver(resize); + const observer = new ResizeObserver(() => { + cancelAnimationFrame(resizeFrame); + resizeFrame = requestAnimationFrame(resize); + }); observer.observe(host); prepare(); resize(); @@ -505,6 +519,7 @@ export function createKnowledgeGraph3D(host, initial, options = {}) { destroy() { destroyed = true; cancelAnimationFrame(animation); + cancelAnimationFrame(resizeFrame); observer.disconnect(); host.innerHTML = ''; delete host.__knowledgeGraph3d; diff --git a/src/dashboard/public/js/wiki.js b/src/dashboard/public/js/wiki.js index 60775d57b..fea99cc19 100644 --- a/src/dashboard/public/js/wiki.js +++ b/src/dashboard/public/js/wiki.js @@ -113,30 +113,48 @@ async function loadBalance() { return; } + const measurement = balance.measurement || {}; + const metricState = (key) => measurement.metrics?.[key] || null; + const measuredValue = (key, value, suffix = '') => { + const state = metricState(key); + if (state?.status === 'not-measured') return 'Not measured'; + return `${nf.format(Number(value) || 0)}${suffix}`; + }; + // Plain language, because someone reading this page has no reason to know // what "injected" means. The words describe what happened, not what the code // calls it. const tiles = [ [ 'Memory deliveries', - nf.format(balance.memoryDeliveries ?? balance.injections), + measuredValue( + 'memoryDeliveries', + balance.memoryDeliveries ?? balance.injections + ), ], [ 'Kept back for comparison', - nf.format(balance.memoryHoldouts ?? balance.holdouts), + measuredValue( + 'memoryHoldouts', + balance.memoryHoldouts ?? balance.holdouts + ), ], [ 'Cost of remembering', - `${nf.format( - Number(balance.deliveryTokens ?? balance.injectedTokens) + - Number(balance.harvestTokens || 0) - )} tokens`, + measuredValue( + 'rememberingCost', + Number(balance.deliveryTokens ?? balance.injectedTokens ?? 0) + + Number(balance.harvestTokens || 0), + ' tokens' + ), ], [ 'Reading avoided', - balance.estimatedTokensAvoided === null - ? 'Not enough comparisons' - : `${nf.format(balance.estimatedTokensAvoided)} tokens`, + metricState('readingAvoided')?.status === 'not-measured' + ? 'Not measured' + : balance.estimatedTokensAvoided === null + ? `Collecting (${nf.format(balance.injections)} treated, ${nf.format(balance.holdouts)} held back)` + : `${nf.format(balance.estimatedTokensAvoided)} tokens`, ], ]; @@ -159,14 +177,26 @@ async function loadBalance() { ? 'positive' : 'negative'; + const coverage = measurement.sourceCoverage; + const freshness = measurement.freshness; + const coverageText = coverage + ? `${nf.format(coverage.projectsWithTelemetry)} of ${nf.format(coverage.projects)} selected projects have telemetry` + : 'Telemetry coverage was not reported by this server'; + const freshnessText = + freshness?.lastEventAt && freshness.status !== 'not-measured' + ? `latest event ${new Date(freshness.lastEventAt).toLocaleString()}` + : 'no telemetry event has been observed'; + if (balance.sufficientData) { method.textContent = `Measured against ${nf.format(balance.holdouts)} withheld control touches — not estimated. ` + - `Net after injection and harvest cost: ${nf.format(balance.netTokens)} tokens.`; + `Net after injection and harvest cost: ${nf.format(balance.netTokens)} tokens. ` + + `${coverageText}; ${freshnessText}.`; } else { method.textContent = `The graph has ${nf.format(balance.injections)} measured file deliveries and ${nf.format(balance.holdouts)} file holdouts; ` + - 'the savings estimate unlocks at 20 and 5. Command and session-start deliveries are counted above but excluded from the file-read comparison because they have no valid downstream file-read join.'; + 'the savings estimate unlocks at 20 and 5. Command and session-start deliveries are counted above but excluded from the file-read comparison because they have no valid downstream file-read join. ' + + `${coverageText}; ${freshnessText}.`; } } diff --git a/tests/hooks/adapter-injection-e2e.test.mjs b/tests/hooks/adapter-injection-e2e.test.mjs index 84a9987c7..d6a6deefa 100644 --- a/tests/hooks/adapter-injection-e2e.test.mjs +++ b/tests/hooks/adapter-injection-e2e.test.mjs @@ -132,6 +132,9 @@ function run(client, payload) { encoding: 'utf8', env: { ...process.env, + // This is a delivery/parity test, not the randomized holdout test. + // Pin treatment so the date-based arm cannot make it nondeterministic. + TOKEN_OPTIMIZER_HOLDOUT: '0', TOKEN_OPTIMIZER_STATE_DIR: join(project, '.state'), TOKEN_OPTIMIZER_WIKI_DIR: dir, TOKEN_OPTIMIZER_SHARED_DIR: dir, diff --git a/tests/hooks/injection-e2e.test.mjs b/tests/hooks/injection-e2e.test.mjs index 491af9cb2..b35212b26 100644 --- a/tests/hooks/injection-e2e.test.mjs +++ b/tests/hooks/injection-e2e.test.mjs @@ -60,7 +60,16 @@ function runHook(payload, env = {}) { input: JSON.stringify(payload), encoding: 'utf8', timeout: 30_000, - env: { ...process.env, TOKEN_OPTIMIZER_WIKI_DIR: dir, TOKEN_OPTIMIZER_SHARED_DIR: dir, ...env }, + env: { + ...process.env, + // This suite verifies DELIVERY. Production holdout assignment is time- + // stratified, so leaving it enabled makes the same fixture randomly + // become a valid control-arm silence on some UTC days. + TOKEN_OPTIMIZER_HOLDOUT: '0', + TOKEN_OPTIMIZER_WIKI_DIR: dir, + TOKEN_OPTIMIZER_SHARED_DIR: dir, + ...env, + }, }); // FAIL FAST rather than treating a crash as "no context". A hook that died // and a hook that had nothing to say both produce no additionalContext, and diff --git a/tests/hooks/injection.test.mjs b/tests/hooks/injection.test.mjs index a5db73e18..56f14fb8e 100644 --- a/tests/hooks/injection.test.mjs +++ b/tests/hooks/injection.test.mjs @@ -18,7 +18,7 @@ import { refusalPayload, linkCoOccurrence, } from '../../hooks-core/inject.mjs'; -import { inHoldout, record, readMetrics, report, indexBudget } from '../../hooks-core/metrics.mjs'; +import { inHoldout, record, readMetrics, report, reportMany, indexBudget } from '../../hooks-core/metrics.mjs'; import { load, putNode, putEdge, nodeId } from '../../hooks-core/wiki.mjs'; import { indexFile } from '../../hooks-core/staleness.mjs'; @@ -334,6 +334,32 @@ describe('P5 measurement', () => { expect(out.sufficientData).toBe(false); expect(out.estimatedTokensAvoided).toBeNull(); expect(out.verdict).toContain('insufficient data'); + expect(out.measurement.metrics.memoryDeliveries).toMatchObject({ + status: 'measured', + samples: 1, + }); + expect(out.measurement.metrics.readingAvoided.status).toBe('collecting'); + expect(out.measurement.freshness.lastEventAt).not.toBeNull(); + }); + + test('missing telemetry is explicit instead of rendered as a real zero', () => { + const empty = join(workspace, 'empty-wiki'); + const out = report(empty); + expect(out.memoryDeliveries).toBe(0); + expect(out.measurement.metrics.memoryDeliveries.status).toBe('not-measured'); + expect(out.measurement.metrics.rememberingCost.status).toBe('not-measured'); + expect(out.measurement.metrics.readingAvoided.status).toBe('not-measured'); + expect(out.measurement.freshness.status).toBe('not-measured'); + }); + + test('pooled reports disclose project telemetry coverage', () => { + record(dir, { kind: 'inject', holdout: false, tokens: 100 }); + const out = reportMany([dir, join(workspace, 'empty-wiki')]); + expect(out.measurement.sourceCoverage).toMatchObject({ + projects: 2, + projectsWithTelemetry: 1, + projectsWithoutTelemetry: 1, + }); }); test('with enough data it reports a net balance, including harvest cost', () => { diff --git a/tests/hooks/refusal-feedback.test.mjs b/tests/hooks/refusal-feedback.test.mjs index b2e19e495..570c158ee 100644 --- a/tests/hooks/refusal-feedback.test.mjs +++ b/tests/hooks/refusal-feedback.test.mjs @@ -42,10 +42,14 @@ beforeEach(() => { mkdirSync(join(projectB, '.token-optimizer', 'wiki'), { recursive: true }); shared = mkdtempSync(join(tmpdir(), 'ref-shared-')); process.env.TOKEN_OPTIMIZER_SHARED_DIR = shared; + // The assertion below proves retirement stops an otherwise-deliverable + // lesson. A randomized control-arm silence would not exercise retirement. + process.env.TOKEN_OPTIMIZER_HOLDOUT = '0'; }); afterEach(() => { delete process.env.TOKEN_OPTIMIZER_SHARED_DIR; + delete process.env.TOKEN_OPTIMIZER_HOLDOUT; for (const d of [projectA, projectB, shared]) { try { rmSync(d, { recursive: true, force: true }); From c659f87827d65e6d2918c189e3f5f3d497126675 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Tue, 11 Aug 2026 23:13:09 -0400 Subject: [PATCH 02/13] style(dashboard): format graph resize guard --- src/dashboard/public/js/graph3d.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dashboard/public/js/graph3d.js b/src/dashboard/public/js/graph3d.js index 37fa91de4..cd5de2ed6 100644 --- a/src/dashboard/public/js/graph3d.js +++ b/src/dashboard/public/js/graph3d.js @@ -166,7 +166,8 @@ export function createKnowledgeGraph3D(host, initial, options = {}) { nextHeight === height && canvas.width === nextCanvasWidth && canvas.height === nextCanvasHeight - ) return; + ) + return; width = nextWidth; height = nextHeight; canvas.width = nextCanvasWidth; From 08cc7afb8bd9b009658866c71c283faccb3bf2a2 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Tue, 11 Aug 2026 23:44:32 -0400 Subject: [PATCH 03/13] fix(metrics): preserve measurement source integrity --- hooks-core/metrics.mjs | 38 ++++++++++++------- .../hooks/token-optimizer/lib/metrics.mjs | 38 ++++++++++++------- integrations/codex/hooks/lib/metrics.mjs | 38 ++++++++++++------- .../codex/plugin/hooks/lib/metrics.mjs | 38 ++++++++++++------- .../copilot/.github/hooks/lib/metrics.mjs | 38 ++++++++++++------- integrations/cursor/hooks/lib/metrics.mjs | 38 ++++++++++++------- integrations/gemini/hooks/lib/metrics.mjs | 38 ++++++++++++------- integrations/kilo/hooks/lib/metrics.mjs | 38 ++++++++++++------- integrations/opencode/hooks/lib/metrics.mjs | 38 ++++++++++++------- integrations/qwen/hooks/lib/metrics.mjs | 38 ++++++++++++------- integrations/windsurf/hooks/lib/metrics.mjs | 38 ++++++++++++------- plugin/hooks/lib/metrics.mjs | 38 ++++++++++++------- src/dashboard/public/js/wiki.js | 10 +++-- tests/hooks/injection.test.mjs | 35 ++++++++++++++++- 14 files changed, 340 insertions(+), 161 deletions(-) diff --git a/hooks-core/metrics.mjs b/hooks-core/metrics.mjs index 33391d1b7..75cdb047c 100644 --- a/hooks-core/metrics.mjs +++ b/hooks-core/metrics.mjs @@ -84,6 +84,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -843,13 +847,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -891,14 +905,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -912,22 +924,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/codex/hooks/lib/metrics.mjs b/integrations/codex/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/codex/hooks/lib/metrics.mjs +++ b/integrations/codex/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/codex/plugin/hooks/lib/metrics.mjs b/integrations/codex/plugin/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/codex/plugin/hooks/lib/metrics.mjs +++ b/integrations/codex/plugin/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/copilot/.github/hooks/lib/metrics.mjs b/integrations/copilot/.github/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/copilot/.github/hooks/lib/metrics.mjs +++ b/integrations/copilot/.github/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/cursor/hooks/lib/metrics.mjs b/integrations/cursor/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/cursor/hooks/lib/metrics.mjs +++ b/integrations/cursor/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/gemini/hooks/lib/metrics.mjs b/integrations/gemini/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/gemini/hooks/lib/metrics.mjs +++ b/integrations/gemini/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/kilo/hooks/lib/metrics.mjs b/integrations/kilo/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/kilo/hooks/lib/metrics.mjs +++ b/integrations/kilo/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/opencode/hooks/lib/metrics.mjs b/integrations/opencode/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/opencode/hooks/lib/metrics.mjs +++ b/integrations/opencode/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/qwen/hooks/lib/metrics.mjs b/integrations/qwen/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/qwen/hooks/lib/metrics.mjs +++ b/integrations/qwen/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/windsurf/hooks/lib/metrics.mjs b/integrations/windsurf/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/integrations/windsurf/hooks/lib/metrics.mjs +++ b/integrations/windsurf/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/plugin/hooks/lib/metrics.mjs b/plugin/hooks/lib/metrics.mjs index eccd90db3..f47254797 100644 --- a/plugin/hooks/lib/metrics.mjs +++ b/plugin/hooks/lib/metrics.mjs @@ -86,6 +86,10 @@ export const BALANCE_KINDS = new Set([ 'keepwarm', ]); +/** Latest timestamp without passing an unbounded event log as function arguments. */ +export const latestEventTimestamp = (rows) => + rows.reduce((latest, event) => Math.max(latest, Number(event.at) || 0), 0); + /** * Causal records have their own bounded log. Tool outcomes are much rarer * than read/capture telemetry but more frequent than balance records; mixing @@ -845,13 +849,23 @@ function buildReport(events, balance, sourceCoverage = {}) { // Below this, arm means are noise and a ratio would be theatre. const sufficient = treated.length >= 20 && withheld.length >= 5; - const telemetryProjects = Number(sourceCoverage.projectsWithTelemetry) || 0; + const coverageNumber = (value, fallback) => { + if (value === null || value === undefined || value === '') return fallback; + const number = Number(value); + return Number.isFinite(number) ? Math.max(0, number) : fallback; + }; + const projectCount = coverageNumber(sourceCoverage.projects, 1); + const telemetryProjects = coverageNumber(sourceCoverage.projectsWithTelemetry, 0); + const balanceProjects = coverageNumber( + sourceCoverage.projectsWithBalanceEvents, + balance.length ? 1 : 0 + ); const lastEventAt = Math.max( - 0, - ...events.map((event) => Number(event.at) || 0), - ...balance.map((event) => Number(event.at) || 0) + latestEventTimestamp(events), + latestEventTimestamp(balance) ); const measured = telemetryProjects > 0 || events.length > 0 || balance.length > 0; + const balanceMeasured = balanceProjects > 0 || balance.length > 0; const metric = (status, source, samples, extra = {}) => ({ status, source, @@ -893,14 +907,12 @@ function buildReport(events, balance, sourceCoverage = {}) { schemaVersion: 1, generatedAt: new Date().toISOString(), sourceCoverage: { - projects: Number(sourceCoverage.projects) || 1, + projects: projectCount, projectsWithTelemetry: telemetryProjects || (measured ? 1 : 0), - projectsWithBalanceEvents: - Number(sourceCoverage.projectsWithBalanceEvents) || (balance.length ? 1 : 0), + projectsWithBalanceEvents: balanceProjects, projectsWithoutTelemetry: Math.max( 0, - (Number(sourceCoverage.projects) || 1) - - (telemetryProjects || (measured ? 1 : 0)) + projectCount - (telemetryProjects || (measured ? 1 : 0)) ), }, freshness: { @@ -914,22 +926,22 @@ function buildReport(events, balance, sourceCoverage = {}) { }, metrics: { memoryDeliveries: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', allInjections.filter((event) => !event.holdout).length ), memoryHoldouts: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the withheld arm', allInjections.filter((event) => event.holdout).length ), rememberingCost: metric( - measured ? 'measured' : 'not-measured', + balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: delivered injection tokens plus semantic harvest tokens', allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !measured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/src/dashboard/public/js/wiki.js b/src/dashboard/public/js/wiki.js index fea99cc19..7eb262567 100644 --- a/src/dashboard/public/js/wiki.js +++ b/src/dashboard/public/js/wiki.js @@ -152,7 +152,7 @@ async function loadBalance() { 'Reading avoided', metricState('readingAvoided')?.status === 'not-measured' ? 'Not measured' - : balance.estimatedTokensAvoided === null + : balance.estimatedTokensAvoided == null ? `Collecting (${nf.format(balance.injections)} treated, ${nf.format(balance.holdouts)} held back)` : `${nf.format(balance.estimatedTokensAvoided)} tokens`, ], @@ -179,9 +179,11 @@ async function loadBalance() { const coverage = measurement.sourceCoverage; const freshness = measurement.freshness; - const coverageText = coverage - ? `${nf.format(coverage.projectsWithTelemetry)} of ${nf.format(coverage.projects)} selected projects have telemetry` - : 'Telemetry coverage was not reported by this server'; + const coverageText = + Number.isFinite(Number(coverage?.projects)) && + Number.isFinite(Number(coverage?.projectsWithTelemetry)) + ? `${nf.format(coverage.projectsWithTelemetry)} of ${nf.format(coverage.projects)} selected projects have telemetry` + : 'Telemetry coverage was not reported by this server'; const freshnessText = freshness?.lastEventAt && freshness.status !== 'not-measured' ? `latest event ${new Date(freshness.lastEventAt).toLocaleString()}` diff --git a/tests/hooks/injection.test.mjs b/tests/hooks/injection.test.mjs index 56f14fb8e..f81133a23 100644 --- a/tests/hooks/injection.test.mjs +++ b/tests/hooks/injection.test.mjs @@ -18,7 +18,15 @@ import { refusalPayload, linkCoOccurrence, } from '../../hooks-core/inject.mjs'; -import { inHoldout, record, readMetrics, report, reportMany, indexBudget } from '../../hooks-core/metrics.mjs'; +import { + inHoldout, + record, + readMetrics, + report, + reportMany, + indexBudget, + latestEventTimestamp, +} from '../../hooks-core/metrics.mjs'; import { load, putNode, putEdge, nodeId } from '../../hooks-core/wiki.mjs'; import { indexFile } from '../../hooks-core/staleness.mjs'; @@ -352,6 +360,31 @@ describe('P5 measurement', () => { expect(out.measurement.freshness.status).toBe('not-measured'); }); + test('an empty pooled report preserves zero project coverage', () => { + const out = reportMany([]); + expect(out.projects).toBe(0); + expect(out.measurement.sourceCoverage).toEqual({ + projects: 0, + projectsWithTelemetry: 0, + projectsWithBalanceEvents: 0, + projectsWithoutTelemetry: 0, + }); + }); + + test('read-only telemetry does not fabricate balance measurements', () => { + record(dir, { kind: 'read', anchor: '/a.ts', tokens: 100 }); + const metrics = report(dir).measurement.metrics; + expect(metrics.memoryDeliveries.status).toBe('not-measured'); + expect(metrics.memoryHoldouts.status).toBe('not-measured'); + expect(metrics.rememberingCost.status).toBe('not-measured'); + expect(metrics.readingAvoided.status).toBe('not-measured'); + }); + + test('freshness handles event logs beyond the engine argument limit', () => { + const events = Array.from({ length: 150_000 }, (_, at) => ({ at })); + expect(latestEventTimestamp(events)).toBe(149_999); + }); + test('pooled reports disclose project telemetry coverage', () => { record(dir, { kind: 'inject', holdout: false, tokens: 100 }); const out = reportMany([dir, join(workspace, 'empty-wiki')]); From c19f9e1546da453fa67a3b99df75dc3235fcc174 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Tue, 11 Aug 2026 23:51:09 -0400 Subject: [PATCH 04/13] fix(metrics): require downstream outcome evidence --- hooks-core/metrics.mjs | 6 ++++-- .../cline/hooks/token-optimizer/lib/metrics.mjs | 6 ++++-- integrations/codex/hooks/lib/metrics.mjs | 6 ++++-- integrations/codex/plugin/hooks/lib/metrics.mjs | 6 ++++-- .../copilot/.github/hooks/lib/metrics.mjs | 6 ++++-- integrations/cursor/hooks/lib/metrics.mjs | 6 ++++-- integrations/gemini/hooks/lib/metrics.mjs | 6 ++++-- integrations/kilo/hooks/lib/metrics.mjs | 6 ++++-- integrations/opencode/hooks/lib/metrics.mjs | 6 ++++-- integrations/qwen/hooks/lib/metrics.mjs | 6 ++++-- integrations/windsurf/hooks/lib/metrics.mjs | 6 ++++-- plugin/hooks/lib/metrics.mjs | 6 ++++-- tests/hooks/injection.test.mjs | 17 +++++++++++++++++ 13 files changed, 65 insertions(+), 24 deletions(-) diff --git a/hooks-core/metrics.mjs b/hooks-core/metrics.mjs index 75cdb047c..3b6f35641 100644 --- a/hooks-core/metrics.mjs +++ b/hooks-core/metrics.mjs @@ -843,9 +843,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -939,7 +941,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/codex/hooks/lib/metrics.mjs b/integrations/codex/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/codex/hooks/lib/metrics.mjs +++ b/integrations/codex/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/codex/plugin/hooks/lib/metrics.mjs b/integrations/codex/plugin/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/codex/plugin/hooks/lib/metrics.mjs +++ b/integrations/codex/plugin/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/copilot/.github/hooks/lib/metrics.mjs b/integrations/copilot/.github/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/copilot/.github/hooks/lib/metrics.mjs +++ b/integrations/copilot/.github/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/cursor/hooks/lib/metrics.mjs b/integrations/cursor/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/cursor/hooks/lib/metrics.mjs +++ b/integrations/cursor/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/gemini/hooks/lib/metrics.mjs b/integrations/gemini/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/gemini/hooks/lib/metrics.mjs +++ b/integrations/gemini/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/kilo/hooks/lib/metrics.mjs b/integrations/kilo/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/kilo/hooks/lib/metrics.mjs +++ b/integrations/kilo/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/opencode/hooks/lib/metrics.mjs b/integrations/opencode/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/opencode/hooks/lib/metrics.mjs +++ b/integrations/opencode/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/qwen/hooks/lib/metrics.mjs b/integrations/qwen/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/qwen/hooks/lib/metrics.mjs +++ b/integrations/qwen/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/integrations/windsurf/hooks/lib/metrics.mjs b/integrations/windsurf/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/integrations/windsurf/hooks/lib/metrics.mjs +++ b/integrations/windsurf/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/plugin/hooks/lib/metrics.mjs b/plugin/hooks/lib/metrics.mjs index f47254797..2a4c49e94 100644 --- a/plugin/hooks/lib/metrics.mjs +++ b/plugin/hooks/lib/metrics.mjs @@ -845,9 +845,11 @@ function buildReport(events, balance, sourceCoverage = {}) { const key = `${event.sessionId || ''}|${event.anchor}`; return (reads.get(key) || []).some((read) => (read.at ?? 0) >= (event.at ?? 0)); }).length; + const downstreamMeasured = downstreamSamples > 0; // Below this, arm means are noise and a ratio would be theatre. - const sufficient = treated.length >= 20 && withheld.length >= 5; + const sufficient = + downstreamMeasured && treated.length >= 20 && withheld.length >= 5; const coverageNumber = (value, fallback) => { if (value === null || value === undefined || value === '') return fallback; @@ -941,7 +943,7 @@ function buildReport(events, balance, sourceCoverage = {}) { allInjections.length + balance.filter((event) => event.kind === 'harvest').length ), readingAvoided: metric( - !balanceMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', + !downstreamMeasured ? 'not-measured' : sufficient ? 'measured' : 'collecting', 'stratified file-touch holdout joined to downstream read events', downstreamSamples, { diff --git a/tests/hooks/injection.test.mjs b/tests/hooks/injection.test.mjs index f81133a23..97e8a3a15 100644 --- a/tests/hooks/injection.test.mjs +++ b/tests/hooks/injection.test.mjs @@ -380,6 +380,23 @@ describe('P5 measurement', () => { expect(metrics.readingAvoided.status).toBe('not-measured'); }); + test('balance cohorts without downstream outcomes do not measure reading avoided', () => { + for (let i = 0; i < 25; i++) { + record(dir, { kind: 'inject', holdout: false, tokens: 100 }); + } + for (let i = 0; i < 8; i++) { + record(dir, { kind: 'inject', holdout: true, tokens: 0 }); + } + + const out = report(dir); + expect(out.sufficientData).toBe(false); + expect(out.estimatedTokensAvoided).toBeNull(); + expect(out.measurement.metrics.readingAvoided).toMatchObject({ + status: 'not-measured', + samples: 0, + }); + }); + test('freshness handles event logs beyond the engine argument limit', () => { const events = Array.from({ length: 150_000 }, (_, at) => ({ at })); expect(latestEventTimestamp(events)).toBe(149_999); From 6dc0248060109f890de9a5cad6ae4750cb650cd1 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Wed, 12 Aug 2026 02:04:36 -0400 Subject: [PATCH 05/13] test(dashboard): accept complete graph coverage --- scripts/verify-live-dashboard.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/verify-live-dashboard.mjs b/scripts/verify-live-dashboard.mjs index 80877eba3..cae077e0e 100644 --- a/scripts/verify-live-dashboard.mjs +++ b/scripts/verify-live-dashboard.mjs @@ -250,7 +250,10 @@ try { /contain graph data/i.test(wiki.coverage) && wiki.aggregateCoverage.capturedProjects >= 2 && wiki.aggregateCoverage.nodes > wiki.aggregateCoverage.largestProjectNodes && - wiki.aggregateCoverage.missingProjects >= 1 && + // Missing-source reporting must not turn complete capture into a failure. + // The coverage assertion above accepts both the partial and complete-copy; + // this field only needs to remain a valid non-negative count. + wiki.aggregateCoverage.missingProjects >= 0 && wiki.balanceCards.length === 4 && wiki.balanceCards.every(({ value }) => value.length > 0 && value !== '—') && wiki.balanceContract.coverage?.projects >= 1 && From 18c732c31da55ca213160782416c5558d16dbac8 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Wed, 12 Aug 2026 09:38:45 -0400 Subject: [PATCH 06/13] fix(runtime): harden live capture observability --- evals/ucr/results/mcp-context-audit-v1.json | 40 ++-- hooks-core/adapter.mjs | 123 +++++++++- hooks-core/decide.mjs | 15 ++ hooks-core/harvest-write.mjs | 57 ++++- hooks-core/inject.mjs | 3 + hooks-core/observability.mjs | 124 ++++++++-- hooks-core/symbols.mjs | 6 +- .../hooks/token-optimizer/lib/adapter.mjs | 123 +++++++++- .../hooks/token-optimizer/lib/decide.mjs | 15 ++ .../token-optimizer/lib/harvest-write.mjs | 57 ++++- .../hooks/token-optimizer/lib/inject.mjs | 3 + .../token-optimizer/lib/observability.mjs | 124 ++++++++-- .../hooks/token-optimizer/lib/symbols.mjs | 6 +- integrations/codex/hooks/hooks.json | 4 +- integrations/codex/hooks/lib/adapter.mjs | 123 +++++++++- integrations/codex/hooks/lib/decide.mjs | 15 ++ .../codex/hooks/lib/harvest-write.mjs | 57 ++++- integrations/codex/hooks/lib/inject.mjs | 3 + .../codex/hooks/lib/observability.mjs | 124 ++++++++-- integrations/codex/hooks/lib/symbols.mjs | 6 +- integrations/codex/plugin/.mcp.json | 5 +- integrations/codex/plugin/hooks/hooks.json | 4 +- .../codex/plugin/hooks/lib/adapter.mjs | 123 +++++++++- .../codex/plugin/hooks/lib/decide.mjs | 15 ++ .../codex/plugin/hooks/lib/harvest-write.mjs | 57 ++++- .../codex/plugin/hooks/lib/inject.mjs | 3 + .../codex/plugin/hooks/lib/observability.mjs | 124 ++++++++-- .../codex/plugin/hooks/lib/symbols.mjs | 6 +- .../copilot/.github/hooks/lib/adapter.mjs | 123 +++++++++- .../copilot/.github/hooks/lib/decide.mjs | 15 ++ .../.github/hooks/lib/harvest-write.mjs | 57 ++++- .../copilot/.github/hooks/lib/inject.mjs | 3 + .../.github/hooks/lib/observability.mjs | 124 ++++++++-- .../copilot/.github/hooks/lib/symbols.mjs | 6 +- integrations/cursor/hooks/lib/adapter.mjs | 123 +++++++++- integrations/cursor/hooks/lib/decide.mjs | 15 ++ .../cursor/hooks/lib/harvest-write.mjs | 57 ++++- integrations/cursor/hooks/lib/inject.mjs | 3 + .../cursor/hooks/lib/observability.mjs | 124 ++++++++-- integrations/cursor/hooks/lib/symbols.mjs | 6 +- integrations/gemini/hooks/lib/adapter.mjs | 123 +++++++++- integrations/gemini/hooks/lib/decide.mjs | 15 ++ .../gemini/hooks/lib/harvest-write.mjs | 57 ++++- integrations/gemini/hooks/lib/inject.mjs | 3 + .../gemini/hooks/lib/observability.mjs | 124 ++++++++-- integrations/gemini/hooks/lib/symbols.mjs | 6 +- integrations/kilo/hooks/lib/adapter.mjs | 123 +++++++++- integrations/kilo/hooks/lib/decide.mjs | 15 ++ integrations/kilo/hooks/lib/harvest-write.mjs | 57 ++++- integrations/kilo/hooks/lib/inject.mjs | 3 + integrations/kilo/hooks/lib/observability.mjs | 124 ++++++++-- integrations/kilo/hooks/lib/symbols.mjs | 6 +- integrations/opencode/hooks/lib/adapter.mjs | 123 +++++++++- integrations/opencode/hooks/lib/decide.mjs | 15 ++ .../opencode/hooks/lib/harvest-write.mjs | 57 ++++- integrations/opencode/hooks/lib/inject.mjs | 3 + .../opencode/hooks/lib/observability.mjs | 124 ++++++++-- integrations/opencode/hooks/lib/symbols.mjs | 6 +- integrations/qwen/hooks/lib/adapter.mjs | 123 +++++++++- integrations/qwen/hooks/lib/decide.mjs | 15 ++ integrations/qwen/hooks/lib/harvest-write.mjs | 57 ++++- integrations/qwen/hooks/lib/inject.mjs | 3 + integrations/qwen/hooks/lib/observability.mjs | 124 ++++++++-- integrations/qwen/hooks/lib/symbols.mjs | 6 +- integrations/windsurf/hooks/lib/adapter.mjs | 123 +++++++++- integrations/windsurf/hooks/lib/decide.mjs | 15 ++ .../windsurf/hooks/lib/harvest-write.mjs | 57 ++++- integrations/windsurf/hooks/lib/inject.mjs | 3 + .../windsurf/hooks/lib/observability.mjs | 124 ++++++++-- integrations/windsurf/hooks/lib/symbols.mjs | 6 +- plugin/hooks/lib/adapter.mjs | 123 +++++++++- plugin/hooks/lib/decide.mjs | 15 ++ plugin/hooks/lib/harvest-write.mjs | 57 ++++- plugin/hooks/lib/inject.mjs | 3 + plugin/hooks/lib/observability.mjs | 124 ++++++++-- plugin/hooks/lib/symbols.mjs | 6 +- scripts/doctor.mjs | 7 +- scripts/verify-live-dashboard.mjs | 19 +- src/dashboard/public/js/dashboard.js | 5 +- src/dashboard/public/js/wiki.js | 58 +++-- src/dashboard/public/wiki.html | 2 +- src/server/hook-diagnostics.ts | 79 +++++-- src/server/index.ts | 154 +++++++------ src/server/mcp-diagnostics.ts | 217 ++++++++++++++++++ src/server/mcp-evidence.ts | 70 ++++++ src/server/web-server.ts | 15 ++ src/tools/file-operations/smart-glob.ts | 7 + src/tools/file-operations/smart-grep.ts | 7 + src/tools/file-operations/smart-read.ts | 7 + src/tools/intelligence/wiki-read.ts | 7 + src/tools/intelligence/wiki-write.ts | 7 + tests/hooks/causal-evidence.test.mjs | 34 +++ tests/hooks/clients.test.mjs | 40 +++- tests/hooks/observability.test.mjs | 54 ++++- tests/hooks/refusal-feedback.test.mjs | 11 +- tests/hooks/shared-tier.test.mjs | 54 ++++- tests/hooks/staleness.test.mjs | 21 ++ tests/hooks/touched-paths.test.mjs | 18 ++ tests/integration/client-hooks.test.ts | 72 ++++-- tests/integration/mcp-stdio-contract.test.ts | 80 ++++++- tests/unit/mcp-diagnostics.test.ts | 90 ++++++++ 101 files changed, 4722 insertions(+), 402 deletions(-) create mode 100644 src/server/mcp-diagnostics.ts create mode 100644 tests/unit/mcp-diagnostics.test.ts diff --git a/evals/ucr/results/mcp-context-audit-v1.json b/evals/ucr/results/mcp-context-audit-v1.json index 876709f4b..7a3cb241c 100644 --- a/evals/ucr/results/mcp-context-audit-v1.json +++ b/evals/ucr/results/mcp-context-audit-v1.json @@ -1,8 +1,8 @@ { "schemaVersion": "ucr.mcp-context-audit/1", "evidenceClass": "native-tokenized-real-tools-list-conformance-not-model-effectiveness", - "executedAt": "2026-08-10T04:42:33.220Z", - "serverSourceHash": "1753baaa743ad320f491ac0d2d7a19354e23f664eb9e84a4a96b7a6895d89550", + "executedAt": "2026-08-12T13:32:02.466Z", + "serverSourceHash": "4795aae9db9dcbc7813618193220d01a641961a84940554b3c908c52a494650f", "surfaces": [ { "name": "baseline", @@ -13,7 +13,7 @@ "schemaBytes": 2, "schemaTokens": 1, "tokenAccounting": "tiktoken:cl100k_base", - "reductionVsFull": 0.9999668049792532, + "reductionVsFull": 0.9999669825337604, "shareOf128kContext": 0.0000078125, "shareOf1mContext": 0.000001 }, @@ -28,7 +28,7 @@ "schemaBytes": 382, "schemaTokens": 71, "tokenAccounting": "tiktoken:cl100k_base", - "reductionVsFull": 0.997643153526971, + "reductionVsFull": 0.9976557598969855, "shareOf128kContext": 0.0005546875, "shareOf1mContext": 0.000071 }, @@ -44,7 +44,7 @@ "schemaBytes": 2393, "schemaTokens": 480, "tokenAccounting": "tiktoken:cl100k_base", - "reductionVsFull": 0.9840663900414938, + "reductionVsFull": 0.9841516162049724, "shareOf128kContext": 0.00375, "shareOf1mContext": 0.00048 }, @@ -63,7 +63,7 @@ "schemaBytes": 3519, "schemaTokens": 694, "tokenAccounting": "tiktoken:cl100k_base", - "reductionVsFull": 0.9769626556016597, + "reductionVsFull": 0.9770858784296893, "shareOf128kContext": 0.005421875, "shareOf1mContext": 0.000694 }, @@ -92,12 +92,12 @@ "smart_grep", "get_optimization_report" ], - "schemaBytes": 23367, - "schemaTokens": 4815, + "schemaBytes": 24067, + "schemaTokens": 4977, "tokenAccounting": "tiktoken:cl100k_base", - "reductionVsFull": 0.8401659751037345, - "shareOf128kContext": 0.0376171875, - "shareOf1mContext": 0.004815 + "reductionVsFull": 0.8356720705253079, + "shareOf128kContext": 0.0388828125, + "shareOf1mContext": 0.004977 }, { "name": "full", @@ -209,12 +209,12 @@ "optimization_storage", "context_delta" ], - "schemaBytes": 146134, - "schemaTokens": 30125, + "schemaBytes": 146834, + "schemaTokens": 30287, "tokenAccounting": "tiktoken:cl100k_base", "reductionVsFull": 0, - "shareOf128kContext": 0.2353515625, - "shareOf1mContext": 0.030125 + "shareOf128kContext": 0.2366171875, + "shareOf1mContext": 0.030287 } ], "findings": { @@ -227,10 +227,10 @@ "fullCatalogTools": 103, "graphCaptureSchemaTokens": 480, "extendedCognitiveSchemaTokens": 694, - "defaultCoreSchemaTokens": 4815, - "fullCatalogSchemaTokens": 30125, - "graphCaptureReductionVsFull": 0.9840663900414938, - "graphCaptureReductionVsCore": 0.9003115264797508, + "defaultCoreSchemaTokens": 4977, + "fullCatalogSchemaTokens": 30287, + "graphCaptureReductionVsFull": 0.9841516162049724, + "graphCaptureReductionVsCore": 0.9035563592525617, "appliesToRegisteredClients": 16, "userMcpServersAreAdditive": "Every enabled MCP server adds its own tool schemas and instructions; client isolation must disable unrelated servers during evals." }, @@ -240,5 +240,5 @@ "client hosts may add wrappers, instructions, resources, or other MCP servers beyond this server response", "model effectiveness and empty-session p95 overhead require paired live provider runs" ], - "reportHash": "3841fd34a174c1b9e1822dbc21b570d1050ff2c2ff5b976252b95287d0b967ca" + "reportHash": "520517a3d28c3a0fef9eeb971e269a800e47f775134018cd1752be27a5d39e6a" } diff --git a/hooks-core/adapter.mjs b/hooks-core/adapter.mjs index 2d98bed73..bf796dc7b 100644 --- a/hooks-core/adapter.mjs +++ b/hooks-core/adapter.mjs @@ -187,7 +187,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -383,6 +473,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -423,7 +529,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -748,7 +854,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -757,19 +870,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -778,9 +895,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/hooks-core/decide.mjs b/hooks-core/decide.mjs index 364a77976..37a7dd8f6 100644 --- a/hooks-core/decide.mjs +++ b/hooks-core/decide.mjs @@ -390,6 +390,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/hooks-core/harvest-write.mjs b/hooks-core/harvest-write.mjs index 79017ec13..ed91bb973 100644 --- a/hooks-core/harvest-write.mjs +++ b/hooks-core/harvest-write.mjs @@ -22,7 +22,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -45,6 +45,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -70,6 +101,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -365,11 +397,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -435,7 +477,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/hooks-core/inject.mjs b/hooks-core/inject.mjs index b2d686134..0d61ded8c 100644 --- a/hooks-core/inject.mjs +++ b/hooks-core/inject.mjs @@ -29,6 +29,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -560,6 +561,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -665,6 +667,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/hooks-core/observability.mjs b/hooks-core/observability.mjs index 172ed261f..7475c7376 100644 --- a/hooks-core/observability.mjs +++ b/hooks-core/observability.mjs @@ -23,7 +23,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -194,6 +194,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -205,12 +207,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -228,7 +247,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -247,6 +276,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -288,6 +322,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -318,7 +357,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -335,6 +378,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -350,38 +394,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/hooks-core/symbols.mjs b/hooks-core/symbols.mjs index 76d775d54..650fb8701 100644 --- a/hooks-core/symbols.mjs +++ b/hooks-core/symbols.mjs @@ -48,7 +48,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/cline/hooks/token-optimizer/lib/adapter.mjs b/integrations/cline/hooks/token-optimizer/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/cline/hooks/token-optimizer/lib/adapter.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/cline/hooks/token-optimizer/lib/decide.mjs b/integrations/cline/hooks/token-optimizer/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/cline/hooks/token-optimizer/lib/decide.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/cline/hooks/token-optimizer/lib/harvest-write.mjs b/integrations/cline/hooks/token-optimizer/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/cline/hooks/token-optimizer/lib/harvest-write.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/cline/hooks/token-optimizer/lib/inject.mjs b/integrations/cline/hooks/token-optimizer/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/cline/hooks/token-optimizer/lib/inject.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/cline/hooks/token-optimizer/lib/observability.mjs b/integrations/cline/hooks/token-optimizer/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/cline/hooks/token-optimizer/lib/observability.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/cline/hooks/token-optimizer/lib/symbols.mjs b/integrations/cline/hooks/token-optimizer/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/cline/hooks/token-optimizer/lib/symbols.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/codex/hooks/hooks.json b/integrations/codex/hooks/hooks.json index 0787343f7..0f187b7ad 100644 --- a/integrations/codex/hooks/hooks.json +++ b/integrations/codex/hooks/hooks.json @@ -17,7 +17,7 @@ ], "PreToolUse": [ { - "matcher": "Read|read_file|view_file|Grep|grep|search_file_content|Glob|glob|find_files|Edit|edit_file|apply_patch|Write|write_file|Bash|shell|run_command", + "matcher": "Read|read_file|view_file|Grep|grep|search_file_content|Glob|glob|find_files|Edit|edit_file|apply_patch|Write|write_file|Bash|shell|run_command|functions\\.exec|exec", "hooks": [ { "type": "command", @@ -31,7 +31,7 @@ ], "PostToolUse": [ { - "matcher": "apply_patch|Edit|Write|edit_file|write_file|smart_edit|smart_write", + "matcher": "apply_patch|Edit|Write|edit_file|write_file|smart_edit|smart_write|functions\\.exec|exec", "hooks": [ { "type": "command", diff --git a/integrations/codex/hooks/lib/adapter.mjs b/integrations/codex/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/codex/hooks/lib/adapter.mjs +++ b/integrations/codex/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/codex/hooks/lib/decide.mjs b/integrations/codex/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/codex/hooks/lib/decide.mjs +++ b/integrations/codex/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/codex/hooks/lib/harvest-write.mjs b/integrations/codex/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/codex/hooks/lib/harvest-write.mjs +++ b/integrations/codex/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/codex/hooks/lib/inject.mjs b/integrations/codex/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/codex/hooks/lib/inject.mjs +++ b/integrations/codex/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/codex/hooks/lib/observability.mjs b/integrations/codex/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/codex/hooks/lib/observability.mjs +++ b/integrations/codex/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/codex/hooks/lib/symbols.mjs b/integrations/codex/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/codex/hooks/lib/symbols.mjs +++ b/integrations/codex/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/codex/plugin/.mcp.json b/integrations/codex/plugin/.mcp.json index 39de674ce..e8384cc16 100644 --- a/integrations/codex/plugin/.mcp.json +++ b/integrations/codex/plugin/.mcp.json @@ -2,7 +2,10 @@ "mcpServers": { "token-optimizer": { "command": "npx", - "args": ["-y", "@ooples/token-optimizer-mcp@latest"] + "args": ["-y", "@ooples/token-optimizer-mcp@latest"], + "required": true, + "startup_timeout_sec": 30, + "tool_timeout_sec": 120 } } } diff --git a/integrations/codex/plugin/hooks/hooks.json b/integrations/codex/plugin/hooks/hooks.json index ed08582b1..e29539010 100644 --- a/integrations/codex/plugin/hooks/hooks.json +++ b/integrations/codex/plugin/hooks/hooks.json @@ -17,7 +17,7 @@ ], "PreToolUse": [ { - "matcher": "Read|read_file|view_file|Grep|grep|search_file_content|Glob|glob|find_files|Edit|edit_file|apply_patch|Write|write_file|Bash|shell|run_command", + "matcher": "Read|read_file|view_file|Grep|grep|search_file_content|Glob|glob|find_files|Edit|edit_file|apply_patch|Write|write_file|Bash|shell|run_command|functions\\.exec|exec", "hooks": [ { "type": "command", @@ -31,7 +31,7 @@ ], "PostToolUse": [ { - "matcher": "apply_patch|Edit|Write|edit_file|write_file|smart_edit|smart_write", + "matcher": "apply_patch|Edit|Write|edit_file|write_file|smart_edit|smart_write|functions\\.exec|exec", "hooks": [ { "type": "command", diff --git a/integrations/codex/plugin/hooks/lib/adapter.mjs b/integrations/codex/plugin/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/codex/plugin/hooks/lib/adapter.mjs +++ b/integrations/codex/plugin/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/codex/plugin/hooks/lib/decide.mjs b/integrations/codex/plugin/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/codex/plugin/hooks/lib/decide.mjs +++ b/integrations/codex/plugin/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/codex/plugin/hooks/lib/harvest-write.mjs b/integrations/codex/plugin/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/codex/plugin/hooks/lib/harvest-write.mjs +++ b/integrations/codex/plugin/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/codex/plugin/hooks/lib/inject.mjs b/integrations/codex/plugin/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/codex/plugin/hooks/lib/inject.mjs +++ b/integrations/codex/plugin/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/codex/plugin/hooks/lib/observability.mjs b/integrations/codex/plugin/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/codex/plugin/hooks/lib/observability.mjs +++ b/integrations/codex/plugin/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/codex/plugin/hooks/lib/symbols.mjs b/integrations/codex/plugin/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/codex/plugin/hooks/lib/symbols.mjs +++ b/integrations/codex/plugin/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/copilot/.github/hooks/lib/adapter.mjs b/integrations/copilot/.github/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/copilot/.github/hooks/lib/adapter.mjs +++ b/integrations/copilot/.github/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/copilot/.github/hooks/lib/decide.mjs b/integrations/copilot/.github/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/copilot/.github/hooks/lib/decide.mjs +++ b/integrations/copilot/.github/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/copilot/.github/hooks/lib/harvest-write.mjs b/integrations/copilot/.github/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/copilot/.github/hooks/lib/harvest-write.mjs +++ b/integrations/copilot/.github/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/copilot/.github/hooks/lib/inject.mjs b/integrations/copilot/.github/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/copilot/.github/hooks/lib/inject.mjs +++ b/integrations/copilot/.github/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/copilot/.github/hooks/lib/observability.mjs b/integrations/copilot/.github/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/copilot/.github/hooks/lib/observability.mjs +++ b/integrations/copilot/.github/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/copilot/.github/hooks/lib/symbols.mjs b/integrations/copilot/.github/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/copilot/.github/hooks/lib/symbols.mjs +++ b/integrations/copilot/.github/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/cursor/hooks/lib/adapter.mjs b/integrations/cursor/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/cursor/hooks/lib/adapter.mjs +++ b/integrations/cursor/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/cursor/hooks/lib/decide.mjs b/integrations/cursor/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/cursor/hooks/lib/decide.mjs +++ b/integrations/cursor/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/cursor/hooks/lib/harvest-write.mjs b/integrations/cursor/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/cursor/hooks/lib/harvest-write.mjs +++ b/integrations/cursor/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/cursor/hooks/lib/inject.mjs b/integrations/cursor/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/cursor/hooks/lib/inject.mjs +++ b/integrations/cursor/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/cursor/hooks/lib/observability.mjs b/integrations/cursor/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/cursor/hooks/lib/observability.mjs +++ b/integrations/cursor/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/cursor/hooks/lib/symbols.mjs b/integrations/cursor/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/cursor/hooks/lib/symbols.mjs +++ b/integrations/cursor/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/gemini/hooks/lib/adapter.mjs b/integrations/gemini/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/gemini/hooks/lib/adapter.mjs +++ b/integrations/gemini/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/gemini/hooks/lib/decide.mjs b/integrations/gemini/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/gemini/hooks/lib/decide.mjs +++ b/integrations/gemini/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/gemini/hooks/lib/harvest-write.mjs b/integrations/gemini/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/gemini/hooks/lib/harvest-write.mjs +++ b/integrations/gemini/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/gemini/hooks/lib/inject.mjs b/integrations/gemini/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/gemini/hooks/lib/inject.mjs +++ b/integrations/gemini/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/gemini/hooks/lib/observability.mjs b/integrations/gemini/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/gemini/hooks/lib/observability.mjs +++ b/integrations/gemini/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/gemini/hooks/lib/symbols.mjs b/integrations/gemini/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/gemini/hooks/lib/symbols.mjs +++ b/integrations/gemini/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/kilo/hooks/lib/adapter.mjs b/integrations/kilo/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/kilo/hooks/lib/adapter.mjs +++ b/integrations/kilo/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/kilo/hooks/lib/decide.mjs b/integrations/kilo/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/kilo/hooks/lib/decide.mjs +++ b/integrations/kilo/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/kilo/hooks/lib/harvest-write.mjs b/integrations/kilo/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/kilo/hooks/lib/harvest-write.mjs +++ b/integrations/kilo/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/kilo/hooks/lib/inject.mjs b/integrations/kilo/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/kilo/hooks/lib/inject.mjs +++ b/integrations/kilo/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/kilo/hooks/lib/observability.mjs b/integrations/kilo/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/kilo/hooks/lib/observability.mjs +++ b/integrations/kilo/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/kilo/hooks/lib/symbols.mjs b/integrations/kilo/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/kilo/hooks/lib/symbols.mjs +++ b/integrations/kilo/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/opencode/hooks/lib/adapter.mjs b/integrations/opencode/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/opencode/hooks/lib/adapter.mjs +++ b/integrations/opencode/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/opencode/hooks/lib/decide.mjs b/integrations/opencode/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/opencode/hooks/lib/decide.mjs +++ b/integrations/opencode/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/opencode/hooks/lib/harvest-write.mjs b/integrations/opencode/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/opencode/hooks/lib/harvest-write.mjs +++ b/integrations/opencode/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/opencode/hooks/lib/inject.mjs b/integrations/opencode/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/opencode/hooks/lib/inject.mjs +++ b/integrations/opencode/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/opencode/hooks/lib/observability.mjs b/integrations/opencode/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/opencode/hooks/lib/observability.mjs +++ b/integrations/opencode/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/opencode/hooks/lib/symbols.mjs b/integrations/opencode/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/opencode/hooks/lib/symbols.mjs +++ b/integrations/opencode/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/qwen/hooks/lib/adapter.mjs b/integrations/qwen/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/qwen/hooks/lib/adapter.mjs +++ b/integrations/qwen/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/qwen/hooks/lib/decide.mjs b/integrations/qwen/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/qwen/hooks/lib/decide.mjs +++ b/integrations/qwen/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/qwen/hooks/lib/harvest-write.mjs b/integrations/qwen/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/qwen/hooks/lib/harvest-write.mjs +++ b/integrations/qwen/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/qwen/hooks/lib/inject.mjs b/integrations/qwen/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/qwen/hooks/lib/inject.mjs +++ b/integrations/qwen/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/qwen/hooks/lib/observability.mjs b/integrations/qwen/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/qwen/hooks/lib/observability.mjs +++ b/integrations/qwen/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/qwen/hooks/lib/symbols.mjs b/integrations/qwen/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/qwen/hooks/lib/symbols.mjs +++ b/integrations/qwen/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/integrations/windsurf/hooks/lib/adapter.mjs b/integrations/windsurf/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/integrations/windsurf/hooks/lib/adapter.mjs +++ b/integrations/windsurf/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/integrations/windsurf/hooks/lib/decide.mjs b/integrations/windsurf/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/integrations/windsurf/hooks/lib/decide.mjs +++ b/integrations/windsurf/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/integrations/windsurf/hooks/lib/harvest-write.mjs b/integrations/windsurf/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/integrations/windsurf/hooks/lib/harvest-write.mjs +++ b/integrations/windsurf/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/integrations/windsurf/hooks/lib/inject.mjs b/integrations/windsurf/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/integrations/windsurf/hooks/lib/inject.mjs +++ b/integrations/windsurf/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/integrations/windsurf/hooks/lib/observability.mjs b/integrations/windsurf/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/integrations/windsurf/hooks/lib/observability.mjs +++ b/integrations/windsurf/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/integrations/windsurf/hooks/lib/symbols.mjs b/integrations/windsurf/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/integrations/windsurf/hooks/lib/symbols.mjs +++ b/integrations/windsurf/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/plugin/hooks/lib/adapter.mjs b/plugin/hooks/lib/adapter.mjs index fee0102b9..7b272cbc5 100644 --- a/plugin/hooks/lib/adapter.mjs +++ b/plugin/hooks/lib/adapter.mjs @@ -189,7 +189,97 @@ function contextOutput(client, eventName, additionalContext) { } /** Convert client-specific lifecycle envelopes into the common tool shape. */ +function codexStringBindings(source) { + const values = new Map(); + const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; + for (const match of String(source || '').matchAll(declaration)) { + try { + const literal = match[2]; + const value = literal.startsWith('`') + ? literal.slice(1, -1).replace(/\\`/g, '`') + : JSON.parse(literal.startsWith("'") + ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + : literal); + values.set(match[1], value); + } catch { + // A computed or malformed JavaScript expression is not safe to execute + // merely to understand a hook envelope. Leave it opaque. + } + } + return values; +} + +function codexCallArguments(source, method) { + const calls = []; + const pattern = new RegExp(`(?:tools\\.)?${method}\\s*\\(\\s*([^),]+)`, 'gi'); + for (const match of String(source || '').matchAll(pattern)) + calls.push(match[1].trim()); + return calls; +} + +function codexLiteral(value, bindings) { + if (bindings.has(value)) return String(bindings.get(value)); + try { + if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); + if (/^'(?:\\.|[^'\\])*'$/s.test(value)) + return JSON.parse( + `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` + ); + if (/^`(?:\\.|[^`\\])*`$/s.test(value)) + return value.slice(1, -1).replace(/\\`/g, '`'); + } catch { + return null; + } + return null; +} + +function codexExecCommands(source, bindings) { + const commands = []; + for (const call of String(source || '').matchAll( + /(?:tools\.)?exec_command\s*\(\s*\{([\s\S]*?)\}\s*\)/gi + )) { + const property = /\bcmd\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`)|(?:[A-Za-z_$][\w$]*))/s.exec(call[1]); + if (!property) continue; + const command = codexLiteral(property[1], bindings); + if (command) commands.push(command); + } + return commands; +} + export function normalizeClientPayload(clientName, event, raw) { + if (clientName === 'codex') { + const outerName = String(raw.tool_name ?? raw.toolName ?? raw.tool ?? ''); + if (/^(?:functions\.)?exec$/i.test(outerName)) { + const envelope = raw.tool_input ?? raw.toolInput ?? raw.arguments ?? raw.args; + const source = + typeof envelope === 'string' + ? envelope + : envelope?.code ?? envelope?.input ?? envelope?.source ?? ''; + const bindings = codexStringBindings(source); + const patchCalls = codexCallArguments(source, 'apply_patch'); + const patch = patchCalls + .map((argument) => codexLiteral(argument, bindings)) + .find(Boolean); + const mutation = patchCalls.length > 0; + const commands = codexExecCommands(source, bindings); + + // `functions.exec` is also the orchestration envelope for web, image and + // other non-filesystem tools. Do not reinterpret those as shell commands: + // doing so produced irrelevant cross-project advice and fabricated graph + // activity for operations the filesystem hooks never observed. + if (!mutation && !commands.length) return raw; + return { + ...raw, + tool_name: mutation ? 'apply_patch' : 'run_command', + tool_input: { + ...(envelope && typeof envelope === 'object' ? envelope : {}), + command: String(patch || commands.join('\n') || source || ''), + code_mode_envelope: true, + }, + }; + } + } + if (clientName === 'cline') { const body = event === 'post-tool' ? raw.postToolUse : raw.preToolUse; if (!body) return raw; @@ -385,6 +475,22 @@ function projectBriefing() { function observeAndInject(payload, state, episode, features) { const touched = touchedFiles(payload); const dirFor = (path) => wikiDir(projectRootFor(path, payload.cwd)); + const registerRoot = (root) => { + const dir = wikiDir(root); + registerProject({ + root, + graphDir: dir, + client: episode.client || 'unknown', + }); + return dir; + }; + + // SessionStart is not delivered consistently by every host/version. The + // graph was still written in that case, but the dashboard registry never + // learned it existed. Register every repository observed by a real tool call + // as a second, idempotent production path. + for (const { path } of touched) + registerRoot(projectRootFor(path, payload.cwd)); const bytes = readCostBytes(payload); if (bytes && payload.tool_input.file_path) { @@ -425,7 +531,7 @@ function observeAndInject(payload, state, episode, features) { const command = payload.tool_input?.command; if (command) { const root = commandProjectRoot(payload, payload.cwd); - const dir = wikiDir(root); + const dir = registerRoot(root); const local = forCommand(dir, load(dir), command, { sessionId: payload.session_id, alreadyInjected, @@ -750,7 +856,14 @@ async function runHook(clientName, event, invocation) { client.canDeny && event === 'pre-tool' && !repeat && - mode() !== MODE_ADVISE + mode() !== MODE_ADVISE && + // Codex code mode presents an orchestration program as one outer + // `functions.exec` call. Refusing that envelope is rendered by the host + // as a failed script and can discard several otherwise-safe nested + // operations. Observe it, capture it and advise, but reserve a hard veto + // for legacy one-operation Codex tool calls where the denied operation is + // unambiguous. + !(clientName === 'codex' && payload.tool_input?.code_mode_envelope) ); if (canRefuse) { @@ -759,19 +872,23 @@ async function runHook(clientName, event, invocation) { // Every client's refusal carries the off switch, for the same reason Claude // Code's does: enforcement that hides its own disable is coercive. if (client.denyStyle === 'top-level') { + invocation.block('policy_denied'); emit({ decision: 'deny', reason: withEscape(verdict.reason) }); } else if (client.denyStyle === 'top-level-permission') { + invocation.block('policy_denied'); emit({ permissionDecision: 'deny', permissionDecisionReason: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cline') { + invocation.block('policy_denied'); emit({ cancel: true, contextModification: '', errorMessage: withEscape(verdict.reason), }); } else if (client.denyStyle === 'cursor') { + invocation.block('policy_denied'); emit({ continue: true, permission: 'deny', @@ -780,9 +897,11 @@ async function runHook(clientName, event, invocation) { 'Token Optimizer redirected an expensive built-in operation.', }); } else if (client.denyStyle === 'exit-2') { + invocation.block('policy_denied'); process.stderr.write(withEscape(verdict.reason)); process.exit(2); } else { + invocation.block('policy_denied'); emit({ hookSpecificOutput: { hookEventName: eventName, diff --git a/plugin/hooks/lib/decide.mjs b/plugin/hooks/lib/decide.mjs index caae7de2f..a61dafdd5 100644 --- a/plugin/hooks/lib/decide.mjs +++ b/plugin/hooks/lib/decide.mjs @@ -392,6 +392,21 @@ export function touchedFiles(payload) { add(input.path); add(input.notebook_path); + // Codex code mode carries apply_patch as the nested program text rather than + // as a first-class file_path. Without reading these headers, successful + // code-mode edits incremented the semantic-harvest counter but produced no + // structural file/symbol nodes, which is why the live dashboard showed very + // few nodes after substantial work. PostToolUse can resolve Add/Update paths + // because the file now exists; deleted paths deliberately remain absent. + for (const match of command.matchAll( + /^\*\*\* (?:Add|Update|Delete) File:\s*(.+)$/gm + )) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + for (const match of command.matchAll(/^\*\*\* Move to:\s*(.+)$/gm)) { + add(match[1].trim().replace(/^['"]|['"]$/g, '')); + } + // EVERY pipeline segment, not just the first. `fileOperands` looks only at // the head of the pipeline because that is where the COST is -- `git log | // head` must not be mistaken for a file dump. But observation is a different diff --git a/plugin/hooks/lib/harvest-write.mjs b/plugin/hooks/lib/harvest-write.mjs index 30433d370..db436c1dc 100644 --- a/plugin/hooks/lib/harvest-write.mjs +++ b/plugin/hooks/lib/harvest-write.mjs @@ -24,7 +24,7 @@ */ import { - putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, + putNodeWithEdges, load, nodeId, sharedDir, isSharedDir, putNode, putEdge, } from './wiki.mjs'; import { indexFile } from './staleness.mjs'; import { symbolKey } from './symbols.mjs'; @@ -47,6 +47,37 @@ import { ORIGIN_HARVESTED, ORIGIN_AGENT, ORIGIN_HUMAN } from './curate.mjs'; */ export const SHAREABLE_TYPES = new Set(['command', 'failure', 'decision', 'feedback']); +/** + * Synthetic study traffic must never become advice for an unrelated live repo. + * Evaluation roots are intentionally realistic and may carry their own `.git` + * marker, so repository discovery alone cannot distinguish them. Publication + * remains useful inside the isolated study store; this guard protects only the + * default machine-wide store when a harness was accidentally run without an + * isolated TOKEN_OPTIMIZER_SHARED_DIR. + */ +export function isEphemeralProject(projectRoot) { + const root = canonicalPath(projectRoot || '').toLowerCase(); + if (!root) return true; + return ( + /\/appdata\/local\/temp\//.test(root) || + /(^|\/)tmp\//.test(root) || + /\/(artifacts|\.token-optimizer)\/(?:[^/]*\/)*(?:eval|scenario|study|fixture|debug)[^/]*\//.test(`${root}/`) + ); +} + +export function quarantineSharedSource(projectRoot) { + if (process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED === '1') return false; + if (!isEphemeralProject(projectRoot)) return false; + // Isolated studies deliberately point the shared tier at scratch storage. + // Their findings may cross their own fixture projects, but cannot escape into + // the user's default machine-wide graph. Strict mode exists for a regression + // probe that verifies the guard without writing to a real user directory. + return ( + !process.env.TOKEN_OPTIMIZER_SHARED_DIR || + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE === '1' + ); +} + /** Claim text, normalised enough that the same lesson learned twice is one row. */ const claimFingerprint = (claim) => String(claim || '').toLowerCase().replace(/\s+/g, ' ').trim().slice(0, 300); @@ -72,6 +103,7 @@ function promoteToShared(finding, { projectRoot, sessionId, provenance, key }) { if (!projectRoot) return false; const root = canonicalPath(projectRoot); + if (quarantineSharedSource(root)) return false; const rootId = nodeId('file', root); // Same claim, already carried up from anywhere: keep the first. Two repos @@ -367,11 +399,21 @@ export function writeHarvested( && !node.retired && node.type === finding.type && claimFingerprint(node.claim) === fingerprint - && resolved.every((target) => currentGraph.edges.some((edge) => - edge.from === node.id && edge.edge === 'derived_from' && edge.to === target - )) ); if (duplicate) { + // Enrich, do not duplicate. A symbol extractor may learn how to resolve a + // previously file-only anchor (or a later session may add another real + // anchor) after the claim was first stored. Repeating the same semantic + // conclusion should connect that existing node to the newly available + // evidence, not create a second dashboard card with the same text. + for (const target of resolved) { + const alreadyLinked = currentGraph.edges.some((edge) => + edge.from === duplicate.id + && edge.edge === 'derived_from' + && edge.to === target + ); + if (!alreadyLinked) putEdge(dir, duplicate.id, 'derived_from', target); + } written.push(duplicate.key); continue; } @@ -437,7 +479,12 @@ export function writeHarvested( if ( id && !isSharedDir(dir) - && (finding.scope === undefined || finding.scope === 'organization' || finding.scope === 'global') + // Cross-project publication is explicit. `writeHarvested` stores an + // omitted scope as project-local above, so treating `undefined` as global + // here contradicted the stored record and promoted fixture/evaluation + // seeds into real user sessions. This was observed live as "learned in + // scenario" advice while working in AiDotNet. + && (finding.scope === 'organization' || finding.scope === 'global') ) { promoteToShared(finding, { projectRoot, sessionId, provenance, key }); } diff --git a/plugin/hooks/lib/inject.mjs b/plugin/hooks/lib/inject.mjs index b00494a01..372cec753 100644 --- a/plugin/hooks/lib/inject.mjs +++ b/plugin/hooks/lib/inject.mjs @@ -31,6 +31,7 @@ import { canonicalPath, resolvableCandidates } from './paths.mjs'; import { annotatedSkeleton } from './skeleton.mjs'; import { substitutionBudget } from './metrics.mjs'; import { assessFindings } from './utility.mjs'; +import { quarantineSharedSource } from './harvest-write.mjs'; // Read per call for the same reason as the holdout fraction in metrics.mjs. const touchBudget = () => Number(process.env.TOKEN_OPTIMIZER_TOUCH_BUDGET) || 500; @@ -562,6 +563,7 @@ export function forRepeatedAct( const home = projectRoot ? canonicalPath(projectRoot) : null; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired || !node.claim) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (home && node.sourceProject && canonicalPath(node.sourceProject) === home) continue; const claimClasses = classesOf(node.claim, 'claim'); if (![...crossedClasses].some((c) => claimClasses.has(c))) continue; @@ -667,6 +669,7 @@ export function forSharedCommand( const candidates = []; for (const node of graph.nodes.values()) { if (node.kind !== 'finding' || node.retired) continue; + if (quarantineSharedSource(node.sourceProject)) continue; if (alreadyInjected.has(node.key)) continue; // ITS OWN LESSON IS NOT NEWS. A finding this project contributed is already // served by the local path; repeating it under a "from elsewhere" label diff --git a/plugin/hooks/lib/observability.mjs b/plugin/hooks/lib/observability.mjs index b9980076e..4e70663f4 100644 --- a/plugin/hooks/lib/observability.mjs +++ b/plugin/hooks/lib/observability.mjs @@ -26,7 +26,7 @@ import { createHash, randomUUID } from 'node:crypto'; import { homedir } from 'node:os'; import { join } from 'node:path'; -export const HOOK_LOG_SCHEMA_VERSION = 1; +export const HOOK_LOG_SCHEMA_VERSION = 2; const DEFAULT_MAX_BYTES = 5 * 1024 * 1024; const DEFAULT_RETENTION_DAYS = 14; const DEFAULT_MAX_FILES = 40; @@ -197,6 +197,8 @@ export function beginHookInvocation(client, event, options = {}) { turnIdHash: null, toolUseIdHash: null, toolName: null, + rawToolName: null, + codeModeEnvelope: false, clientVersion: null, model: null, cwdHash: null, @@ -208,12 +210,29 @@ export function beginHookInvocation(client, event, options = {}) { const spanId = hash(invocationId, 16); let traceId = hash(invocationId, 32); + // Write the start before reading stdin or importing project state. If the + // host kills the process, Node aborts, or a native call terminates without a + // JavaScript exception, diagnostics can now reconcile this record with the + // missing completion instead of reporting a false success rate. + writeHookEvent({ + level: 'info', + event: 'hook.started', + invocationId, + traceId, + spanId, + client, + hookEvent: event, + processId: process.pid, + }); + let deadline; const finish = (nextOutcome = outcome, nextReason = reason, nextError = error) => { if (ended) return; ended = true; if (deadline) clearTimeout(deadline); process.removeListener('exit', onExit); + process.removeListener('uncaughtException', onUncaughtException); + process.removeListener('unhandledRejection', onUnhandledRejection); writeHookEvent({ level: nextOutcome === 'failure' || nextOutcome === 'timeout' ? 'error' : 'info', event: 'hook.completed', @@ -231,7 +250,17 @@ export function beginHookInvocation(client, event, options = {}) { }); }; const onExit = () => finish(); + const onUncaughtException = (nextError) => { + finish('failure', 'uncaught_exception', nextError); + process.exit(0); + }; + const onUnhandledRejection = (nextError) => { + finish('failure', 'unhandled_rejection', nextError); + process.exit(0); + }; process.once('exit', onExit); + process.once('uncaughtException', onUncaughtException); + process.once('unhandledRejection', onUnhandledRejection); deadline = setTimeout(() => { outcome = 'timeout'; @@ -250,6 +279,11 @@ export function beginHookInvocation(client, event, options = {}) { dimensions.turnIdHash = hash(raw.turn_id ?? raw.turnId ?? null); dimensions.toolUseIdHash = hash(raw.tool_use_id ?? raw.toolUseId ?? null); dimensions.toolName = payload?.tool_name ?? raw.tool_name ?? raw.toolName ?? null; + dimensions.rawToolName = dimension( + raw.tool_name ?? raw.toolName ?? raw.tool ?? null + ); + dimensions.codeModeEnvelope = + payload?.tool_input?.code_mode_envelope === true; dimensions.clientVersion = dimension(raw.client_version ?? raw.clientVersion ?? null); dimensions.model = dimension(raw.model ?? raw.model_name ?? raw.modelName ?? null); dimensions.cwdHash = hash(raw.cwd ?? raw.working_directory ?? process.cwd()); @@ -291,6 +325,11 @@ export function beginHookInvocation(client, event, options = {}) { error = nextError; finish(outcome, reason, error); }, + block(nextReason = 'policy_denied') { + outcome = 'blocked'; + reason = nextReason; + finish(outcome, reason); + }, succeed(nextReason = 'completed') { outcome = 'success'; reason = nextReason; @@ -321,7 +360,11 @@ export function recordHookBootstrapFailure(client, event, error) { }); } -export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = {}) { +export function readHookEvents({ + limit = 200, + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false, +} = {}) { try { const dir = hookLogDirectory(); if (!existsSync(dir)) return []; @@ -338,6 +381,7 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = try { const event = JSON.parse(line); if (Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -353,38 +397,92 @@ export function readHookEvents({ limit = 200, sinceMs = 24 * 60 * 60 * 1000 } = export function hookHealthSummary(options = {}) { const sinceMs = options.sinceMs ?? 24 * 60 * 60 * 1000; - const events = readHookEvents({ limit: options.limit || 5000, sinceMs }); - const durations = events + const events = readHookEvents({ + limit: options.limit || 10000, + sinceMs, + includeLifecycle: true, + }); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp) > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + durationMs: null, + })); + const runs = [...completed, ...abandoned]; + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); const byClient = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; - const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0 }; + const current = byClient[key] || { + total: 0, + failures: 0, + timeouts: 0, + skipped: 0, + blocked: 0, + hookEvents: [], + }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (p) => durations.length ? durations[Math.min(durations.length - 1, Math.floor(durations.length * p))] : null; const summary = { schemaVersion: HOOK_LOG_SCHEMA_VERSION, - available: events.length > 0, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + // A skipped or policy-blocked hook completed its protocol successfully. + // Runtime health answers whether the hook process worked, not whether the + // optimizer chose to allow the host operation. + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, diff --git a/plugin/hooks/lib/symbols.mjs b/plugin/hooks/lib/symbols.mjs index 2a80e1e42..4d80666ac 100644 --- a/plugin/hooks/lib/symbols.mjs +++ b/plugin/hooks/lib/symbols.mjs @@ -50,7 +50,11 @@ const PATTERNS = { /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|enum|trait|impl)\s+([A-Za-z_]\w*)/, ], clike: [ - /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)\s*\([^;]*\)\s*\{/, + // Accept both K&R (`Run() {`) and Allman (`Run()` then `{`) declarations. + // Requiring the opening brace on the declaration line silently discarded + // nearly every method in idiomatic C# projects, leaving file nodes but no + // symbol nodes and making valid `file.cs#Method` anchors unresolved. + /^\s*(?:public|private|protected|internal|static|final|abstract|virtual|override|async|sealed|new|extern|unsafe|partial|\s)*(?:[\w<>\[\],.?]+\s+)([A-Za-z_]\w*)(?:<[^;()]+>)?\s*\([^;]*\)\s*(?:\{|=>|$)/, /^\s*(?:public|private|protected|internal|static|abstract|sealed|partial|\s)*(?:class|struct|interface|enum|record)\s+([A-Za-z_]\w*)/, ], ruby: [ diff --git a/scripts/doctor.mjs b/scripts/doctor.mjs index 1d5c63570..14ccd223c 100644 --- a/scripts/doctor.mjs +++ b/scripts/doctor.mjs @@ -32,13 +32,16 @@ if (hookHealth.total === 0) { } else { console.log( ` ${hookHealth.total} runs; ${hookHealth.failures} failures; ` + - `${hookHealth.timeouts} timeouts; ${hookHealth.skipped} skipped; ` + + `${hookHealth.timeouts} timeouts; ${hookHealth.blocked} policy blocks; ` + + `${hookHealth.abandoned} abandoned; ${hookHealth.skipped} skipped; ` + `p95 ${hookHealth.p95DurationMs ?? 'n/a'} ms.` ); for (const [client, counts] of Object.entries(hookHealth.byClient)) { console.log( ` ${client}: ${counts.total} runs, ${counts.failures} failures, ` + - `${counts.timeouts} timeouts, ${counts.skipped || 0} skipped.` + `${counts.timeouts} timeouts, ${counts.blocked || 0} policy blocks, ` + + `${counts.skipped || 0} skipped; surfaces: ` + + `${counts.hookEvents?.join(', ') || 'unknown'}.` ); } } diff --git a/scripts/verify-live-dashboard.mjs b/scripts/verify-live-dashboard.mjs index cae077e0e..12967c493 100644 --- a/scripts/verify-live-dashboard.mjs +++ b/scripts/verify-live-dashboard.mjs @@ -103,7 +103,7 @@ try { await page.goto(`${base}/wiki`, { waitUntil: 'networkidle' }); await page.waitForSelector('#wiki-list li'); - await waitForCount('#hook-health-grid .stat-card', 6, 'hook health cards'); + await waitForCount('#hook-health-grid .stat-card', 14, 'runtime health cards'); const captureHealth = await page.evaluate(() => { const values = [...document.querySelectorAll('#hook-health-grid .stat-card')] .map((card) => ({ @@ -262,10 +262,25 @@ try { ['memoryDeliveries', 'memoryHoldouts', 'rememberingCost', 'readingAvoided'] .every((key) => wiki.balanceContract.metrics?.[key]?.source) && /selected projects have telemetry/i.test(wiki.balanceContract.method) && - wiki.captureHealth.values.length === 6 && + wiki.captureHealth.values.length === 14 && wiki.captureHealth.values.some( ({ label, value }) => label === 'Hook runs' && Number(value.replaceAll(',', '')) > 0 ) && + wiki.captureHealth.values.some( + ({ label, value }) => label === 'Policy blocks' && Number(value.replaceAll(',', '')) >= 0 + ) && + wiki.captureHealth.values.some( + ({ label, value }) => label === 'Abandoned' && Number(value.replaceAll(',', '')) === 0 + ) && + wiki.captureHealth.values.some( + ({ label, value }) => label === 'MCP handshakes' && Number(value.replaceAll(',', '')) > 0 + ) && + wiki.captureHealth.values.some( + ({ label, value }) => label === 'Tools advertised' && Number(value.replaceAll(',', '')) > 0 + ) && + wiki.captureHealth.values.some( + ({ label, value }) => label === 'MCP failures' && Number(value.replaceAll(',', '')) === 0 + ) && wiki.captureHealth.state === 'ok' && wiki.graph3d.width > 0 && wiki.graph3d.height > 0 && diff --git a/src/dashboard/public/js/dashboard.js b/src/dashboard/public/js/dashboard.js index 3072fe9f3..e5d47291c 100644 --- a/src/dashboard/public/js/dashboard.js +++ b/src/dashboard/public/js/dashboard.js @@ -112,7 +112,10 @@ async function load() { function activityFromDiagnostics(report) { const events = report.events || []; const actions = events.filter( - (event) => event.hookEvent === 'pre-tool' && event.toolName + (event) => + event.event !== 'hook.started' && + event.hookEvent === 'pre-tool' && + event.toolName ); const toolBreakdown = {}; for (const event of actions) { diff --git a/src/dashboard/public/js/wiki.js b/src/dashboard/public/js/wiki.js index 7eb262567..be3600214 100644 --- a/src/dashboard/public/js/wiki.js +++ b/src/dashboard/public/js/wiki.js @@ -1097,8 +1097,12 @@ async function loadHookHealth() { const status = el('hook-health-status'); const detail = el('hook-health-detail'); try { - const report = await api('/api/diagnostics/hooks?hours=24&limit=20'); + const [report, mcpReport] = await Promise.all([ + api('/api/diagnostics/hooks?hours=24&limit=20'), + api('/api/diagnostics/mcp?hours=24&limit=20'), + ]); const summary = report.summary; + const mcp = mcpReport.summary; const success = summary.successRate === null ? '—' @@ -1108,6 +1112,8 @@ async function loadHookHealth() { ['Success rate', success], ['Failures', nf.format(summary.failures)], ['Timeouts', nf.format(summary.timeouts)], + ['Policy blocks', nf.format(summary.blocked || 0)], + ['Abandoned', nf.format(summary.abandoned || 0)], [ 'p50 latency', summary.p50DurationMs == null ? '—' : `${summary.p50DurationMs} ms`, @@ -1116,6 +1122,18 @@ async function loadHookHealth() { 'p95 latency', summary.p95DurationMs == null ? '—' : `${summary.p95DurationMs} ms`, ], + ['MCP processes', nf.format(mcp.processes)], + ['MCP handshakes', nf.format(mcp.initializedClients)], + [ + 'Tools advertised', + mcp.advertisedTools == null ? '—' : nf.format(mcp.advertisedTools), + ], + ['MCP tool calls', nf.format(mcp.toolCalls)], + ['MCP failures', nf.format(mcp.failures)], + [ + 'MCP p95 latency', + mcp.p95DurationMs == null ? '—' : `${mcp.p95DurationMs} ms`, + ], ] .map( ([label, value]) => ` @@ -1126,25 +1144,37 @@ async function loadHookHealth() { ) .join(''); - const unhealthy = summary.failures > 0 || summary.timeouts > 0; - status.textContent = !summary.available - ? 'No lifecycle telemetry has been captured yet.' - : unhealthy - ? `${summary.failures} failure(s) and ${summary.timeouts} timeout(s) need attention.` - : 'Lifecycle capture is healthy across the observed clients.'; - status.dataset.state = !summary.available - ? 'insufficient' - : unhealthy - ? 'bad' - : 'ok'; + const unhealthy = + summary.failures > 0 || + summary.timeouts > 0 || + summary.abandoned > 0 || + mcp.failures > 0; + status.textContent = + !summary.available && !mcp.available + ? 'No hook or MCP lifecycle telemetry has been captured yet.' + : unhealthy + ? `${summary.failures} hook failure(s), ${summary.timeouts} timeout(s), and ${mcp.failures} MCP failure(s) need attention.` + : `${summary.blocked || 0} intentional policy block(s); hook and MCP runtime show no failures.`; + status.dataset.state = + !summary.available && !mcp.available + ? 'insufficient' + : unhealthy + ? 'bad' + : 'ok'; const clients = Object.entries(summary.byClient || {}) .map( ([name, value]) => - `${name}: ${value.total} runs, ${value.failures} failures, ${value.timeouts} timeouts, ${value.skipped || 0} skipped` + `${name}: ${value.total} runs, ${value.failures} failures, ${value.timeouts} timeouts, ${value.blocked || 0} policy blocks, ${value.skipped || 0} skipped; surfaces: ${(value.hookEvents || []).join(', ') || 'unknown'}` + ) + .join(' · '); + const mcpClients = Object.entries(mcp.clients || {}) + .map( + ([name, value]) => + `${name}: ${value.initialized} MCP handshake(s), ${value.calls} call(s), ${value.failures} failure(s)` ) .join(' · '); detail.textContent = - clients || + [clients, mcpClients].filter(Boolean).join(' · ') || 'Privacy-safe JSONL diagnostics retain no prompts, commands, or tool output.'; } catch { grid.innerHTML = ''; diff --git a/src/dashboard/public/wiki.html b/src/dashboard/public/wiki.html index ca19c1ca9..3b3780530 100644 --- a/src/dashboard/public/wiki.html +++ b/src/dashboard/public/wiki.html @@ -32,7 +32,7 @@

What your coding agents have learned and whether it helps

-

Capture health

+

Hook and MCP capture health

diff --git a/src/server/hook-diagnostics.ts b/src/server/hook-diagnostics.ts index 8dfa2e1b7..16794d4f9 100644 --- a/src/server/hook-diagnostics.ts +++ b/src/server/hook-diagnostics.ts @@ -3,6 +3,8 @@ import os from 'os'; import path from 'path'; export interface HookDiagnosticEvent { + event?: string; + invocationId?: string; timestamp?: string; client?: string; hookEvent?: string; @@ -42,7 +44,8 @@ function readTail(file: string): string { export function readHookDiagnosticEvents( limit = 200, - sinceMs = 24 * 60 * 60 * 1000 + sinceMs = 24 * 60 * 60 * 1000, + includeLifecycle = false ): HookDiagnosticEvent[] { try { const directory = hookDiagnosticDirectory(); @@ -62,6 +65,7 @@ export function readHookDiagnosticEvents( try { const event = JSON.parse(line) as HookDiagnosticEvent; if (event.timestamp && Date.parse(event.timestamp) < cutoff) continue; + if (!includeLifecycle && event.event === 'hook.started') continue; events.push(event); if (events.length >= limit) return events; } catch { @@ -78,33 +82,68 @@ export function readHookDiagnosticEvents( export function summarizeHookDiagnostics( sinceMs = 24 * 60 * 60 * 1000 ): Record { - const events = readHookDiagnosticEvents(5000, sinceMs); - const failures = events.filter((event) => event.outcome === 'failure'); - const timeouts = events.filter((event) => event.outcome === 'timeout'); - const skipped = events.filter((event) => event.outcome === 'skipped'); - const successes = events.filter((event) => event.outcome === 'success'); - const durations = events + const events = readHookDiagnosticEvents(10000, sinceMs, true); + const starts = events.filter((event) => event.event === 'hook.started'); + const completed = events.filter( + (event) => event.event === 'hook.completed' || !event.event + ); + const completedIds = new Set( + completed.map((event) => event.invocationId).filter(Boolean) + ); + const abandoned = starts + .filter( + (event) => + event.invocationId && + !completedIds.has(event.invocationId) && + Date.now() - Date.parse(event.timestamp || '') > 10_000 + ) + .map((event) => ({ + ...event, + event: 'hook.completed', + outcome: 'failure', + reason: 'process_terminated_before_completion', + })); + const runs = [...completed, ...abandoned]; + const failures = runs.filter((event) => event.outcome === 'failure'); + const timeouts = runs.filter((event) => event.outcome === 'timeout'); + const skipped = runs.filter((event) => event.outcome === 'skipped'); + const blocked = runs.filter((event) => event.outcome === 'blocked'); + const successes = runs.filter((event) => event.outcome === 'success'); + const durations = runs .map((event) => Number(event.durationMs)) .filter(Number.isFinite) .sort((a, b) => a - b); const byClient: Record< string, - { total: number; failures: number; timeouts: number; skipped: number } + { + total: number; + failures: number; + timeouts: number; + skipped: number; + blocked: number; + hookEvents: string[]; + } > = {}; - for (const event of events) { + for (const event of runs) { const key = event.client || 'unknown'; const current = byClient[key] || { total: 0, failures: 0, timeouts: 0, skipped: 0, + blocked: 0, + hookEvents: [], }; current.total++; if (event.outcome === 'failure') current.failures++; if (event.outcome === 'timeout') current.timeouts++; if (event.outcome === 'skipped') current.skipped++; + if (event.outcome === 'blocked') current.blocked++; + if (event.hookEvent && !current.hookEvents.includes(event.hookEvent)) + current.hookEvents.push(event.hookEvent); byClient[key] = current; } + for (const current of Object.values(byClient)) current.hookEvents.sort(); const percentile = (fraction: number): number | null => durations.length ? durations[ @@ -115,17 +154,31 @@ export function summarizeHookDiagnostics( ] : null; return { - available: events.length > 0, + schemaVersion: 2, + available: runs.length > 0, windowHours: sinceMs / 3_600_000, - total: events.length, + total: runs.length, failures: failures.length, timeouts: timeouts.length, skipped: skipped.length, - successRate: events.length ? successes.length / events.length : null, + blocked: blocked.length, + abandoned: abandoned.length, + successes: successes.length, + successRate: runs.length + ? (successes.length + skipped.length + blocked.length) / runs.length + : null, + healthStatus: + failures.length || timeouts.length + ? 'failing' + : skipped.length + ? 'degraded' + : runs.length + ? 'healthy' + : 'unavailable', p50DurationMs: percentile(0.5), p95DurationMs: percentile(0.95), byClient, - recentFailures: events + recentFailures: runs .filter( (event) => event.outcome === 'failure' || event.outcome === 'timeout' ) diff --git a/src/server/index.ts b/src/server/index.ts index a1d0af904..53fe09125 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -580,10 +580,14 @@ if (typeof memoPruneTimer.unref === 'function') { } // Create MCP server +const packageVersion = JSON.parse( + fs.readFileSync(new URL('../../package.json', import.meta.url), 'utf8') +).version as string; + const server = new Server( { name: 'token-optimizer-mcp', - version: '0.2.0', + version: packageVersion, }, { capabilities: { @@ -591,7 +595,7 @@ const server = new Server( }, } ); -const mcpEvidence = new McpEvidenceRecorder(); +const mcpEvidence = new McpEvidenceRecorder(packageVersion); server.oninitialized = () => { mcpEvidence.clientInitialized(server.getClientVersion()); }; @@ -931,6 +935,7 @@ const { assertRequiredFields, assertKnownFields } = createToolArgumentChecker( // Define tools server.setRequestHandler(ListToolsRequestSchema, async () => { + mcpEvidence.toolsListed(ADVERTISED_TOOL_DEFINITIONS.length); return { tools: ADVERTISED_TOOL_DEFINITIONS, }; @@ -2883,78 +2888,94 @@ async function handleToolCall(request: { } } -server.setRequestHandler(CallToolRequestSchema, async (request) => { - if (!ADVERTISED_TOOL_NAMES.has(request.params.name)) { - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - error: - `Tool ${request.params.name} is not available in the active MCP tool profile. ` + - 'Set TOKEN_OPTIMIZER_TOOL_PROFILE=full before starting the server to expose the full catalog.', - }), - }, - ], - isError: true, - }; - } +async function observeMcpToolCall( + toolName: string, + operation: () => T | Promise +): Promise { + const started = Date.now(); - // Following a pointer is handled here rather than in the tool switch, because - // it is not an operation on the codebase -- it is an operation on what we - // already said about it. - if (request.params.name === 'expand') { - return expandRef(request.params.arguments as any); + try { + const result = await operation(); + mcpEvidence.toolOutcome( + toolName, + Date.now() - started, + !(result as { isError?: boolean } | null)?.isError + ); + return result; + } catch (error) { + mcpEvidence.toolOutcome(toolName, Date.now() - started, false); + throw error; } +} - // Likewise the audit: it reports on the tool log rather than operating on the - // codebase, and its own output must not be disclosed away. - if (request.params.name === 'waste_audit') { - return wasteAudit(request.params.arguments as any); - } +server.setRequestHandler(CallToolRequestSchema, async (request) => + observeMcpToolCall(request.params.name, async () => { + if (!ADVERTISED_TOOL_NAMES.has(request.params.name)) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + error: + `Tool ${request.params.name} is not available in the active MCP tool profile. ` + + 'Set TOKEN_OPTIMIZER_TOOL_PROFILE=full before starting the server to expose the full catalog.', + }), + }, + ], + isError: true, + }; + } - if (request.params.name === 'cache_audit') { - return cacheAudit(); - } + // Following a pointer is handled here rather than in the tool switch, because + // it is not an operation on the codebase -- it is an operation on what we + // already said about it. + if (request.params.name === 'expand') { + return expandRef(request.params.arguments as any); + } - if (request.params.name === 'model_routing') { - return modelRouting(request.params.arguments as any); - } + // Likewise the audit: it reports on the tool log rather than operating on the + // codebase, and its own output must not be disclosed away. + if (request.params.name === 'waste_audit') { + return wasteAudit(request.params.arguments as any); + } - if (request.params.name === 'token_audit') { - return tokenAudit(request.params.arguments as any); - } + if (request.params.name === 'cache_audit') { + return cacheAudit(); + } - if (request.params.name === 'install_doctor') { - return installDoctor(request.params.arguments as any); - } + if (request.params.name === 'model_routing') { + return modelRouting(request.params.arguments as any); + } - if (request.params.name === 'fleet_audit') { - return fleetAudit(request.params.arguments as any); - } + if (request.params.name === 'token_audit') { + return tokenAudit(request.params.arguments as any); + } - const started = Date.now(); - const result = await handleToolCall(request); - // Best-effort: feed savings into analytics so the report/breakdown tools have - // real data. Never blocks meaningfully or breaks the tool call. - await recordToolAnalytics(analyticsManager, request.params.name, result); - mcpEvidence.toolOutcome( - request.params.name, - Date.now() - started, - !(result as { isError?: boolean } | null)?.isError - ); - - // THE ONE PLACE EVERY TOOL RESULT PASSES THROUGH. Disclosing here rather than - // per-tool is what keeps it a single policy instead of ninety. The elapsed - // time is passed along because it is what later decides whether a stale - // artifact is worth regenerating or worth serving with a marker. - return discloseResult( - request.params.name, - request.params.arguments as Record | undefined, - result as any, - Date.now() - started - ) as any; -}); + if (request.params.name === 'install_doctor') { + return installDoctor(request.params.arguments as any); + } + + if (request.params.name === 'fleet_audit') { + return fleetAudit(request.params.arguments as any); + } + + const started = Date.now(); + const result = await handleToolCall(request); + // Best-effort: feed savings into analytics so the report/breakdown tools have + // real data. Never blocks meaningfully or breaks the tool call. + await recordToolAnalytics(analyticsManager, request.params.name, result); + // THE ONE PLACE EVERY TOOL RESULT PASSES THROUGH. Disclosing here rather than + // per-tool is what keeps it a single policy instead of ninety. The elapsed + // time is passed along because it is what later decides whether a stale + // artifact is worth regenerating or worth serving with a marker. + return discloseResult( + request.params.name, + request.params.arguments as Record | undefined, + result as any, + Date.now() - started + ) as any; + }) +); // Helper to run cleanup operations with error handling async function runCleanupOperations( @@ -2971,6 +2992,7 @@ async function runCleanupOperations( // Shared cleanup function to avoid duplication between signal handlers async function cleanup() { + mcpEvidence.shutdown(); await runCleanupOperations([ { fn: async () => await analyticsManager.close(), @@ -3000,6 +3022,7 @@ async function cleanup() { async function main() { const transport = new StdioServerTransport(); await server.connect(transport); + mcpEvidence.transportConnected(); // All termination paths (SIGINT/SIGTERM/SIGHUP + stdin end/close/error) run // through one guarded shutdown. See ./lifecycle.ts for the full rationale @@ -3008,6 +3031,7 @@ async function main() { } main().catch((error) => { + mcpEvidence.startupFailed(error); console.error('Server error:', error); process.exit(1); }); diff --git a/src/server/mcp-diagnostics.ts b/src/server/mcp-diagnostics.ts new file mode 100644 index 000000000..84296c71e --- /dev/null +++ b/src/server/mcp-diagnostics.ts @@ -0,0 +1,217 @@ +import fs from 'fs'; +import path from 'path'; +import { hookDiagnosticDirectory } from './hook-diagnostics.js'; + +export interface McpDiagnosticEvent { + schemaVersion: 2; + timestamp: string; + service: 'token-optimizer'; + serviceVersion: string; + event: string; + outcome?: 'success' | 'failure'; + processId: number; + client?: string | null; + clientVersion?: string | null; + toolName?: string; + toolCount?: number; + durationMs?: number; + error?: { name: string; message: string } | null; + [key: string]: unknown; +} + +const MAX_FILES = 30; +const MAX_BYTES_PER_FILE = 5 * 1024 * 1024; +let logPart = 0; + +function privateDirectory(directory: string): void { + fs.mkdirSync(directory, { recursive: true, mode: 0o700 }); + if (process.platform !== 'win32') fs.chmodSync(directory, 0o700); +} + +function logPath(): string { + const day = new Date().toISOString().slice(0, 10); + return path.join( + hookDiagnosticDirectory(), + `mcp-events-${day}-${process.pid}-${logPart}.jsonl` + ); +} + +function prune(directory: string): void { + try { + const files = fs + .readdirSync(directory) + .filter((name) => /^mcp-events-.*\.jsonl$/.test(name)) + .map((name) => ({ + path: path.join(directory, name), + modified: fs.statSync(path.join(directory, name)).mtimeMs, + })) + .sort((a, b) => b.modified - a.modified); + for (const file of files.slice(MAX_FILES)) + fs.rmSync(file.path, { force: true }); + } catch { + // Diagnostics must never prevent the MCP server from starting. + } +} + +function safeError(error: unknown): { name: string; message: string } | null { + if (!error) return null; + const name = error instanceof Error ? error.name : 'Error'; + const message = error instanceof Error ? error.message : String(error); + // Error messages are useful for startup diagnosis but can contain a local + // path. Keep the category and a bounded message; never include a stack. + return { name: name.slice(0, 80), message: message.slice(0, 500) }; +} + +export function recordMcpDiagnostic( + event: Omit< + McpDiagnosticEvent, + 'schemaVersion' | 'timestamp' | 'service' | 'processId' | 'error' + > & { error?: unknown } +): void { + try { + const directory = hookDiagnosticDirectory(); + privateDirectory(directory); + let file = logPath(); + if (fs.existsSync(file) && fs.statSync(file).size >= MAX_BYTES_PER_FILE) { + logPart++; + file = logPath(); + } + const row: McpDiagnosticEvent = { + schemaVersion: 2, + timestamp: new Date().toISOString(), + service: 'token-optimizer', + processId: process.pid, + ...event, + error: safeError(event.error), + } as McpDiagnosticEvent; + fs.appendFileSync(file, `${JSON.stringify(row)}\n`, { + encoding: 'utf8', + mode: 0o600, + }); + prune(directory); + } catch { + // Logging is fail-open by design. A read-only home directory must not make + // the optimizer disappear from a client's tool inventory. + } +} + +function readTail(file: string): string { + const size = fs.statSync(file).size; + const length = Math.min(size, MAX_BYTES_PER_FILE); + const buffer = Buffer.alloc(length); + const descriptor = fs.openSync(file, 'r'); + try { + fs.readSync(descriptor, buffer, 0, length, size - length); + } finally { + fs.closeSync(descriptor); + } + const text = buffer.toString('utf8'); + return size > length ? text.slice(text.indexOf('\n') + 1) : text; +} + +export function readMcpDiagnosticEvents( + limit = 200, + sinceMs = 24 * 60 * 60 * 1000 +): McpDiagnosticEvent[] { + try { + const directory = hookDiagnosticDirectory(); + if (!fs.existsSync(directory)) return []; + const cutoff = Date.now() - Math.max(0, sinceMs); + const files = fs + .readdirSync(directory) + .filter((name) => /^mcp-events-.*\.jsonl$/.test(name)) + .map((name) => path.join(directory, name)) + .sort() + .reverse() + .slice(0, MAX_FILES); + const events: McpDiagnosticEvent[] = []; + for (const file of files) { + const lines = readTail(file).split(/\r?\n/).filter(Boolean).reverse(); + for (const line of lines) { + try { + const event = JSON.parse(line) as McpDiagnosticEvent; + if (Date.parse(event.timestamp) < cutoff) continue; + events.push(event); + if (events.length >= limit) return events; + } catch { + // A concurrent partial append cannot hide the remaining healthy rows. + } + } + } + return events; + } catch { + return []; + } +} + +export function summarizeMcpDiagnostics( + sinceMs = 24 * 60 * 60 * 1000 +): Record { + const events = readMcpDiagnosticEvents(10000, sinceMs); + const starts = events.filter( + (event) => event.event === 'mcp.process_started' + ); + const initialized = events.filter( + (event) => event.event === 'mcp.client_initialized' + ); + const lists = events.filter((event) => event.event === 'mcp.tools_listed'); + const calls = events.filter((event) => event.event === 'mcp.tool_completed'); + const failures = events.filter((event) => event.outcome === 'failure'); + const durations = calls + .map((event) => Number(event.durationMs)) + .filter(Number.isFinite) + .sort((a, b) => a - b); + const latestList = lists + .slice() + .sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp))[0]; + const clients: Record< + string, + { initialized: number; calls: number; failures: number } + > = {}; + for (const event of [...initialized, ...calls]) { + const key = event.client || 'unknown-mcp-client'; + const current = clients[key] || { initialized: 0, calls: 0, failures: 0 }; + if (event.event === 'mcp.client_initialized') current.initialized++; + if (event.event === 'mcp.tool_completed') current.calls++; + if (event.outcome === 'failure') current.failures++; + clients[key] = current; + } + const percentile = (fraction: number): number | null => + durations.length + ? durations[ + Math.min( + durations.length - 1, + Math.floor(durations.length * fraction) + ) + ] + : null; + return { + schemaVersion: 2, + available: events.length > 0, + windowHours: sinceMs / 3_600_000, + processes: starts.length, + initializedClients: initialized.length, + toolListRequests: lists.length, + advertisedTools: latestList?.toolCount ?? null, + toolCalls: calls.length, + failures: failures.length, + successRate: calls.length + ? calls.filter((event) => event.outcome === 'success').length / + calls.length + : null, + healthStatus: failures.length + ? 'failing' + : initialized.length && lists.length + ? 'healthy' + : events.length + ? 'starting' + : 'unavailable', + p50DurationMs: percentile(0.5), + p95DurationMs: percentile(0.95), + clients, + recentFailures: failures + .slice() + .sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp)) + .slice(0, 20), + }; +} diff --git a/src/server/mcp-evidence.ts b/src/server/mcp-evidence.ts index 1ccabe0f7..da44e4e2f 100644 --- a/src/server/mcp-evidence.ts +++ b/src/server/mcp-evidence.ts @@ -3,6 +3,7 @@ import path from 'path'; import { dirname } from 'path'; import { fileURLToPath, pathToFileURL } from 'url'; +import { recordMcpDiagnostic } from './mcp-diagnostics.js'; const here = dirname(fileURLToPath(import.meta.url)); const processEpisodeId = @@ -51,6 +52,16 @@ async function modules(): Promise { export class McpEvidenceRecorder { private client: McpClientInfo | null = null; + constructor(private readonly serviceVersion: string) { + recordMcpDiagnostic({ + serviceVersion, + event: 'mcp.process_started', + outcome: 'success', + toolProfile: process.env.TOKEN_OPTIMIZER_TOOL_PROFILE || 'core', + experimentArm: process.env.TOKEN_OPTIMIZER_EXPERIMENT_ARM || 'full', + }); + } + private async record(event: Record): Promise { try { const loaded = await modules(); @@ -78,6 +89,13 @@ export class McpEvidenceRecorder { clientInitialized(info?: McpClientInfo): void { this.client = info || null; + recordMcpDiagnostic({ + serviceVersion: this.serviceVersion, + event: 'mcp.client_initialized', + outcome: 'success', + client: info?.name || 'unknown-mcp-client', + clientVersion: info?.version || null, + }); void this.record({ kind: 'mcp-client', clientTitle: info?.title || null, @@ -85,6 +103,15 @@ export class McpEvidenceRecorder { } toolOutcome(toolName: string, durationMs: number, success: boolean): void { + recordMcpDiagnostic({ + serviceVersion: this.serviceVersion, + event: 'mcp.tool_completed', + outcome: success ? 'success' : 'failure', + client: this.client?.name || 'unknown-mcp-client', + clientVersion: this.client?.version || null, + toolName, + durationMs, + }); void this.record({ kind: 'mcp-tool', toolName, @@ -92,4 +119,47 @@ export class McpEvidenceRecorder { success, }); } + + toolsListed(toolCount: number): void { + recordMcpDiagnostic({ + serviceVersion: this.serviceVersion, + event: 'mcp.tools_listed', + outcome: 'success', + client: this.client?.name || 'unknown-mcp-client', + clientVersion: this.client?.version || null, + toolCount, + toolProfile: process.env.TOKEN_OPTIMIZER_TOOL_PROFILE || 'core', + }); + } + + transportConnected(): void { + recordMcpDiagnostic({ + serviceVersion: this.serviceVersion, + event: 'mcp.transport_connected', + outcome: 'success', + client: this.client?.name || null, + clientVersion: this.client?.version || null, + }); + } + + startupFailed(error: unknown): void { + recordMcpDiagnostic({ + serviceVersion: this.serviceVersion, + event: 'mcp.startup_failed', + outcome: 'failure', + client: this.client?.name || null, + clientVersion: this.client?.version || null, + error, + }); + } + + shutdown(): void { + recordMcpDiagnostic({ + serviceVersion: this.serviceVersion, + event: 'mcp.shutdown', + outcome: 'success', + client: this.client?.name || null, + clientVersion: this.client?.version || null, + }); + } } diff --git a/src/server/web-server.ts b/src/server/web-server.ts index 7a7955241..258d9ed34 100644 --- a/src/server/web-server.ts +++ b/src/server/web-server.ts @@ -19,6 +19,10 @@ import { readHookDiagnosticEvents, summarizeHookDiagnostics, } from './hook-diagnostics.js'; +import { + readMcpDiagnosticEvents, + summarizeMcpDiagnostics, +} from './mcp-diagnostics.js'; import { isValidSessionId } from '../utils/session-id.js'; const __filename = fileURLToPath(import.meta.url); @@ -577,12 +581,23 @@ app.get('/api/diagnostics/hooks', (req, res) => { }); }); +app.get('/api/diagnostics/mcp', (req, res) => { + const hours = Math.min(24 * 30, Math.max(1, Number(req.query.hours) || 24)); + const limit = Math.min(500, Math.max(1, Number(req.query.limit) || 100)); + const sinceMs = hours * 60 * 60 * 1000; + res.json({ + summary: summarizeMcpDiagnostics(sinceMs), + events: readMcpDiagnosticEvents(limit, sinceMs), + }); +}); + app.get('/api/health', (_req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString(), port: PORT, hookDiagnostics: summarizeHookDiagnostics(), + mcpDiagnostics: summarizeMcpDiagnostics(), }); }); diff --git a/src/tools/file-operations/smart-glob.ts b/src/tools/file-operations/smart-glob.ts index 456ef5bed..ddc56267d 100644 --- a/src/tools/file-operations/smart-glob.ts +++ b/src/tools/file-operations/smart-glob.ts @@ -654,6 +654,13 @@ export const SMART_GLOB_TOOL_DEFINITION = { name: 'smart_glob', description: 'Search files with glob patterns and 75% token reduction through path-only results and smart filtering', + annotations: { + title: 'Find files efficiently', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, inputSchema: { type: 'object', properties: { diff --git a/src/tools/file-operations/smart-grep.ts b/src/tools/file-operations/smart-grep.ts index 6466c70b0..6437d2318 100644 --- a/src/tools/file-operations/smart-grep.ts +++ b/src/tools/file-operations/smart-grep.ts @@ -770,6 +770,13 @@ export const SMART_GREP_TOOL_DEFINITION = { name: 'smart_grep', description: 'Search file contents with 80% token reduction through match-only output and smart filtering', + annotations: { + title: 'Search file contents efficiently', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, inputSchema: { type: 'object', properties: { diff --git a/src/tools/file-operations/smart-read.ts b/src/tools/file-operations/smart-read.ts index 0af80ce49..860990b1b 100644 --- a/src/tools/file-operations/smart-read.ts +++ b/src/tools/file-operations/smart-read.ts @@ -428,6 +428,13 @@ export const SMART_READ_TOOL_DEFINITION = { name: 'smart_read', description: 'Read files with 80% token reduction through intelligent caching, diff-based updates, and syntax-aware optimization', + annotations: { + title: 'Read a file efficiently', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, inputSchema: { type: 'object', properties: { diff --git a/src/tools/intelligence/wiki-read.ts b/src/tools/intelligence/wiki-read.ts index f7eefd2f2..33e53ccdc 100644 --- a/src/tools/intelligence/wiki-read.ts +++ b/src/tools/intelligence/wiki-read.ts @@ -231,6 +231,13 @@ export const WIKI_READ_TOOL_DEFINITION = { 'rejected, commands that worked — plus lessons carried from other repositories on this ' + 'machine. Subagents especially: you never receive the session-start briefing, so this is the ' + 'only way to reach the graph. Costs nothing and sends nothing off the machine.', + annotations: { + title: 'Read project knowledge', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, inputSchema: { type: 'object', properties: { diff --git a/src/tools/intelligence/wiki-write.ts b/src/tools/intelligence/wiki-write.ts index cf3d43f6e..364cf03ea 100644 --- a/src/tools/intelligence/wiki-write.ts +++ b/src/tools/intelligence/wiki-write.ts @@ -301,6 +301,13 @@ export const WIKI_WRITE_TOOL_DEFINITION = { 'lets the claim be invalidated when that code changes, and what makes it surface ' + 'automatically when the file is next touched. Costs nothing and sends nothing off ' + 'the machine.', + annotations: { + title: 'Record project knowledge', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: false, + }, inputSchema: { type: 'object', properties: { diff --git a/tests/hooks/causal-evidence.test.mjs b/tests/hooks/causal-evidence.test.mjs index 7fd3ec745..9a5922171 100644 --- a/tests/hooks/causal-evidence.test.mjs +++ b/tests/hooks/causal-evidence.test.mjs @@ -73,6 +73,40 @@ describe('causal episode tracing', () => { }); }); + test('an exact repeat enriches the existing finding with newly resolvable anchors', () => { + const key = seed(); + const second = join(workspace, 'package.json'); + writeFileSync(second, '{"scripts":{"test":"jest"}}\n'); + + const repeated = writeHarvested(dir, [{ + type: 'command', + claim: 'Use npm test instead of the unsupported direct probe.', + evidence: 'The package command passed and the direct probe exited one.', + applicability: 'When verification uses the unsupported direct probe.', + confidenceLabel: 'verified', + confidence: 0.98, + scope: 'project', + invalidators: ['package.json test script changes'], + trigger: 'bad-command', + anchors: [anchor, second], + }], { sessionId: 'second-session', origin: ORIGIN_AGENT, projectRoot: workspace })[0]; + + const graph = load(dir); + const finding = [...graph.nodes.values()].find((item) => item.key === key); + const findingCount = [...graph.nodes.values()].filter( + (item) => item.kind === 'finding' && item.claim === finding.claim + ).length; + const anchors = new Set( + graph.edges + .filter((edge) => edge.from === finding.id && edge.edge === 'derived_from') + .map((edge) => edge.to) + ); + + expect(repeated).toBe(key); + expect(findingCount).toBe(1); + expect(anchors.size).toBe(2); + }); + test('joins a tool outcome to the exact injection id', () => { const injection = record(dir, { kind: 'inject', episodeId: 'episode-1', sessionId: 'session-1', diff --git a/tests/hooks/clients.test.mjs b/tests/hooks/clients.test.mjs index a473a3cb5..746a68b9b 100644 --- a/tests/hooks/clients.test.mjs +++ b/tests/hooks/clients.test.mjs @@ -14,7 +14,10 @@ import { join, dirname } from 'node:path'; import { tmpdir } from 'node:os'; import { fileURLToPath } from 'node:url'; import { normalizeTool, normalizePayload } from '../../hooks-core/decide.mjs'; -import { CLIENTS } from '../../hooks-core/adapter.mjs'; +import { + CLIENTS, + normalizeClientPayload, +} from '../../hooks-core/adapter.mjs'; const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); @@ -81,6 +84,41 @@ describe('tool names normalize across clients', () => { }); describe('payload shapes normalize across clients', () => { + test('Codex code-mode envelopes expose nested mutations without hard-failing the host script', () => { + const raw = normalizeClientPayload('codex', 'post-tool', { + tool_name: 'functions.exec', + tool_input: { + code: 'const patch = "*** Update File: src/a.ts\\n"; await tools.apply_patch(patch);', + }, + }); + const payload = normalizePayload(raw); + + expect(payload.tool_name).toBe('Edit'); + expect(payload.tool_input.code_mode_envelope).toBe(true); + expect(payload.tool_input.command).toContain('*** Update File: src/a.ts'); + }); + + test('Codex code mode extracts nested shell commands but ignores non-filesystem orchestration', () => { + const command = normalizePayload( + normalizeClientPayload('codex', 'pre-tool', { + tool_name: 'functions.exec', + tool_input: { + code: 'const task = "git status --short"; await tools.exec_command({ cmd: task });', + }, + }) + ); + const web = normalizePayload( + normalizeClientPayload('codex', 'pre-tool', { + tool_name: 'functions.exec', + tool_input: { code: 'await tools.web__run({search_query:[{q:"x"}]});' }, + }) + ); + + expect(command.tool_name).toBe('Bash'); + expect(command.tool_input.command).toBe('git status --short'); + expect(web.tool_name).toBeNull(); + }); + test('Gemini-style absolute_path and start_line are understood', () => { const p = normalizePayload({ tool: 'read_file', diff --git a/tests/hooks/observability.test.mjs b/tests/hooks/observability.test.mjs index aab53fc05..947d6139b 100644 --- a/tests/hooks/observability.test.mjs +++ b/tests/hooks/observability.test.mjs @@ -60,7 +60,7 @@ describe('cross-client hook observability', () => { const events = readHookEvents(); expect(events).toHaveLength(1); expect(events[0]).toMatchObject({ - schemaVersion: 1, + schemaVersion: 2, service: 'token-optimizer', serviceVersion: 'test-version', event: 'hook.completed', @@ -69,6 +69,8 @@ describe('cross-client hook observability', () => { client: 'codex', hookEvent: 'post-tool', toolName: 'apply_patch', + rawToolName: 'apply_patch', + codeModeEnvelope: false, payloadBytes: 321, severityText: 'INFO', severityNumber: 9, @@ -133,6 +135,41 @@ describe('cross-client hook observability', () => { ); }); + test('reports an unpaired lifecycle start as an abandoned failure', () => { + writeHookEvent({ + event: 'hook.started', + timestamp: new Date(Date.now() - 20_000).toISOString(), + invocationId: 'abandoned-probe', + client: 'codex', + hookEvent: 'pre-tool', + }); + + expect(readHookEvents()).toHaveLength(0); + const health = hookHealthSummary(); + expect(health).toMatchObject({ + total: 1, + failures: 1, + abandoned: 1, + healthStatus: 'failing', + }); + expect(health.recentFailures[0]).toMatchObject({ + reason: 'process_terminated_before_completion', + }); + }); + + test('separates an intentional policy block from a hook failure', () => { + const invocation = beginHookInvocation('codex', 'pre-tool'); + invocation.block('policy_denied'); + + expect(hookHealthSummary()).toMatchObject({ + total: 1, + failures: 0, + blocked: 1, + successRate: 1, + healthStatus: 'healthy', + }); + }); + test('fails open before the host timeout when stdin never closes', async () => { const started = Date.now(); const child = spawn( @@ -159,9 +196,11 @@ describe('cross-client hook observability', () => { const file = readdirSync(join(workspace, 'timeout-logs')).find((name) => name.endsWith('.jsonl') ); - const event = JSON.parse( - readFileSync(join(workspace, 'timeout-logs', file), 'utf8').trim() - ); + const event = readFileSync(join(workspace, 'timeout-logs', file), 'utf8') + .trim() + .split(/\r?\n/) + .map((line) => JSON.parse(line)) + .find((row) => row.event === 'hook.completed'); expect(event.outcome).toBe('timeout'); expect(event.reason).toBe('stdin_timeout'); expect(event.inputStatus).toBe('timeout'); @@ -189,7 +228,7 @@ describe('cross-client hook observability', () => { const [event] = readEventsFrom(join(workspace, 'claude-logs')); expect(event).toMatchObject({ - schemaVersion: 1, + schemaVersion: 2, serviceVersion: '5.7.0', client: 'claude-code', hookEvent: 'pre-tool', @@ -246,7 +285,7 @@ describe('cross-client hook observability', () => { for (const { client, exitCode, event } of results) { expect(exitCode).toBe(0); expect(event).toMatchObject({ - schemaVersion: 1, + schemaVersion: 2, service: 'token-optimizer', serviceVersion: '5.7.0', client, @@ -337,5 +376,6 @@ function readEventsFrom(directory) { return readFileSync(join(directory, file), 'utf8') .trim() .split(/\r?\n/) - .map((line) => JSON.parse(line)); + .map((line) => JSON.parse(line)) + .filter((event) => event.event !== 'hook.started'); } diff --git a/tests/hooks/refusal-feedback.test.mjs b/tests/hooks/refusal-feedback.test.mjs index 570c158ee..72e19457f 100644 --- a/tests/hooks/refusal-feedback.test.mjs +++ b/tests/hooks/refusal-feedback.test.mjs @@ -66,7 +66,16 @@ function seed(claim = BASELINE) { writeFileSync(file, '# x\n'); writeHarvested( wikiA, - [{ type: 'command', claim, confidence: 0.9, trigger: 'build', anchors: [file] }], + [ + { + type: 'command', + claim, + confidence: 0.9, + trigger: 'build', + scope: 'global', + anchors: [file], + }, + ], { sessionId: 'seed', projectRoot: projectA } ); return [...load(sharedDirOf()).nodes.values()].find((n) => n.kind === 'finding'); diff --git a/tests/hooks/shared-tier.test.mjs b/tests/hooks/shared-tier.test.mjs index 71c1e872b..a0b665de3 100644 --- a/tests/hooks/shared-tier.test.mjs +++ b/tests/hooks/shared-tier.test.mjs @@ -59,10 +59,12 @@ beforeEach(() => { shared = mkdtempSync(join(tmpdir(), 'shared-tier-')); stateDir = mkdtempSync(join(tmpdir(), 'shared-state-')); process.env.TOKEN_OPTIMIZER_SHARED_DIR = shared; + process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED = '1'; }); afterEach(() => { delete process.env.TOKEN_OPTIMIZER_SHARED_DIR; + delete process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED; for (const d of [projectA, projectB, shared, stateDir]) { try { rmSync(d, { recursive: true, force: true }); @@ -78,7 +80,7 @@ function learnIn(root, wikiDirOf, finding) { writeFileSync(file, 'module.exports = 1;\n'); return writeHarvested( wikiDirOf, - [{ ...finding, anchors: [file] }], + [{ scope: 'global', ...finding, anchors: [file] }], { sessionId: 'learn', projectRoot: root } ); } @@ -114,6 +116,34 @@ const NPM_LESSON = { }; describe('a lesson learned in one project', () => { + test('quarantines synthetic evaluation sources from the machine-wide tier', () => { + const evalRoot = join(projectA, 'artifacts', 'live-eval', 'scenario-auto'); + mkdirSync(join(evalRoot, '.git'), { recursive: true }); + mkdirSync(join(evalRoot, '.token-optimizer', 'wiki'), { recursive: true }); + const file = join(evalRoot, 'build.js'); + writeFileSync(file, 'module.exports = 1;\n'); + + delete process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED; + process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE = '1'; + try { + writeHarvested( + join(evalRoot, '.token-optimizer', 'wiki'), + [{ ...NPM_LESSON, scope: 'global', anchors: [file] }], + { sessionId: 'synthetic-study', projectRoot: evalRoot } + ); + } finally { + delete process.env.TOKEN_OPTIMIZER_STRICT_SHARED_PROVENANCE; + process.env.TOKEN_OPTIMIZER_ALLOW_EPHEMERAL_SHARED = '1'; + } + + expect(runCommandIn(projectB, 'npx jest')).not.toContain('npm test'); + expect( + [...loadGraph(sharedDirOf()).nodes.values()].filter( + (node) => node.kind === 'finding' + ) + ).toHaveLength(0); + }); + test('is served in a DIFFERENT project on the command it applies to', () => { // The whole feature in one assertion. Project B has never seen this lesson, // has its own empty graph, and shares nothing with A but the machine. @@ -143,6 +173,7 @@ describe('a lesson learned in one project', () => { // files that repository does not have. learnIn(projectA, wikiA, { type: 'finding', + scope: 'project', claim: 'parse() trims its input before returning, and callers depend on it', confidence: 0.9, trigger: 'jest', @@ -153,6 +184,23 @@ describe('a lesson learned in one project', () => { expect(context).not.toContain('parse() trims'); }); + test('does not publish an omitted scope outside its project', () => { + const file = join(projectA, 'local-only.md'); + writeFileSync(file, '# local\n'); + writeHarvested( + wikiA, + [{ ...NPM_LESSON, anchors: [file] }], + { sessionId: 'local-default', projectRoot: projectA } + ); + + expect(runCommandIn(projectB, 'npx jest')).not.toContain('npm test'); + expect( + [...loadGraph(sharedDirOf()).nodes.values()].filter( + (node) => node.kind === 'finding' + ) + ).toHaveLength(0); + }); + test('is not read back to the project that taught it, as foreign news', () => { // Project A's own local path already serves this. Repeating it under a "from // other projects" heading would double the tokens AND misstate its origin. @@ -288,6 +336,7 @@ describe('a lesson learned in one project', () => { claim: 'Confirm the sabotage actually applied before trusting a canary result: an edit that silently matched nothing reports PASS, which reads as "the guard works".', confidence: 0.9, + scope: 'global', anchors: [file], }, ], @@ -312,6 +361,7 @@ describe('a lesson learned in one project', () => { claim: 'Confirm the sabotage actually applied before trusting a canary result.', confidence: 0.9, + scope: 'global', anchors: [(() => { const f = join(projectA, 'g2.md'); writeFileSync(f, 'x\n'); return f; })()], }, ], @@ -340,6 +390,7 @@ describe('a lesson learned in one project', () => { claim: 'Confirm the sabotage actually applied before trusting a canary result: an edit that silently matched nothing reports PASS.', confidence: 0.9, + scope: 'global', anchors: [file], }, ], @@ -370,6 +421,7 @@ describe('a lesson learned in one project', () => { type: 'feedback', claim: 'Confirm the sabotage actually applied before trusting a canary result.', confidence: 0.9, + scope: 'global', anchors: [file], }, ], diff --git a/tests/hooks/staleness.test.mjs b/tests/hooks/staleness.test.mjs index d3cad7832..1db8024c7 100644 --- a/tests/hooks/staleness.test.mjs +++ b/tests/hooks/staleness.test.mjs @@ -81,6 +81,27 @@ describe('symbol extraction', () => { expect(names).toContain('Run'); }); + test('finds C# Allman-style methods used by real projects', () => { + const names = extractSymbols('ParameterComponentRegistry.cs', [ + 'public sealed class ParameterComponentRegistry', + '{', + ' public void SetParameters(Vector parameters)', + ' {', + ' ArgumentNullException.ThrowIfNull(parameters);', + ' }', + '', + ' private CapturedLayout CaptureLayout()', + ' {', + ' return new CapturedLayout();', + ' }', + '}', + ].join('\n')).map((s) => s.name); + + expect(names).toEqual( + expect.arrayContaining(['ParameterComponentRegistry', 'SetParameters', 'CaptureLayout']) + ); + }); + test('an unknown language yields no symbols rather than junk', () => { expect(languageOf('notes.xyz')).toBeNull(); expect(extractSymbols('notes.xyz', 'def foo():')).toEqual([]); diff --git a/tests/hooks/touched-paths.test.mjs b/tests/hooks/touched-paths.test.mjs index 4b62e54a2..84972cf87 100644 --- a/tests/hooks/touched-paths.test.mjs +++ b/tests/hooks/touched-paths.test.mjs @@ -67,6 +67,24 @@ describe('a touch is a touch however the tool spells it', () => { test('a path that does not resolve is not recorded', () => { expect(bash('wc -l src/nope.ts', repoA)).toEqual([]); }); + + test('a Codex code-mode patch records the files it changed', () => { + const added = join(repoA, 'src', 'added.ts'); + writeFileSync(added, 'export const added = true;\n'); + const out = touchedPaths({ + tool_name: 'Edit', + tool_input: { + command: + '*** Begin Patch\n' + + '*** Update File: src/main.ts\n' + + '*** Add File: src/added.ts\n' + + '*** End Patch', + }, + cwd: repoA, + }); + + expect(names(out).sort()).toEqual(['src/added.ts', 'src/main.ts']); + }); }); describe('a `cd` inside the command changes where operands resolve', () => { diff --git a/tests/integration/client-hooks.test.ts b/tests/integration/client-hooks.test.ts index 35740633f..e2e9f80c4 100644 --- a/tests/integration/client-hooks.test.ts +++ b/tests/integration/client-hooks.test.ts @@ -1,5 +1,11 @@ import { afterAll, beforeAll, describe, expect, it } from '@jest/globals'; -import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { + existsSync, + mkdtempSync, + readFileSync, + rmSync, + writeFileSync, +} from 'node:fs'; import { tmpdir } from 'node:os'; import { dirname, join, resolve } from 'node:path'; import { pathToFileURL } from 'node:url'; @@ -10,10 +16,19 @@ const repoRoot = resolve(process.cwd()); // scripts with thin entry files that call the shared core. These tests assert // the CURRENT architecture; they previously asserted the advisor files, which // is why they passed on a stale tree and failed in CI once the files were gone. -const codexSessionStart = join(repoRoot, 'integrations/codex/hooks/session-start.mjs'); +const codexSessionStart = join( + repoRoot, + 'integrations/codex/hooks/session-start.mjs' +); const codexPreTool = join(repoRoot, 'integrations/codex/hooks/pre-tool.mjs'); -const geminiSessionStart = join(repoRoot, 'integrations/gemini/hooks/session-start.mjs'); -const geminiPostTool = join(repoRoot, 'integrations/gemini/hooks/post-tool.mjs'); +const geminiSessionStart = join( + repoRoot, + 'integrations/gemini/hooks/session-start.mjs' +); +const geminiPostTool = join( + repoRoot, + 'integrations/gemini/hooks/post-tool.mjs' +); const copilotHook = join( repoRoot, 'integrations/copilot/.github/hooks/token-optimizer-advisor.mjs' @@ -123,7 +138,9 @@ describe('native CLI hook integrations', () => { }); expect(codex.hookSpecificOutput.permissionDecision).toBe('deny'); - expect(codex.hookSpecificOutput.permissionDecisionReason).toContain('smart_read'); + expect(codex.hookSpecificOutput.permissionDecisionReason).toContain( + 'smart_read' + ); expect(gemini.hookSpecificOutput.permissionDecision).toBeUndefined(); expect(gemini.hookSpecificOutput.additionalContext).toContain('smart_read'); @@ -160,10 +177,16 @@ describe('native CLI hook integrations', () => { .split('\n') .filter( (line, index) => - !(index < 2 && (line.startsWith('// GENERATED FILE') || line.startsWith('// Source of truth'))) + !( + index < 2 && + (line.startsWith('// GENERATED FILE') || + line.startsWith('// Source of truth')) + ) ) .join('\n'); - const core = stripBanner(readFileSync(join(repoRoot, 'hooks-core/decide.mjs'), 'utf8')); + const core = stripBanner( + readFileSync(join(repoRoot, 'hooks-core/decide.mjs'), 'utf8') + ); const clients = [ 'plugin/hooks/lib/decide.mjs', 'integrations/codex/hooks/lib/decide.mjs', @@ -174,7 +197,9 @@ describe('native CLI hook integrations', () => { ]; for (const client of clients) { - expect(stripBanner(readFileSync(join(repoRoot, client), 'utf8'))).toBe(core); + expect(stripBanner(readFileSync(join(repoRoot, client), 'utf8'))).toBe( + core + ); } }); @@ -195,10 +220,13 @@ describe('native CLI hook integrations', () => { readFileSync(join(pluginRoot, 'hooks/hooks.json'), 'utf8') ); const standaloneManifest = JSON.parse( - readFileSync(join(repoRoot, 'integrations/codex/hooks/hooks.json'), 'utf8') + readFileSync( + join(repoRoot, 'integrations/codex/hooks/hooks.json'), + 'utf8' + ) ); - const pluginHooks = Object.values(pluginManifest.hooks).flatMap((groups: any) => - groups.flatMap((group: any) => group.hooks) + const pluginHooks = Object.values(pluginManifest.hooks).flatMap( + (groups: any) => groups.flatMap((group: any) => group.hooks) ) as Array<{ command: string; commandWindows: string }>; expect(pluginHooks).toHaveLength(4); @@ -213,7 +241,9 @@ describe('native CLI hook integrations', () => { ); expect(pluginManifest.hooks.Stop).toBeDefined(); for (const hook of pluginHooks) { - const relative = hook.command.match(/\$\{PLUGIN_ROOT\}\/([^\"]+\.mjs)/)?.[1]; + const relative = hook.command.match( + /\$\{PLUGIN_ROOT\}\/([^\"]+\.mjs)/ + )?.[1]; expect(relative).toBeTruthy(); expect(existsSync(join(pluginRoot, relative!))).toBe(true); expect(hook.commandWindows).toContain(relative!.replaceAll('/', '\\')); @@ -230,13 +260,19 @@ describe('native CLI hook integrations', () => { it('ships a Codex plugin MCP config that Codex can discover', () => { const config = JSON.parse( - readFileSync(join(repoRoot, 'integrations/codex/plugin/.mcp.json'), 'utf8') + readFileSync( + join(repoRoot, 'integrations/codex/plugin/.mcp.json'), + 'utf8' + ) ); expect(config.mcp_servers).toBeUndefined(); expect(config.mcpServers?.['token-optimizer']).toEqual({ command: 'npx', args: ['-y', '@ooples/token-optimizer-mcp@latest'], + required: true, + startup_timeout_sec: 30, + tool_timeout_sec: 120, }); }); @@ -247,8 +283,14 @@ describe('native CLI hook integrations', () => { 'post-tool.mjs', 'stop.mjs', ]) { - const standalone = readFileSync(join(repoRoot, 'integrations/codex/hooks', entry), 'utf8'); - const plugin = readFileSync(join(repoRoot, 'integrations/codex/plugin/hooks', entry), 'utf8'); + const standalone = readFileSync( + join(repoRoot, 'integrations/codex/hooks', entry), + 'utf8' + ); + const plugin = readFileSync( + join(repoRoot, 'integrations/codex/plugin/hooks', entry), + 'utf8' + ); expect(plugin).toBe(standalone); } }); diff --git a/tests/integration/mcp-stdio-contract.test.ts b/tests/integration/mcp-stdio-contract.test.ts index c1ea824be..7ca49ee82 100644 --- a/tests/integration/mcp-stdio-contract.test.ts +++ b/tests/integration/mcp-stdio-contract.test.ts @@ -57,6 +57,7 @@ let server: ChildProcessWithoutNullStreams; let fixtures: string; let nextId = 1; let stdoutBuffer = ''; +let initializeResult: any; const pending = new Map void>(); /** One JSON-RPC round trip. Resolves with the `result` object. */ @@ -136,8 +137,10 @@ beforeAll(async () => { env: { ...process.env, // Keep the server's own graph and state out of the developer's real ones. - TOKEN_OPTIMIZER_WIKI_DIR: join, TOKEN_OPTIMIZER_SHARED_DIR: join(fixtures, '.wiki'), + TOKEN_OPTIMIZER_WIKI_DIR: join(fixtures, '.wiki'), + TOKEN_OPTIMIZER_SHARED_DIR: join(fixtures, '.wiki'), TOKEN_OPTIMIZER_STATE_DIR: join(fixtures, '.state'), + TOKEN_OPTIMIZER_LOG_DIR: join(fixtures, '.logs'), }, }); @@ -165,7 +168,7 @@ beforeAll(async () => { } }); - await call('initialize', { + initializeResult = await call('initialize', { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'contract-test', version: '0.0.0' }, @@ -204,6 +207,16 @@ afterAll(async () => { }); describe('the server answers over stdio at all', () => { + it('advertises the package version clients actually installed', () => { + const packageVersion = JSON.parse( + readFileSync(join(ROOT, 'package.json'), 'utf8') + ).version; + expect(initializeResult?.serverInfo).toMatchObject({ + name: 'token-optimizer-mcp', + version: packageVersion, + }); + }); + it('lists its tools', async () => { // If this fails everything below is meaningless, so it is asserted first // rather than assumed. @@ -214,6 +227,25 @@ describe('the server answers over stdio at all', () => { expect(result.tools.map((t: { name: string }) => t.name)).toContain( 'smart_grep' ); + + const byName = new Map( + result.tools.map((tool: { name: string }) => [tool.name, tool]) + ); + expect(byName.get('smart_read')).toMatchObject({ + annotations: { + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }); + expect(byName.get('wiki_write')).toMatchObject({ + annotations: { + readOnlyHint: false, + destructiveHint: false, + openWorldHint: false, + }, + }); }); }); @@ -395,3 +427,47 @@ describe('smart_edit over the wire', () => { expect(after.endsWith('\n')).toBe(true); }); }); + +describe('production MCP diagnostics over the wire', () => { + it('records the real handshake, inventory, and every tool outcome', async () => { + // Exercise an early-return audit tool as well as normal tools. Before the + // central observer was added these calls bypassed diagnostics completely. + const audit = await call('tools/call', { + name: 'cache_audit', + arguments: {}, + }); + expect(audit?.isError).not.toBe(true); + + const directory = join(fixtures, '.logs'); + const rows = readdirSync(directory) + .filter((name) => name.startsWith('mcp-events-')) + .flatMap((name) => + readFileSync(join(directory, name), 'utf8') + .split(/\r?\n/) + .filter(Boolean) + .map((line) => JSON.parse(line)) + ); + + expect(rows).toEqual( + expect.arrayContaining([ + expect.objectContaining({ event: 'mcp.process_started' }), + expect.objectContaining({ + event: 'mcp.client_initialized', + client: 'contract-test', + }), + expect.objectContaining({ + event: 'mcp.tools_listed', + toolCount: expect.any(Number), + }), + expect.objectContaining({ + event: 'mcp.tool_completed', + toolName: 'cache_audit', + outcome: 'success', + }), + ]) + ); + expect(rows.some((row) => 'arguments' in row || 'output' in row)).toBe( + false + ); + }); +}); diff --git a/tests/unit/mcp-diagnostics.test.ts b/tests/unit/mcp-diagnostics.test.ts new file mode 100644 index 000000000..c86395742 --- /dev/null +++ b/tests/unit/mcp-diagnostics.test.ts @@ -0,0 +1,90 @@ +import { describe, it, expect, beforeEach, afterEach } from '@jest/globals'; +import { mkdtempSync, readFileSync, readdirSync, rmSync } from 'fs'; +import { tmpdir } from 'os'; +import { join } from 'path'; +import { + readMcpDiagnosticEvents, + recordMcpDiagnostic, + summarizeMcpDiagnostics, +} from '../../src/server/mcp-diagnostics.js'; + +let directory: string; + +beforeEach(() => { + directory = mkdtempSync(join(tmpdir(), 'mcp-diagnostics-')); + process.env.TOKEN_OPTIMIZER_LOG_DIR = directory; +}); + +afterEach(() => { + delete process.env.TOKEN_OPTIMIZER_LOG_DIR; + rmSync(directory, { recursive: true, force: true }); +}); + +describe('MCP production diagnostics', () => { + it('records handshakes, inventory and outcomes without payloads', () => { + recordMcpDiagnostic({ + serviceVersion: '5.7.0', + event: 'mcp.process_started', + outcome: 'success', + }); + recordMcpDiagnostic({ + serviceVersion: '5.7.0', + event: 'mcp.client_initialized', + outcome: 'success', + client: 'codex-mcp-client', + clientVersion: '1.2.3', + }); + recordMcpDiagnostic({ + serviceVersion: '5.7.0', + event: 'mcp.tools_listed', + outcome: 'success', + client: 'codex-mcp-client', + toolCount: 18, + }); + recordMcpDiagnostic({ + serviceVersion: '5.7.0', + event: 'mcp.tool_completed', + outcome: 'success', + client: 'codex-mcp-client', + toolName: 'wiki_write', + durationMs: 12, + }); + + expect(summarizeMcpDiagnostics()).toMatchObject({ + available: true, + processes: 1, + initializedClients: 1, + advertisedTools: 18, + toolCalls: 1, + failures: 0, + healthStatus: 'healthy', + }); + expect(readMcpDiagnosticEvents()).toHaveLength(4); + + const text = readdirSync(directory) + .filter((name) => name.startsWith('mcp-events-')) + .map((name) => readFileSync(join(directory, name), 'utf8')) + .join('\n'); + expect(text).not.toContain('arguments'); + expect(text).not.toContain('prompt'); + expect(text).not.toContain('output'); + }); + + it('separates startup failures from successful tool calls', () => { + recordMcpDiagnostic({ + serviceVersion: '5.7.0', + event: 'mcp.startup_failed', + outcome: 'failure', + error: new Error('handshake timed out'), + }); + + const summary = summarizeMcpDiagnostics() as { + failures: number; + healthStatus: string; + recentFailures: Array<{ error?: { message?: string } }>; + }; + expect(summary.failures).toBe(1); + expect(summary.healthStatus).toBe('failing'); + expect(summary.recentFailures[0].error?.message).toContain('handshake'); + }); +}); From 3c1454b448e10c7c0f292ee52a0cdd990c539cbf Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Wed, 12 Aug 2026 09:45:11 -0400 Subject: [PATCH 07/13] fix(hooks): decode codex strings safely --- hooks-core/adapter.mjs | 83 ++++++++++++++----- .../hooks/token-optimizer/lib/adapter.mjs | 83 ++++++++++++++----- integrations/codex/hooks/lib/adapter.mjs | 83 ++++++++++++++----- .../codex/plugin/hooks/lib/adapter.mjs | 83 ++++++++++++++----- .../copilot/.github/hooks/lib/adapter.mjs | 83 ++++++++++++++----- integrations/cursor/hooks/lib/adapter.mjs | 83 ++++++++++++++----- integrations/gemini/hooks/lib/adapter.mjs | 83 ++++++++++++++----- integrations/kilo/hooks/lib/adapter.mjs | 83 ++++++++++++++----- integrations/opencode/hooks/lib/adapter.mjs | 83 ++++++++++++++----- integrations/qwen/hooks/lib/adapter.mjs | 83 ++++++++++++++----- integrations/windsurf/hooks/lib/adapter.mjs | 83 ++++++++++++++----- plugin/hooks/lib/adapter.mjs | 83 ++++++++++++++----- tests/hooks/clients.test.mjs | 43 +++++++++- 13 files changed, 807 insertions(+), 232 deletions(-) diff --git a/hooks-core/adapter.mjs b/hooks-core/adapter.mjs index bf796dc7b..fbad78edf 100644 --- a/hooks-core/adapter.mjs +++ b/hooks-core/adapter.mjs @@ -186,19 +186,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -217,18 +273,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/cline/hooks/token-optimizer/lib/adapter.mjs b/integrations/cline/hooks/token-optimizer/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/cline/hooks/token-optimizer/lib/adapter.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/codex/hooks/lib/adapter.mjs b/integrations/codex/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/codex/hooks/lib/adapter.mjs +++ b/integrations/codex/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/codex/plugin/hooks/lib/adapter.mjs b/integrations/codex/plugin/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/codex/plugin/hooks/lib/adapter.mjs +++ b/integrations/codex/plugin/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/copilot/.github/hooks/lib/adapter.mjs b/integrations/copilot/.github/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/copilot/.github/hooks/lib/adapter.mjs +++ b/integrations/copilot/.github/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/cursor/hooks/lib/adapter.mjs b/integrations/cursor/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/cursor/hooks/lib/adapter.mjs +++ b/integrations/cursor/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/gemini/hooks/lib/adapter.mjs b/integrations/gemini/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/gemini/hooks/lib/adapter.mjs +++ b/integrations/gemini/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/kilo/hooks/lib/adapter.mjs b/integrations/kilo/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/kilo/hooks/lib/adapter.mjs +++ b/integrations/kilo/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/opencode/hooks/lib/adapter.mjs b/integrations/opencode/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/opencode/hooks/lib/adapter.mjs +++ b/integrations/opencode/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/qwen/hooks/lib/adapter.mjs b/integrations/qwen/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/qwen/hooks/lib/adapter.mjs +++ b/integrations/qwen/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/integrations/windsurf/hooks/lib/adapter.mjs b/integrations/windsurf/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/integrations/windsurf/hooks/lib/adapter.mjs +++ b/integrations/windsurf/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/plugin/hooks/lib/adapter.mjs b/plugin/hooks/lib/adapter.mjs index 7b272cbc5..9f76bbdea 100644 --- a/plugin/hooks/lib/adapter.mjs +++ b/plugin/hooks/lib/adapter.mjs @@ -188,19 +188,75 @@ function contextOutput(client, eventName, additionalContext) { }; } +/** Convert one static JavaScript string literal without evaluating code. */ +function codexStringLiteral(literal) { + if (typeof literal !== 'string' || literal.length < 2) return null; + const quote = literal[0]; + if (!['"', "'", '`'].includes(quote) || literal.at(-1) !== quote) return null; + + let decoded = ''; + for (let index = 1; index < literal.length - 1; index += 1) { + const character = literal[index]; + if (quote === '`' && character === '$' && literal[index + 1] === '{') + return null; + if (character !== '\\') { + decoded += character; + continue; + } + + index += 1; + if (index >= literal.length - 1) return null; + const escaped = literal[index]; + const simple = { + b: '\b', f: '\f', n: '\n', r: '\r', t: '\t', v: '\v', 0: '\0', + '\\': '\\', "'": "'", '"': '"', '`': '`', '$': '$', + }; + if (Object.hasOwn(simple, escaped)) { + decoded += simple[escaped]; + continue; + } + if (escaped === '\n') continue; + if (escaped === '\r') { + if (literal[index + 1] === '\n') index += 1; + continue; + } + if (escaped === 'x') { + const digits = literal.slice(index + 1, index + 3); + if (!/^[0-9a-f]{2}$/i.test(digits)) return null; + decoded += String.fromCodePoint(Number.parseInt(digits, 16)); + index += 2; + continue; + } + if (escaped === 'u') { + const braced = literal[index + 1] === '{'; + const close = braced ? literal.indexOf('}', index + 2) : index + 5; + const digits = braced + ? literal.slice(index + 2, close) + : literal.slice(index + 1, close); + if ( + close < 0 || + !(braced ? /^[0-9a-f]{1,6}$/i : /^[0-9a-f]{4}$/i).test(digits) + ) return null; + const codePoint = Number.parseInt(digits, 16); + if (codePoint > 0x10ffff) return null; + decoded += String.fromCodePoint(codePoint); + index = close; + continue; + } + // JavaScript identity escapes drop the slash (for example, '\q' is 'q'). + decoded += escaped; + } + return decoded; +} + /** Convert client-specific lifecycle envelopes into the common tool shape. */ function codexStringBindings(source) { const values = new Map(); const declaration = /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*((?:"(?:\\.|[^"\\])*")|(?:'(?:\\.|[^'\\])*')|(?:`(?:\\.|[^`\\])*`))/gs; for (const match of String(source || '').matchAll(declaration)) { try { - const literal = match[2]; - const value = literal.startsWith('`') - ? literal.slice(1, -1).replace(/\\`/g, '`') - : JSON.parse(literal.startsWith("'") - ? `"${literal.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - : literal); - values.set(match[1], value); + const value = codexStringLiteral(match[2]); + if (value !== null) values.set(match[1], value); } catch { // A computed or malformed JavaScript expression is not safe to execute // merely to understand a hook envelope. Leave it opaque. @@ -219,18 +275,7 @@ function codexCallArguments(source, method) { function codexLiteral(value, bindings) { if (bindings.has(value)) return String(bindings.get(value)); - try { - if (/^"(?:\\.|[^"\\])*"$/s.test(value)) return JSON.parse(value); - if (/^'(?:\\.|[^'\\])*'$/s.test(value)) - return JSON.parse( - `"${value.slice(1, -1).replace(/\\'/g, "'").replace(/"/g, '\\"')}"` - ); - if (/^`(?:\\.|[^`\\])*`$/s.test(value)) - return value.slice(1, -1).replace(/\\`/g, '`'); - } catch { - return null; - } - return null; + return codexStringLiteral(value); } function codexExecCommands(source, bindings) { diff --git a/tests/hooks/clients.test.mjs b/tests/hooks/clients.test.mjs index 746a68b9b..539d14e15 100644 --- a/tests/hooks/clients.test.mjs +++ b/tests/hooks/clients.test.mjs @@ -14,10 +14,7 @@ import { join, dirname } from 'node:path'; import { tmpdir } from 'node:os'; import { fileURLToPath } from 'node:url'; import { normalizeTool, normalizePayload } from '../../hooks-core/decide.mjs'; -import { - CLIENTS, - normalizeClientPayload, -} from '../../hooks-core/adapter.mjs'; +import { CLIENTS, normalizeClientPayload } from '../../hooks-core/adapter.mjs'; const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); @@ -119,6 +116,44 @@ describe('payload shapes normalize across clients', () => { expect(web.tool_name).toBeNull(); }); + test('Codex code mode decodes quoted Windows paths without losing backslashes', () => { + const payload = normalizePayload( + normalizeClientPayload('codex', 'pre-tool', { + tool_name: 'functions.exec', + tool_input: { + code: String.raw`const task = 'Get-Content C:\\Users\\cheat\\project\\file.cs'; await tools.exec_command({ cmd: task });`, + }, + }) + ); + + expect(payload.tool_name).toBe('Bash'); + expect(payload.tool_input.command).toBe( + 'Get-Content C:\\Users\\cheat\\project\\file.cs' + ); + }); + + test('Codex code mode decodes bounded escapes without evaluating interpolation', () => { + const escaped = normalizePayload( + normalizeClientPayload('codex', 'pre-tool', { + tool_name: 'functions.exec', + tool_input: { + code: String.raw`await tools.exec_command({ cmd: 'first\nsecond\x21' });`, + }, + }) + ); + const interpolated = normalizePayload( + normalizeClientPayload('codex', 'pre-tool', { + tool_name: 'functions.exec', + tool_input: { + code: 'const value = `git ${unsafe}`; await tools.exec_command({ cmd: value });', + }, + }) + ); + + expect(escaped.tool_input.command).toBe('first\nsecond!'); + expect(interpolated.tool_name).toBeNull(); + }); + test('Gemini-style absolute_path and start_line are understood', () => { const p = normalizePayload({ tool: 'read_file', From d3908d0426ee4fd81d7cd4dda5c781736fd91f79 Mon Sep 17 00:00:00 2001 From: Franklin Moormann Date: Wed, 12 Aug 2026 11:08:37 -0400 Subject: [PATCH 08/13] feat(dashboard): unify cross-client token accounting --- README.md | 193 ++++++--- docs/media/live/agent-accounting-live.png | Bin 0 -> 49758 bytes docs/media/live/capture-health-live.png | Bin 0 -> 85916 bytes docs/media/live/evidence-console-live.png | Bin 0 -> 722902 bytes docs/media/live/graph-balance-live.png | Bin 0 -> 52760 bytes docs/media/live/graph-explorer-live.png | Bin 0 -> 347705 bytes docs/media/live/overview-live.png | Bin 0 -> 441635 bytes hooks-core/inject.mjs | 12 +- hooks-core/metrics.mjs | 73 ++++ hooks-core/observability.mjs | 10 + .../hooks/token-optimizer/lib/inject.mjs | 12 +- .../hooks/token-optimizer/lib/metrics.mjs | 73 ++++ .../token-optimizer/lib/observability.mjs | 10 + integrations/codex/hooks/lib/inject.mjs | 12 +- integrations/codex/hooks/lib/metrics.mjs | 73 ++++ .../codex/hooks/lib/observability.mjs | 10 + .../codex/plugin/hooks/lib/inject.mjs | 12 +- .../codex/plugin/hooks/lib/metrics.mjs | 73 ++++ .../codex/plugin/hooks/lib/observability.mjs | 10 + .../copilot/.github/hooks/lib/inject.mjs | 12 +- .../copilot/.github/hooks/lib/metrics.mjs | 73 ++++ .../.github/hooks/lib/observability.mjs | 10 + integrations/cursor/hooks/lib/inject.mjs | 12 +- integrations/cursor/hooks/lib/metrics.mjs | 73 ++++ .../cursor/hooks/lib/observability.mjs | 10 + integrations/gemini/hooks/lib/inject.mjs | 12 +- integrations/gemini/hooks/lib/metrics.mjs | 73 ++++ .../gemini/hooks/lib/observability.mjs | 10 + integrations/kilo/hooks/lib/inject.mjs | 12 +- integrations/kilo/hooks/lib/metrics.mjs | 73 ++++ integrations/kilo/hooks/lib/observability.mjs | 10 + integrations/opencode/hooks/lib/inject.mjs | 12 +- integrations/opencode/hooks/lib/metrics.mjs | 73 ++++ .../opencode/hooks/lib/observability.mjs | 10 + integrations/qwen/hooks/lib/inject.mjs | 12 +- integrations/qwen/hooks/lib/metrics.mjs | 73 ++++ integrations/qwen/hooks/lib/observability.mjs | 10 + integrations/windsurf/hooks/lib/inject.mjs | 12 +- integrations/windsurf/hooks/lib/metrics.mjs | 73 ++++ .../windsurf/hooks/lib/observability.mjs | 10 + package.json | 3 +- plugin/hooks/lib/inject.mjs | 12 +- plugin/hooks/lib/metrics.mjs | 73 ++++ plugin/hooks/lib/observability.mjs | 10 + plugin/hooks/pretooluse-router.mjs | 8 +- scripts/run-dashboard-attribution-smoke.mjs | 122 ++++++ scripts/verify-live-dashboard.mjs | 83 +++- scripts/verify-wiki-ui.mjs | 200 ++++++++- src/analytics/analytics-manager.ts | 10 +- src/analytics/analytics-storage.ts | 42 +- src/analytics/analytics-types.ts | 7 + src/analytics/record-tool-analytics.ts | 68 ++- src/dashboard/public/css/styles.css | 128 ++++++ src/dashboard/public/css/wiki.css | 87 ++++ src/dashboard/public/index.html | 35 +- src/dashboard/public/js/dashboard.js | 402 +++++++++++++++--- src/dashboard/public/js/wiki.js | 157 +++++-- src/dashboard/public/wiki.html | 3 +- src/server/dashboard-analytics.ts | 290 +++++++++++++ src/server/hook-diagnostics.ts | 15 + src/server/index.ts | 64 ++- src/server/mcp-evidence.ts | 14 + src/server/web-server.ts | 15 + tests/hooks/injection.test.mjs | 39 ++ .../unit/analytics/analytics-manager.test.ts | 43 ++ .../analytics/record-tool-analytics.test.ts | 46 +- tests/unit/dashboard-analytics.test.ts | 148 +++++++ 67 files changed, 3162 insertions(+), 200 deletions(-) create mode 100644 docs/media/live/agent-accounting-live.png create mode 100644 docs/media/live/capture-health-live.png create mode 100644 docs/media/live/evidence-console-live.png create mode 100644 docs/media/live/graph-balance-live.png create mode 100644 docs/media/live/graph-explorer-live.png create mode 100644 docs/media/live/overview-live.png create mode 100644 scripts/run-dashboard-attribution-smoke.mjs create mode 100644 src/server/dashboard-analytics.ts create mode 100644 tests/unit/dashboard-analytics.test.ts diff --git a/README.md b/README.md index 6d4de648c..ab818dddd 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

Token Optimizer MCP

- Your coding agent wastes most of its context window. This stops it — by default, on install, across 15 clients. + Spend fewer tokens, keep the conclusions, and prove what every coding agent saved — across 16 clients.

@@ -15,17 +15,17 @@

Enforced by default - 15 clients - Measured against a control arm + 16 clients + Direct savings measured before and after No telemetry MIT, commercial use allowed

- The knowledge graph: findings, decisions and dead ends accreted from real agent work, with a token balance measured against a withheld control arm + Live Token Optimizer dashboard combining tool savings, per-agent attribution, graph cost, and the knowledge graph

-

Everything your agent worked out, kept — and a savings figure measured against a withheld control arm, not estimated.

+

One local ledger for optimizer tools, live-graph substitutions, every agent, and the graph's own cost.

--- @@ -36,7 +36,7 @@ that have not changed, dumping a whole file to see three lines, running unbounded searches, and re-deriving conclusions it reached last session and then forgot. -Token Optimizer attacks that on three fronts. +Token Optimizer attacks that on four fronts. **1. It makes the expensive call impossible.** Install the plugin and a built-in `Read` of a 200 KB file is **denied**, with the refusal naming the cached, @@ -51,13 +51,38 @@ feeds them back the moment the agent touches the relevant file. A finding costs ~150 tokens to carry. Re-deriving it costs 5k–50k. **3. It measures itself, in public, and tells you when it is losing.** A -randomized control arm for savings. A forecast that keeps its own accuracy -record. Cache economics read from your client's own transcript rather than -modelled. Every number here is measured or absent — never estimated and -presented as fact. +before/actual-return measurement for optimizer operations. Direct full-file +minus returned-skeleton savings for live-graph substitutions. A randomized +control arm for the graph's separate downstream effect. Every number is either +measured, visibly collecting, or absent — never guessed into an empty card. + +**4. It attributes the bill.** Returned context, reference USD, and tokens saved +are grouped by operation and by MCP handshake identity. Codex, Claude Code, +Gemini, and any other connected client get separate rows. Old records without +identity remain explicitly unattributed instead of being assigned to whichever +agent happens to be open now. No account, no telemetry, no hosted service. MIT, so it is usable at work. +### What the dashboard proves on a real machine + +The screenshots in this README come from the shipped server reading persisted +local data, not a design mockup. In the capture above it reports: + +- **485,994,128 direct tokens saved** across 2,019 recorded MCP operations plus + one live-graph substitution; +- **6 actual-return operations** from a live Codex / Claude Code / Gemini smoke, + with each client attributed independently; +- **2,647 graph nodes, 6,470 edges, and 58 findings** across 11 local projects; +- **1,047 hook runs with zero failures and zero timeouts** across six active CLI + clients in the selected 24-hour window; +- **6,332 direct graph-substitution tokens saved**, while the different causal + graph-reuse study remains excluded and visibly marked `Collecting`. + +The USD values use a clearly labelled $3 per million reference rate. Historical +rows from older builds use their stored optimizer before/after counts; current +rows count the text actually returned over MCP. The dashboard shows that split. + ## Quick start **Claude Code** — install the plugin, not the bare MCP server. The plugin is @@ -69,7 +94,7 @@ what enforces; adding the server alone just gives the model tools it can ignore. /reload-plugins ``` -That is the entire installation. [All fifteen clients →](#installation) +That is the entire installation. [All sixteen clients →](#installation) Then, whenever you want to know what to do next: @@ -135,48 +160,91 @@ output never enters context at all. Not compressed. Absent. ## The dashboard ```bash +npm install +npm run build npm run dashboard # http://localhost:3100 ```

- Knowledge graph browser with focus view, token balance and audit tab + Per-agent token accounting with historical rows left unattributed and live Codex, Claude Code, and Gemini rows measured separately

- - -
- -**Token balance** -Earned, spent and net — with the control-arm method stated up front rather than -buried. When the experiment cannot yet support a headline figure, it says so. +The overview answers the questions a token optimizer should answer first: + +1. **How many tokens did it remove?** The headline combines direct MCP optimizer + savings with direct live-graph substitutions. +2. **How much context still reached the agents?** Every successful current MCP + result records its actual returned text, even when no valid before-state + exists. That row is context-accounted but savings-unmeasured. +3. **Which agent and action spent it?** The client ledger and action table show + operations, returned context, reference USD, and tokens saved. Lifecycle-only + clients say `Not measured`; no zero is invented. +4. **Did remembering cost more than it saved?** Delivery and semantic-harvest + tokens are charged to the graph. A causal benefit is added only after the + treated/holdout evidence gate passes. + +### Walkthrough: get useful data, not an empty dashboard + +1. Install the MCP server and the native adapter for your CLI. The MCP handshake + provides per-client accounting; native lifecycle hooks provide automatic + routing, capture, health, and delivery where the client protocol permits it. +2. Use `smart_read`, `smart_grep`, `smart_glob`, `smart_edit`, or any other MCP + operation normally. Every successful result records returned context; tools + with a real before-state also record direct savings. +3. Let the active model record durable conclusions with `wiki_write`. Before a + new agent re-derives work, call `wiki_read` for the project or the files it is + about to touch. Native clients can also deliver matching knowledge + automatically. +4. Open `http://localhost:3100`. Use **Overview** for combined accounting and + **What it knows** for capture health, graph exploration, audits, and causal + evidence. +5. To register existing local repositories without reading their source, run + `npm run projects:discover -- /absolute/path/to/repos`. This makes coverage + gaps explicit; it does not fabricate findings. + +For maintainers, this live smoke exercises the shipped stdio transport and +creates separately attributed rows without seeding the analytics database: -**Knowledge graph browser** -Focus view for one node and its neighbourhood; constellation view for the whole -project. Click a finding to see what it was derived from, what superseded it, -and what contradicts it. - - +```bash +npm run dashboard:attribution-smoke -- /absolute/path/to/project /absolute/path/to/large-file +npm run dashboard:verify-live -- http://localhost:3100 +``` -**Audit tab** -Contradictions, stale findings, and anything the graph believes that the code no -longer supports — each with the diff that invalidated it. +

+ Structured cross-client hook and MCP health cards from live local data +

-**Evidence console** -Client/model/task cohorts, matched four-arm effects with 95% intervals, live -injection-to-outcome traces, harm feedback, and the honest capability tier for -all sixteen supported CLIs. Insufficient evidence stays visibly insufficient. +The health panel is deliberately operational rather than a raw text dump. Each +client has activity, runtime failures/timeouts, policy outcomes, and observed +surface coverage. Diagnostics keep no prompts, commands, paths, or tool output. -**One-click Markdown export** -Your agent's accumulated knowledge as documentation you can review, edit and -commit. The graph stops being a black box the moment you can read it as prose. +

+ Direct graph savings, remembering cost, holdouts, and an honest collecting causal study +

-
+Direct substitution savings and causal graph effects are different claims. The +first is `full-file tokens - returned skeleton tokens` and is available +immediately. The second asks whether delivered knowledge prevented later reads; +it uses a control arm and remains `Collecting` until there are at least 20 +treated file touches and 5 holdouts with valid downstream joins.

- Audit tab surfacing contradictions, stale findings and low-confidence claims + Interactive 3D knowledge graph spanning eleven local projects

-

The audit tab: two findings that contradict each other, surfaced automatically.

+Drag to orbit, scroll to zoom, click a node for provenance, or switch to the +bounded one-hop focus view. The default **All known projects** scope pools local +graphs through opaque project IDs; filesystem paths never reach the browser. + +**Audit tab.** Contradictions, stale findings, and low-confidence claims remain +reviewable instead of silently becoming model truth. + +**Evidence console.** Client/model/task cohorts, matched effects with 95% +intervals, live outcome joins, harm feedback, and capability tiers for all 16 +clients. Release and superiority claims fail closed while evidence is missing. + +**One-click Markdown export.** The accumulated graph becomes documentation you +can inspect, edit, and commit. Server-side by design: the browser asks for a neighbourhood, a search result or a page. A mature graph holds thousands of nodes, and shipping it wholesale would @@ -198,9 +266,9 @@ whose capture has not started. The balance cards are backed by persisted events: **Memory deliveries** counts graph context actually supplied to an agent, **Kept back for comparison** counts randomized control touches, and **Cost of remembering** combines delivered-context tokens with measured semantic-write -payload cost. **Reading avoided** stays “Not enough comparisons” until at least -20 deliveries and 5 holdouts exist; the dashboard does not manufacture a -savings estimate from missing data. +payload cost. **Reading avoided** stays `Collecting` or `Not measured` until at +least 20 treated file touches and 5 holdouts exist with a downstream join; the +dashboard does not manufacture a savings estimate from missing data. See [the causal evidence protocol](docs/EVIDENCE_PROTOCOL.md), the [cross-client capability contract](docs/CLIENT_SUPPORT.md), and the @@ -374,15 +442,21 @@ npm run uninstall-hooks -- --apply # carry it out --- -## It proves its own savings against a control arm +## It separates direct savings from causal graph evidence Every tool in this space reports "tokens saved" computed from its own assumptions. That number cannot be wrong, because nothing checks it. -This runs a **randomized holdout**: injection is silently withheld on a slice of -file touches, stratified by file so the comparison is within-file, and the -saving is the measured difference between the arms. It refuses to print a -headline figure until the experiment can support one, and it will tell you +For optimizer results, this records the known before-state and the text actually +returned to the client. For a native graph substitution it records full-file +tokens minus returned-skeleton tokens. Those direct measurements power the main +dashboard immediately. + +The graph's broader claim—whether delivered knowledge prevented later +re-reading—is causal, so it runs a **randomized holdout**. Delivery is silently +withheld on a slice of file touches, stratified by file, and the effect is the +difference in downstream reads between arms. That effect is not added to the +combined net until the experiment can support it, and the page will tell you plainly: > the graph is NOT yet paying for itself @@ -394,14 +468,21 @@ silent false negative, and dollars get quoted to other people. ## It runs everywhere, and says which tier -**Enforcing** — a pre-execution veto exists: Claude Code, Codex, OpenCode. +The tier is a protocol guarantee, not a preference: -**Directive** — MCP plus an always-applied rules file: Cursor, Windsurf, Cline, -Roo, Kilo, Zed, Amp, Continue, Crush, Droid, Copilot, Gemini, Qwen. +- **Lifecycle continuation:** Claude Code, Codex, GitHub Copilot CLI, Gemini CLI, + Qwen Code, and Cursor. Native routing/capture/delivery plus one active-model + completion reflection. +- **Native observation:** Cline, OpenCode, Kilo, and Windsurf. Native + routing/capture/delivery; the active model performs semantic writes. +- **MCP + rules:** Roo Code, Zed, Amp, Continue, Crush, and Droid. MCP-visible + activity and explicit graph tools, with no claim over hidden built-in calls. -Gemini and Qwen sit in the second tier **despite having hooks**, because their -only tool hook fires _after_ the read is paid for. Claiming enforcement there -would be a lie you would discover on your first large file. +The exact surfaces still differ. For example, a protocol that can replace a +large read before it reaches the model provides a stronger token guarantee than +one that can only observe it. The generated registry, adapters, dashboard, and +certification report all read the same capability source so those claims cannot +drift independently. Every config shape is confirmed against that client's published documentation, with the source URL recorded in its README. @@ -414,7 +495,7 @@ npm run verify:all | Suite | Checks | What it proves | | ---------------- | ------ | ----------------------------------------------------------------------------------------------------------------------- | -| `test` | 416 | Enforcement, staleness, injection, consolidation, disclosure, cache, routing, trust — driving the real hooks over stdin | +| `test` | 2,340 | Enforcement, staleness, injection, consolidation, disclosure, cache, routing, trust — driving the real hooks over stdin | | `verify:clients` | 129 | Every client config matches its documented schema | | `verify:harvest` | 26 | Request shape, response parsing, and that **no secret from a tool result crosses the wire** | | `verify:ui` | 22 | Real headless Chromium: layout, label collisions, legibility | @@ -432,13 +513,13 @@ a plan and deleted nothing. | **License** | MIT — commercial use fine | Often noncommercial-only; check before using at work | | Default behaviour | Refuses the wasteful call | Suggests a better tool | | Re-read of an unchanged file | Returns a diff | Returns the file again | -| Savings figure | Measured against a withheld control | Computed from the tool's own assumptions | +| Savings figure | Direct before/return ledger; causal graph effect separately held out | Computed from the tool's own assumptions | | Cross-session memory | Findings, decisions, dead ends | Usually none | | Compaction | Consolidation, ranked by cost-to-rederive | Checkpoint and replay | | Cache economics | Measured from the transcript, attributed to a line | Rarely addressed | | Model routing | Measured from episode outcomes | Guessed from task size | | Cross-project | Fixes transfer by content hash | Per-project only | -| Clients | 15 | 3–6 typical | +| Clients | 16 | 3–6 typical | | Telemetry | None | Varies | --- @@ -450,7 +531,7 @@ but they differ in what they let a hook _do_, and that difference is the whole product. A client with a pre-execution veto can have the wasteful call refused; one without can only be told. Both are listed honestly below. -Ready-made configuration for all fifteen lives in +Ready-made configuration for all sixteen lives in [`integrations/`](./integrations), generated from one source and validated by `npm run verify:clients`. Full matrix: [`docs/CLIENT_SUPPORT.md`](./docs/CLIENT_SUPPORT.md). diff --git a/docs/media/live/agent-accounting-live.png b/docs/media/live/agent-accounting-live.png new file mode 100644 index 0000000000000000000000000000000000000000..94a68db7f41564bb87e7d99b0e9f55de3df2ef35 GIT binary patch literal 49758 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 literal 0 HcmV?d00001 diff --git a/docs/media/live/capture-health-live.png b/docs/media/live/capture-health-live.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6b3a73b52744694531279dfc3f6d9082691d2a GIT binary patch literal 85916 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%0D%lh$>#5~J%gsH=|u15 zH@tX6ngb{ol7l5)l{6aKf{54M((T2IWn|O8t5F5ulz<0(V=Z|GFn`9BHH2Vifk3Ch zu9$#%LVmoRZY_Tlb#)=Jz`Jus{`v&Ilq}18<=sEn;Os83!&9&klrALr_Lr54K}Gy} z;*EW&*};km>RR?5JMvzS>w2st^Om4fMyrPcm|s>%J)_-Zm3#-=_fYw#Vnt7TTX>q; zPpKZapv9R!`c=sc)b5d(1{m-jpnw8+g&zifTMfWLw^_=%d?|aw!d3sY^7)d07tFmq zgsFe1CVd)nRpXuJmtI;LcUDF@IToKASYdtfTy#$cD_H@ZfNV|6OCdh*tot5k!!h`; z$m7n|?@Iu7afOCXH0u>e){{a}F_?x2wv8 zzY|(QsSWs`E)fW9pj8h4UCu$@(6M`9&K0s-6)&f>#}4LeXIL5WgL^2N=MVGDd+hlU z>9@;q*!2A%pnGNU;xmXO`FdzBAFGO6oJ#Vco&j!}k(-|1heaPEr-X0hQdB>8oR6_Y#fsnTstCko_7@W3(n<=Ir>1TWVy$|btTfE_ z<+{<9rDBj{(VF)}ZX=*JU^LKsd_aT#8vhz7?9~KP(r8~&pM~F@?epB}e=2mybNfL) zdK|X1ye%q#wLbBFJS~j+bee1;aaQ*jiwX9SjzhURTtAVa z`k85$vzyoB(|||#!4iacTXG@%d0_Z4iaCpZS@?<}?6~nr>GUgR5zL#x30}@^NOrd^ zSR|0Q==E2xN6>@uv<)4I9$1B-nlADfuxi-3A=viOi$?)Xi0iAkLXh(Z4MftfI+ExRVEH%Z&lUwziv>zU>o?YT~x34vl8an;x? zjr4|=RcnikQk`KQ2GaDgDqyOr7?#5ne+_it6suIy&`r{Ae&(?$z>@5KR2M<8*)=}Z z^UUA0LPD*0paxAJEM5HknEW`r+!OmP

5Qi0=#(et9j0*Ze^P<}Ne|@}D?BtkVgg!UmJ`^ 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 a@1vRQol{Qe4c%S9XtGjDk|p9sfBheu3;%Wi literal 0 HcmV?d00001 diff --git a/docs/media/live/evidence-console-live.png b/docs/media/live/evidence-console-live.png new file mode 100644 index 0000000000000000000000000000000000000000..fe2c3794ad6e7ef8b7398342dbc66e1cc6bb65c4 GIT binary patch literal 722902 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�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

MqCtNKf6MuMq*~$twwoW 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

(j~Lwqml_B_f8C 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%0Dvn@X})KpKmh?RUc zJnF{be|7(!eQs6dWk5ZSMhbAvb)(kd#(dx;l22YJTPYqMDwy2$P0zqq{RQEMelWj? zz<&Htek9WpHpG)65BULaUZt9TA zd@6XT^o)D92)i-&%AIj|WwOK2za8 zc;8ViOc9>13%Ap_-q?W?N@pW%d{jaQ8jRF}*|@!=#eRAv?l3J|toBX1&lZmjQ=94N zv&dJx&s;G73o!>buDJ~bu^ZUu#wWDL3@rz?)_dW{3=5<2@}fYZ$6O*4AMF1e1j7OD zP4Mf>;EhY}Sh5GHAyWd*>{pF}fcO2Y{-@IsW{t&=>nAUvAn-N=nGSYxXs(mxOsP(E zjRKHDgj?IN$w|^pZBE-swHI$?q3W)WWiJ!MaKUZ6hv1kp9bLkZnoJ!B7G?Up)S1XV z23@eM)Rvf(l#sN_3^J{me6jy*7DLm!j=|E^7!4)h?elrOK<~m>>FgvSyDwTge6X1E5)^UfcV0B4awkJ<@KZuYat=Wv_4r*taa4 zI<61%_72fN{&t5Q({}_k^;d**XHULynS~o&kDE|Q(XKj>FZCw}wEC}^83MWecvQHW zF&z|(yQ{dakY8-xJ+R9%MiC_@`19YnK7OSF{5{ueGbDndy}5?Rn0H8U!9@P4t@ejzUI`RLA7qMUs>i;1Jl$tb{a2jZgl1Y4=UowYAsfeb__vhmi)joa!vZ7Iz);^ zWn))1mMBdDLM}uaX>UW)jV0ZZxu7V$&C(3&z0k2F;$Z-*O1qy!1!>OlRCj}!U)KMa zoZb=aM_BM}+cKqK^(=aC^y#+57O7Q?Mn4XbN;Q>mLV@Bc#L~bILuFGt_yi7<-fY^Q z6W3g>&)mpk?Bv;Nhb!N3<)@Upa{c4CFGfsSFs)jf{ZNxKU>r0u7@tb{)Lb~vsCsL% z$j)-o0@uUBqdLBFe{#k?rA(pf!n$r-ie+MgqVcCBGJoJv;sW|QfI!x_kA{mRN@=QvZGzArkg?IG)~+)Wj7;V4~-rB za&N?AvO23n*r$_+d9CFOQ2Cm43zHwoY0mS6uogdips~+Y(#J*B2+kdv;TD%Z*g=nT3vyuqr4;7ZM|{tK%G9nssklMc#?Wm@HfVHs zNf|Qc-GZy>{0pB~7fB#o%y4@u-ISm?Ddf} z`dTe|B;6^35AMM5n33MgPig`3O%?;}0-NCqW3M*YB-P@VLshhgKF#QOf(oEDiVxXq_eOn0OnRb7*N(yG=_rIp&Q;&&3@)b zV}rG399M7m?3=3yTQ{Av4z`iZ1Z}(`7mALoVw-Tu*4Wq$*^)1OEN@;-5t4{^$Cd_Y zrHLK7<;-2(Wb~MG*kOn3RNq(FPvx2wFMVsB^_+kZ(`j8&b2-8Pm~rjBdWptU5UDLMHuQ z_k}aF!Xlhmi5-mU>6!l*=1%db6>)DH&`?_tOZ=Q9;87VoJ{-XmYjFE0mA7Zn(5mc3 z-1%k?Z@W&H8E0v}35Sx}ot7ELFNEjo>_Y<1*W4(>U;QL0adQ{PB+4qt6`r{$6DRgl z#dpWSxOCCXVb6)!nx0hAuywcEe{Q#l3;t2Rws~iHmp;$m8c}j3hA{{}g*W_wCMbzp zn7d>J?`yjI(zkRXE2_$hn&rHhu=&q6AWi(&Ip^+4SgYpBSL&i5U4%LB)29BGrM}+7 z(jPHa>&8VfR#oV+3Q?!{Eqy_#zE9z*I5cW~#QSG)yGU05P@=S-O7TKtoJ@}I1+hQt z2jztTJY7^Gg0|vXEGONKyZ(*`;s9w3n94UqU(n|$@8aF_l7~RM!|o40Utv=aPfrt~ zH(yHxd;WU%DzFQ#xvP@=dfVp+JHE7;R0p&l^75b{R^WQ}Y7LV~^c!;&`ecoVH3eeJ zU6$9D-=e5D58z z`_F!V8TMDoA;D%sSa@v!qd)f-;L26Z{O!kuXP|pc|89WR9q1ouo`dV(N%DK(Rht`o z9*7Nsa-_ruSs-S6B`iV~{0h#0I1r$Y*SQwliS>IRGHh!-*gDfGK1gbwW9}yml}-fh zYxhfa!AG$#3{SJKl0Ez#xA!O?G<_m8m(AjWb$?V~9X7e!r(c*bA;*V0SigYWIxf7j z^-l*2jWpNyiTZQwdxUmyA1bl$&8HN#a|G_`@NTSE9=`hRCS3r{7U}=~7n#3W|NF|7 z+IDn9?=NsUpD}32UrYkT)xY@1{6mtpvzx9%5gJ+{z8y*918jm-m6Rc~4zbD=uh&xHVb_3>P#Ff#QiF?^XS&ga48{>t7E5CkfJh`t68U>Ja!CL7Q}XErS3ept z_t^ToZt?E!RD(D5N2BoM)}O(BlM1O9P5XPhiLKku@zxpi-2wvYLnN%KvaPr;4O@8| zQ)c;DFfZm3oV}uoxr8>UFBYHUnc3ROKd8hpgWnDl5OD2*31hU3=?#HSKweE7E{&cp z$~*_imH*iCcyXTsHW|VORQ-=obJSqOmQ(k@REJ6vgADR;_ODdMio0+|65_|e|SP%yuVx3j?w&=PKJgP`OIH9 zs`6jCOVCs(_@=|kP?>)Iw*L=$*#Gdg|0i+H`FqnHvPXx%_#sTGf*H5?BbO}i=1i>-O}b30Dvc&Yp=adY@t;Hk!}!{ z9499-L%A)c^DjGHr-7)1HD61*JSzS`a-MIW@=fbJ$=^!_IN*T_q_l1 zWkt#SYmDlJ54wn@*0V<<=|G&ziR*8N)bD)=oA{`$UMB4-{3=taJMHJ-#OfutnI#F) z4Ob5Q@5;&~N?AF5*teH8HeBz) zBa~Caqg=P~JQUz$qAC({d!Irw9`N}#9E;vSY&;%6TPA1LAv!ZMA>3{xW|CUkMfClOe-% zq=A1|HyO4q(MVz{e{_&sYn ziooB#Y6E}wpTCDvO5kT(WeF{=p)9VwyIt*^f#E;bsf|)UO{GiRC*w9|C7lw#q#lhS<2;H$&PuB5 ztuEPJyD9^A`aH%4H{Qh4jMlEJ(P{H2Q{;YcmjL055-zU1EU}?$`ov8Y439>G+=#b+ zMZb0o(mSSx>wZ~qYZRvTbp(95yQf1=h zg6jio}H&m+RHKRY;pA=UD8H>1SpZ6O4IZG}VO&1s>iD{`C}iy(&oG z$LcRkCNMY2E|gbZuxFt4^SY005V!tewDkhydt;ykxSX5!4v}x{FJH^le}(#mr;~4H z|NM&KDpi-yTw~%eAf#S28njJpFESr+qv#0wbx=Jcl^-0-;YopfqPLIJM$AhL^26BKKuPk+vehSVe^?4#l0D? zr{Tmq;gH5}v5j@oD1|paV^~mQMYba|MgoH~D1t3L2`K7P@d*P1Is$0t9OTBw+h(+C zrscPf5E-%ILqF)W?qvC~3|O~rzsQ5@%m(&t*%D@@mw+yxFT8%L*f?MF<;7aFRl8X2 z=nEH>3}j~FB#bge0pRkD*mgEA{c13Q$jXBuAArRU7c6V6rGa<`0eKPy~?*ai9FDotkO3( zZ^=<>pYtD$35?`W8nJ$4i|yHhsd(5fa0BvcLBNAKSDu|S;`>U@FvR#{ptw*glmj%G zLBgE6$h0RHrAd-YWZfY>07VA&rY$Z`3QwEKGs}=&DIzYGFdb}%&p>NAv)A4xyWsoX z7ZbeRp`kbWhOttpk+C)0=l0QRxNG9>ZN& z(_e%(Ios;&8Cs_&`qAsB*RT8f0m4UL3px*sU3!()$y?CS!rrtBn(TgHaE_naGlq&d zGOiIE)>xsYHH#?2)!#ArNWeMH<4X$cM&##?bq&osk?H5K&hURy%Xgae_*-S(4H(@| z>7t#W!UO*9|2zI9n>R2}h)(+o%ky7Gn6Kh5|A&yF|23-#Yegd_P+S%VW*_mPf|EW+ zq6vWd5d4XgXUGvsjSTl$y{Hs>ma&laP2F_(Ir{tNjt?|rSdEX+eutxeNoRtI$Mh$z zX+C1OF*uzrdh`=l$F(X`)thT?t6QlGH z-(uW0>TZJ(Tqd2WY}Hm7$Zt^Kir^sXG{j4ZOWky}(G5=HCJ#e+s$06r_gV30B5*qzU__b0nk0Xqri>(wmG3OoMM z#pp%Th(6X;W80R^9bS1tM8ft{7#f;0YC4DYd&jmazx(a63T*kN-m{g^=%$Z;+uC66 zLezd^P$#=dsrs^H)MI;X&)X8`&jd+58}GOcRnI&f6MpD@Q*y{!thCwoya)wRkI%^t zyWxrXMba+HE-D8ViM&L|lj5fGNt5!zV8JyJi8^+4_Aku(rd8-;~Gu zaB6PQjHya*SHXlLIIo4J6?!kdU~e4oU_j$@8vAUJpu_O)M|BP&)5rBw<4G{{?ce1u zNdoPmg;d9x8QGSDGx;(m-;1j?9q8r7%#yH$?(^+A?pfiT5g0$CW%kB4?ICdWg#4* zbX$c*CcKq+E^KPdCp?fm-Nzsp!MqAXI!ayi>X}LU7T>wUI(y)7D8x>wj@>T5C4kx0sl2k6$_VFAwIM*aBby71oO;`$o+1-*~%vOhO%@s-uJ0j zir+bCd3<;5PF@T7o>v6vi11;M@H2#lHr{9wUVpo<0OL7`4Hb+04dYG==aIz<> zLg85vNpjg~yXZ-d>BZy1*kcR74UUJR4+Xw%@ze=3kqV(_l!Gx?4U~H>AssGoILdUR`v>16=~6`BtID; zW1T7Zk*{7!ks=R*Z?T#@7&hLyPROpA%04o&Z)4GGavAB|a=yCFA-3g?v9xDer2TJC zOwHrpJo^kO-{638m!W$;5^leYWIAuX1}+RAYmQ*2+(QC=rTqiPI55f%(>2y4v?`1z zXT4t)Thoq)G7Z+su*96eoR4P>CLHMWrlYbPpG9s4!RfKket4m#4bH(=S=%1>LaCrD ztsk|NJnYWL*Y;T`Apk+@mXxV*6%I2koj1rS!n{+cw`Q#U{w0H)n|FMLUBZl$uOU&k z5oS^z&TM4gEDIahkf+ffH~RCDOMt4Z2WP^Nx@?3#zoTWjuWY(uZB+5xzLFv$q_+t? zQn{)}>R+(W;^(Plp?fehfy@DWro{}g$F7k-zf3oGoGN03NUX(U}Z6oWyyb(w`K|KuCZ5PRu=T?HA9; zb04$evRS-ULpx|52LY5{-nZBqGO}5h7|+!sBV~n=>qRGsXHPUK-|Ymf^J}fHtMqdB zwc|;S44ncbnm;5o#$gXZR`ZReE&o~%x^);GopUk+o$cb9ClrhQmeMx2PVOdM$RgtS zlw+*S&zo7X^AtwkzRBpJ*l4|4oPSHUL z8_MH8h;k+F1}|B9=FD1MfEv{l6W2`RO1=+;T_%@(&hB^FCBC{hR7)w`e3VvKqQAtA z@6^JjpmE%J!5W91eQqxvG;2WhY{8+XQ8%V?ZsWD5-jeZ$ZDouUDL#QkU~10c;;yx z`poS5>j@eivDDvSn2Bbl|FD3DUc1q`IM^uG^L1PO3eUn+kEzw{7Y^kk=T8HEWcVb0XV;US8H-P1U{mdPMuS=@go_ zpUT)E7)kB(_UxgJ&FB4R_jGpaQ}}1b38is~%7M&^y+Nk)r#OltDUW4ouW-a<`9#Xp zUdF)9^V^%$aUKwbi(&&#^ppSWu(F1^*-K2Hc~n)PoCxD`c`bJz8Ma|rr1$)XT> zIzJ8bGecPcey{5Xhb;8Yw(^rMPN(gU9h)VV?R0T1@SpJ7bR7SbV>-&2k8HInI-ghCptu9bb#W5n}K$#0B8v5s!X$y|pb}(@UKBbXo8~ z;ehQ(2etZv3H{tai842`Z;wr8dP+0HTWfW_IOCM8Awz|)DPAu>%w0MBThlgbR;}v} zo+j{B$ZP+*RIn3waa^HYHh?+qxbi`@<;V6NE&+_<$@w~!M&N7BZ&SOQd9Lf_7GsHHyl#B+cc3yiO>j>vg z6f!p70zR2rf&w$ZlZy@N$tit>!S*@KHEnx%?)A64S(?%fb)ocnzBS(|Q*Z(5?3}1W z`kuV`Xdj9l{>)KsyEw0HZ3IR;Ff&M_Jx_w?*a+GtJ0UH!uL|E)YWTu;SCF${I)f<0 z)8{Ak^0{NgXGim7Sa*6wn9A)#^3K=arrIqE=k8k31zkM< zx`lZ-{#|{lhU0p!;D-igEo;DrQ}N6vWN5ph7a~OIHy6vH=bJLwT&|caSlGLuJ{!uI zH~&e^nf`ps5c7iCy?4KHf<H`v>illBFM_~<8BPe@n>U3#8ZH+YKg8; z{oN*u3Vx(>Tj$Dz8=`r@W>}SPIH!Z2&mGX8&fhF^Of7jd=+UW6nN-uOxv;grOa8Vzq>mlnVt4a zA!GFWtYJOR-(;szTwHlcRC}j-S4CpxgsqO)s<>19;m0gsQKHIUL|Kfxh#@kUFydtIiuab3zb=d6c=9J(EI3}~9{{`Ju z1%X(RCu;u0BuVwEK4Bu@*}Wt@I~e875-1d`w>a1>j9<&dLmeD_BNb zOx##mp2ga}eqk?#msCjbhBJE!o>@tI(h!pw+{eWl?$Iok6f3eV&FJb%i`PRoT( z?t1na=#eX8<^qB0MF;|V_q@f&_A^S#0?{J{)d-7X-KsTW813#_?rNtu?seF&O2ck@ zWkf5tl9p4ZMJ!}wnyJs36~rX8$m51?8%UG zD-&rh2{JPYraHlUpVA&hd&!SYs#n4*FL`upPNo$YgzqZ}Qe>%YQpKd^dQ6QxI0-X1 z`w#vXg1aZhenWY|jQVTt*VGW97foB9o4tj1XaCHQ1H$#8|!fYMb&v? z&nen%l)G11TQJEAF`dMokl*W<&ZW+F#ibN^x%kd()krD3l0 z?D2RPFenJpKD^MGK~?YuJp5DLiB`@zhG(XJCnV6rf}{EF&3xKo#}#Qi!4-afmvfNr zI)CK9@B=TKXKr<8I!SoZV&*-4%bnX_Eqxv^6A^RWiD_X8HI}3RtX(5WK>S0hq8Jo| zE%E2o)TX!&vmFY}MZ8ll_3azRI`b!7*51BhOVUKJDmjlSm-h)sC~cE0R_3|M~Dwyzi0pj^sdwtx^CXs zD{3>%^oIJGxlha>>wVLvtpo}fMloT?XhFS4+dB?aMO8|ahwuc7(6!+Aq704E^cm3j z_Fm`ATKkfc>RBDl^4aCd`k5pWrdN2r2fjat>s21c_0B*ijfYWzx6RC`Ye3x3;q`zA zZrj!IheKnhN%qgK3df-oj}QOhGFk8+v<`|~rEduEUd(@w>x8fE2$$ojL%t2+;`&5y zX)_<9pbdsa(cg^<2m^G45{ar5%E12>2(s z>Y1Sj>Wg#j{w0+izJ95DRlh85-yydDR)~yG6bIy1XFDNo*{@5|b^B@Oj~9*`LZ&{_ zrBfTW(n3!YFQE(ZCC<&K>61?DTHZ&d61ZkCvml^0hhq8q{cP2eaSuH!%imHo$>M=W zTFgD-YR7`ldnz_8Qc_y=X1h>Auw(Jl0cVE_iF7Ry z1C?C0B2D|#5Um{wwrz)^a#R%`kYV=vzOe%UE?J(=gnA;$OE-fLq6Xru8MGDfi8CKO z`OU?>ooA5SdCT4}6Y5waKl`TSg-)Isv~pqS^DIU4f(v@;Fts$+LX*>_xe3#AVD`#r zUi9eY{%B;OPHJi<$lcsm_(9nZez;HObN6A#9}~3fki)5@fuV%t=fNT=hBVnCKBM%^ zAtB8vP`M+DOg7dvyb#9ddpv#UiCoOdBizgiqo37=yxUpH0=|1mMTc7!G&fC4y*qwH2MwJkw=Pr1cSq>un=E=jkUOYpH^(sqq zr!vC{pM@y2lhB)Xd}Bm={6}d;H6`a>Uj3Wc(AmY$we}k-%vv{_B%qbK6;;ZN%ueF?tK-QipX$k?^?g^6q7e*ow3uy6ayC->G)XWAiYtBVDaXabW2r1D;De5yWQcow_b$lt>7B1 zbQJn=*U1LzWz;>pTpKg!Cg}k!>wn`_^a``9*%?(KIC-NyZ`-+|a54|I&s~%@P;cam zO5U$gfu0Jm+)t?=p%biYNGlpV6}SZPdN_S=FigI!cG4H0x3`W*Uo0K&!#zkmg&vG3 zk7AnJg;B=r<$d7nK0%E=_Uqx%q!(k+)uO~v0K(03O?A}Qkk9i%hFr2|Zts}zoOBu+ z?QyMIk_~5kS!2e~x$@yxMty(8>}Z;D3(<=5TSw`6lKCbZmXhDhn($!1>)LF`brl2A zzltiHDb<%2yuY6&Rb4(xY3A_HoSi}94I{Y?Or&?8PmDs^Rb<+~sA1r<>DhVAQ60ph z4w9svZKFozbbZ{=l4&?DP13{BsL7zKYuAlW^6s4mF2ab2bo+W8JdLZfv@gD6FR8w$ zb?Gn!CDzmJ*4o6$80uUeDgH0@6o!-vMn0m=e*1UR>5U7`-%I!DTx09bKA`5boOT+U z90eVj@LDs1>0iN4%xxL5{fdTTB$}n)8${c*9(!-#7xl~S`cV6E5n5|r+I8eCwa1<^ z*LVrtjtwox?2)VqgRHp`C7YgtX9AfU;(_knj4EhB^WL_C89HjmAx5G^(2<|lUwdk$ ze{Gpe`<02p_Pm`lDyOGyi@drHT&Q&Yj$02Wf71rI;~k|& z*H4X~aZlH`I6hg8Z~B$V*)9 zq+clLUCA67w|bC6;Q0K6N^OhQpCnA$=D(6KVZdWb)wg!uhsGW`JJF}5L*F;5CqQpM z%RO`#XLWlv(_%sc^vqcDU!CJDN1Le=GgU4B<-T*ye|fpPqUIeJ|PTV2^+OI?`ERp{G04+a~(8 zeLoYwM5&NZpTm@~sD$9dx~%DyWf2jHMwjZDY5z`N^;DAXH9to$TS2>>oqiU9$8*HH zC%1QOIskeO}TCfAEMv}s zE!gm4C;rpKf{2+HG7*oyWUN~Jr`!fMP>n ztz&O);%-q^c(End(@T_rS9;rt$qONBTKMHuB-qfIsaf5*8?f>L5j0LND={WwBD^DT zFAY!8#GCE+S7!SPdG%_d!*p^d<`&Mbp3gaikZLllU`BiU-RBRgsZ!p3o}7?Zs`&>= za@JJN$C?#{cBxESw%i1(HoBaDnUD4?uQ5I8QU8XwiWg9_V+Slum zko+fZ^|E=>XF%h*Zz3gTE5*!eHLuDqhnC8BR_;fyz=c6*TCRwA&87d8dKfyW&CV$U zrF{iCizmGC@=Llim9>2JfCgNFkK|waGdw8p5NrbE&{&=aZ{g$p#1DOa&rn+16-q}B(L??R*6$od z5w0sDZQ#NKy@CEo{B?blbFa)Cn>5RAL&wJKl0a4u3S4Nn3rV&u4(cyHw<*8au_igy zBi9_K9e2=(39DF{x+75?qNJ@4EE62Bsecqw(sgpcd24I6`h#JPs!mmb?Sb*f-B3dh zXXALX3gsvXDuJav!Q&e(kN>TavXn4mp~q!ROOmMeb{nrP|2-EQ@3Gj(`+{3(g{8s~ z5pVw~FI!h$u5-<8WV>0DwLhaoWsf3HN@@L@JMH!^p(^|4J)@=h{j!>h$aK|dOV@ZK z+1wnFf{F&C9j=qRDnQ1Zjg}HB1_3w!ru8q7(C+{%Ot(WA5GdVLasx^R>E) zqICvLtl_a@r>FgSc@=xV8Dcc&FE)~t5)ap!H{5&!*Ykh7s1m_5 zAff42o@3ZaNB|j5`9R+&LB}dY*Jc>B!5v?suy?FFhR*y= z|5%{ud^M>lp1D^}W>=pTl~(Kv`Z~XEHdsI(*_;2wc00=t+$2w3fARQG^U+xmwwZ;t z<{?uPKRPPp+H^Vs^<=`BnJG@KBPri^z}Sd0{-bY0Iz`RfsY9EdIGSM?o0Y{r5mYY` zcS>_)TFlGZ=~0Au82PF^?q~m54Qs8nb#?S5kIv3?V~52mR;t(MDWg{`WW?l44p?8U zN`<2LQ7O}%ff#}9mYh!7QstUqeE7>WI`Ye|?z)aR>uwVkD@R+ySQ%<|adEz4PJgCv zA8wIsw2&FryJpd=b36rU-d1vY%LlDKP@}EMn}x-Ty-O9dH0ytk2dt@AXo{Y%7Ispc ztwz7MRIl+KP@9Gah?^D}Zilml+*{C+Rl&7!2BA?vce~Se)vV0e=g@GTp5>&O&$!udi`m6 zNbqbxISZEo#w6o5+6O_GZvFb$>;KXrY1ag=jSos*UT#PN5B*@5r)5B_*4l(M+i#F1 zUUlWLUH>!->$VKX3iSU4KxR?je2Kv08}Qqg2mITpWOaxU%uJJx7`+L$LCE8PMYtR| z76pS{)C~^faJ$a9j6aw5bLnt-!xWhT$25I{qgwRcf%)bE{$uh@2Y#t#3VMD^#6a}X zz7Bd}LzgnkZ|nG9*i+INIC{1WoUwqMEWvG5fU$M%KBkL*E`UJknBiZ;ko_lJ@n37v z{#P^n-_LFQ9?^e&yZ*m>vbll3V0h$<9A^h6jh-TD8YQ_%E$M?tC`i%OfMvU&Q_{}e z0v=ZdlnQ~#4Y>hb6PyfO0mkTtMli7RnL3RqXtLnSIj=u}odnNL-3v zN>xIvto$nPZxLj1B6L`mpX-!u*WUp~X-n+|!*PdOcOT<;r%g_y@G=PQPztItd}Tsy zF{Ql|Uigs5yrg<`w(QT6jcu1h7kkaMP>8YD@y~c}_g7!z-p*->Sh>DIYwFk3uFrI1 zU;5DLCnb1*M2lrIgGgNuK)zrC^f~$!+neAcv@h};Zvf?qnnJbthmhD$qa3CdWiC3GD@nEXPF#o{5*!-ZhgLW z-$A8csAIvpM#f6p{9M|!gy(FG(gZW!-MJiHCh6nSnP^hc*!hz}9GGuIHJ{b(G@c_i zV#MD7ADnBw{H1%uKm81$vOk3mEgDHr&pJ_ZEAPwc1GIKPxPs*Jndn_fiTtYj?ecyk zy74RT5oc|*h^s4^pRS54{a(9L4{a9p!4rAZxH&^QXIQgBW=iQeZuKQNut1AZZLvs0 zUvK<$Q2eAv{8D>216I4%ff81I! zE>|L#3XvgC=qQ(O0ylF%Bbfjxfdapr4|B{8Kja_iLoTV~=Hw5Td~Uq{6;gu272 zKJ6-SuoQ~??zn+WJ(|>=r73UKU`T{wM|9uK#>Wly9Z)8(JW%bQaOe5Fnlv(x*y5P- z50vK15=2q*!5hT#LZqJ`Rt>wpoXe~bgv8FCxWE%JtDe)}cj)T3hbVo3x&{HZeMSd& zr%Z%<>>{`T*J}W&mK3*suee;lIAQh|6@M!-2r6aH*AbiD2Q=}6uz3CEpnQ1q<7N75 z(kByV$hlJvovqwq&)Mfjs7*t@3Y{XayCXiSf}0Y*5^8z3CoAqM14o&0{SqE>&~RAQ zLz)Kf4mthmjKe;e`~EVEV#hNDLPp&1v=!^}5fWM;RddCN4iFf-tY`N2Gjlx2_7q{7 z1Nz&un`KEiWkoym}T$ES8qY-uj){%;es z_{BRMA?oE}^_rzV;h|Kz>bH7Nl*JZwchA4738Jz{n0{pzCc5E50KebZiBO@+Pm<}g?bx5 zrajx2A&AtAwdu7yc1eX71~yE-QMHd*-rjM0Auhm-D%dU86iRr^Xqx6(9p$2T9!1jb$Q*LaB>dtTzTfqHE&-l-ftQ#Z8nn|W0fNN`%#ygHf0#;^eE)mxml;4 z8KszZ%SXi#8ddEGxEn(n#)D@j`S@Cu2=lmcJc`e%u-iwysjX9z?ty$FWEK)fF5e=H z1L1hi0_=-Ws|IGt8NTPn+YnXYdFMf3Dd_rThYW!x$?f z>6Iz2r)pC(cX%%LPb;&$$gHg&IJFiI)XC!|(i!9ex?exz^{l|7FYWUXaP`T;v$fEj zywJeqLxIl?X$ZoncRvvly;_}iTx-*+Z)!^9PQ0m%^RLeNy;@v?8Wo7jlU@jYj8j65 z=Le))$+3&2-#?wbNUL(ij=RU_=V~R+)XFF|zAJ69*yT2^XdYnd(~RV)hE0$7xcQ%9 zAF=`brpN5;B!%Jnm>#{YR#W{Sk)-~44#;o3pSB-=kXiN;x zIRSsqP4wS17wu&#mh>dA_^TH#JNNwtr-M7sjOkeXCI{ zMQRFL#a`>fk;&rMGjbbBy>|i_Q2mrvUh74wQS*#s8=Z#CfexaOqT#l^!5usWO!|`EZ?ZcO*{tfy4Ys#FS_ag4vAN@pSyWF6-ijz`Qrk&SO2K z4Oxut@;s4$4fgxHi#a`#<>!=3pUr%xO@0!Vqo=~?&v{YHHtGj|ME z44}19scB6MQ~lD=K;Eq(pgZUJcvh>k_|-t)AGwfu9h&%eJ|DHepEaeKEhOf*;C7}k zseD7RZnJDoprxKorT|vs&l;1 zoOKx}w{Sty_~_+UZ0>n?IYRZVyuNG>p1-T^m2-tzpCSBdapv#Yn{vE*hSSnsv2Qli zt%QG@le~Ff^Ayj6u77(LG%_k18rmzGI=e@lOiuf4Jx8G`cjIMoXtT#-va{dL*bSdJ z6z<}C#Zr$7ldPvK+6wh^d7WySD?3i(Ti;k7$mJcU@d$O?W9O%DlT=D`lu4f` z))o20*S5?w`>VFzU|H`I6Ep7}M#wYVAQPCrGv8cGe62&!fZv1XK`&PKWCK;cliVj) z&pNq4^IC!8vcqX|I7Z?mOd+E_Vlz!s)lv12Mzr8zC(K;qjM8fgT1QlA_Xg@6M0)J&Hmgk z-Px2X^F(CZfu5wJtwc%A+P4{AZomLN(NdnAihsc4n9D$%vrA&_-*EK3+p+u^#V6|p zcI0t@7IQ`155~Ep3_?9aEu$35YOS=m_PDcAJez6N)@nu-@Y$rs%<7H&|?7}?pX{-2<0 z@x5;xK2xz>I&ibbSSv2rFARBg7J}%{$v2-R&cc?V1#VQ1+zY#NQCa)HozC~Ie}8}v zLn%*z=wB4S&CUB9LT!ndAa_2#Nw_DHEvx=dxE4xFxA$l7i^~;%_-gzAYn<{wji72X zZh%rpH;ibxRyF+aX{hL=GDt@Gm}ffftOy+eE5uM~W|j$Ibw{@V3E(n>N^e4J1_fnm zuKGKfOp;kf?0a?@wSk)Ef~UV{&4B0LQ7GKWQ6j~bl_d*ZGfbpdo@S$5nS?$UIid#p z#22F{v*`oUkGZ3S?8c^fayf8o-TD_bk|qx`d@o`~n1dYp;B+W9pXj7@C!XES>zo}I zJV5NQ+k!)QV6_BFu6~6c@VQ>~Y_`VG5Oy440)QPc(UV5SKb}b@xw>)hH#V8~aDeVM zbN)L;5}0%TIfjOHvKVj_`s5cNp8d!+KHY!*D92WD@nkym(JM^$ zk+!vCtr8;EZYT4?kuj{=U?Jr5VV!$NWWyKTg=LW3zSpCZKtQ6g&#UGR)(dJ@?Rc`0 zs1!Q$US?pb|Ap6KbRm!BE7@CuuHQF+w{t!^_%&a69j^}7t!1r}3YI@PR;I_E&c%fP z2)q&aW_tc@&X*K*Lp!nNbLFRONaUagQ(A4Gke!hsZuB`)UbPb#kVXuAF`E)@#mshG zV7ai|Y`+G9u*L+`_ghczfl*nw^?V@8&FMf;j5{@p3*G~#(+XSbC`hhLK7>(Lgt@G| znzLr^6ao-gbW=t4g|y?&oRtEYDtM+#dT3AAT(_KafH?KJhTvRH&(29~g4itBCcfwwnyiox#?@lUve0WnoU5J2sM;PWJ**#SEP49ZsB=#M zE6HPA`cNCVuak)jR@+a=O5FU;fj=&aecCe~_AoJn6IsHpXa_#r6=?3q^eE1R!6f8d zC40Y4%s4B);v48?g~?-gfTMR4+jXLnvRr@3y{uk!i1D}53%Jb3ot914RJs3Y$-@0fSNHW_YA)sNTOECH;nbOQfr}rcUttiz1LQ~ zy1)&XNkwj|Ld?X-Tnw>x*ZiSAE&=uC<@1YB+yHsEfAZ@jrrgv3S*tQwNurp`(X;@6 zeM*LAfrtsy`6(gxNqmNroR5h5?Vj$?HX$P~TasZH^a{(=S$56n+(t@Uhz@2oH2!ahy{79C;7I*wv84oOL=N&l>TMGQ zqE9;jlkF3r9s!Fw5-i8w2dbp~OePMpHY>bf{ywFd@BpBO@k|K4H?-eBD_$*wVHZm8 zQk64-Lmj7o)=25O`lysQLsp->+B9OhKgkeIHq;(EC!-a3$V3^g_G=%)m__VCB<5BFvtn=*{~+*5YHQ*{{kaezA{dK`g}r^sSAdi{Wfv@@VcDLG(eswNnC zSuuuXrD5bsOuk+&8$A1CGC1H8x#N=?L1G;@*4Y9vfxY8A?;mlK>{Wb9p9Vr#;k=ET zpxgt)%&fStQ|f4FL3To4t*G0lpwBH!#Z%eihOra^#1B@ zhniruC8jgpz-=+T9WnCxb<_?Fa8?d5YISsfwOBT^1aE2CU-ZZHH#4TBcsQglik_l>Z~@3NMJvBHg9J-|7h8$b4S`kX zbtP7X&Z<>Ov2!5M5y`WxBf6)&1`A4??*XX9qn@|+<*?*xOW1aqjQ0$#syMYl%28c| zzgAx47qfErSVg$|Sr8^jf_Q6MSaK$QJch?Etek5fQI|Y+SeaHBi|OsZmh$yzB|RV< zw+nAO)vcqy+~-K~GN+v@pJTOl61u~j{Aw>+c>`3Q88!i7gFZNbB)zDxJC+mJYQQCi z`KiXV1Tqkn@;0TL;)EFV^y;LGFqrShfm zD*YeZ6zjt$DKgZ&aG~D`Xz>@E(k*j3p3}KH;QzvseTsU9R4i;L-4a=y5isZ6fV4oaUJ!m^Wa}!PyW%!`Jeih|7B(7 zzj?AICd^7Owdq9*2k_FreII11dsvq&`LAnRJh6f&Lv< zfKMBMLyhP}z{NN#?2R(;VlE=9_05ytWBU2_XdiZY4#%DeowQRoU##gYXJOYWm|(^? z(V+7+eb9y%7$*e7)=&e^MgBwv1fkO~+`3Q}3ayMo@?>Fp^EuB@a~m9>nCR00>^Ue4 zE#|W%8+r6+njiUc)}pw4w!GL)y+5F5VR=CRCHyF`Jw-U|4*c%#iy+X5g`<&^G`sXa z(k`*BP-iU4xf@^WdHk^Vxqe}ChZDH=a+Oj4uNpI=G61EGwL#3*5?Wqi$tr}@1R z>dzMxVIh9}n|@nvJOOm-M}G!K|ZlkQ${KAQS*C@whf|HKZu%a`ESy{_J(3rZls-Wa6@zu1cUOIAAor? z%l1XinHQz2{ij5uVhxCZOG@8xOe6ut@fI0o6hL7(7+|sTM=roS*JdN z6^d+jPW(B{R5EofGp77HYz3a(luaMX7oY<$z&tHk=i9fEM>Aa)Fm~*MolfV&a5t)B zjW&7_?8-RrQ@(wIv$=fOwQlEMY^_TTz&O^Oi6;4=$nU;zS?lokB<}^XPit zV>hWKI5ZjNcch!@i~}Dkog8;^UT3~uJ)&&1ZkUv^{R#-{5jd}7;|=P?^*z}|PV!w3 zpF12`oiMCDW9!Zbq~p5vcVL&}D?E@OUX4MnjUIKY5*2#i^+qcBQv+tHBT0`}S|B=% z%6Yx_<%$yHukPlWPdb0ieN+dRBd3Mb!(PnuNsQt8@(9q9HF6;7wG|kyn;NU51vT%Y z&Wv%r4w!##hy-9(vucd?FVc)HS69mXCvfQgEt2YsbAV9_2uEFf8?~~(3A$Jue$ZX% zar5WEFme*fK3VZowaORMuoF|eCYGT=^nl9iSoyg#n*0Yu$4z%0`b4=t{cOvuHfbn=8Y(&%xA=cW>8s^wT>JsSW%1bhG8 zxyJtkp*c7n1Idcf`$m2@?IGNMt&P61r~Q&9J0yR10q_)OFK8rtmtkTMoq{E^;Ms`# zE5Tg;{37728{Z*pviT_-{o-8c5(Yb9ZgyVPF96>3V3=Y4L3~j?(>p;`^Fs<_8E=Ne zoFv;Q{JQq4^CL~k+~UHNdY8T_imHSFfQ1+5oNw$v2eCo4k1p1t$-j-eXgzpkk;nmO zrj95#!;t|{Cuv}nMO&A;)P0WW0o0x55XC%6<}%PyVp;4F5^<@VZ(Jg)0c0E2kKWlz z!3OUORQtyOrQ}fnw$~iZhw7`kg7>60A0RhY;PE(}ysh@mPvCE;p5zk;LaL9U^T!4Y z5}>ckiSNCIZPIc5=4Gyws6)WlM2X84q+B)~wuJ*nhoigWO@OfKp01c;pQ%vv^Y zcg6sL7Xe4=fR5v!v#IJt0)p$yNtlBCWt-34xz9h#K-JtQ({989+sR(3g8FMmtbYN%{4GWW#Ad-5c)-Uv zU)8SW73XG9y7RA2+|tG+(b^i1ZE*4W0@ndw1LT+k7%xWty^2EZJZsu`Cq|zhjC9*m z$(MG+g9V!PR{Oq5%ehwp?zV)uN>*W))Fl}a+}faJ0z~%LL@6qg`K^0?iCG(L=u4CX z9TDmxeE;ZrD8Pq*-8>newaZ2qWL6@|Z*8X7vcr%-*Ll?)vcG^|O&D7g&O5U^+qFFvht}Yu!c#F?bMX1Q-t(X|MVm>m8)=o#4!U>D( z{Z^z(6Z^#aLWUbI`rI>j0h&0~C4*=V1Qn+*rzGk`-xVHcsGNU`l3S=A6+XY!T#VbX3bQ=%hl z1w4A5Su*wfh-|QvxI_DFuo`SdOhE9+!Vh(<{UqQU?@zanqmKwO7pP4ymk01_fA}s_ zceg5t4v4Q2+-A8$kGETQ@S_J11u{I77^{-?w7TmLz@3k=6gd*rVNT&U2)ll)vgJVsO(d1=yP zN-pNn5m7$QR!ef6s10sVFDQO*m^(XP3$e7vatq}|cAF3pjt6IS6v7e-5ER>XQ*jc{ zc#F59s}Jv0jsA>Dgpn-4GYK8|rh@g*XBg*#R<|+Tt9~}!rgfOA4!l$~`dA}Q?(?*S zFH0qm(M@7gyks&<(!cI6KTTdG--(5K#y+vETW4|^tkD@R(d6%4zm!Uflgg0P5#5lh z2mZnJO8zB3r1lrUw?9H890*n!#2hpAp{N6(ZeJ!TnoFsh1Jrh2wXTIJv9$bg%{;%L ze-5IC3P^mInn)!#Y^~M2KJXI7VDF=3w&D>7{86;WRy%8?rq)C!x2;60kYdHRV3mGV zMR|D~`^wA`{3+k`(0S=5cPH8i&Yv>g2_Irug%$`@n?hGDqMI%L78ZMkaS_aiM3{jf?3+>&8?C=zpMc2T4zaKZ zS70BBU(=qE=42C`KI%^7#xgN<$UVQ;t@0_ykp0smHpPJ-#pYnqD4Ak#5V9=;*uA>J z&a%gD80TA6TrYag9oXl{WAhy$X3K1#A>CuLe9S%99;5TpJm*I@yME9olR4rvDyIFA zg1&Z!GGtHLWiF+@f#U;>=<@4;vi8_JgNZcMXQ|;?w9&^wVY{yme@PiWq74=}?WM|p zd2!-zCFPtd?3O05X9!`bA7jf(5PWv$I#Q7lJ`~4vO8RaH5~^|`TCr32*4V`ijVz;Gd7*SSS);77d%os|1$BrSoNh3U8XwlusVG2_ zm3h^jkZAH4uBUebl>xsM#T>E$cJ7iV$bs}Bb$JE$O_4lmBq!gPAW>a^B03BTl_A-w zvS?175@ngs$lt0(D0z^ImP~|Ep&<`-B~h0{mGJwetR~Kw#q6y zn$M}|*t|;g8kyd)vZT#!#oUEr?_C^mq`3UlKXN7fr2V=qNnhWKOLmMURD*1kMbDyu zm?UvSN=tD>Nw_S8(>Hw3v^M7QzTPyW?$A`Mb9sCVgAQU@?RF|vyC>clFkGUT=P|A` zynj=evuaD+hsK}3aL=T2QhmD{vs~np=4gyc8`WKjDaX~bKJKuQdIm2R97}ZtFpD+C zC~sGL>$yjV-gIPNV-mpki&?H|-zkq@4EpimM5|- zr){iOXCVFg%=nIBq$X^rh0a5?L5cNq!hOZGf8zpnZ>=C_k4E!PYZ)7YE(ZQ)FzXd# zOX?d~yLqoVJ51+55HOyZ+$>|I>3?p{qmtsc#>y&opvH|ZT~F+;VShwoI#riv9I z^n1eBKlup}dnjURC7~D*zIpGazU1|ms7IWi`@}Yl9oaHTD-{N1 z`JVS_YI}e4x3()!{VWdVxq`$Vmw|u-sH2*z90?z;7j2+PG1pD(ADf3 ztUz`!-K6F3?wPzam#*&a!2{-V>-zF!Q^qIvD&H=;Oe-$xe^u=1ra+pe<*j}Subu09 zN;|eb_%I*3*zhUi_Q*H?!@psMacMtm*+l2`hn~Ch`%y}npSJPIMpu^_p3dm(LG#C- z(VvA~f8vx;-6rwz@|LTR)Um`{gy3e&NkKaEl1$+uf3`lQ77OxF%ekRFoSAM%(E9VY zm=0=X3M$X~*q@-URgiwMG&T&$317gLQejsMiE!xzYH^eXaP$#g&}yZqEH#Y4bR%guz#30$HVc|N2u z?cDr=72TEsKGy80PQFmd{l#+QfRc|k58~+1C1{Y#w!1jes5<(!aXSLxL`z5-h!4Kf z3*`B1?DO<#g<0;{C37>!cZ3?1QJOMK(;Y&eBO8Zz)7eyHAw8K^BW~T_`gI!afdvD^ zwUuu%jK*K@0T4fjxn+==F--~o;Jp#S_Kq!4kyrigM!*0$M6ap;=Y@6-*R2@ACw-ka z9o<3{*`0hpExi*a>LA@#G+d+M3S3qYu%10qEK;HgtPLK%uBMcJk`_hgX5-ph#&WMU za6!0odQ~9|Qm*8Y5^-3~%b2Xaj9+Utf%U2T@Ovm`5u5MgL)3PJ7v3_jZj!UO>!bx|R5LdQ8@udA>baWA1nI&~+s*x<% zlt?hRdz(D#Xt}f@T~+lFseG9Z<3W~A%{rb*ADUxoDef9j9>!o|d`7s~~Sw83UV$zw>ZFRXO zwHh%Ue&z2m<8k_tDqn2?7wbth$-O|#q(cP>A*xHo6>UYUcgdAFDK zo?Mo(Rmt5CKLEjE6BcXfq-f_{&YbM->{e7toEwcovT<@mjR_T3TAcFL5*bM}(Z8P! z&NtvVQ~sKLB;MV3$@wl^f7aMc`fIDwZTb(IQ&X{yWoaPQbd$b0v*=f^`j(FY%@*2Jc^Yd^-_PCfsHn7)irh!B-P1C zg=}Av@BKO!QMZaN4?W9v-SOaNj_e3}ojkn!PU5@c>PByP5rr!LAwrHYKcDC|`Wl!t z@5CzE_>R`$3;+xfQ+U$Vk3)!Oh@i@?9|$qRQ}i>py5mJ2npfRY-^-Xg5bvIVwBIJA zCE>MekK5+!VO^5XiVSJfTCZ+`j3}kW(AN1~URXCMs)v%qc$O}9OUqL=0L0xg7|fFE zyv^24vR}W?FzQZd#J_D4f%^BGr8~d$|4o3mt*}0Go#_{*QR*hmXwn4H{QtO` zeE;l8{=bGXo>M*n;}Pxu*5!Rhb%FVy+HD$Zl*#i$ba0bN^AVN!NFwj)BGrT&cfLz|`a#rXk{+7PI z;TL!^zEvsFZ)x379{o2wx8)QO@i8-~f+01P=To#EnO6#UN(4P0>X8S+cLi4IC?0Hq zF4I|0SqCm|K6)v33%x18v(5yOV=()og`aVMe| z>G>JPUe|VH?}l7s)?Vi`4-|RK>fo!wDW8;QC}d=6@9~)+gXex>qgqMWbh() zEb%3f7>9yquHTqMTFav`Tm0mB2WtDi7l;{>RaE<(?H^b6dVMU9LdxLRqy?T4rSdN! z369I_rnM3D1s^-)ss=M?WekMaN2lDZ7fAkL*FV?Yerjgb6u_pM&<# znOfcWR$8vw>%DqFc;%Ir_6@TrSUI?KtMDYX)c;oHb^7U&Dr|d;)?7HE_qJ zSw?h!WOa?a50WMclgUGC|L%H5h0KxLkS^QryM=KN`t~u?9GO}=Co_KKxn@w@GdB;X znXvEn7l3-G)QhR_NMtjGj|7Wo4@^zxTLKd#hJ(B!)sD$wD{V6$W+7)Epu^=%A{Or9 zlblJ<4NpxD?qA|%ohZgX+qKJm`>nfN?SG|)8z>uj{FsHDG_w52_O@TG*$Qh^CCRV< z@MAL^lvRi!!ZwBSp0{n5;#?=~+KVW?%}?RnPY==&lD*61z$fdB{>oZ)OdPqzfPTPM(w3FRQar0 z`*NJR8_u(}mpmHs^veUWl|7B=y!v2bb$ok%u1cFTN^&Db?VZS)70KHf zx92v`<=W!~x7|Gx)p%#`cbxuj%)Mn;Ti?3wU8g_`En2)qi@RGX?(SAxg9n$kNO5-v zP_(!coZ>D)f(CbYmlNpvuf6u#=iU3P_d2rkiJ634nIoAazi~hJcy91Yj&9~PbN3LS z@s|^wsDH_8;mq&gi`>)W%(Q&0kWMa(w&H9+|6;eT$sD(S|12vZX+o86b#BHt8;MpK z{s{wp6D)2+_fV&lqVCwzMWW1h5uVSVgKVx2yHWDxJbhmJP^Ug#5JAC`S|xBOk{M8{ z=UdYvMQ_Dt^%d=L$|iTKq`GZxkq|kRKQ+up2lXM8F%TRIdGk2!hS)h zY<;EVoQ%(HfgH5-q3Dc)yQ@Rk;d#jGB9tcD7k0;rLff$E{|K>};)#*7c9=3RX;EuF zM(C4_Uk3>McznTXWf+W^dlHnjlA>WNC{gqU)xR~n0wcYGXp#@VG+w4hYs zyBWTH5a$AgO!p36O;tmi3Ds*h%CE)YlMEnB1CqCA;{3`s?oM`Qv)N|yIw!)8;MY%o z2uyy{9T?5P=Y%DY7baReNCct)=z{2@K7^fHzH8v{>CdYdQwsWNIFWmws+C-ga&Vs`yJ*;Z6_ zug3kpd8c2$Z5jx8U+PL~;yZmev}gQuWOAcv1_OI){);@Z(;A_mDENYo9{Q28y1a{b zQov2zLT2Q^2*HZ$`(bJ0a6R{;okYeoe|N*WhD5v;T@=Hk78t@x-;B}@5lzCEl$PU_ z-aBTz5VAHm{t3i%V|vpht$MMcFKI&bOiriTT{GUhWkyLD`}L5FkB-H|1OCHHRsR{7 zhCq8wP3_dYvL+s-e{<*t);LcaLCSDyGP`0>LPN{8%!!ZpSS;E-#ZM`?np3e8I8({! z4$PAzEyWzv#1}{yknr#T`Mjvx3Fdl!ywfv!>8uD&-Hvq4gQ}o)YnFOsN2WRJk}LdW!QA=YARt z89#YsHl1r@G=ZGZ`K!#NzJ$6u(+>{zvd__t^%gz!HLR4HN=hNh8H3PQ4njqvT3_{_ zXP+msNcRpq_}rP-Y)aPZPRj13y?)xW|NS8P#w3FENt#-P2AC#87%s*>8nm<_1m)R$ zglDQ(M%}kS{#@wUZxx66mlp7YjU)6I>OGZ&mc_mNs!(%7O_;<5Z`$+(W_N$DP3GUz z#3TRy*Wte^W&W#s>i(OiM%)j`qcoekH|O_}yjNd3>!MN24^!_5oV{3F z(Mf!Ije@nE+lS^%uFZOBz&aCQe`OI8Vb*ZI_LDe-q1^3Q3Z7p9PxG5>$3uzd{rHY- zN0dJ4vpC)BNo1nmr*f)9l<=S~kizSMn=%B}X;0npG)p+Ts@XS-Utb!y-lkFr9bc)b zO$LlwAn9T^YV+p+cbukuQ}BlI_euLagYkCj42h*4hUE)F59)P2DsOg)=#=ydw_>a7 z^NEl61eX~C5uMrO9UXwqMLWM+Qx1v*U^g-KMSy$ZEs8}8{mzf|yxfgNotO4^Wr8*> z`G#}|vuTtbI@?J+FH)yW=|TUDm_(GRU&xei!cfpd~` z{nWoFUw5U@PZqDvW_h_5;Og6SR5x;&9SqQqk=|wgR$6Q5L@fyLrM3T5euBwuE{r5% zMZ}=3R{z_ii9RQcQ_-?)C5l@6IcB9HZo51!rf_I9sfikNMH~0uWL%DaV_)w+p`U#w z@{)Vl-NHOMNSM@{&D)rqck5l4U+Y^zvKpKiY#c^Z%QHxM&M}Kvcxd`Hk!HzVES$?0 zRm4VhVoRCzTN<;8hqR6uSG@2HhPBFfkqb3wdNL;cjIs>E6D;*nvN$L>c(jr&YU$8~ z=`!2#L>35HLWI7CK5nIe-n$`LT;`mFd*QTm<-3MSX{3;3jw0UiK8f>)j|U~*>Zzz$ zWL5$*j=?nk*M^Qb#)F{}LD_5fZ-_}ei?F1{@B)f>HB_G{k#aflVPc`rOQ3>n@jm&VO1y!XY(HCx1p)Tq(^`n|NDE08^oH0zRdmhH%(^2MUd2dK3G7v=zHrL1 z7VbrHTVAmOf@)qfB7b0_P1ibFu{w>x2mQKvio@p__LO;yV}T)J<&0%BHGqrbe&47U zLGRYMrAYDLVRCPmjTz_&?|}9y$+CSZU$Kmla6hlu7pt*=_uWUoZHsPVc~Ex0_A1-j zNem#q3{?8}Jp4k$FgGZ_p?#2W<;YgIlB+_W42O}UeV<#=ewMtF?KN0GA|p!oQJ{7r zXJpTUnzV^$p+d!HItUN>VpS>aD)iuouXZ>fd6}Ivkj+*60^oO8WMNb>0pXZLctGR; zGLDfo`C1iyP|qaZ6Lofbvj{Uiw30okPYNH93{B4AaxkfbCQl_i!bHfDR`~ie;wk4E zF>aLL?(h~+U3{N_QECSlHS(IiKc@e&^KP{uKOMfo)E{nUcAFV=2<)X~w|F^H?E#P2 zxb#glg=cI~fxc9=25)h9$)-Z}L$}e2W&&yVGSz6f<4A-i{D>8rr%kGv#HJrRjHQ#6 zl#5)OPeEx?v;q`ptu{^HCl8xSKRZoS%PAG?SaV+6NVLSEz7^20Y$GA9cnPLY-7Y~| z5%vF6eTXwJiH&_v%x9S-Zd^9XM&y2+=15`D3|YSW6vpztF|XqCzipe0ag0S5mgvxy z7sVz=Znp^4!F%_*5nrhnqJUnwS&ynm6_VE6t&S%1t#J$Ne#GMDn$}XYH$n78Z>Mi0 zqgrlRwY4fMIPBIs;~wPjXvd>4V&@ct4>MD-#WeWOFe6@+U3h{6wtp!mSsvuJYVhfqktOb!tU~?1_-n>Bw=-7Nq)u@x?_eT=8 zI(t+obY3Eg|HyW$f^7F~pKLg^p2GKu`*)RS-wj1hNz)qIkEB_FMBTcT%bbx3UCr4M z(Pe<#Y-Gf33Jq4oVkTx6S3p)MaRaISxY-oOP~gEV+e%cW@cGt9KpJVAN)Uwdw2||5 zW(h$;A8k|jFbG5R)2W!znh$pf8DDs=;S235pLctu>N*L7i!HW7hFfDyTjo8;@PZ4(6nOtYj#YXeb|qvby!@A%9Z zN^1a{yV|NkqIMGT4ePXfsg7!^Jc0;9q8i{6N*wcv>D~(VVzRnaO{O%?g>i#8oO%QM zAkis^Rvx)&U*N3;s^X^0e*-yIoQg*H%AfI?FJjPSw`D1jH}m*{&NwBPsphm>$n8v@ zF51UPbVjbknNR2*Z%*XD#z!~CjpGTdXkpZN(H>zwP_+^TjbeFWi=2Uw9L=%8jz_dQ zv>ZFPsJtRCn87FdIXM!8vNHRPH8QguXLq=$UFQD&V1^L_kaez!sIFC~t4{SBg?O}qxq5Lw-k zo~2t*>etb9(CT9T?l1W=gfI}r%8E_>eshRMcP76Ea>y~fK(UW;roBn8{Gi7#)s`!z~+BX2g^WUqIq*}2Dj^*$E+5*;iR zZHM-iE1O>+eQ^p4?Mog+!?ep?EiC~|ZZ$d$@6C30h+m9XF48(qh;qkoc3V9%V)r+; znzl#t+BKl6#_68sA5-*CQzOO}`!r01g&2jxX9O5h9Exdy(dYL|X$B_5O@N)o)^pGo z=ec*%`i~3C;2W#hrot)iY;hx5ZV*prK2#Y4T1a?e{rY+6-18{np56)>SB=5p|BbPd z?B#A;5w4lb{1dy>BT~0mR4-Y|9l;gomX^f35X91+41@z$xn81T9ov|6#8pZu z-CEKPR~Jc#$7RzyZ9lXCf;8XoN>R{WA{}ut85Ijs4-l@9@2>H46^P~fJx$9ew>K>l zEmdp&lJQuikV8RR}#T^}@=z)u5zGiS5{Id=~?aG=&)@Ih(#uF%#sWm%_8GyqfI@f|HI?>Z#17y z(^AdsNssmpz9Y;ChgJg)TN6K!X5 zmL&JLk3|2=-8mng|F1hV=plFTC5iCEe?R*4Q*Hk2J~ZafAz8Yh$9>?={VnbPMHh~< z`X~GkeL2rIW_>gCZTPAdosQ_)RvQw0@k+N->&|Jf#A`+Co|%N8ZQsK@w6CDg z+8*!VOM;55x0;}tJ?P`#vr}-nnW`Y9uPMhm%^?N4CF`_%uI*Te*#xpK7$K`EbUa(8 zl2OXq$b%5&FCh6$>ska$ZME~GVw(9Rz%ooeOS)x0mcLB??rnhz*PsgonEA!NtkoYS ze6jx9D&g@*gw0Js;~^swfk8%iGqvR}%JGAv%Cx!7^YC=?`OZXSnZ(hI9df{R@u>wEB>T!;o= z9lqEAhxrHT4I8v{y0`j}tPXtRh!h5IoUOt{@|#){_a)ub>deh+U*aQv#>S=hA>i(#){hZ;iMZSy>n!^Fl?tc8H;XV@O1Ng&xLW% zJEze=jNlnh_1Y5WZ-btxhGGH=e>nYGTqrmsQXGA8!$wI`ID&+%8z&aHEt?bJe-b8_ zT75*FaIMwerY%gZP#mkQx`qN9@^u&JamT7W_KeVKtD#c*6+3wlcw1bL#M~r;Nd>qQ z{3$UQr@3&%^dmmsF>`#qCDx|fPiVnO985|tP=nhySjij9*H`EGMZ!NlhTzf zLh+BDDR$2Ttx{eUR^bMu61k%!@o07b#LVLOxPwRzeY%hdp^5&e;Ui{RAI0hpGEAf{ z8uvytJG4Vw?Uqi}T`VQ@(X-jeIh3gUn`%8V8gY$+T-h&RWuGJaBozR^2;V#s7ZOlv zn@~$nSpNs-#V@x=p^cVgN|WQM`Oz}^9&R#3My`Iz>riwHgjKigrv@atCx}0S=?)Ux znXrhfkUfcY8Q{rYxQc}n{w#PTy`bq>**Pr^vl4&6%LfmJ{tp7xn@Eu<+<95zmQ~4A zhfB2`faHEoD`V_tM8hohA16l9e{^CjC%#0w7hC_yiSbXY-VK)b-D2g|@#7!JWk9x2 zqI+H`T~{#P+kZ2VzYh~~^*@m`#tlHE#xfI&gN46$(NqXelX`8;Vhcd+ZK$^pwZU(t zLaK_&O$mrs%O-)(vk{Ylmq`M=Ie+66RpRK|Fpy5$! zL27*dEgC#2;$zp&>Z0DQH!jm8mvND7!qvVKoy6*6HrSrl{_X^sb@kWCq%v2tCP~&Pq*=aJVD8Y!k0K2g!mWb0O^H>kK@@8b;GZ)jKJt%B zHc9fYk~rd#>(_4g_KR7UT5`>fK(BBtyn~mBv@P)RGIzn}i?_sYirinE54S&$azOyW z*EJ*Gur_MM{-C*%qXaTHV-Qt=VW2j;z)z$HyzHjzrjx3$NXl=ZC`+Zaq;KBE140d{ zyCW^I^5qp1#3+mV<Z*@Ncu?%08)K?i1AAJ* zRW~HiN=T$9T{fLj!8RJZF3=?#&gLsCLG@e3%kxrcAkv0-WoRwtE;5S?`^q^0Y$p35 ziM~zTPof}xC*x;a5jCdrhn@0^w)+I7N`GZO988MVH}V-(-f8rqB1^o*)30N6$sUrv&=_oKYI zS|X8bzo&93I!)rVoEWLXKGukNMuwiaLe<`ad@~Eaj#`bDTMfWI!2*p5^MPwSYr5&_ zHUe8*=ll9lnm8SBnn(y-b|{Wop>p4Nu95B_s8RI+uIte=vcQWWT@*Up)!D<`{#O`< z+rPt30UQJcYF!xqhF$iHQUi9@%#+#`<(V0Atlsb%2ov#0O*w(7wU#Fsi=fS>5LyfK zY4@lIu9ZA}zf7U_t7MwSBtSf0h6Yj#1o!eUXrfJhy;Y;QtIZg#o#ex1#fLH<@`$>Sn`d(QOJjW(tKAFa&<~q;5{$ zqq^(@tfL~gl;{jOgzKsN6ok0usksf|$XpoHlxm`vD1K5=c#ZVvPU^Cb11*^pT^wbz ztl9jox1DjyPq?$_K?jG^b`-ValFTSX?Q{KEEAOP9VmWq&G~Ejucq2;1>sHHKL@)Zs zttsODyC>hDej^mN^^b>vwd}N2-uKfLI-gh3r}|K*w=FYSO!9tfNo^spD6^A6xCJZ3 zLRObcUL;H~@|!ZoYQ+?fH+>_9Y3;P>}QeqLig`&RhKYo59CZ7Xu0Q`Ysn z1_ijy0L_?vc(V_#f*-u2h5sZ>iR>yiWG5qrGyMZDUvr_?!HT+Cs}F&2o0*pkF#Hok zJ1y6atlC9+v0&1hUA%=|Du-2Gso)gKTOVhIQF5dg?(-KLdENMlaFkVHSU3IJ{HuS) zs?_6xbY>l$5f@D|Vfs|YI8b_(@6E0b-|YwB@Q7Y(254kSzWclU+Kv=l4tEYqy?11o zs@XGuBPZi5i1DRX#>ag2h8RtmWe2u+Kn-ba`%xBG&1>!yiU=BFN>;v7zLdHdSQM)8 zxu?`fy}HvHAx0$OHR8pypwTbaZoP=zl~1F${_3s&sdQpF)T=Mi(ez@tSzjKULQ4=nZJn90F0bBkQ{^ysBDyIaf9v-C!iFBG!ylsc`M zTg)(N&?_DOZ#ALt=k2?Tr@rs;q}qSP^E}Y&C9T`LSA_7stY7jd?qT)O*Z+$eIXvR{ zR`+ywr7{K}yMN7KGtgFZRfcwDW7T_cuIWWuiDu^ zYpqGJQ+xZt;${(?^7eka-KTC3`nxml+o*@Lj*i|uzhS#nemLk6lQ}6JeegL*goZvO zI7Z_W@ZUf7k(2A8Euoy9!}a}f+Vc8?^ZQdbvq@e<~8)YbllAyb++eABq=MJfw#h8nf8o?x;(od4*GcozRZhntFt?? zLsK4M2^V#IPI>=D0~*IzxWaDU9GV)4nKM~<>o%1pKbGfJWIadM8Dux~tAJ%{Q@M9) zSkwgbu2Yq4s`b@fIzj{qfq=)*Y=IJ+?i~1g&dcBgCEO++G&QX?ruA*mI}2)yj(|sj z?^T-!>4^pT1bz$M6%`#6l~s*kI(uVnoOg2#7NGR^NVH!J;;Zyi;8rTU^-?47EO1`q z8h13y{>@za<9;Rf`$?eFH5ay@qmhWn%jK`%STz6|ZgvD4lci$;cM_Svh zCzG<9x?HVTk|oTBvhJu~;Z*}yYDjx1%Qm-(8i<2tMLxO zPM(L?$$1R5D(zD%X|@C{1p_g&7geL2S?4gF|uZ1jEQVDr6@~T8d(a9 z`dlRg5}1EK($D%H-tq%{p-?Ay;FDNpvEgbMdC_OUyJ*pcP~Ds=E}RsKRo`jv>6Ojc z_1D6{-hkMKz<8MoBG9-f>y6`3ECj0$210BN%UcP_KF?&+0N1`vWwQh*$Bl(jGKGRG z8`)o*1^~e7=$y9{km$HTx9|}>LAB;S(yc^^pD;DXtC4`fZ~ay1s4aG@KFT=U@}%X; za=RYz_M?929;@02(&vO>HTk z&7DnY>EMp|+}B2JJfT1-tBryyMn|$uBAN(-cUI;ncoAEd>$SY>e06KB-RAv!YwY>@ z6WsC#8}uVK_StT45i8++H6h9uwP1jk3F%ZL!*^h_QGUF5YB_S_BIG zW6|!ju!7vhMtJu`y8WIQbSXH^8fIRN=KAr`^vE5}IOP5B+xt<*4sMeK?l@ z-AlbZv#-GZyE4|x;Cd5L=e`QBZJEqoWT8e@FhA7F((ePvi-Y2v|03aL-d^_^0QoK> z<=Ah;sE}%ZRK#TWwOd}-jCFm(;9Wf(>h`%ZtBGHK{8b4TZuUy9Xutw(2d{cmuS-x5Y1c%z$HZ^YUX5UK%Wdp|Xq9!=19q$W#_t*cqkfsz4Wf z?Ms%;Uk+*|{9)h&D+Qr=)yU6lMqc!|VX~kY2KP@0kSpgriEVh^(TwuIl7j@Bfe_Ej_Ip&1%s#vuEu_ZATCUb^RFi+^&+laVboa%e0o~>B&T2 zOyKsd(M+LgTHqj_oDBQ@>B^=#UtT)GzW^BRCf8F<$L)SNHB=fu10DX%ai0YOTPh`*{`n}gli zC-BnH^6Jd9Lgs8sa?{r`>MF)(`&HjNVHE?G6Vztj^}3T1@o#J7k`N*tWp?I4_hM$e z61?EF{xI2ve!iU|3msIUn{`-eETto7^_@x&>uc#B$+M`&14g2*t8Sp%Q!8mjYP>AXOTg@Vq@D0lWHU)<=ERv|LEVrRzyWh08VPN~q#^+|Q+vb{5 zWn`6)A>#<xTFK&LgUWZ(RGxa za-g$HgsP%xPr4}h{9X*G+giB>FB39+@VH)&EyY~{F@DOo0v{30a{SP^*%LWwTt5Mw zr0(?3Z%&V2$6yZxx|6(JI6N%11QMUD(oP4@b%(4u4805_r)jVMEm!`yc6Cq*+h2BJ zfNvxJ^nEp8Pn*T8?nY!yhwp6C3evkUFglN=#YY&Q($?M(uBsSxtDCjbtmz@ z$%`|?Wu(Q)d7@|~8c)VT+S6hDaHaw2wl zVOc5gck}3fBdGo-Z-;&yvT`0YW~V!&?f5;!X=%Sxl&2SraT7!+zNXL9=sY91nB?~T z_wT5Qa;sgd0^Y|ofm$~zzi2)rQM&}B8+qX95(?`+lC_3}rb?(e&3gGzHb!`h7-d0J ziZ!6Id|dhG{Ebu)LgRC6Ua_rXa??*0?9?&+<7b8Qlur!EadFO|HLs>@C_1Kk5^agU z5_gRicV-xM4P4b$Gf|Tw)qf0fxHbf_v-v2i=W^U7oL;i0Qao;JBSeBPcjEePr!ap9 zDbz2G*D$bfI=n?u1cpdw3ReifP36k{4GWzI`^6vPraTmwn%Wh1;_(v*(9O!- zaqvgfSmGR?sY-i^6EX3|INEes`@D|O=fXHo3ejD=@&nB%x?E^1+qD`Zy;Nn@2reT3 zopWtBDf2exocY)syX)ih=wX*iwIaTE!LfPL^r*e$P*aNbx&`*VI?oM%-x0wB`)f_|*ikC%G|v3cJSJArNkb>8z+$`NW=BDi z)n}y(?(%ungx<;#@A2DayB~*Hl2Es*J!t_80^10=jy;1DYT^9!ILU&CAO6VgK`8op z8NvIx#AzZ6_G`u7D&yM)t~$K*yY8lF6uvXzp{jlUO>t|E5S?gesto2cKVD_SUG~{o zOCQGAri@p3O+NKl3)kmL?VIgk{<_05*P7#XGk z@D%cy_M!qc7>?xe`6O|fdGRj*>~42xyZJX=Y0XiR74im$`R65zSUZEN1M9LJIdSfZ zk`SpRd#(#a*qIZwa$(3(x0i3epgaD!^Qjj6dN*bfH;J$(fK!&_(jvQAw|@$Z=7k-N zb^L6gf9qwLrS^_;h1vCsPwH^>h|udv=1B(IA50YBcG?C=uMQm_WSQ|K=H&JYiBx|S z+vVFDr}bL#(_m$hbO_Got{RC+ocXv<3v9Zaa~|RdXJj)#nAEe$bDz{7y1t!FK3Ad@ zUg$&bSCHoQIAO zTdQj(&du3F(XOtT_|9HuPXA)G&p&@}_DlG&)#m}{hjRzk+L&tMojSfCv5v1>HqosB7Ld)=-R z%sXe!qj#Q8BAB_9BZTHQt+Q_vb%cl5cj@SkIL2AzVWu!U-vF$Iiwx|HL?i-DE*of( zm(88rJBi{Pf(yEy_k!r>MAAcW71IJ!dDFJ363v)p*FxzCl#`A7h8%S)1R_&&x;k6& z6x=(CZzOds<0JCZjkMKhP57F(-t4MhF(ZIyE*#cGFj{qO;QOua5=Z@fb4!QY2yD%> zLTY~wT>LZwanYl^a0EJmH>JO}wO9|r8&*F6%mkJbXXpIe^oxI_yaLMW8CveA%ycZQ zB8qo!X1p6UQIjy7t;#TN9&2;HV|1H^CcK^)yIxEpN^P+q+J;k}f-=9WQ-KjN-dg0y zRdZj>wip}*N9JY=&CG?1&PdLN8ufhbEB8B`W-V^3GcO_Y7mkCZ2K{TnRGztwTkNE# z>}}hkUoiSBYI5u~r<4y^)h6XDVI*CsJH>oET0&5An!|(rDw>kfk(x>v3KSQ%6Qn!p zA!PMK4sh|_Roz>&nIv!Yrrhpaf^f}1ciNFXamr;=9sAQ;gx5zB%=%&7@cE>#ah0x& zY2{tsQRC@vC~#U93fbpAo{Mz*?Q?vPq1j;`?bPw8uogDp<-CLszp`4i_si*BJxp#) z+?cB`Pg%WAe%Ygbji}D}grcKS#TDUt6boovf=*&DrM<<&Ub9dp?6yk~b$*j9Vr!M>6IZU{{ekhEZ*SH_{!{pfe zc7zz!>9NjF-u&DX{*f(sUxweBrwxyK@{Bwfw|Df{t*W2N(UK%fJ45kmO$7au= zeaw@SpQqlaJjrX&Ksu zK5VO%S5*;V4w_EDA5*ehf46u5VVzZmI@UfpU)9KA_vF3YTq=?BLPiRJjv$2eNMz8a zU{qc;0O`C3W&=vA%8Zj=rumEMWAF4!7##%^+wqi{PGy>RSX7C1%0gWX1l3|<0*_M7 ziZ!J~?#Ji1r0N5&RZufCNsY0xg>?CgTK2E4L~N4f1vJ}qr~?KQsh-(!Fn=K6l*2_% zVhEpkti*{7c#!uBUM$^k1Q$ELgbF`Xgw|}aj3O2Fot=LmC}=~TOQ;i0*551LlQ0rev|^qzbzQW}DzEUFuU_1C5>$u%zlvpUOxN{mJlC}fH$`2@I&x%JI+npb zEieW9*56GG-qatZ#$|Zg(CakmD|U6o7b3{0^;OmUvAz6rr1$dZW9<}^?Z9*`*F!a8 ztAW9rIzoqDmLQvjY@qWj-qx9CcA$ryZEEY{80E~t)~E_a>ruMmG<@g>< z141t6VgcoTmbA3DcowLh$KGCwlvEzkxMTRcA$t{J*mNwMGPgmUv6y^OWk6U|MTg*( zh~!u{wlR~dsQ1&D>>El8do|YbVfD4c61cuLymug|ks`@FlYOBFJcoGX)UnZ*tw_D| zRMDOt8V%j^yq&(+DCcO@#zn_>(!GL4ve_#dYa)4^JI=i0NJ-F(kb99yRz1Hb98eVMIvZ&^ zmK`zu^&8b_c(dV)l}9%Z+mBaLsT+1pP|wx4Key<9 zDC_BAzh6Utz54m`s#!9!&u8&>D$nDDoUQp z;6ODa?Ou8z1Bx}jzVDRmS}O~v12R{spaSY6_wC9a(#bIomb)NtzZK7cNgTerdix=L zdhi~$bMf>x7V?H?rF6eX?hCe8URQ0g8^M|e^2yt#tT0vcj{`)zxY}#G??=|vD)oOr zW1)AX=-KW&G$UNcbGDkwvZnqr1%U1@e33!U$;bfb_!IHkj=DSzysAQx#|_!#8r|pt z2fU1-yA(-Zoy;9`jg|?({5oKrDyO^|DG2FV*f&c4m;~5FL=+obZZ@!sse^lLkYwrA-|i__4N2YU}j2z4&cu?V-1#)6S~ak_L~m6H$*5{ynB7E!}|0gEd>0N8|;ZxjeDA>BaIgW z?``%!F$u5(%F8B!y5q+6V*su_<>gN^rEwyn(0Wnw4!^2<#0xhGJo}Y570D}yV9BmB zHS2xrXThu7oD@Le0h|@}io}LgJB}(4tt&c}Hj%My59gW6*n`NM^D|sMG_13R9d*6p z51@t>FW=(mcYQEPJ>_T76irO#HLXr!LbEQ|i^JKsDcZ`uDIMmp)g7$nYUt1v9T6R$ z1*gb7cji_qmfccT+DX&d8+6`kfPY1bwgamtggi>4>wXn%dTMiwG--Qf+|3?uggUmj zLiFiN7bSV8|7d;F)kfMFjX;6WfJ=6nN2qCsApYI4+`<9Ra!anQ%CkiK@sP6&#v@%> zyVz~K1x3TEWVd|$%UJ9k5OS+}6#72Yy$9Ykn&*&z=tN9+ZY-JmG1i6Vs7BD`kNJ)F zb-=xs&H%%~9wIR-c>Tkqk)4osAk5x+NhzVKwywy~kN>&>*TYV)joqC}I z+);J1NG$i%#E^LYk>zCf6b!h#9foc+I#uk0D<&iX-`uW~HKzfU&@OG3dU{VvKEff^S>dx4N{s5% zqJvzxwkEHHe(Pbo*~oqO%}hS8us-iODw(-;qDQ|!pCY69i;K?r^K3^#nUY{X{kchb z7_eb7lxJBH_7rAgHKEB}K1Kx!UbDJbKHtqNasggH@se~a*Pq;M4%_V4WD~S49upw> z*y+)Kx_c|{WP2`q65POvOKYxs^5rL|?0j^&>}TCdgl2#nPQZ8#JSB}s+w*r5kfOtO zA5e^ZN7!__M!mp0#(ZjgQn*#cPpCwSnN~lQ)GUmxvl6BP|9vu2X=Ac~@mx=3Y=7ZtLmR>9?FC#e{+Yp<;f_?mZtYw*ZfvyX(3+ktVqCa_`~1NxQ4) zf+wur9~Hm(KUQJ=i*x=e(f&8Vu7=Z4-L2!*)e5plvb~o~p4;Jao%K9ub2Ez9w9b>E zbe&Fd1mCc&2WxBUN>87a{2FL?c5ha`b>;OMqY?ZFmL{f-pocc_&DgU7_W`sM2a0-( zjYqd`%hjqUzr6O{L}+I}PTrkuLH<^>Emldm#lk=<%t6JCi4oD{p)@~p+tPXgYCtyt z81-|!{q#1XjczI_re_shcg5KdQXxJTJZ>2gnp$www>eZ$pp<;qr#I$aAWt2Gj+);Z zhPgMtHbu9CcK_iyW3obdna$4(3@;QJ*w5SZ{D>HUboGu25HygZBeC?0fSOVo zm5@^0;Ikhqi}?iKfo}zbRt8i>jZ>EPBAyZ*$i4cniOnWx5H;yNt~bv{n>X&!6trCd zRv**>FfS6Xs9A-gZ*cE3Icll+5z7Q6LhU~CiW8nB^Q z!+23xW&<8w3`w0wLK>+=M?GlUg(4STsVX=db_Y&iVlB24Et-wgZ3bn{VC2jc1~KqE z&_&h|*KH(0IDIVFwWo1dd_-NHLq4*@CRf|W$&)_ z@?h)KDOLExu@3wAAFvLZ*VcjZQ1V26iqnwM{0&{c1!*=u@(91xo^VG*%F{RM>YrD(5Ss#>(@r#BPhV z#)Fmj#DZ8o8jgx^yfDfk>2&47v941~qc^Vv-4>hh)pfKdSO-LV$BZoo&F>lR)lc(I z)7|44ctzDJT3yx@lOl!ulmS>fubR?lMQ>4b2z1Y_yBo2}nuzL2JtuxS+eBhvMle# zhsMIi?tKICoqT1D2my6gsN*o6OvAf<*Y`(gOTm9I8D{1aXMY>&sV+u4cFeuEn)NV} z^4MukG3;!uf#hDD`Y{+O8Y034WmXf}uiiD0aWKLm0>UzNT2~vy@-;EKdda5 z+8Xle1Ss?V{J>ROg&9VN+0FD8wVY3U+*wuGqP1%5W7@cb3bhL{V>Lww}1ePdPH*oVWu2`#N;pPn>buXgep|7-CqVoCuJ9 z8trtvuPu45k5BEmo*7j#sFnp@-ZjjbGtD~>jcw4lGrNm)E#5>ysZB5A-${xvvt2P| z_b}zuul4$s$dM}$W2#!N3`r*M2`kk}=ZPr+sczW+3^x33HDzp6zSUUN@0>sFFq_}? zt=fP-P~?FRJKooe$-J^usw8tuLz%EDsAxdAc|Go$_njSG_Hwg6?3R>1-FD|!7T-|L zuD+M#YUQV>`7!whzCy5qSzR%IpR)y%hL8U%#$~yhW5IG@X7{AGUmYb0W5=au!ei96 zTB|7{>Jap^li>Uji)$c@hr^D?)`rqou;9sMg^utT%I3*!FnBgUvSq2K$UjJW6kD<; zs3&iC+?V-g`h@**j~3de^Nw~CjkyQU0rTgO)?(2(tSYDHXXGZv4Nkj>C6~zcI%7 z?7GviIs;s~G3|3lDMZ&6Imbw#rHCYeBV-`_Co2pVxmkD-eRaw1yzG^>717w3&lyqQ zH5chYJAV?vOYQYu9X8E#)No*G>zV9^m($}j1_Sm7O}hlxioj9HZFBRu0~Tg}*>{#_ z(NwEBl6*3qE=Tn#pgVsiRm_@oO?xFsMZwup9kW!U6$eA8m#d#X;<=*LIxK z3A+id_fm;!uQ^d?{_fRj?eRYBJ-bGg>jY@3%*d@3_0S-B(wx?3=3L--#_bx56I-YJ z4{T;>{m)=Cj{;RVH8-9#W6QwCU6C7=LQTn?n>(+rhCGr*|NHW>WB!~C{G?Y$P`d2acfMNEM4Ej)k z{f&HdFZ;n=kXHRUaKZ1-9)WvcssH?!sE2j2hJVXUP2LYVUuO zV(r;b=p4LOyIZ!@c&=ahY`-4v9X#mYSQ1I+T3v}aUrkxGZtlf0RI0aegZ9HhDk;7S z1L-=Jkc$q-w=VMGS5plj@(SFMnxE@!o$uUP40J_*QJZ&^T+MH)q=E~0%tL{b?8!Uz zNBmnHqZ*m}{yF{R7~J)1boahW%jNd>DlKt<_I(*wdP=%jk_Di^y2N^=Gb8v%S;9ql zC}i&s(>9JOqPV>yUOzD!pv)hWFgWAyh_UsOaR4rVGNXwd{hfsUW#Ezdn!e@VwLQHW zXTuj;#G|-)CUY}D+yP5RsN3?FraG8z0Cpp@QxFfVKR3(q`p{_{;;VPKl#8mnZT+@X zmN13x>Z%!e0V|b=O@PI3L%!WR5n`)*7H{BYKH+VX|oz-6a0 zL*Z>CHsaMB@W;9~fd-A=T zO>?J?^@|lX30|WpC9?UfY+In@8>?^~8JCajLBJMIE9L(Z_tx8M{v~a%4Hd7Pe)CF( zxu~3uhCW>A#+%F$YB(8?OEn{=13+a;7tU7k(#1*4b@Qox@bM9O|0%TMy`eG?Ewior zz~847Y#83eTzm2O?!H`DnRO9YZf~1g34)4ADeYhtjclFXyAiLTnwpz`<3g(fR3&w< z?Vu2koaT|-3(OEanJ^9Uh0-i4{RM}H@88#_y#jNjWlN)zfE`)2j)jNbz5 z?oGI4MS7=NWYLl5l=(SFGR3L?JR=@Z+PVl-|Fs0J*BceSb6)LPz4sJwohoWx9mTv% zr2pNL?OET=rC=Jv3$&1K4f-_6ky4st&SjyzwjwXxL{K4Y;v{(NWvgkKSCf4+5%{XF zZiHU?26{L>r@iEk!LlJ@G7D0Lfl?GTQFn5^+<%l?4+gpauZVk#KSBc8!N=1{p6|Ow z1aCt(Ol=jm)@=TRx;I&#n4h8Z&Y;vEQ(xtQus3&ET6#IXM4MDB#pWm;@)g}OAUuZ5X zv!d{u+%x8~GUmP5r$j!QtZG-VP|~<<1v<5N5)%$WntN^UZgRQz?te7*)?rbuiyAiu z28bvrt)!AlNC}7%(m8ZUcXtkoN`ruO2}lk#q_imA2t&>=(%oG%-#fTmdmZ;)=i1-- z_W7>!pI(;^_=3#+{O))_pj)l)raZr$`SAC|V#%2v{qUDT_a z%OQEgkQLiPUQ^}4-991u7$v;g6{}fQqg~|{Ll`6RJ@4t}o%n5)gt0Ixev8auR{=)# zYC)p>Pn)|@#9MmeN#oy+PF!%a;3*O&P$olT)q@%LK>=Eqnqn0G)sR%Tc>|<#g(7>1 zFg&Z?LaiZw2KUiSf@<%b7*g6onhL4NuB-PY7#Fi`)E?KauZ)LQ)yOT>2U7+L?tfow zPdsRE9_?2HX;)s|mffNTfwW7nF8i&uN>6z8Bkc9+=)?^!*oNcgNtWaV|aE%QN5i|3eKi$u3p+OBzIi2ell%q*bAiW zt}{mL01Y}eeBh>}2|M#Fw_pRbo?P0xx%v}0-6^qq9trq!2&K{Elf+2338+^3ESnSQ zIzh!0f0KV(#=i*x-7@7DzSj{-{ z)jHLM;;>cCqe~r_gLC&mYi7%l!@5nfT-t%EqN#Fr&qJZ^D4LVNp1+WA6fF7-uB5h{2m0|f5g|2ml8k- ztgMc@xvIM9+EvowAMMh((I4Q^i7X%&VrFU~HS@47+*39n2V(-cDw5A@H+G|?UhQhw zN6G`9iP{rMM9Y*2!1U(L%X58T{%_}>yi(~EzU~8~zFf6dT`l066X3*=cH&-h>IYtt z51sijp+|}m@?9=+*~m+U@P}-**6;sGpHKH z=owb(db5t9R&|hqHRl!;!STY7hU#s(-nSzkT|8$-GLg*J(qzveVNcOtOxkLml%4Hn z4Q)*>`OAu8^w5xf)2z~?W_5mQ&7ZQ3WqeBzlX2?#n4=DhZEgG8w#JnZaTOOl^vs-~S0(xtNYpAeAsw(rl@|j3N13z=j{>asOPnN*E8*3gu_tAof z&#`1+jJNW#DyoxA4@4Lm7fboDmI5E;%r!aOlK;pwL2ij3Fn4p{^_z-c{T!|;3X&Q* z8I9pz7r8d$G}Kgct)g|_c3!}M*g9cjYldIrpOjx<42^=%p&>XV&}Vzoc?^lK7nsbQ zOX75FVc(Z<_5F35Jljd}na7-E^smi>R+B2Cm;|zJG4_eQ2K}?-E4HoSa)#=NI2Wnq zs4dfHEBGI?q);kK{|EG5pQQy*Ame81%sv$IeeRV}>{U26zHDB?f2VLbIZeA~d3#Zy z+Ex@`c52Kq#OIO=wX72lOV?DQh-gvs852_b3|Kbt4!-rw;d5S==r*l6YkJ#4oG$Ch z*IAx}58N~tk1L}u93&=^J{=>F_{d%Ek2c;#6cEj45N2Qldh zHIlgiB6R21)MW&vs~Lz96fjhptWExVnDEX}sO1e+-+yv>xjzd2&s|>CMdyy6n2^m? zqmCWm+y;R(u-yq!?fuI+o^rbPKsHhg1#botCdk$HG7>4^7{QfV#av_My{wR|UMfP? zOW#Yd8d7CEF5=pyI~@58vYMxDMXpER-ns=?z)nMY&91JzVrbH;mh7*}zqnu`kn5{z ztOas?=HHLDSZf4@aw=oDXhL+%kg4i<5OT!H-0X5$t0f%&!@D`5QOnW#21uW0$+BNyc7H71d*o?^xa+q;gVSB-TO7L1BPjOQnHeM)ZD z1E=2J&7*}BBfXYaBWowqb}{!*2Kw*ZS0rr=@ly)Q8#&6NWHnSyoKU_$L0z_G)vTS{ zaK7d8n4-S{d_7dBG!y2mpZBjI;SIKXk#!3V*SHU(^sU<;E{+D2{-U`}Y3TF6PGA#r1nP zOUZi?_lVh;y?ML0QkEKxR6(M5C~m6oYyOoSLY4w+9q8{zueBHWk=l8Lvi%hx%JPEI1^R^+{Rl(zD=R2Gi=AE#^+_j}sM=_UWOZnDr< z{a108>EJenn{V0e?zl{ed{GH^4z7WwlT>vhHG6^phG;q$Tam@&yHR-bglqzpe=xk{ z>m!AAn;CgDqX(p!S9!a#%k;d8`P~riBII1?J$f^tvfIMqrZV`pda$ZG3KyWjSjNco z<2O*~p{}^qC|+2R3%-_mvy?*5-(C0IYF6uOPCS})FXt2Ktq)TH{-dtf%(oOqXB_O% z+F0=(g_OY->4d%-I75rr0$Z2029IZRe>4kcFOdGTxa0lN-xa5Vun%X`5% z0%Khg^=Wal;TKCGUKNL6qbfpc9Rhp-#A@t5MoKr4oLq&cXj3ujy(8$QET_D4fAq>4 z`39>t8;Cq&W51=^Ekb{Dlh%bPPiuJ$z-~jz0kvB|X(Q)iprTuV<%Dhb&>OIRa?J+& zifHk<1$~KdO|Gn%Y`~0}5om(a_|GJbd+;@Jk_Y>kNxF>enF?;dS0Jv&TXue-p0{_@oeB|{jiHHn~p7{KFyu1GvOjS(4yjg?Fb*S-dLw`Aq_yQ_KhZG4rJ_u z@JSMPF3bN(2}w;6KjiT-6_71w%#lCkkJzBs>FM$V2N#HIRM7;=T`^MCZ`;!Dom|R~ zKV@fZ0@wX(W%;%TfuDK~*Rhq?4ND;><|us{jVk;nzaCL_!yp)i0PeWP#^}wDp}zfK zE$h~E=(oAt|Gx$Oes2#~Z_J^Ak9_W#`b8;IHU7g3@5mF5J)bW6|4=3VUDf{1Ab)*2 zaLCFbK=tAzFSY z0QYMu^F%o&zzBqED8bP6y{RFj_@&y@29DF-;ia%@=qj3f39Q2<-|XMM2p_H=sZuj3 z18Ow)a{vcA=?IXGZ;v;6IyufBzEr&=yD}i_DO{>zY`GBA`YPVx-lgI%&$xV}S;|V4 zmCz|;d-%i8-w6)g8mTOSXBMi;)|#%JuPJ?*sa;U+1JIQeM1TWCy54)nQEDz$cyFuH zOg4~4ms|^}V{zFZKq~J9!SO!a{Je{{q3i+I6q*cUq8!y&HAoE}xUokuu(yfUk1ASG zz~ADebS1o+Vl9EPBXo_4-iFZ5uJd+W2y~9W?S8*Gs8xkYi(LR3!_Qfw!czNsh?Ks2 zm*h#<3#n@4zTRvFM?sSDSak?J7fbe!kDNSjClGJ~O)28lmD#jIoW6YTq@9VR(5?Q9 zM@*UIE{+y$eX(0Govl6H0)c@J(& zuL(1&(SUYAhPR9sia72d>uhSfw}9iikDwa6=7{^M`B)btF1Iy_`Sm^_-Bu5~0%V`n z5s?V1UdoBfsaB30Py}|3`Y`y`Dd)o5DRJd_n zA+NhGms-7%4z*eU4dH_L5-Y623e-7VXbTUsYO-S5%7byh(kUJe_fI?rlqTF_mW7Su zVJt8AUaDJb-5mMS!w~DBP#vs<-F&{-bWXchvC=+YgBiQqV>`!hb_J&e{ zcoOZ0Uni;)x=40Q@3TGD3#&8?Q(Y(_sdG)z(;U!V+^Hk>lCxQ4H|sk2jv9K8c4L+> zgW^8kA>Yu+<#diSBl6!R{x7B6MX?hgoTtQZJ6_m|kh&~EYrJDe|# zk8hiBt$|%H=J^N(*AFv04#_c&-+ehQI2rOWV{Ls`LPq|YF8$RV#ulx|ng)-{bGpPR zaL7|Aumx=7mrq)7wa0Kqe63v?$K~J8P;5yrf8tG+(61%+0@~rFb(3BrqYnCFmB|sY zkRCPTP@TO?uyw5#i-&oWs?G&F#s$(q&X=cJVBe{C0i{|j{!WgIrNP~|t4Jco0zFD4 z`d+ZLuV}njuO#o2z!S5N>ABqmOY4*e71=HT_40qGDADpkSi>|dHda5g;%XIigfn_p z%r3HT$29p4o}Im%k45+@2U~^FGCA^`KDu)=y}Hch(zJ^xc-M20%^=dF<|)c!A>K!$ z&h?;dBMrjZUFw4{7pY7>OzDS5U=H#?+!DGIlM`3x!$Lb6Sz>W zK9D`Y%qBkU0Q{v{#UR=5ox*jwwiU^}@rV$)iAoBZ0NA(WmgIYy*Rw0Lm>X0v&%%ht zjT~v8A)IG<%w)=_BqpIE7LGl-hi70i!k4#!)CU|hK0=C=RnRe{j_XTyGs{w)2c=dw#E@=c{$|P{YjIZvE~sF&_ErvenEbo zW!FBR+LCVVOs2({WJq%|e6b!Ujk`>_LmTZ^nuM6*(2D4NPi(q&Wrb$5T|(`Ssh(F+ zZCN&nVaGZWyGlo>YAi%r*(F(~_frQ-btQLxlI*sVVL=}3Q|Srs%uPrM!40C^!&1mV zf~ur=rG7M5^!>XKF`!xZxCR!w%Hk%`vdjH^)G1a>=$ZIYeg{zE*vA=2k|K0!K*=IqAGwdxaQt^@H{>NCC<%Vk#BA{1{ zE1zFVDj{@7O2I6pBi>i`QaWF39aUW<)_3I*KsJ3TT3=Tqm!3Vda%d(=t-;o zE7H{lv>$LMWK1rNUNC^wM&#Ti+`AqlCiLbs=Gy>nCr@}4y)E@Yi-2%F*OvU0wXI`3 zK~m5>Hz@)U2K<oXFi6mRN%9kEpf zx?eM;=V_-=h{twaS`Xu%j4A<2s~-++yi|nlHtRpkHjVlgaAJeIk|Jt!s@Z|Va{sQ1 zd@w%+DBFSb&_dlK?`h%XLG?A!>8dHGyLb+<$rVXDV?1^P#VM@EKOc&|*UOcfvsgi_ zgDCdMOc{`U{;~xxZN$O@qU!awMsb(ZY6b z|4fpE8KAEK$-Cnm=7#9j2OL+MSG>%PyWjjQQYPcIic6*9pOB6{;H+?}8c6a2WY|+6 zj#djLFs0!FuE#F3HoRP}2Lyip1X2L+kUxfHsND6Ry zV~3(X$>J(3QT{C0R{H(r7@p}MWLo20XC1Z{XB4miBAT_GJMn3=N_E&( zLv44qF6tPF#LXW*-}FS<;CHxcC_eR>nE0kafXj0=iN8$-p=)2% zC-gqUv}!wg_+8H)4%}BT`$SL7uLY#|pa-n5r0LNyzVB6;0c+qP%}elVoZxbmwq zgCme`3p)170as*2oVF@Q20tj1Anesr+_9v!HMv|w#zZFQ$ul0zqnz>$@KtR}&BX1} z`*ze;d3cID5&;pLcMrXxia-+8zvL?3dU0u#U_#S~*U%U9h{GAfRuZAhRC)bNQ46|U zsQaect0nHbBx{Ei@&_i|mqVTiZmfthq!(Q%q|H&pV73wECGxam!VB;bz?QsTxxaUR zUrQp+xAAUfaYhEi@KcHMu9d~C{6(gn!2eW;F2E{n$2oartNM*O`Hp+}2 zs8;$oIDB5is4Iynvtxu`7rcD!+1yhTfCH|WR2!YH>LJ#WMJx3B$jt9E zmxC)@o*_byPq=oV(xtNnU#$RExQyZiLC zXxM~b*wgG-BrN|ciHg^KzZ^AK>}pd-C~v#GmdcaOrt6kiuuX9MsF&`HE~xPR*!+}) zyI9xWx2?l|^in0WD|t30s*xfIQ%(5DfJ)wH9$%HVF;}P*JC4M!pF*KxS1+hxVsyc$ zp#DfZUSTy`)gXmqnz99ZN(9u#GRUSQls;6$HyZDWmp6gnv%*hI`&rre8xVn z;=ncpQ)5&kqnK|y(6(K4ZL{=cESs0|L8n&pB$`3VZESbveN%bGdNz)n%rjSL^%EgU zb*%@9mTX@Td<3`H61rJJc!)XKr=aj-o-*neDeDmQx2BAR6b}tiHdT_4Zs6csRbfy0 zHD|s-{WUuI(Wk8T#it;kY?ms#o?HDKmN^r^W5}p(N?(Uy)T(VdzWSszvVuVBQ|}8W zH#4@HH`IL=7W40`3g%ZGYBcH1zR$k&S;@^t-i%_~BQ%mLWTaBVH-j6%^39{gcDPvR z7{tm9TW^=PhX?B-EE&ugm7b~v0W&Z*&JeOO_4UwT3)e7L{j$u1N6ek-a{I@LmFj_$ zvWf90Sst7~VyjVl2Zg&=#$jNFdOW(==>2BU#3SR|G{gPLtreX+S|yiTm=>~U+;BfT zAw36cr$h@KNWVlYvfNsxsY@ah$eG0T=|Vah7?)QO$hTHDc4oQM=<5fcDbG2h8PkY{ zy$vro%C|R$Nr!)AD9s2p7Rm{`ud#DOHe44^Dwf>tvwKGK;S z-Rq_2Qr_+T!cW#g+!Z`+&g<|-=jWzMg;)6|Nu(xi{*P5XqcUDCn=6gXijPc2%<*HW z>T%URm}Cnmp^UY1fEdM`w*?u&$me5d1Nvi|gNgpvQYe-2m5OuoluKJUVoUu8HpW=0 z`LOe&H^29X=JVc6-<#yiy+3Lf2N!Bu1-teqt2uhB+wc{#>NTOOHA~H@=^k|JfH8Vd zx!ZGuURDD1nj!=+$4)Xv(ptd}BR$p{Dnx5Wf2TmRW~pZAXl* zldqNSXh%k0`wOXo0=~&o++spod~4k*q~p~edfyowoh>{ggzWxCXT^IGy{%k}eJKY& zrij*0tce)`=bKp{9P&`xU?F#c^2Xxq%c1q>CTdLrTUy&8%ckR>J&KQ)GtkYRrIwv5P)_~9iv`Gs3ZiE@<>7?Je_Fl2!!k&oc_5viwu#=_c^W*xWgA}xZwC^WcybFqJ;vD685j{OFHzKFT(t5(zAvi6X8@oG@N61 zydtPWbkD63x<9?)n*G^GQpWBAC*OekvRIcmQzfV56<5p6$%r+3Y$Z?JREbZY;C5ad z+vB7}0nCDKk)K%GG)zcE%&mi4d)OkS{9o!bp_|p+)#fIWk=frP?|%S)jUcaU>&T)K z(QX}CZ60xhqMVe12$V#Qv2&y~ZIe|ViOYyUBvkAk^2WC0N0JfjjK7@pqJ>IBSkve9 z9sZTD;w$=ZgcUR#`7=P}We?${-vQ(a9*TZ{mUBuwQ6=~a@EFL!A7Qy$qBN&o~*;50W}ji0c0fL2?LyrAc+wI_(O zxLd!4iEivxETJmE#%knnz_?by4cNt>g!fzC@uP0lO}b4yFQpfA#~h5Qm;bLY;KZl`I&+qiS33v$M+@@n!gcJUFfSsj|6yeoX5{+ zLPAI@ONrUJ%>GG7L9*CmN4z%31=mB`W1Xs=-DqnEi72iWfs#Ar_p;yBKLp;a@|~TQ zn>t|7G$-MM98We*cxp@}!BI~Tg9uAL-L=NADfkE3KSbmkCQs_YKy59N?(`ecP(M`>}>8=JD}8BA@(`c>JAmOkc~gZHTAAj7MFv ze$!n3;&s#I*GsjUcuA`=pLZIl!`sijOVd>L_uxr>QyP+D#6b&^xs5AULWtMg_;syS zr^ae(Aa;kVlL}VE$9%Rif6d#A*h!S^^=Pb0@~1qfG>rRtn4SWQaV6}Be&&mt*z?*& zG~sOlD1|BzbnxNaCK@rCyx-$?g>CDcQ0?2dQoP$Ymf?%=4kT8!``p;b;N=HH;MG>q zf{C4HC&D6PC_vLdDQ1+h&l&u8rWIOm$F`QJlNEQLA6R(0B>UlP@^{?9^1ufUz-@HuHsfJL&(eOV-6!E)+D(>=gYJ~@3RM_!ymEj7g zg8&NHSr|+#57H^2lo<*xx(LzyQ;1(tFiEN z1zjwa{$yffk*VF&-r#7aDqCh%ev(L4Z`S}~^zxCLU=g!plWWXYBnnjU4@HG3896B3pBJNP0#P_Vo|CKHRQ8+H7T48Lp>gasd{!%`_;$<2K2$Ak+2!b1N)j@9e5jILirv8n4Dt zf~d{8C)gd^XN2(tgIzISB5pk}AE`u{hB2l-n!v2;RZPT~X-elYQnC3CzDD!^LWiT+>TYOulG+nhOx94{Y z?R$eKno<~Ur>()d=WPlc78IXmClfh6&X=7j0uK~zD~qZ>{s=Sx-XGc=QoeYe%wV?0 zsP5WxR9J1m6e3JV#~@xd?cT*+C;wTf#06oh;VQaBz+a<^os*yHO1JHvN=vL_8aBU8 z*e(>CU@XB=So#$BVvbZI2nvFx^jtJT29p`*}9l~ek{j}Hbn#G!#SRgP32lcstJ`WU@zYRD>4!g%$>Vo&}1 zSL!b#$wbC%C@8+>V`{6iUI;__^UASa%`~99-lpp&L|(`#f?DwTQ(L+M8tZhSk3-Pv zjsVKl>`{;w$nbolqrmbSVeKC{v%fJAIoScnw$u29B<-u^td@<`5oNd zu%J+b?$Hvs;8QHiV(al!swpFV>s2#V7gQcQrX$?zJ(KXT;UV(y3dT|t2?lDID=);V zA^Q2x2ZMyH7T414My}X$>sfe+me!@`9n^8nvyHq6&@t|k_BY{;mn#mQiRpx6h}T&Q z5pz(DT<}YemS3J?{!Pv{n%5(GKA+YdHgPeIqB|@Wo+y3mBvbr+G~^W7(a;3g z$Q4|9tVF6QF6!_9|CM(+ zjL{bzOA=1-j^T}a;3b91@Fj8=Sv9e#|EAK~l@+{_d-=T7oLr2LdJ-{TLrs6s_NQua&kT#!z&;}hH_jcmk zRRj%uR<&7YxFQ%M1&x(cYsXtVy@gF6u^{nEUi-YJu=Q1~@@oZ+HlldHt~{u1Hs(XV ze?~DPL^s^)3QXtU;a<$S0xeBHEyW2gmL~V#u$Sbm+3>A0$UcPBnmNxje3MqiG|1U4 z{6uR|01;y}-Q;xZJF&{~%LE=RE#I(VYIv(&muwVay|{2+l7k_4T@%kgxEI`l;NWW} z|8@HKJlyOJQy%M5j;Y=gPd-|w{t|d!!e1Q5kSFk#pbclFou#BiwsG0#2gt|a4F(us z^$5eGxO|Hx%5IMq=Hq|gC$%iahs@%a>h57E0IsU=G8rr^v`90|+KYWhPnaCft zh<7|h+gi(?%nSO*9y*Of%%PU-Es&Y02=7I_gM%t#{F3wWklEtb;oh}dP{&MZ@9*e% zp@5n8{97t9A8&Wrr5xTW6!=&0D_c$Xg+v+PG_HojPGwDdqK{ERe+ssqvnO^hR-tc4 z#2dKPc|F25cwkysdwe(gnr%Cb8-A4C;9@rz%dKoQ9ln$|=(7iQ@8=>?2_PPNW}@WY zs^D@A(bl}w4^7~WscuzJvym;5MGtVs)bZfE%Q#B*P(|Dd)4VrgTLPG<*2ZrQ=GpMp z)(aSh`)0`SxhPKg{VJ%ZC}LCU9zh z-oY~@PU=JB?ugcc7r5Ow`2WOS`A*e^ZQuugnv0DZJR_y@2vW~M2p;HFc+td|U@(x} ziapbgteKcnKHu8d`8a+?7zW-Q{5kq_!4RD~W4&JAoksr+1y_u~#O{ zbQ5xsSj9DLUvX@p_NBO{X+GhcLbi+LdYyi6T))H`Zn0&m7*Lk(DJH z%SYWAu;d3!Ey-cbgM8XUJ4H@^BjO4bcvp=FNOLb|YC6=Jkm@nPsYh#U8|Q9*ssAK1 zyQoZ@obNdv);{C$GlWV~MC}8^FkmQG*i>Eq!&w|EtV5{?8P&EGJ5(E$ zr+B9^Wt-}My^6PYhuUrC_)Cq?k0sMeZ|a%iFI{^nsGSXr+VLX@L=i%;Ho1-a))ZG_ zR;n9PaQB==qZSC=ErU_G@O1><{d8`ac##zZ#`~ z_W}p?r$}H)_~$~ea{dfvdHCn_8y!Ea?GL&5pTA$?_fN;`T{tq;#R*t-`ywMAIGwbp z6KW@~ebG+5>o`hxnv03VP5^wFEQ|jFShDrWb zwE<5zKF6wV#T1nR1Ws}5l#a4!uE?(Jwhnp5$bFryZkLbDOQ{7C6S!pV*dz%6#GVYp zGXSYE_ky$QZ66Vwhx0ge0atC|YkyI9yPwL)D0j{J&}N>CQ_e7RvuWC#b6J(AXuX+t z4l3kqcr2>y>xE5Btjl&Ymq99}-71dq>fS}ELK}Nh=G@!C%@Y~P*pG*^YP(Wh2-$<* z*CI8%w%j)Op;SUzp1AMRU)bLGTjMcVGbC?_$kxqC#+U(AQXCDQ27E`~umowz3`Nv+ z5z9?#ra0GAYcl;FVtr)Gai2JYG%);4n#^oc?I7Pm#CBFdE?3_K*C2sNn7(+!lL)lU zyHqt=GpaPik7D203?*}{;m5g|`baHKKpi`3TE$&Mc=LY}F^`^kkDM;Pjj+8F54N=F zfEI`fFwvJ+DF1F@tZV{cR$csGlEtr`uel*So`EfLf#%~-Y{XfIC0C~HB^}J{g?RX{ zZljd9eqWHpsibUzm4y<$v% z67m2TeQ{1AYT6F2po%3H;{PibgD|;7`0Jk=jgXevUtA2hm4SxM5;L1Sjh5fXt9(0G zlpo(>#pca@Jr?x>J z0so`$VzIOO!A8v8C3-wcpA0(-2HupB4AmtDYLmUPYL#jY|7)^q_0MEik5%Tpj|JGW z9W4kt;1%ZpDA|+m(-qD8a;_(?dcW*OE&DD|`XEDJt?8*!cO?+esbMW08l+A$MjJW{ zLoNuFGj(b4Km+C~-(Xz8<+!IWfr$GJlJa6n=m_wLYtEg<7Co;vuiL8Sh?Gg7Q45#3 z;mRCs$d)v0q0+eKLA=)VvYh_8i#Z|mzO}3EuFHAWpTpXOMdt(xJF^rN4YzA%c>rP% z2jW|`ln1*jtOGo*aMDP&h0Hn2GGa11^|PlHwQ3IJviZC`t8XLiIn}ZNQk|$nb;7^k z1kN9!{k8@ml1OB-#&%hTz-vW*#f0DKm|-IF`QKY_eJsFuXYuj)3N;@kN34q zqmmcdwml|82{Whgit;#mBG0n2TxE41v;>=ymz zC}K9hbP<#9-v{DNY}@vvObrUn8NdYxpqQK+JbE#dN9*A>DuiEzerl_`CQOA7s1JW! z=JB&U6p>x62g0HGYVFoL_H<7&=8mV_y%*8W+Qfo*DmT%{upSGfw^=^{Sl)}+#uDGG zPBh%sHfWcQ2Iy>_v5j3SShpRmCq9CFq(j4@^#P#!Ie(9-@3KQnFG3qo)s9tW+fKQs<@rnYxCJAW}M4j0O_u#<6#UIr`KL)YE9IV z6DXkW{roK-G{6`%Z>A<89cbDTN@pBNMXWu%(UBlU^d3aZW+g*`u$0)35zI79)XhYU ztSl?Dyh%7nbCwsyvN5JG*ix+sf#7<*Mm9s ztkD^^zJa@NtzmIT-Os=`sU7j6j_nHVo;G9Xmiy34px;gUCPiiAZNr>h^+V2a?dw4Q zQGf2c0HTsq5`s}nbl4P@r49T{B>qm6iY|KBhg$-)7+ z>m!82=|BFNp4$1BpZ1!~J|c}gy?hmKP#?3>CdK|#Iiv+v8UU@SKeV2;y)m2#@e)5$ zH{W!hl`X|+teSslEd9Ha<7vfjv`pN1CrRs3+$b5co#i7OsJ8hj5azPS;Iq!|uvh=W zUUUg_6TOh&sN6l4%NbTCF0>)QMC@#GNg7yW3qro@d&S+X={RibXfgsPclstz;v)e} zDVw%z#p=4J*#E!Eas4ee8*ttBNsUkRxlY49WaJJ9qH37YwxqFbkI=@893yVWeU0av zw9vQ$P#;_G1s-S)HTAWnjybxmv&st>->wqJf|3W2NJ?i8*kp5=vs|W4SbJ=)rLc(UvI4IOy>OvNqdxuj6dP$Sl5rsLu`2TU}3!n z^cbe^IoN1!r^cKFgufnO!e1UQzg@v6StFX$YyZMh(jSVP?F1&?;AmEZ&@|JM5*J`O zv%6JvI<(~^4F5YqvuyR4-G~|k0;OjrWrXJL#JE6sVa8Qlw;U}I@V6nLQwxDcvpc%V zr3-Z`sDqY#Q_9a}wfEjF@IQaxh$F~z;g0+bUnpuL1bQCC`hn*`)9ScSe)>Qlcs^_q zcso5NiT362D>DSDn<2$cw>di9m#XRrRJmG%s>JzmtqWw_NXc$YT`qNHwuh5w(R+5m;N>VvK@C+2MPB{P`$GG5R-IZL+{&Kv)3B>(S-8nt6Y+Ui|4^(5QH zMUX>XMl4G^OH==GwxFCFW9V#YNADbFMfYe8xRa}zbt*SoA)r3FqrSJMB$+NrJp(05 zrJ34Wa1$}8`Fsm()2T1lTsYTzYaV=O&ttB29L>!8z3DsqEs!m%rnM2y1!id&o1cPuqSW_n92$WxT?W*x8!`D*Nfu6 zIG{#j!XCdnprK`w6pt`6N*pQa`1~eQYNp1tz*Cahxn|a5Bvd4L zj6{%CFYc-k9Jm1LG%nNWz)*3=XiXE79?Yq{Dc517%-2PFexDvJG@b((p*X09XwT?exd z_x80Q<&M%KKLcn{%v*;qb2uLimj=Cs@KWA2GD=XoKs3wLI+iTEckYxHosBO0R;1i* ztyVvC&}#Q09`)N}qWonnq;2OhGh(j4MEEDlIF)G|=SDmS zQBdub4yqY5^}Rd{XPYnjEGqpE&Q>@P>opkMo)3t>q_NcNb0g+!O*X3)-Sqqe+Os=# zWK0s@D0F}fF5QWY%vyX+>p{VMKC(^~lQH|O+CyWX@ZYFE9}a532%We@M&2{3=0zF) z!lkWJGx|0mS#9FzH?jchvs`g-vQ7eYz?OgBLF2&mdXCTDbs&6J;Dw&|zLS$s0XUv4 z7U|4&3aakK?eOn$Dcr1lHZ^R|5;gHZ$sfSbQ!fX0dY=@0Bw-G@+I`61b*E_Xh)LkXXuf$zxSsRk z(|t-pL5Rcpll+mKJ$S-;#F4|ihUxw;Mi)Q=XveYX44V4f=ie_E_mnCfzAwyHu+Eb-V+mo-#?1<0v& z7w>&f8{(^iXcx|Q)8n)=-v$OiB&rf4edc;|<5NxZ29mYasnavOVaCP97G7@`dp-qK z>nAeJ00B%0_eP_l$O(b#yq$j-s!Q_EmVoOia5oZHO=wdN<6A`S#)nLVXC3bxYmlvH zj|opwvdd~6wtT7MUfWCKv+`sC-34x_yiaeyb)>1f8&ZAEUJ01^_b(Q6UAl@tzoc`A zY_0H3G<2=l5lBgn#2GfK@*^5MnBM-;7O=})1|;d0e&>r}r}4noJZXIjY>PNJxh5$! z9B{Lw>s3$7TA!v+iMzPzcA*N}^>(U()=7$#=_gg}#I#5qY^(YYmq2*yYQHJV*TeGZ zKuXVRzM(YJttq&)Ta~FZO?G7nE@AOI%PUCDn=<%mmcYXh-l-@A zE>`$R2%&zcVjN4;$Eth$-TeN3J)4gcN+b*h^f}>v@N?zaW&W9wI^H$sr)j&r^Ib#8 zbLv-rfd06BdUMKm;;Uia0@n)p#_NlmkV(Wv4CxE~fuxb%xKE)7?Q9|bJ=ZoIio?BN zkpVoPUEfREBWqRg3!mehgD7?LU#ox=YHxcyQ8*6)JBd>~#_bH96lduqSOLB%#w)d7 z^Ej;7$pTyEYI0sO~d(_bWzBIq(+Y7ff7DwKeTpc!a{K(?KqY zpx1$WtfsLe*;0KRPUXyEBiQHO673qz)q&R%C#v-5cy6-=(BButQfRN;_^8^qmo@Fh z`4^{_dRMhCC*8JY;$h=dBV|VH%t^%14)v##gg4i)-0AiU7>Q}HK1}+jE+46mhsD@& zzt2aFC5M^pttx_{a&Bf}AP|;cRa3PQSV~C$Lk&Kb^g1>>1{-2wJxPqK{&_9zX8i9| z?N>A5zzn_Ch}uazI|}ix{CN$Sfw3Ea-cd(1=qU~qO#f%PVt$;q%N1bw@ zlrbLwOM2m?@vsYg%z-}YL!r<|_+8+gKgN=mSkHPI&rZ+>BBw|Cr!akV6&SUE-U1)% zqoy`;enLeO^gL1xH3%+8uZWywE+2NF4^nRJo?%}3Be!w!M&oHthsY^7KQ2eWcN^W& zkapUrH3vq=p;1WmY9Cq$g#;hPq1iEi9;>(w_%|GYk3>%Q^w0JhQAsptUjC7V{o_v? zD9hn$!XEhR25R`l%U>;DIKULUmp literal 0 HcmV?d00001 diff --git a/docs/media/live/graph-balance-live.png b/docs/media/live/graph-balance-live.png new file mode 100644 index 0000000000000000000000000000000000000000..4edcb77e3554ed720c6a35c4d79d99b7a4ea1f6b GIT binary patch literal 52760 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

Q&pl5%aknct(T z*>(sK8i_KTei0i*cjb`zxq`&(U`x0;`}%4ZQ`)oRHkqB3gyE;*mX0{@O2UBZRv-1Ot7Ee>s4T5 z%%kW*Te~Q5v6*U*z^wZGuJ(2iP5cdiqkSXO`U0 zVp>*K`@Jl+R<*Oz*;k`~TZ^-o_#aJoI^`$1X%X;?F-S9V+J8}9Rq zQgma*L4Jh=zS_v|loRfs==q2BOHU7MG#zOQHK>sM%;7Ao0^QlsOmYq;P@Rd(12Gfz ze(0LXz;xqXl;WykO`i5g&Ya*^IINtPeQS8}-;;=anzru_%&M~hRlvp7RViq2Poc`q zPB{`;w-0f=58m-)B$nazD7b7acf-@D(xSN!}qdVmt~ieY#GA-ULS)z47q+o4Sx^O{t=5-J^tc zuo!CmMrw*hCNlff$TXWgYo$fBX`|=z^w@mgoOEzsM;Fn#*lRBu>qlBlI{y3_8d5NhtvmtyxewW2zY;T1 zlh-P4Fa5a7>`#0HdiwvwTBc3y9Avj?08WU|T}PgHxwpl3USDNq)xsng?_2QMYncJ= zuiHtu%_Dk06`yX|2n!nPZ?kz+{`_Rq6LWpsk#{E*Lgs=`zH5?u5}DOohZn5d${scw z29+4#&^NQhbY4(xPn{~=I!qjPGjYQ|RS`|8lZd96lFmScY6=znY;nLXIgu(C?i4hc z9mmQP2eVDEcJ1S0_XB=7N000?Zv@l{2oy+#*?P2$BCdr#yNPc;H$I8!rQT?HP6AJ@ z>tq`b6n2p>*bUr*Y5<5u%w{fA1-cC6B_L<8;PHv)ifzh+-kY-HZ4ZGFJHVQ-mc?f%iS z$N17z;c>PTmPNP-My5#l&lZclv~4{k>B2e`qd}%3JMO2F%}?5eyw{V0`j1~RV6YTx zB!ImW3Z@d6HeIZ4i<5Pf=2eE)e7|GTE6SRj*KQFkv8Pq_;hgY|z_sk8*fT#0nrks| zi!z08jM`GJ*Yz;FL)+G8zG}TR`@qrBOf&csTZ3PjahkQ;nTI~~&JR{>a+o-i*1bkf zj5CL?=(eqW^^+T&PqdI<^Y!dTZOvki+_)aAH&<9K68$3e#w1)kKHo=%x#6XF?2vsHF?Y?KVn~PWM z8|RfKvVabs@9T%VsOO4-594(XR1G18VGBNYoVMAOsDc)1l$?Z3PT#fCtDR3jAWD4i zlHOvnZpuEHcgkG1#148@yeNwkGxFgTw8T;?AWli=(bRXH(060l4X5~G>p>y5pfjs@ z(QxB^zUC0d{8O3Ymm_H;eJ-#{;JwHwvEEplmrH`UA?pniH?|VPAP^E}>uS4$y z1uAqeJ8$%w-A|Mao6Pfav$46=^EF@kOQM!e1-Q^l#W7siS-U|70Fl<`;S#!*RrhBR zmJGZ=3tJ7QD`>Iiq{Nz8t;YePr|E6SB}=%@GikXh2obXY+M7S86Qhlkc1$yIV3X9e z8cip<*aPQ~o55l$)ZVGs{*pY_jn#m&hTV?|$^q#0^ft=s%qPC&XNM9Hh7%>cGa3y5 zWf$U5&U;UN6UMsdq;&KG(zzb-*m7=QRuiD<6>z>Bbhy~oVP;}r#{4mVgc-3fMiEAB z{Q`FAnbOwS_^psfU!v*G16MX^MU=YJ^bS(4hCC-bZml*md#FUrZcMy4b(RS5hD#HJ zI9KoJFxF);)72^i+=$B2*%(0MC0OrDzMPv_1VKCsbk;zKVaF z^$nOw{&8pF%}iNbnqzAlwrr#iqC6@qGL40Ht^A^~IQ$?j9EV)M#@VT9){eMzAbO0x zmQu>R1r@Q!Ka(ysQ+$%u2s$h;>f9Rie9hLkxEAe_DsC5T)rER)Jx?nrR@%LOq!QcK zpZ4gNNMTDQ5!1_bhRQ5>eBx>@rwj!0n6lvZ6p3}_Vv9ffc)t(B&lcaK^aT4eo&$o+ z#*tqMh)Sj292%B_nD6AILDkWYY+Rcm4zoCK)G&zi^?q6vXnPH-TAw$2up}2m9YlGF zE_}tp!Y7=nNtKACW5vDXdTG+CFx;Pud)?PQW-9XRwVKpx{gB2h3D3<98_8BdZc{W7 zZv$U=zNc&*`+j+zI)<7i8qZF5UjnipS+H21{Z$%yJJ3!$lKqo zWU#K4z1%b#ol%RSPo0v%8=U}&{qU}GAarW?Y!w+942#>itK)zQ4xS>W-DbBvH4{pr z*9a+Vc;~U610n-=LaFCnw<*+!!^(&dU zorvz8&=_r6HO;k_?qg5CM+MtqLO=A&)4AN&sbtTP>2$AOcjkp}{URizs%XlW$PCs$ zqCIR91VP)aI|4vKJ@%im?~f+OcwlHdxi5Y4y&c<|m)6H2uYlXD>3M25S6lo8V4?tG zq#aptcFyu!ZSKuFY2ls&`O$nhP#`4X>F0j!0zV9pyCf>CP0sr4qeP67N$1?%kk&Rm zg%dS(OL#ilNi9)ix^2_ohO+C9v`cj8^lsCFh^rslxXG1IH#_v5fFwqfV7si0pUyta z$tZcam`~TG^3-edsoAgUPbTn=RD{KIdenRvS2W)?E75Ld%}L+rRuOvdr%VgRVu;9+ zfxy*BswZs;CnY$TwG-yX{FyjvV%ml=}Xn;<`sGkP#2-Rj))gT$|7 z;M-nTt|~)69EZ!5&2m4@?D7}<#~XC>&6%`7j5`Iv z75LW)1QB()T5|Oyw5pL|Z}upQ#m%L8q~d{3sGk}Q5HIKRZYM8)E9lVZUUAVL$_qAoNn9Y8fcLKI9U4FP ztx8pOnc|r2gAVV|sZ5Nvglb1^ub{V{Z@*09>) z^aC~WVz@bFj3I~=@oS5lgTF217_S55n~`xhpFN3Nheih>*C)n>HQC8M@ApGSV>#a4 zR`sF7TybjvNktXLt2G%y0N+tp`{~JrtXp$PE0Mu!&?0T${dVNqyZ&Pq)aM^1AJ{de z81jfEW_OHF`D~SNRdU&_yWijbR9*pv=5Hqtz&set1!^G~8I)mUZ_E0d2^*{&ikD9Z zhz&fs%J5&k`MO5zc>MGsuuqWtaPo4eNlxk~<5<=v5X84Bfydg5{Zy>7rf`dSZs}*emp!GoHMqN@nDo zJWsz@MZH8)=UF44>+Q74#xW=nX7x#c#^1C(18=h!zLP-h4a#8|K1S=9XL5|4{imN` z=jBDGMjb5Xhtq+>#oyXF1A@6VH}<(G-+gJ_rU=#`3pMl?HN}_QH`oSp%AIegFPug4 z8cvg3O1Pi}Si_bAb1d=!QFuUxZkI`(JxDv2Ui+nVT2sCJgih{Ef>n{uVGtlOKTjo} z5Mb?ByiQ5Okw-ASGuZj{OT+FnjmKL+oV@loO@bEW2|t|NpOORkYD4{c>^aMqo)3HT zGrljzDDeMR$GUNFu`mK93(BoBlnng; zazx30ZwB%E_^$mBy-6Ugbd+t?Fc*6)j2lWR|**HsyBpz3qxmonM*rVlRkVKJ^pobKz$LziEv z_b}cqqmg+D!zN;DKmU))zA`ATVC$BIBm|3L0RkjwaCeI!!2^Q?8Qk4nk`Ua2JA*re zy9Rf68{8RmfMJA3a=%;ks@{)R-}yIly886#?tOZ%-M!c9!Aw)dmYyB?hD2?%6lo7p zmnq$rBN_Rizh(j*B_}JL`dnXrWt;kMEWl>T)k1DH9UUfqd=Tg2sQw({;Pn(kmHGiQ zjh~KChfK1)^>KI}1gI|1;PI*=*e)^BW~ugAC&lEj+h(FNk>%Of&vnvwuUZQ}JwCwD zPr!eG0iZ`WgUDqBxlGm)HIl@YfbaA!*;O7&9MHxF6Fw>=uNJ>dQdngyDhqxOfJ&LZ zz$jFuS0wF-s{>sl&Y3QDi_Fg@#UB!fq{G({-1llfv4UT$0W7+U3m>Vg+$}KP>)jJ7 za#%=>B~Wj#_}?G7>i>2(;=0og+&O8=+>fd;vnAPS%@nO{rvuK{GNky3Ulq^+zno_1 z5#Pw{Njf}Tk~TM?^|`Y)=7GGNP^I4CxCX?=)G%J?k@!%@WAaNZrtM^}-Mx|cs7?LcB`)!5x3)ucp zkoUAsoW}L41Fk`qiHEN^QyNezEcMYc?QgVSz0IXT8Y@Vv7i1oj+<*vLeFQjL@#(J$ zLa3;{fm==Miae;t6m$|B_1{+*Fur#`GMx#R1y;_QxeIIkbiI=AwY3}r zG8R@~QYY}#*=+VlNaNCl$k2`WS;sl zs?^k>;jMvoSSMQibvawmYl4SC!w6304U!h)boRSw|JZ|OzbCAbqcQH!k_5b!PO+H5 z%-F4A$7jCn>kkp2J*~4Jj+U!=EVHc3*yj zFKaEQk7W8P<=UYAtV|9>cS6kO$M|`<$MbMq?65n*P2<3Rc-OlNcy3zybTb1UwwA-Y zp~j0+mv=|%lnAE6#Gt<4Q~+95Ecw?mmwr_h_%s@d(1W*koTom|qppROM84q6KS802 z5TAv>%Tj*98(YZC4nMF!xg!~eUAlSNNhrB&c1zoaj{ykd!*)kPonsE=Vh?*}TH1gg z{jgB-r!=oogpM=Id-D~b7T*=9!+G&5tu7pT@geHki={2g8HyZehpQ!>)9-=8*qLcr z5em868mIROk`0Vw<=Fwl^`wSaIX3FF5`O$9!9mjHJ#%WKz#!a#FKH5$Vg9D5qz?`J z!r(OiS*5h|O=L$$o<{ID!{3AbL?E|#Q{0@pPWP zZ!Di1p{v8^8NCec-UKTuzY6J|QH=>S8;a|Z_}uQCp|-~8k7=S{=Vxkol))H{Z5gdiB4Y6Ht7cKsq&nZ^+R7`!ucU5fRC#&JD|lL5D=Q;$5e)m; z)Y^;}$%{q18?6rYG>NX$_`6)T<6Nv)9Yl344x4iOxPYsw0Qph}rQUEI%`v*WurP#2 z5lD5{#-ww=Ynskf3hde`I8;$3HkMia>+~pm^Fs5>chv7Bm659 z=#FQFLI8^2kGHO5uU7-)?orwVrVRivO^tX{6LUg_#GM<=PBJ>{K7UcNz05FWO%4t_ zy|vR4tgAkbQ0r=4)l*(mH}!@^tzWdY$Gn5y>}y~}jkrw8jfiZbis0`$A@{WE1s9B@ z5*rH;3HI&{qOYDHX2pG!LhAIrSv-@!=?}9h<_dZ8yRJzOYHVfI(7!x#foNuYrnonk zVME0|pxzzuD=;8FGJJ;We!G_f@K*7g%V`1J`bUzB2eAfv%CBbRcrQ-rr}`VYx3-wX zNOo_h%pz*lu9&L05a0Hr0tLtxpZT|{=6l`9d-`;Jm80Pm{ zywVI?&|XZL(NfrPESxQa(m!!{Z|^>H$ZJ^VRR|MNs}b|Q-M3Um6>61AR^<{x?BYnh zODoN90-6;$m%imryYZ=?o18E4SCKFz=B00A;YvSH&-v{1P0LwbS z;h&7ENWId%4f!gS?0xmnq%wI`mo(1IiZXeTCf~u}v9YQAPYh#hJ&S=kZh*b#noVpK zISi3ng0LzhL2jPHC260O6QtAh#KzcU4YlNe%>{1oVZ zDx}AM5q4}qK6`8T>|maAEi67g9bY`LVu02(7<0~ri&22JGnExTp!&NZhx8fTleL4Bj$29ZxI*^Z|wy)9H&oyiaMC}z8fBr?j?#p7C z0@`LdJ92YoMw_2RGHIeLOF$gD>KeSRiifH=Cd4-u8Fpw^M#pF<7RBxfNyhJ;zF(O? z`EjGjtTH5BCr1m3Nm~7U6SHlG`)>Yqi0NxO?}(0sy`13AAuOb0UZA(*zEtgcX_=V|UiJ5!coDY5)6_d*vc4gu z9%(=x|HQl>Fmk=oY;g&pwUXACciQ8Uai^Q5`XV|HzlI#+KhyGzVYFdj0k*r&GUyuS z*Rc9NQ2Ty|bf+0w?}Cv;dA}R^!mi&~K1;fc?#o(4Fs~)!dMfWNb{WicQNT48y~I%af@SFi6D0BR|DQHvKD zyuur!%18;MXIu0=Qb{wll^Xkfj9e31T(mZLnDE9Z=wM=25kH3amiX^s`X6%D`C7LG z%3AQ!emb@P2KF0L>R|}?dKI;&`WAquR>x~ebx$1PuaK}SHO{O_1=l^ z5zhM?4{VE?MbT$OQ_cE`$8a?)Ley?~>RLf$#ss_?@TZy0J6quNxCgJmSI--rHZ2ZLzW`~2h=Y_r+X zKaw{awAHy!6ko5I4vD6sX5t)<{9;EL@UE=}#D4o2d_1KT^fF?t8u|@M!w12mg#--- zYbMW3+OOMStWW;?Xtp zTRC?R|3^NkbRBf^Rd7T^rzYe*r>NsVyo|wyVO!$54ZO|Q5O754x(hg^^YGRp~##3T3 zSmgj~ryyOk4)QLLsz(_w{F8$eRHJZ9iX6G6YE}izmpl8H&5$EY1apD z!{Lz86B+RE-u8sitW4f6gWmAow@diXaC+lSzBCXw>x6qkb%<2#-D?}~EWGQkH5=wW zPg8F>!0Rf$kIS%&9)ia0U+`^3oAzkMw8co{tAp;0VTp%Wby&7~q|01JPMLj(A65i( zzyg-^y=F(TkP08GVqP{Ondk}a-YZHQ*b zI5@oU;>f9frqij0i+_-?7!XmSEC1O2d+fpBqLRP)<8K@J;ujS~2Mz|jYJn0v_HJtW zYu;LZvqcATw1c8QD5)OB{xsv@Tm9121m#BUM~|qFYK|Tar&*OV!;=Lg@+Im@BV|jK zlJTK24%?{RNoH@jP;hu{|wO|0t+ zuZ%j)fbz_jBk*$bc~f)=PSS|fqS4BWf^eGZpV$2gib-8;#sbfy{;&vXNmWB$D;-s% zytB2o7U_}%@UNWdL)_|z?pAtYeGk9Gc4OGU6dk^Y43Z%Be)~^+P@usmPi%D>sUjM1 zIxU+2`Y0&czx7RUx7}=XZZ1vrqD=6Y;XY6beB1U7GCnmUf)|!CrsV66fJ? z_?KH8(*no;#sXLk)wQv?F_-&>S)|?C^&H~{N@=kFcK-e3&-}!gsjDT=uTmBKdCmiJ zqWN+;+G3d-tZixKN?)w|kwQDP3S17VLLEc^s@7!DoU$XnNJq9pi4_lp6ZV4C!SFbficE*M3Isu1>+p_Bsy9Bdm@msMXbSnTmT>YVng%xlS1a{(^2q7N zy-NK1o{0x!hdz1zjCJ8z0)Y3G)eD8$?IJPM=c#9? zL5xrGib+N>>nuV-dL_b$h=C9vYDK#Dw6+9I4U8ul%O4vWr{8#s>q)1s7*qK32iQGh z>h=B@NKmz3u5X*b-8JBcmk(u3TlE#Nr&Ci9!8%EvmKFy8TW7o; zuQVFpad8S+9qytp?hBYv)f{cRLwC*%#HLrplr$Ye{r{SMWihJLFWkNJVeltT>HX8QV(vS za6r-okZ{uVW64!U*p06#2{sUYQT`PB{zNa!ag+Y>E$paWEmnLQ5ju~_uQEMs&CQ@r zERZ@9&n~X*1w7_6KF(Of+r)N~=el3j5I@$B`12XA1U-2;hdv(sCUT1t#j+jNX+ku0 zT6AcpNxS_^<233!seQ>%Q}1hb6I$-FBU;VeOJE#|+9zi$0`7wzMy> zuw*)6BS-n%(w}hlZ}wN6WM1CC79lq6dC8s5mzT9D#B z%nJ;D#O0MNYOZJ2q4(<4MiPWu!)1R?f$W*{N(wqpHUK9fH?TZ5`Y^^9Y~HOqv;)8G z4vE-MG2=a|O$NyiIBoEuUwU7?yE!*nuvQ-4yy+Bp6rCz{uu6Dz1A7dO_Aw2AU?BdQ zvP&{)JD#GW*jSmdidUiY{uD?l8+N)e7`UxsL<`V9~*XSV5SicQ*zwY{3Z>L;GdKL zYPfkCSI0X6g4;#I^jg!B zL!p(5?O=SeT2bYbS~~fY`H*Hqvs#6P72j@++*g%*nfR+jqC*O0gu=qcZ_ZxdfFeZ~ zWhIZWs-iEjvd*@_V~``8vCgI z)1kiN+v4}mW5#}g2+`%bb-IvjR%||T_N7^v793DBRemSvw}7-BACdmg>YA@DfVMK{iwU!7PI zOv~Y9??IoGTqR$9C+X#zJj3QvKUZj&)=dyr3mzyfZ>RwzS6<{s<8q5lr!qvq1-p@) zdirc}KSP$X#bNUBI&J%a<h8i5ApWD$x^|mwHnzfyx7OunC zG7g##6O3OJFoKMYIg}JYF<0c{qX1eu#XIP-N}R*_5R9Lz-_JJu^l-mOoJviGL4g&O zgAxZtt?eKL>5j!SZRDa&J4=2?`%Ye7K&bLy-zt-!QI~+|gyEMu^c>gLA=b~)nez+| zGP7mBLiv=mNFDw~rJt%gaDg{Xqy`^9G|3y5g7MgM%wMCTm}ib%3mxT^ILt+)vrl$# zO8|K49Vd*j&j(@zxGEX1yTHZvY`l>6HP#@cv@0g zuXNDF^2cEX34YtqQN8SPOFeF%-=RXB(XQ-iYXFY4o91Uz$Q+4j?j{5oOxPts;R zFw9{ zYBgX7Qq&B-@8oio@33F+&bg(=x=N=`AT-k0bdPB8TisOt*}BG;Z-&Br5TxeW0IAKI64Rf5W2Hd5euqGEvFD~H-q!3pEBs^gwd-vy8 zbMB~v@y!IyT*#HVDbpJIa{EhDEW6FgnD0se@YXCA-SP*Cba~bO_z3B;lkZ8uwbHHH zd&IP!+ITp`zJ3u@PUyO3>a0{IqAr!OgkYRfgQe01JX?60mw!)Jc`tc>`N*F_VL1A= z7nkJ6G#%+lC9DS7X-ll#Q693R4O-=V38xXNH3^2>3B6#v!U` z;1v;nqz}<_SlfkBXzuoRY??;a*oIKQbfTK8K$S_?Bk%HGJ$GpiT%Wg)>%ZYr?ebrc zKZ`8$_PhD(Ln<_9l_YT$TnqK)>gaN9>-y!3HLeK@&1e40A48F>T^6*B-txwC) zWv~`gwT`_aY3%IwM`pb9nuWQkuin^V&yB@e&206lv{m{ngp*dAvOH@qaXlv&b_zKY z=p8Oqx-%YoYbq@Byg88IJg}kR5=>(iijcN90+7M9k>M}eJP#Zj3CVP$BQpy z3m#m|DYBe0K>mfoowQzGee?djzYLG{OI;kIHQy#dt;CV2Kf=f6a>h|{+<`e6fjz3&6mx03Mw+u*cTn8s4$j1Ge5AwV!((~{Ep4B;Q<^wtQU|B$#>|D_CmWMN4=Hg>qjdpA0^v~&lThmVcIuEyh=$49x&X2`v_H6nriO$i6oQ3>|UZD|PGCAVJ0-qnzOh0Fan2GwQEA4c|6WWTAb_o(iU<0^P z(pZ$&*Wmk2ppA`4@6KoEmdvG&{}XuDPI)DIVSZGUJS;CvUAfS$polPvYuHEWbNG!G zF|LTTpbeIP*`0RbCinIoO{e4&dKgj@;EX*j8TT`kwtc0HwkwdtTnusE>|m4gT@)_K zxrJsV|MBAfGJy?nOA*Qr&sUrTEH7k-PtfnRa-*i(p&5d<&#%dywRnrVnWGC7B{PI7 zth;~c%}DHAWrgT*nmqS=B0~!f7-?4fb^han!4qyTfZG#}z=a}1m?oDdo11IFa*~hi z$qk>w4Ur1{dx9vIkjx(3DN444EB1RU&X5|&FpdExbTA+|o!$T;pTf?%$-N5FCgm+n zt{7tRY5`+CUYoYkY{z^0w(L$pmyfmR8CK@GVN#(cjrvvNVlGVYG^H;MqUgrBzl_A$FdJc zy)v-2|Niq{KaFGP-iD=|Xk&6N&*>e`Qzs`GX$)j^LbY}p7iMJA-8abztfsyU+bc?{ zaG>t>#s2Rww8P5f+d|pAo>qFid=zJF!@;9HBm|F;lZJ^A z^1xOlCZ+*ccrK)1y`+LVl*zJ+m_ma1{5FaO1g*M*XO?X=Ok1o&YUrAUg>EY^lr?=x zH12{`l9Gf5%pq%>IQ+hYRg%`!P;@`i= zoHY8(HWZUU?EGB7^h!5mwTO-&IW2g^m@P@*IW?GLP6Xn|J=c=go?nHU6r?B8|HG_t$(a&UJ!52USrFmX4wit4CwSw&F! zrHD7QudFvCN*2;N)HGCqN8~HtZTburaGq+Nju*1?UO@V2P1 zp@=-Dp1xg=(X&dQ)5P5~_)Sx*SncXf!=SK-i0=t!a_Gbaj~rp=E8YPn!SG&gyPBQD zlRc$WoJw(=^gdjzmH=d0UQo4X_!z5%)v6Rnbk)55P13u2MJA(M2ZT!)f>;BF; z)VZ~3y8ZL?*Tl)Dg48p)1f$$pBE_a91ID8IabhD8t>iPCRpZm<%zDb96Ebe^Sea55 zOlNV&Izr^Ax#P|)2ZMEHP0o>qKJ(+ZirX0l3X`dYv;aE%sB%*MYANV!SsGQ#1B?03 zWVhU8xLVaUR+PO|nabsQxuljhkI&yRjo?v@z$AJCODPh_3$o6!chyI+>q%FerOLCF zd?}K3?O1vCaskPj^&3Rw%^_Rkz70MD0cC-g?yW+fx@>pcSfu=mt_m%BwB_KM!A_H| z^18VB+h1n#>)q<)(CJv|k4F9*3o!el0n~=M={nn1_=&w&`(;7OX~ihIABsiVVUvA| zNyvzW$7D(?8>ysAz@*k8yhT{uI%)T@cJVM$c!Myt=rx4`fr-ht?3~ZHGezttjnkE0 zny*KWzXqd}_jKR_-CMiAj0CObmbb__#lS97R)Ncw9MPXhm_fmhRI?RcK7ibGIz(n* zFiI$Dg?`C)Cg4QpXLGBHZrxeQ?2#g`6I5h^VUdK0TZ03|=cJNd+m%6h)?w>v$cI6;{g*QZ zSi5r~;o=|s6^^@f)zmFwy@O4`l94-}*@mBIpAD(ypPo1OICUNeUW5O*^fRRo^1xZC zF5PBRRWqD;EB$|Qrn+CJIVt+G!lo^~&mdfOlqV^8xyKeq$jtjZwN^vXZL@c)GKia8 z4RpGjO$VcQ>zwHp#3O_ItgeNNzro7fP>~J=b`Z=i&&)Z^Wu`L5sNZedzFDct`%3m; z`JIX zee?qZnwRw2Gg@oXlk?nR+T{X2&OhVyPT0ld=-jg_^K-V7osr7NzhrRs?2>)s z_gIK$D^&TAo!fN||B-WE?W~DLv--_4GeA5;L{r0cnDnbz0{@XSmG2*+H9+1mqvco2 z4Pdfo`%UBRbcJx?B>AT~4X=^7yc7r5OPmi2y$Y~!ik-|U=p2#UKb+jc zb~xo?a&1FlXy1Pb8V+Ax5+R)7d65KM&^waeR{N>vDV&Do=om5kBwn$Bf=>*arVYQn zxZu-KRWQE4dSo+@Fx`th76<3=ivWfU_qjU%f0b0nXEWjE$umfuQ)xp-O{shYed2)}dBlG7io%L+@hj%GDg-TGaFN z#7?6PdBgG_HK7GIJ{nu~ODp&i*gg~9dr&N85*{~@4XaFqX0iPv3~SSS(y5p54dO`; z>vf=C`6v?(OC<9YcxuAz>vrr|cIQs@N*SW&p}78iBhz`MN5c`da0S#9l^f+SVcWKz zsLIW9GjSgMnaas$@48CtEcLO*rlW`7dIIHP&PV(L3AXSi-H}62Udw=1VQb}jphAxl zZ_icL^uS)$t}ELULzSa-G$+5FKn#ed{$2{v^GtlN+3$}M%}NGkQpszybSb9Wcqd=q zXa0mC7@g0Rdqm-{<$H%&JlMy$OQ1nRa~1>pIxRECaJ5UUxjdyZ9FW(AD~osdam{OD zVT<7*^YA5FOQ&6Y*><;`Wgnf{$0bYQg1#O8pK=s{!*Mm*8BHkh8k=uoN{%rvd{5Ff zd<;KdEx->l!Zms@!&K?kpyP$A)NAQ6<*Mu2?sM8#Aqew`*r*cIu}HE9A}?xsS9Z=@ zSk{j#pJVH*k&Dj|%+uB&w1U9DHtB#qpaOFLrpDJ-m7?Du!x~M}sSk=0Lwl){F(HY&sQCERk ze^&b7ThJGga-nA3$X&Ix^+qlR8sTNsN^QPT+#(xfvZp)vHX07G4R9qYZUjd}SPkZE5+yGZ&;a`gxBR1m6r`%JVOhLG7HgZ(tBYxWlxmds~UB7g_UV-_L77> z=KgfWN8=9&TUWTJ2p?S3qJP|y;0$U7VlE;BjpCy-Vld4@x$qDa%wFG?7vBZQXYm{( z5hmL&$H@e#rc>4%1aF($*m~+WBx3ZcvyBQNYd(AWySzDv4fi|C%IK1mt>u%W^Rw~QQs$wwW8?>OwmmJ;?sK8fUIIr&gM6|xY9Y4qJ2*jeaOjqNo2Fh8 zle6GH(_OcI`&GQH=@>oB+t0Mir?(<9I$NZC(jtNspPI4QoF~@X*fi!pcZ5xPFy3CC zIH?Ke5(JNGr^c4~>R@#Ehju;>wt_kW6}QhxFVYdqv;K4*y~X(#^uX0s7a)%yAE*zh z=;WbjpJ||{&_3ZH37-o5^yVwaYdpvoH5uMM&m1;UGcMm1!aL}ii{JF|Vg2%Fk>ah| z)N+BAq8wW%3-wybdy%T}1+P4;Hv1?YQ%0&E^NJ}(=;e&u$zbF7Wuf!06zR_#YE%sl zWm6~VCHY*)$H=}nn@J*1B0rauQlLzE>irfQm<7J-X-!!y&11>ya4mE zd&|)1myuAcAI~im-8|{l`2;+B`rfT7rg~?sa>&=kRw2mQJ3OUvhMcd~RbjYbd)Cc0 zg9A%6T480h`pFu&q4sr6yq#1KDn?^(5Frlj2YMr(@wN(YsF@_xd5B2e+etch{u~k?8j1a>)pa8mTAByqw9-Lr z#|k75t{c@;l`uX~XPshx-&WMbD|qyss<5{uTTFXRxRs32pKhBQ@_)CfY|KvtF$taSALBM+VE2Yknc?ENp#@s> zuO@>?#1qlwe8+xJ$jrKlAG{ojo)8Z)DH+lAMG(}tjK-p;CZ8KbiC)Xzl0s`I8Hqo;gPresP>38tzd{6+cU{*y|a9_p}D_c7%%WDDWUavG*jw%DG z^S81O)J-P<(Yq~_(T6g4@+6S)E{0`Rfwk@C?uXyl(Cz*~3Ch|8WEr9LukglV;mh`| z^s&|&0Q#LLQlYqel8Q+0nRMX3id*YB57eU(arHc`4L+F;3mH`Fv7ldT ziC=5l4UZchKzH>PTO0O6){B02YGn8sTJS&2`K;jwKqBSt=*K=1{e8}Fb0|c0?29OI z!=jg`1DDyQs?xh<5;5l?y$&yQUUE;dHC*W24Jk2wYoye2o{NrEYSXRb$e%_Y#G+$C zg$f9e-~Qdb7Jw3g86@LozxpwIYYY+4_%AE*hldS*0MR_pqpc;9JGrBNbkvLn@_b{7 zN|#u0tgLdeb1<TadLigGH}5y z>HM_2sl16afdK{DB{Cy&4Hk?FtSqbIinZ_e^p&Ag z%cxP_;w_jB+L_8l5P_o25&X;(q_u-x0eHUZ36Lk)7LV1I?3zogG|oQP_3ei{NTG{Mv-0I4d)p&`5=+KKtwH zn;W8!X61Wd%9B5G50$)zlMOE= z(q|ThL=w}~bf?~~6!?^F>qmNK=aiPZ=Dwx+Jk+4a09*&wEeiv{uvs1mg%Z7V{kDkT7XqU0RkGQ&=^?yNeeUl!glGp2)H&qhH=w@$YHV1YLGz_NIY~G%SdlJS%Cn zxw)4on7tL{3Y2s|lm+UpTT)a3T~|?c@?L=}OonTT4Vb1BJHE z6nK}25ci?q1XT!tc>+T@wnuZwL{>aIUZkDL(XD9VnkdX5KHq^TT~CH)8Cb={FSLLTOiDXC3v+`%GC{6f8gI`&5C)0$r7E1zGWoy?SkYc{;7+(>E}oz znT|nHrcVOR{*$VIbjHP+^SLB@{-n z*JUlB_b)G{qdztdRs+sk2DhDf#mOt%3vre1C!Rf?PaTgYr)wf{I+ZKdubnelU@@IW z!Lw0M>d)3ibx8SmucHR1o*eu{%U4s1MHo0wXkf*&rlTqzQc-fXBc<$BQpJ*B;_@-M z&(4$2A3!9`8=aOJY*eh2kBV93*iC;%xdrX|UA5Z2vH~0}FQX@Fc!J4<)bn?4bzob` z10Cn;%)~pjQ99{lLQMi%g}ho$u!HYzOpae_Oh&M{F}r9Sm?l+Il}VhNBdMqyuxgX( z0!`dJR&1ja8ri3vKAPma_6iEJ|26RC=m<6>a2j_EuIUdbecp=SWaRwJXsAEKFar+n6OmD6@b*^2iTHZDm1Ni zXWA5fEN+Au1M3EtrWR?{iDu%p=p?k7_R0#2PtFQ2d+OBv8$Rdf;KQ}tG;(MfW;^L7 zpYG1cr4woXsJwn&A3zBx&Vz3sbtILUs(UamhO+pKA6pY_+y|{1zV1kdKa-aY8_bgo zF!c$ws|suS>oqh0$aQb>_KLOGVBvYTg@Et-iF(KZ;X2QI!fj4Ut3BhGXi;cDUVneQsb%dw`MMt^p4AiRB_{lkf_S< zW*xI9Z@jx$)mR6}oR%Zv1cjI{(H{?Oi)>r+8ATTL_hD_LDMxEt$tkEv z`#g=VHp!$!&`SE`=*Y7qsmu{^=xAYIs{fX;MDsDAM zg+anw%uY4X8Tp!-H+t$77V*TPSqGxRt~&*m#mw~x$X7ZmLbwvb#0b3}kaazr>EuTqWU4wZ1TCv2djgUxu!cQH!mD#M zDnqVn+pad8A(^$*(@eSJrE;|OB=U^ zm#sFhjc-X!XJvoirUXi1O?kjLc_6<&DOotPqsrN!ditL4a)DtbuP2`=V$n;6Qou3N zgFIX_puj4KJPHf1j>b!^2N8emw7|y7dUSq67QU}(M|2=0F`#R4jp-XzSTmUDvhT>~ zYE+jD>zs1hi0L2ZHpAgOp?EWb4V>LZb_&c|Z8!5cC2BW$@0(WhpkH4q={ja4rw#D# z@@ZooXHOR5H&L80xy|q$v6XPQu4@JzJTr+UlQI=}hh;n=eG?4y0nc@LdzA zDs#Okf*|cYjSW~?xGtVvi&!*Dkgw`$4j!ffnk*Dus~?q)!D-Ixf=0~&Da7}^`$2?U z`$kYGP)><3{#u9WEYb^;+It2K&I;)qK02pNga-d{+zQ{Zm+=L(^Jo#CDqXrJ+^f=7 zG4nhnIlYH-^K|7W=P6e^bv`1-T4ZjHv)z1giMOlvO<_YY%WHct^WR6R3bEjvS)CcU zL;TYxEi??jzP@n|U(LI~m4lRuE*U0=l*7a(1j`d;JM~+^(g!3KqN1 zOZO}}$|rQEvQH{@s00((AFlpLAZvb6YgSOq(`C|L9K!#3vS{4H^oFh7%D6Iqf1A(3 z?nzK~z7-qmFmnjYxm8uMwh(hJC>K*`-1#e|JO#zM1av0uO*Ax#;*BQLK{#EqMW>&K zb5XYNCM^EYCBU@OxoCDZasX41{%)QO;{Nv#YK7Qy(X%aXy)m@%GMItO?;Q%!vvtz* z{P$T|^r$G>=uXpG&kXbPVLw(QdN#eMpu5$e&Tlb6OtWsc-kbZcX48jxnxZH%3_;)2 z#EThG()#HRwQ94VhQwUXUcr+WYJc6$@7wQ@uLiSPytKdlbyw%Z`GiLQVYG@r|34fC zRV+V%V=DXy?2Y*UZxNX7&^5oESWUqBf572yRj7<4Bq4RKeW_0Lo`UiIdKLMf|H%KW z%^olPb)_)gu3Im)p*&BUS?AgjX&SF?rabFr2c~+AIQ-7^8bX` z!qL63)H#3cdYgZ8Bi|oUFIwqmXLC`(mc_H-onr zGRF_Oc`~W={0?v)q5t*oeGI;Ksv^Jhdbl0f51~={dJR2i*S6Z^vQ$SK|L?xF<5H}u zcAYhR33SKc?Znu$B8~_Oy4&xY{@2ioA{jMEm$)L@^J=Jv?p$@Oha7_59y^fsWt#ch z)O*IWd%$3NK?76D?L4u9Q2n~;+vqIpR60LK@@v=GBFskGWosegXtdkEA)3dlvt2^R z#`&SH*da&{XuA>Ab5HuNRCD1&G0OKGaO@g?uoH0zfiyS(&?iDJZ~xXWB0#xVWwLaY zYjdxkf{$XpCwjSI)2C1HQj(&|pFV*W06(-)Ai!V7`5y&7eM0&q zB`T!qk#Xt^9e_5l;^sQV$5U5FLCX=@o7YW}LP-tAmP#qzA6&u&87eCEiXs;!^^SB$ z%EUzeOh#^H^o1OZ)JhQw2NA3XwZ-H!I+A;wbqe1>XWK_p>2t~X(F#Bl!SL5m!>^;t z%C@pBuj4bTHV(x=&i_~piixJU1gaB7*YI~Af@&F2y#H7STE?l9!#{Sb|B|vE~XH*sT!$F${II!sA(MySAFv zYHu!i%jFfq1&yhSjW&xJYe=MjIvaupP0r)JA==qGHStHJVVFCW@p!Y z-EBqiRB_hq{+C3=eU-9G$$=!_iY6K!Uh$VLsTQmXPX|LjM+Lm#Tf^B7+Ik0o;iG%D>xyBs1T&xWUQ=Z?yIzH zuuwoy$@9b_33vl651)29_}9Q>HME63#du7J$yL?6gFOd`I}tG+v!aRiT{UwWJR;3E zg686&K-tD2(yOj+F6^FcmbdQj#JBp>^`BxlNvcZF>#D8Q?DvFGYIMT5o{}qlO3=Hd zCHdlg-%l;wEHz8d&7fGEu00LCnFpCRwADIyY>AeNvB_QYlp8G@6CQ?J)yK>CL*s_-<#lhsaGueYg9V#{(#0$hK4OHykcI;m9rA< zhT>-@U;Op2FHDivGscLMrbvZ2AUvUprP%5>>hnBXi?a!+4!B6Yj zvEbW1KG&;8yd^Q-miFMCU+VL^4;q$E8hPnH?3nQ>*q~Y5Jh$GMMd4IChGmiRhFoYf z`iuuOzA8C5WaKS38h;F=^r$XYPaEoGGcjEM(A+C&EReC^3VZVBoJi9&A|x zEKAeDw|*b2xU;ywEFG+!j)`8IzHBiDH68`^)_{zYc8l}03I0sZky<+&zcs0Y8uUs! z)Ho2?xJ_(+KCpFAQ7brfPJqDZEXm~?|xMP~p(u6G=0C&PNWw+66L99oolq|}g z5N2V)rpwinsH&~iQzFh-hS#v)^Q~%2=HS;m(<-+v{%8yAtT+!Ur?cUmb!7Gv=BRba z^rMlv#?TM78Axc)2{}D7j1X4s7;A^2W>PFHaDWz4G@;&lV1!}3KM|+deD`$B-QYKJ z;OfnfwNpWxou3#5sB#X^@ms-m2feHCZS`g=9P3Sakhs z2_t+;(Y+-K&-{(f)XvYcP5nHI6P`KXktyN(9sU*&Un}jU(I+nb7yxqaJ;oXqLMF*9 zYP->)a1$HI6GAMA2l-=xSlZ|67%8)Je*?VE6orBE7ug=)hLXkbX-k6E$HWf<6;VdL zQu9OM>FI6bEfhS*a}e*%Qi(lNldpg-XBIt+(#*9!_aorG-TIxLG6F;#917WWOJ|fBi*7ov@|c?sm57?w_^CU?$7|wIkViI)<3jvE zj({b{R&wZkX$z)px?dxLlQRaLyO5F^=dXOZskC8u1qa7N9z476lOW$tprbPBK2;oO!3`0mn1vWC=)+B8&aEWnx<+`r+u zSHNMzZjBQ+81V*4nM4TLnDs(D>{+F6Meib*9zMecdPoBFu!`?C%8Ra~m5%GrhR?&@ zBMA2eV37|cE86^HCmCBcAi ztP9TRoT^;Iq&%AwNDCi}|6*Dv;T_Bh+;xl*u;4_~;SuPonmUdINqPnHfZfgDc2kW? zg%K>orQPMd_G?6cd!vG7gj*H;{9QhlXL&X?N*svNEnZ|%gSXYefGSE?PqwRg^GZ%Kl-eiu_VFV%1BNiQ@mreB{+xsO7@~15c zCtsGNHjD2(>_1JBBupztbXDQ%?Btc?xqbFcFyEbpwCWazY1LYLk zKE$5=ZsKT)&Pu9nxnO_|O|N0w=-|?Q{9kE<>nk zo-FsuTU&%Q&5w{jT`(Eg&YIPImsddEsfCA>u>VHO(;)_Um`w5d<2kZd_2Tbqv}s>Q zhp&Rk_yn zSd@$U0auJbO!z5%yO*%FugG00_+esSujVfKRBKs|Hf!jT+|&(uLpiVihB6tyhs#B( zqRss`u7^z2x5Ka7U#Db~H&|UwPx?J6K7Jpt^l5ZC>3X(oJBwc4&@B05XJTP7@5SSq z>pSfxQlF+Oi%qKOa(W+g5^^gkv7X1v(Bpj_#s{TX_ZYb}a!FL;wX(`GP`Cv7y~Rn4 zwE8G`);w}sHQm$76Cl(gQ)o8Q9%)@XsUO4{LtNRhKRP?Bd@n0yIg+F?&g#j7Qrni( z*qUp1fB$@JnNf~sOWW*5vU+(c{0vG^s%c?*76Flvy{B!Khn|qKl%IeNdvg57HrLX; zhN|N|p(gO!^YGDmIE9XmehbIBbr5^rd{(+rH*Fphh+6b4pxJr4H(<|k?u$!^EYXC# zT4Q%L)+X}Tw$+EDp~K|-PPh5o_W{sXR~Mg3Oip?`=Xmft(dO{oj*ryLmZ)yJ;ma>O zX_^v-#ax`qKrq=GDf|{zU4I^tdq+b)B`kAN)I`6@WrTrFb)vC2sW<$rv_9(j^`*1J zD4JPAC7kFAarP*4&)V8Ne^0xpp?q1*89YfCH#s)Fj)>#Ee`fa($U)R+zt|;vm?z!oo)bp%dYs~5U4n4P~ z*G$EYEh^ai3Zkb=2?6}C

Jt+-*xz8Ak{=0;U+_v@}fnLZiJJt_G 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 Sc#y+OuAZ#lOA?m6lPk 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 z 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

IGHa`>)E10uXdk|ZfnOo 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

H6Y9RZViXdx%?= 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%0A1;Y8y&C!8d&l}DTi%`q5kskZc-Zg>O` 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 event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -874,6 +911,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -925,6 +993,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/hooks-core/observability.mjs b/hooks-core/observability.mjs index 7475c7376..d02799ba9 100644 --- a/hooks-core/observability.mjs +++ b/hooks-core/observability.mjs @@ -430,6 +430,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -466,6 +474,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/cline/hooks/token-optimizer/lib/inject.mjs b/integrations/cline/hooks/token-optimizer/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/cline/hooks/token-optimizer/lib/inject.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/cline/hooks/token-optimizer/lib/metrics.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/cline/hooks/token-optimizer/lib/observability.mjs b/integrations/cline/hooks/token-optimizer/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/cline/hooks/token-optimizer/lib/observability.mjs +++ b/integrations/cline/hooks/token-optimizer/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/codex/hooks/lib/inject.mjs b/integrations/codex/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/codex/hooks/lib/inject.mjs +++ b/integrations/codex/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/codex/hooks/lib/metrics.mjs b/integrations/codex/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/codex/hooks/lib/metrics.mjs +++ b/integrations/codex/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/codex/hooks/lib/observability.mjs b/integrations/codex/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/codex/hooks/lib/observability.mjs +++ b/integrations/codex/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/codex/plugin/hooks/lib/inject.mjs b/integrations/codex/plugin/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/codex/plugin/hooks/lib/inject.mjs +++ b/integrations/codex/plugin/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/codex/plugin/hooks/lib/metrics.mjs b/integrations/codex/plugin/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/codex/plugin/hooks/lib/metrics.mjs +++ b/integrations/codex/plugin/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/codex/plugin/hooks/lib/observability.mjs b/integrations/codex/plugin/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/codex/plugin/hooks/lib/observability.mjs +++ b/integrations/codex/plugin/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/copilot/.github/hooks/lib/inject.mjs b/integrations/copilot/.github/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/copilot/.github/hooks/lib/inject.mjs +++ b/integrations/copilot/.github/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/copilot/.github/hooks/lib/metrics.mjs b/integrations/copilot/.github/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/copilot/.github/hooks/lib/metrics.mjs +++ b/integrations/copilot/.github/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/copilot/.github/hooks/lib/observability.mjs b/integrations/copilot/.github/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/copilot/.github/hooks/lib/observability.mjs +++ b/integrations/copilot/.github/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/cursor/hooks/lib/inject.mjs b/integrations/cursor/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/cursor/hooks/lib/inject.mjs +++ b/integrations/cursor/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/cursor/hooks/lib/metrics.mjs b/integrations/cursor/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/cursor/hooks/lib/metrics.mjs +++ b/integrations/cursor/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/cursor/hooks/lib/observability.mjs b/integrations/cursor/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/cursor/hooks/lib/observability.mjs +++ b/integrations/cursor/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/gemini/hooks/lib/inject.mjs b/integrations/gemini/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/gemini/hooks/lib/inject.mjs +++ b/integrations/gemini/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/gemini/hooks/lib/metrics.mjs b/integrations/gemini/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/gemini/hooks/lib/metrics.mjs +++ b/integrations/gemini/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/gemini/hooks/lib/observability.mjs b/integrations/gemini/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/gemini/hooks/lib/observability.mjs +++ b/integrations/gemini/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/kilo/hooks/lib/inject.mjs b/integrations/kilo/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/kilo/hooks/lib/inject.mjs +++ b/integrations/kilo/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/kilo/hooks/lib/metrics.mjs b/integrations/kilo/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/kilo/hooks/lib/metrics.mjs +++ b/integrations/kilo/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/kilo/hooks/lib/observability.mjs b/integrations/kilo/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/kilo/hooks/lib/observability.mjs +++ b/integrations/kilo/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/opencode/hooks/lib/inject.mjs b/integrations/opencode/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/opencode/hooks/lib/inject.mjs +++ b/integrations/opencode/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/opencode/hooks/lib/metrics.mjs b/integrations/opencode/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/opencode/hooks/lib/metrics.mjs +++ b/integrations/opencode/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/opencode/hooks/lib/observability.mjs b/integrations/opencode/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/opencode/hooks/lib/observability.mjs +++ b/integrations/opencode/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/qwen/hooks/lib/inject.mjs b/integrations/qwen/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/qwen/hooks/lib/inject.mjs +++ b/integrations/qwen/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/qwen/hooks/lib/metrics.mjs b/integrations/qwen/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/qwen/hooks/lib/metrics.mjs +++ b/integrations/qwen/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/qwen/hooks/lib/observability.mjs b/integrations/qwen/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/qwen/hooks/lib/observability.mjs +++ b/integrations/qwen/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/integrations/windsurf/hooks/lib/inject.mjs b/integrations/windsurf/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/integrations/windsurf/hooks/lib/inject.mjs +++ b/integrations/windsurf/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/integrations/windsurf/hooks/lib/metrics.mjs b/integrations/windsurf/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/integrations/windsurf/hooks/lib/metrics.mjs +++ b/integrations/windsurf/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/integrations/windsurf/hooks/lib/observability.mjs b/integrations/windsurf/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/integrations/windsurf/hooks/lib/observability.mjs +++ b/integrations/windsurf/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/package.json b/package.json index 604f7c59f..3d032bdf3 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@ooples/token-optimizer-mcp", "version": "5.7.0", "mcpName": "io.github.ooples/token-optimizer-mcp", - "description": "Cross-client context optimization and durable live knowledge capture for AI coding agents and CLI tools", + "description": "Measure token savings per AI coding agent, optimize context, and share a live local knowledge graph across 16 CLI clients", "main": "dist/server/index.js", "types": "dist/server/index.d.ts", "bin": { @@ -103,6 +103,7 @@ "verify:all": "npm run sync:hooks:check && npm run eval:ucr:qualification:verify && npm run verify:clients && npm run verify:certification && npm run verify:harvest && npm run verify:ucr && npm run verify:ucr:study-design && npm run verify:live-graph && npm run verify:ui && npm run verify:interactions", "verify:interactions": "node scripts/verify-wiki-interactions.mjs", "dashboard:verify-live": "node scripts/verify-live-dashboard.mjs", + "dashboard:attribution-smoke": "node scripts/run-dashboard-attribution-smoke.mjs", "explore:wiki": "node scripts/explore-wiki.mjs" }, "repository": { diff --git a/plugin/hooks/lib/inject.mjs b/plugin/hooks/lib/inject.mjs index 372cec753..c0aa2f1bf 100644 --- a/plugin/hooks/lib/inject.mjs +++ b/plugin/hooks/lib/inject.mjs @@ -1057,7 +1057,13 @@ export function standingRules(dir, graph, { budget = standingBudget(), episode = * informative response available -- more useful than the file, not a lossier * version of it. */ -export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) { +export function substitutionFor( + dir, + graph, + rawPath, + source, + { sessionId, client = null, clientVersion = null, model = null, modelVersion = null } = {} +) { const filePath = canonicalPath(rawPath); const budget = substitutionBudget(dir, filePath); const built = annotatedSkeleton(graph, rawPath, source, { budget }); @@ -1092,6 +1098,10 @@ export function substitutionFor(dir, graph, rawPath, source, { sessionId } = {}) // on this machine turned out to be the enforcement suite's own fixture and // nothing distinguished them from real work. sessionId, + client, + clientVersion, + model, + modelVersion, holdout, tokens: holdout ? 0 : built.tokens, findings: built.findings, diff --git a/plugin/hooks/lib/metrics.mjs b/plugin/hooks/lib/metrics.mjs index 2a4c49e94..c0d68e974 100644 --- a/plugin/hooks/lib/metrics.mjs +++ b/plugin/hooks/lib/metrics.mjs @@ -744,6 +744,43 @@ function canonicalKeyish(p) { */ function buildReport(events, balance, sourceCoverage = {}) { + const substitutions = balance.filter( + (event) => event.kind === 'substitute' && !isFixtureAnchor(event.anchor) + ); + const servedSubstitutions = substitutions.filter((event) => !event.holdout); + const substitutionTokensSaved = servedSubstitutions.reduce( + (sum, event) => + sum + + (event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + )), + 0 + ); + const substitutionTokensReturned = servedSubstitutions.reduce( + (sum, event) => sum + (event.tokens || 0), + 0 + ); + const substitutionByClient = {}; + for (const event of servedSubstitutions) { + const name = event.client || 'Historical — client not recorded'; + const current = substitutionByClient[name] || { + substitutions: 0, + tokensReturned: 0, + tokensSaved: 0, + }; + current.substitutions += 1; + current.tokensReturned += event.tokens || 0; + current.tokensSaved += + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - (event.tokens || 0) + ); + substitutionByClient[name] = current; + } + // COMMAND INJECTIONS ARE COUNTED SEPARATELY, not mixed into the balance. // // The saving is measured by joining an injection to the READS of its anchor @@ -876,6 +913,37 @@ function buildReport(events, balance, sourceCoverage = {}) { }); return { + nativeOptimizer: { + substitutions: servedSubstitutions.length, + holdouts: substitutions.filter((event) => event.holdout).length, + tokensReturned: substitutionTokensReturned, + tokensSaved: substitutionTokensSaved, + byClient: substitutionByClient, + recent: servedSubstitutions + .slice() + .sort((a, b) => (b.at || 0) - (a.at || 0)) + .slice(0, 40) + .map((event) => { + const tokensSaved = + event.tokensNetAvoided ?? + Math.max( + 0, + Math.ceil((event.bytesAvoided || 0) / 4) - + (event.tokens || 0) + ); + return { + name: 'live_graph_substitution', + client: event.client || 'Historical — client not recorded', + originalTokens: (event.tokens || 0) + tokensSaved, + optimizedTokens: event.tokens || 0, + tokensSaved, + savingsMeasured: true, + timestamp: event.at ? new Date(event.at).toISOString() : null, + }; + }), + source: + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + }, memoryDeliveries: allInjections.filter((event) => !event.holdout).length, memoryHoldouts: allInjections.filter((event) => event.holdout).length, deliveryTokens: allInjections @@ -927,6 +995,11 @@ function buildReport(events, balance, sourceCoverage = {}) { : 'stale', }, metrics: { + nativeSubstitutions: metric( + balanceMeasured ? 'measured' : 'not-measured', + 'balance.jsonl: full-file tokens minus annotated-skeleton tokens for served substitutions', + servedSubstitutions.length + ), memoryDeliveries: metric( balanceMeasured ? 'measured' : 'not-measured', 'balance.jsonl: inject events in the treated arm', diff --git a/plugin/hooks/lib/observability.mjs b/plugin/hooks/lib/observability.mjs index 4e70663f4..ef1c037af 100644 --- a/plugin/hooks/lib/observability.mjs +++ b/plugin/hooks/lib/observability.mjs @@ -433,6 +433,14 @@ export function hookHealthSummary(options = {}) { const skipped = runs.filter((event) => event.outcome === 'skipped'); const blocked = runs.filter((event) => event.outcome === 'blocked'); const successes = runs.filter((event) => event.outcome === 'success'); + const actions = runs.filter( + (event) => event.hookEvent === 'pre-tool' && event.toolName + ); + const byTool = {}; + for (const event of actions) { + const name = String(event.toolName || 'Unknown action'); + byTool[name] = (byTool[name] || 0) + 1; + } const byClient = {}; for (const event of runs) { const key = event.client || 'unknown'; @@ -469,6 +477,8 @@ export function hookHealthSummary(options = {}) { blocked: blocked.length, abandoned: abandoned.length, successes: successes.length, + actions: actions.length, + byTool, // A skipped or policy-blocked hook completed its protocol successfully. // Runtime health answers whether the hook process worked, not whether the // optimizer chose to allow the host operation. diff --git a/plugin/hooks/pretooluse-router.mjs b/plugin/hooks/pretooluse-router.mjs index a2a6561b5..e581d6987 100644 --- a/plugin/hooks/pretooluse-router.mjs +++ b/plugin/hooks/pretooluse-router.mjs @@ -469,7 +469,13 @@ ${nudge}` // Carried through so a substitution can be told apart from a test // fixture later. Without it the balance sheet counted the suite's own // 366 fixture writes as product value. - { sessionId: payload.session_id } + { + sessionId: payload.session_id, + client: episode.client, + clientVersion: episode.clientVersion, + model: episode.model, + modelVersion: episode.modelVersion, + } ); if (substitution) reason = substitution; } diff --git a/scripts/run-dashboard-attribution-smoke.mjs b/scripts/run-dashboard-attribution-smoke.mjs new file mode 100644 index 000000000..da37ed1e3 --- /dev/null +++ b/scripts/run-dashboard-attribution-smoke.mjs @@ -0,0 +1,122 @@ +#!/usr/bin/env node +/** + * Run real MCP calls from several client identities into one local target. + * + * This is deliberately not a database seeder: every row comes through the + * shipped stdio transport, initialize handshake, dispatcher, disclosure policy, + * token counter, and graceful analytics flush. It is useful when verifying the + * dashboard's per-client attribution after an upgrade. + */ + +import { spawn } from 'node:child_process'; +import { existsSync } from 'node:fs'; +import { resolve } from 'node:path'; + +const root = resolve(process.argv[2] || process.cwd()); +const target = resolve( + process.argv[3] || `${root}/README.md` +); +const serverEntry = resolve('dist/server/index.js'); + +if (!existsSync(serverEntry)) + throw new Error(`${serverEntry} is missing; run npm run build first.`); +if (!existsSync(target)) throw new Error(`Target does not exist: ${target}`); + +const clients = [ + { name: 'codex', model: 'gpt-5.6-sol' }, + { name: 'claude-code', model: 'claude-sonnet' }, + { name: 'gemini', model: 'gemini-pro' }, +]; + +async function exercise(client) { + const child = spawn(process.execPath, [serverEntry], { + cwd: root, + stdio: ['pipe', 'pipe', 'pipe'], + windowsHide: true, + env: { + ...process.env, + TOKEN_OPTIMIZER_MODEL: client.model, + TOKEN_OPTIMIZER_MODEL_VERSION: 'live-dashboard-proof', + }, + }); + child.stdout.setEncoding('utf8'); + let buffer = ''; + let nextId = 1; + const pending = new Map(); + + child.stdout.on('data', (chunk) => { + buffer += chunk; + let newline = buffer.indexOf('\n'); + while (newline !== -1) { + const line = buffer.slice(0, newline).trim(); + buffer = buffer.slice(newline + 1); + if (line) { + try { + const message = JSON.parse(line); + const entry = pending.get(message.id); + if (entry) { + clearTimeout(entry.timer); + pending.delete(message.id); + if (message.error) entry.reject(new Error(JSON.stringify(message.error))); + else entry.resolve(message.result); + } + } catch { + // Non-protocol diagnostics are ignored; stderr remains visible below. + } + } + newline = buffer.indexOf('\n'); + } + }); + + const call = (method, params = undefined) => { + const id = nextId++; + return new Promise((resolveCall, reject) => { + const timer = setTimeout( + () => reject(new Error(`${client.name}: timed out waiting for ${method}`)), + 30_000 + ); + pending.set(id, { resolve: resolveCall, reject, timer }); + child.stdin.write( + `${JSON.stringify({ jsonrpc: '2.0', id, method, ...(params === undefined ? {} : { params }) })}\n` + ); + }); + }; + + try { + await call('initialize', { + protocolVersion: '2024-11-05', + capabilities: {}, + clientInfo: { name: client.name, version: 'live-dashboard-proof' }, + }); + child.stdin.write( + `${JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' })}\n` + ); + const knowledge = await call('tools/call', { + name: 'wiki_read', + arguments: { projectRoot: root, limit: 3 }, + }); + const read = await call('tools/call', { + name: 'smart_read', + arguments: { path: target, maxSize: 8_000 }, + }); + const knowledgeChars = knowledge?.content?.[0]?.text?.length || 0; + const readChars = read?.content?.[0]?.text?.length || 0; + process.stdout.write( + `${client.name}: wiki_read ${knowledgeChars} chars; smart_read ${readChars} chars\n` + ); + } finally { + child.stdin.end(); + await new Promise((resolveExit) => { + const timer = setTimeout(() => { + child.kill(); + resolveExit(); + }, 10_000); + child.once('exit', () => { + clearTimeout(timer); + resolveExit(); + }); + }); + } +} + +for (const client of clients) await exercise(client); diff --git a/scripts/verify-live-dashboard.mjs b/scripts/verify-live-dashboard.mjs index 12967c493..9176f6658 100644 --- a/scripts/verify-live-dashboard.mjs +++ b/scripts/verify-live-dashboard.mjs @@ -2,14 +2,18 @@ /** Read-only Playwright verification against an already running dashboard. */ import { mkdirSync } from 'node:fs'; -import { dirname, join } from 'node:path'; +import { dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { chromium } from 'playwright'; const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..'); const base = process.argv[2] || 'http://localhost:3101'; const output = join(ROOT, 'artifacts', 'live-dashboard'); +const documentationOutput = process.argv[3] + ? resolve(process.argv[3]) + : null; mkdirSync(output, { recursive: true }); +if (documentationOutput) mkdirSync(documentationOutput, { recursive: true }); const browser = await chromium.launch(); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); @@ -78,6 +82,7 @@ async function measureCameraStability(host) { try { await page.goto(base, { waitUntil: 'networkidle' }); + await page.waitForTimeout(1_100); const overviewBody = await page.locator('body').innerText(); const overview = { title: await page.title(), @@ -94,12 +99,45 @@ try { value: card.querySelector('.kpi-value')?.textContent?.trim() || '', })) ), + savedTokens: await page.locator('#saved-tokens').innerText(), + savedMoney: await page.locator('#saved-money').innerText(), + accountingCards: await page + .locator('#accounting-grid .accounting-card') + .evaluateAll((cards) => + cards.map((card) => ({ + label: card.querySelector('.accounting-label')?.textContent?.trim() || '', + value: card.querySelector('.accounting-value')?.textContent?.trim() || '', + detail: card.querySelector('.accounting-detail')?.textContent?.trim() || '', + })) + ), + clientRows: await page + .locator('#client-ledger .client-ledger-row') + .evaluateAll((rows) => rows.map((row) => row.textContent?.trim() || '')), + recentRows: await page + .locator('#timeline-container .event') + .evaluateAll((rows) => rows.map((row) => row.textContent?.trim() || '')), + actionRows: await page.locator('#tool-breakdown-body tr').evaluateAll((rows) => + rows.map((row) => + [...row.querySelectorAll('td')].map( + (cell) => cell.textContent?.trim() || '' + ) + ) + ), cameraStability: await measureCameraStability(page.locator('#constellation')), }; await page.screenshot({ path: join(output, 'overview.png'), fullPage: true, }); + if (documentationOutput) { + await page.screenshot({ + path: join(documentationOutput, 'overview-live.png'), + fullPage: true, + }); + await page.locator('.client-accounting').screenshot({ + path: join(documentationOutput, 'agent-accounting-live.png'), + }); + } await page.goto(`${base}/wiki`, { waitUntil: 'networkidle' }); await page.waitForSelector('#wiki-list li'); @@ -115,12 +153,22 @@ try { status: document.querySelector('#hook-health-status')?.textContent?.trim() || '', state: document.querySelector('#hook-health-status')?.dataset.state || '', detail: document.querySelector('#hook-health-detail')?.textContent?.trim() || '', + clients: [...document.querySelectorAll('#hook-health-clients .capture-client')] + .map((card) => card.textContent?.trim() || ''), }; }); await page.screenshot({ path: join(output, 'wiki-capture-health.png'), fullPage: true, }); + if (documentationOutput) { + await page.locator('section.wiki-balance').nth(0).screenshot({ + path: join(documentationOutput, 'capture-health-live.png'), + }); + await page.locator('section.wiki-balance').nth(1).screenshot({ + path: join(documentationOutput, 'graph-balance-live.png'), + }); + } const host = page.locator('#wiki-graph-3d'); const graph3d = await host.evaluate((element) => ({ width: element.clientWidth, @@ -140,6 +188,11 @@ try { selected: element.dataset.selected || null, })); const detailVisible = await page.locator('#wiki-detail').isVisible(); + if (documentationOutput) { + await page.locator('#tab-explore').screenshot({ + path: join(documentationOutput, 'graph-explorer-live.png'), + }); + } await page.locator('.wiki-tab[data-tab="evidence"]').click(); await waitForCount('#evidence-summary .stat-card', 6, 'evidence cards'); await page.waitForFunction( @@ -165,6 +218,11 @@ try { path: join(output, 'wiki-evidence.png'), fullPage: true, }); + if (documentationOutput) { + await page.locator('#tab-evidence').screenshot({ + path: join(documentationOutput, 'evidence-console-live.png'), + }); + } const wiki = { listCount: await page.locator('#wiki-list li').count(), scopeOptions: await page.locator('#wiki-scope option').count(), @@ -240,6 +298,20 @@ try { overview.activityCards.some( ({ label, value }) => label === 'Lifecycle events' && Number(value.replaceAll(',', '')) > 0 ) && + Number(overview.savedTokens.replaceAll(',', '')) > 0 && + /^\$/.test(overview.savedMoney) && + overview.accountingCards.length === 6 && + overview.accountingCards.some( + ({ label, value, detail }) => + label === 'Returned context' && + value !== 'Not measured' && + /\$/.test(detail) + ) && + overview.clientRows.length >= 2 && + overview.recentRows.some((row) => /\$/.test(row) && /saved|baseline/i.test(row)) && + overview.actionRows.some( + (row) => row.length === 5 && /^\$/.test(row[3]) && row[4] !== 'Not measured' + ) && overview.cameraStability.widthSpread <= 1 && overview.cameraStability.heightSpread <= 1 && overview.cameraStability.zoomSpread <= 0.0001 && @@ -254,15 +326,20 @@ try { // The coverage assertion above accepts both the partial and complete-copy; // this field only needs to remain a valid non-negative count. wiki.aggregateCoverage.missingProjects >= 0 && - wiki.balanceCards.length === 4 && + wiki.balanceCards.length === 8 && wiki.balanceCards.every(({ value }) => value.length > 0 && value !== '—') && wiki.balanceContract.coverage?.projects >= 1 && wiki.balanceContract.coverage?.projectsWithTelemetry >= 1 && wiki.balanceContract.freshness?.lastEventAt && - ['memoryDeliveries', 'memoryHoldouts', 'rememberingCost', 'readingAvoided'] + ['nativeSubstitutions', 'memoryDeliveries', 'memoryHoldouts', 'rememberingCost', 'readingAvoided'] .every((key) => wiki.balanceContract.metrics?.[key]?.source) && /selected projects have telemetry/i.test(wiki.balanceContract.method) && wiki.captureHealth.values.length === 14 && + wiki.captureHealth.clients.length >= 2 && + wiki.captureHealth.clients.every((client) => + /Activity|Runtime|Control|Coverage/.test(client) + ) && + wiki.captureHealth.detail.length < 180 && wiki.captureHealth.values.some( ({ label, value }) => label === 'Hook runs' && Number(value.replaceAll(',', '')) > 0 ) && diff --git a/scripts/verify-wiki-ui.mjs b/scripts/verify-wiki-ui.mjs index 534ff257a..ceff6e19a 100644 --- a/scripts/verify-wiki-ui.mjs +++ b/scripts/verify-wiki-ui.mjs @@ -62,6 +62,8 @@ process.env.TOKEN_OPTIMIZER_SHARED_DIR = GRAPH; process.env.TOKEN_OPTIMIZER_PROJECT_REGISTRY = join(GRAPH, 'projects.jsonl'); const UCR = mkdtempSync(join(tmpdir(), 'wiki-ui-ucr-')); process.env.TOKEN_OPTIMIZER_UCR_DIR = UCR; +const ANALYTICS = mkdtempSync(join(tmpdir(), 'wiki-ui-analytics-')); +process.env.TOKEN_OPTIMIZER_ANALYTICS_DB = join(ANALYTICS, 'analytics.db'); const results = []; const check = (name, pass, detail = '') => { @@ -204,6 +206,15 @@ async function seed() { downstream: 2400, }); record(GRAPH, { kind: 'harvest', tokens: 800 }); + record(GRAPH, { + kind: 'substitute', + anchor: join(src, 'auth.ts'), + holdout: false, + tokens: 100, + tokensNetAvoided: 900, + client: 'claude-code', + at: Date.now(), + }); for (let pair = 1; pair <= 5; pair++) { for (const [arm, totalTokens, toolCalls] of [ ['baseline', 1000, 10], @@ -393,8 +404,9 @@ async function main() { els.map((e) => e.textContent.trim()) ); check( - 'balance renders four figures', - tiles.length === 4, + 'balance renders direct and causal token accounting', + tiles.length === 8 && + tiles.some((value) => /900 tokens/.test(value)), tiles.join(' | ') ); @@ -879,6 +891,12 @@ async function main() { body: JSON.stringify({ summary: { available: false }, events: [] }), }) ); + await overview.route('**/api/analytics/overview*', (route) => + route.fulfill({ + contentType: 'application/json', + body: JSON.stringify({ available: false }), + }) + ); await overview.route('**/api/session-summary*', (route) => route.fulfill({ contentType: 'application/json', @@ -926,7 +944,7 @@ async function main() { const overviewText = await overview.textContent('body'); check( 'overview is provider and CLI neutral', - !/claude(?: code)?/i.test(overviewText || '') + !/what claude did/i.test(overviewText || '') ); const eventText = await overview.locator('.event').first().textContent(); check( @@ -967,6 +985,181 @@ async function main() { }); await overview.close(); + // Preferred path: all successful MCP operations report actual returned + // context, while only rows with a real before-state claim savings. Native + // graph substitutions join the same presentation without being confused + // with the separately gated causal graph-effect estimate. + const measuredOverview = await browser.newPage({ + viewport: { width: 1440, height: 1000 }, + }); + measuredOverview.on('console', (message) => { + if (message.type() === 'error') + consoleErrors.push(`measured overview: ${message.text()}`); + }); + measuredOverview.on('pageerror', (error) => + consoleErrors.push(`measured overview: ${error.message}`) + ); + await measuredOverview.route('**/api/diagnostics/hooks*', (route) => + route.fulfill({ + contentType: 'application/json', + body: JSON.stringify({ + summary: { + available: true, + total: 12, + actions: 6, + activeClients: 3, + p95DurationMs: 14, + successRate: 1, + byTool: { smart_read: 2, wiki_read: 1 }, + byClient: { + codex: { total: 5 }, + 'claude-code': { total: 4 }, + gemini: { total: 3 }, + }, + }, + events: [], + }), + }) + ); + await measuredOverview.route('**/api/analytics/overview*', (route) => + route.fulfill({ + contentType: 'application/json', + body: JSON.stringify({ + schemaVersion: 1, + available: true, + source: 'browser fixture: actual returned context', + referenceUsdPerMillionTokens: 3, + summary: { + totalOperations: 3, + totalOriginalTokens: 1400, + totalOptimizedTokens: 500, + measuredOptimizedTokens: 350, + totalTokensSaved: 1050, + savingsPercentage: 75, + contextUsd: 0.0015, + savedUsd: 0.00315, + measuredSavingsOperations: 2, + unmeasuredSavingsOperations: 1, + actualReturnedContextOperations: 3, + legacyReportedContextOperations: 0, + }, + byAction: [ + { + name: 'smart_read', + totalOperations: 2, + totalOriginalTokens: 1400, + totalOptimizedTokens: 350, + totalTokensSaved: 1050, + contextUsd: 0.00105, + savedUsd: 0.00315, + }, + { + name: 'wiki_read', + totalOperations: 1, + totalOriginalTokens: 0, + totalOptimizedTokens: 150, + totalTokensSaved: 0, + contextUsd: 0.00045, + savedUsd: 0, + }, + ], + byClient: [ + { + name: 'codex', + attribution: 'recorded', + totalOperations: 2, + totalOptimizedTokens: 350, + totalTokensSaved: 1050, + contextUsd: 0.00105, + }, + { + name: 'gemini', + attribution: 'recorded', + totalOperations: 1, + totalOptimizedTokens: 150, + totalTokensSaved: 0, + contextUsd: 0.00045, + }, + ], + recent: [ + { + name: 'wiki_read', + originalTokens: 150, + optimizedTokens: 150, + tokensSaved: 0, + savingsMeasured: false, + contextUsd: 0.00045, + savedUsd: 0, + timestamp: '2026-08-12T15:02:00Z', + }, + { + name: 'smart_read', + originalTokens: 1000, + optimizedTokens: 250, + tokensSaved: 750, + savingsMeasured: true, + contextUsd: 0.00075, + savedUsd: 0.00225, + timestamp: '2026-08-12T15:01:00Z', + }, + ], + }), + }) + ); + await measuredOverview.route('**/api/session-summary*', (route) => + route.fulfill({ + contentType: 'application/json', + body: JSON.stringify({ success: false }), + }) + ); + await measuredOverview.route('**/api/session-events*', (route) => + route.fulfill({ + contentType: 'application/json', + body: JSON.stringify({ success: true, events: [] }), + }) + ); + await measuredOverview.goto(`${BASE}/`, { waitUntil: 'networkidle' }); + await measuredOverview.waitForTimeout(1_100); + const measuredBody = await measuredOverview.textContent('body'); + check( + 'combined overview renders direct MCP and graph savings', + Number( + (await measuredOverview.textContent('#saved-tokens'))?.replaceAll( + ',', + '' + ) || 0 + ) === 1950 && + /MCP \+ native/i.test(measuredBody || '') + ); + check( + 'combined overview attributes optimizer metrics across clients', + /codex/i.test(measuredBody || '') && + /claude-code/i.test(measuredBody || '') && + /gemini/i.test(measuredBody || '') + ); + const recentRows = await measuredOverview + .locator('#timeline-container .event') + .allTextContents(); + check( + 'recent activity prices context and refuses fake zero savings', + recentRows.some((row) => /wiki_read/i.test(row) && /no before baseline/i.test(row)) && + recentRows.some((row) => /smart_read/i.test(row) && /750 saved/i.test(row)) && + !recentRows.some((row) => /wiki_read/i.test(row) && /0 saved/i.test(row)), + recentRows.join(' | ') + ); + check( + 'every action exposes returned context USD and token savings', + (await measuredOverview.locator('#tool-breakdown-body tr').count()) === 3 && + !/Not measured/.test( + (await measuredOverview.textContent('#tool-breakdown-body')) || '' + ) + ); + await measuredOverview.screenshot({ + path: join(SHOTS, 'overview-combined-accounting.png'), + fullPage: true, + }); + await measuredOverview.close(); + check( 'no console or page errors', consoleErrors.length === 0, @@ -977,6 +1170,7 @@ async function main() { server.kill(); rmSync(GRAPH, { recursive: true, force: true }); rmSync(UCR, { recursive: true, force: true }); + rmSync(ANALYTICS, { recursive: true, force: true }); } const failed = results.filter((r) => !r.pass); diff --git a/src/analytics/analytics-manager.ts b/src/analytics/analytics-manager.ts index b854ed6df..e0b52c639 100644 --- a/src/analytics/analytics-manager.ts +++ b/src/analytics/analytics-manager.ts @@ -294,7 +294,10 @@ export class AnalyticsManager { entries: AnalyticsEntry[] ): AggregatedStats { const totalOperations = entries.length; - const totalOriginalTokens = entries.reduce( + const savingsEntries = entries.filter( + (entry) => entry.savingsMeasured !== false + ); + const totalOriginalTokens = savingsEntries.reduce( (sum, e) => sum + e.originalTokens, 0 ); @@ -302,7 +305,10 @@ export class AnalyticsManager { (sum, e) => sum + e.optimizedTokens, 0 ); - const totalTokensSaved = entries.reduce((sum, e) => sum + e.tokensSaved, 0); + const totalTokensSaved = savingsEntries.reduce( + (sum, e) => sum + e.tokensSaved, + 0 + ); const averageTokensSaved = totalTokensSaved / totalOperations; const savingsPercentage = totalOriginalTokens > 0 diff --git a/src/analytics/analytics-storage.ts b/src/analytics/analytics-storage.ts index 260ef8dc4..2602312cb 100644 --- a/src/analytics/analytics-storage.ts +++ b/src/analytics/analytics-storage.ts @@ -25,7 +25,8 @@ export class SqliteAnalyticsStorage implements AnalyticsStorage { '.token-optimizer-mcp', 'analytics.db' ); - const finalPath = dbPath || defaultPath; + const finalPath = + dbPath || process.env.TOKEN_OPTIMIZER_ANALYTICS_DB || defaultPath; // Ensure directory exists const dir = path.dirname(finalPath); @@ -62,6 +63,28 @@ export class SqliteAnalyticsStorage implements AnalyticsStorage { CREATE INDEX IF NOT EXISTS idx_timestamp ON analytics(timestamp); CREATE INDEX IF NOT EXISTS idx_session_id ON analytics(session_id); `); + + const columns = new Set( + ( + this.db.prepare('PRAGMA table_info(analytics)').all() as Array<{ + name: string; + }> + ).map((column) => column.name) + ); + for (const [name, definition] of [ + ['client', 'TEXT'], + ['client_version', 'TEXT'], + ['model', 'TEXT'], + ['model_version', 'TEXT'], + ['savings_measured', 'INTEGER NOT NULL DEFAULT 1'], + ]) { + if (!columns.has(name)) + this.db.exec(`ALTER TABLE analytics ADD COLUMN ${name} ${definition}`); + } + this.db.exec(` + CREATE INDEX IF NOT EXISTS idx_client ON analytics(client); + CREATE INDEX IF NOT EXISTS idx_model ON analytics(model); + `); } /** @@ -89,8 +112,9 @@ export class SqliteAnalyticsStorage implements AnalyticsStorage { INSERT INTO analytics ( hook_phase, tool_name, mcp_server, original_tokens, optimized_tokens, tokens_saved, - timestamp, session_id, metadata - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + timestamp, session_id, metadata, + client, client_version, model, model_version, savings_measured + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const insertMany = this.db.transaction((entries: AnalyticsEntry[]) => { @@ -104,7 +128,12 @@ export class SqliteAnalyticsStorage implements AnalyticsStorage { entry.tokensSaved, entry.timestamp, entry.sessionId || null, - entry.metadata ? JSON.stringify(entry.metadata) : null + entry.metadata ? JSON.stringify(entry.metadata) : null, + entry.client || null, + entry.clientVersion || null, + entry.model || null, + entry.modelVersion || null, + entry.savingsMeasured === false ? 0 : 1 ); } }); @@ -238,6 +267,11 @@ export class SqliteAnalyticsStorage implements AnalyticsStorage { timestamp: row.timestamp, sessionId: row.session_id || undefined, metadata: row.metadata ? JSON.parse(row.metadata) : undefined, + client: row.client || undefined, + clientVersion: row.client_version || undefined, + model: row.model || undefined, + modelVersion: row.model_version || undefined, + savingsMeasured: row.savings_measured !== 0, })); } diff --git a/src/analytics/analytics-types.ts b/src/analytics/analytics-types.ts index f95455e82..d64d80d51 100644 --- a/src/analytics/analytics-types.ts +++ b/src/analytics/analytics-types.ts @@ -35,6 +35,13 @@ export interface AnalyticsEntry { sessionId?: string; /** Optional additional metadata */ metadata?: Record; + /** MCP handshake attribution for new measurements; absent on historical rows. */ + client?: string; + clientVersion?: string; + model?: string; + modelVersion?: string; + /** Whether a real before-state exists for this operation's savings claim. */ + savingsMeasured?: boolean; } /** diff --git a/src/analytics/record-tool-analytics.ts b/src/analytics/record-tool-analytics.ts index 1b973e695..495913c86 100644 --- a/src/analytics/record-tool-analytics.ts +++ b/src/analytics/record-tool-analytics.ts @@ -16,6 +16,7 @@ import type { AnalyticsManager } from './analytics-manager.js'; import type { HookPhase } from './analytics-types.js'; +import { TokenCounter } from '../core/token-counter.js'; /** MCP tool result shape (the parts we read). */ interface McpToolResult { @@ -23,6 +24,8 @@ interface McpToolResult { isError?: boolean; } +const resultTokenCounter = new TokenCounter(); + /** A normalized savings measurement extracted from a tool result. */ export interface SavingsTriplet { originalTokens: number; @@ -164,18 +167,28 @@ export function currentHookPhase(): HookPhase { export async function recordToolAnalytics( manager: AnalyticsManager, toolName: string, - result: McpToolResult + result: McpToolResult, + attribution: { + client?: string | null; + clientVersion?: string | null; + model?: string | null; + modelVersion?: string | null; + } = {}, + baselineResult: McpToolResult | null = null ): Promise { try { if (!result || result.isError) return; - const text = result.content?.find((c) => c?.type !== 'image')?.text; + const text = (result.content || []) + .filter((content) => typeof content?.text === 'string') + .map((content) => content.text || '') + .join('\n'); if (!text) return; - let payload: unknown; + let payload: unknown = null; try { payload = JSON.parse(text); } catch { - return; // non-JSON output (e.g. raw text) — nothing to record + // Plain text still has a directly measurable returned-context cost. } // Don't record failures the tool reported in-band. @@ -187,21 +200,56 @@ export async function recordToolAnalytics( return; } - const savings = extractSavings(payload); - if (!savings) return; + let baselinePayload: unknown = payload; + if (baselineResult) { + const baselineText = (baselineResult.content || []) + .filter((content) => typeof content?.text === 'string') + .map((content) => content.text || '') + .join('\n'); + try { + baselinePayload = JSON.parse(baselineText); + } catch { + baselinePayload = null; + } + } + const savings = extractSavings(baselinePayload); + const returnedTokens = resultTokenCounter.count(text).tokens; + const savingsMeasured = savings !== null; + const originalTokens = savings?.originalTokens ?? returnedTokens; + const tokensSaved = savingsMeasured ? originalTokens - returnedTokens : 0; const sessionId = process.env.TOKEN_OPTIMIZER_SESSION_ID || - ((payload as Record).sessionId as string | undefined); + (payload && typeof payload === 'object' + ? ((payload as Record).sessionId as string | undefined) + : undefined); await manager.track({ hookPhase: currentHookPhase(), toolName, mcpServer: 'token-optimizer', - originalTokens: savings.originalTokens, - optimizedTokens: savings.optimizedTokens, - tokensSaved: savings.tokensSaved, + originalTokens, + optimizedTokens: returnedTokens, + tokensSaved, + savingsMeasured, ...(sessionId ? { sessionId } : {}), + ...(attribution.client ? { client: attribution.client } : {}), + ...(attribution.clientVersion + ? { clientVersion: attribution.clientVersion } + : {}), + ...(attribution.model ? { model: attribution.model } : {}), + ...(attribution.modelVersion + ? { modelVersion: attribution.modelVersion } + : {}), + metadata: { + measurement: savingsMeasured + ? 'optimizer-before-actual-return' + : 'actual-return-context-only', + client: attribution.client || 'unattributed', + clientVersion: attribution.clientVersion || null, + model: attribution.model || null, + modelVersion: attribution.modelVersion || null, + }, }); } catch { // Analytics must never break a tool call. diff --git a/src/dashboard/public/css/styles.css b/src/dashboard/public/css/styles.css index 4f7d8f653..acd809d60 100644 --- a/src/dashboard/public/css/styles.css +++ b/src/dashboard/public/css/styles.css @@ -205,6 +205,134 @@ text-decoration: underline; } +/* ---------------------------------------------------------- accounting -- */ + +.accounting { + margin-bottom: var(--gap); +} + +.section-heading-row { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 20px; +} + +.source-chip { + background: var(--surface-3); + border: 1px solid var(--line); + border-radius: 999px; + color: var(--ink-3); + flex: none; + font-size: 11px; + padding: 5px 10px; +} + +.accounting-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; + margin-top: 18px; +} + +.accounting-card { + background: var(--surface-2); + border: 1px solid var(--line); + border-radius: var(--radius-sm); + display: grid; + gap: 4px; + padding: 14px; +} + +.accounting-label, +.accounting-detail, +.accounting-note { + color: var(--ink-3); + font-size: 11.5px; +} + +.accounting-value { + font-size: 24px; +} + +.accounting-note { + line-height: 1.55; + margin: 12px 0 0; +} + +.saved-cell { + color: var(--saved); +} + +.client-accounting { + margin-bottom: var(--gap); +} + +.client-ledger { + display: grid; + gap: 7px; + margin-top: 16px; +} + +.client-ledger-row { + align-items: center; + border-bottom: 1px solid var(--line); + display: grid; + gap: 12px; + grid-template-columns: minmax(190px, 1.5fr) repeat(4, minmax(105px, 0.7fr)); + padding: 10px 8px; +} + +.client-ledger-row:last-child { + border-bottom: 0; +} + +.client-ledger-row > div { + display: grid; + gap: 3px; +} + +.client-ledger-row span { + color: var(--ink-3); + font-size: 10.5px; +} + +.client-ledger-row strong { + font-size: 12.5px; + overflow-wrap: anywhere; +} + +@media (max-width: 860px) { + .client-ledger-row { + grid-template-columns: 1fr 1fr; + } + + .client-ledger-row > div:first-child { + grid-column: 1 / -1; + } +} + +@media (max-width: 760px) { + .accounting-grid { + grid-template-columns: 1fr 1fr; + } + + .section-heading-row { + display: block; + } + + .source-chip { + display: inline-block; + margin-top: 10px; + } +} + +@media (max-width: 480px) { + .accounting-grid { + grid-template-columns: 1fr; + } +} + /* ---------------------------------------------------------------- kpis -- */ .kpis { diff --git a/src/dashboard/public/css/wiki.css b/src/dashboard/public/css/wiki.css index c34eb18bd..324956c07 100644 --- a/src/dashboard/public/css/wiki.css +++ b/src/dashboard/public/css/wiki.css @@ -137,6 +137,93 @@ line-height: 1.55; } +.capture-clients { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); + gap: 9px; + margin-top: 14px; +} + +.capture-client { + border: 1px solid var(--line); + border-radius: var(--radius-sm); + display: grid; + grid-template-columns: minmax(140px, 0.72fr) minmax(0, 1.6fr); + gap: 14px; + padding: 12px 14px; +} + +.capture-client.is-unhealthy { + border-color: var(--bad); +} + +.capture-client-name strong, +.capture-client-name span { + display: block; +} + +.capture-client-name strong { + font-size: 13px; + overflow-wrap: anywhere; +} + +.capture-client-name span, +.capture-client dt { + color: var(--ink-3); + font-size: 10.5px; + margin-top: 3px; +} + +.capture-client dl { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px 14px; + margin: 0; +} + +.capture-client dt, +.capture-client dd { + margin: 0; +} + +.capture-client dd { + font-size: 11.5px; + line-height: 1.4; +} + +.method-facts { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); + gap: 8px; + margin-top: 14px; +} + +.method-fact { + border-left: 2px solid var(--line-bright); + display: grid; + gap: 3px; + padding: 4px 10px; +} + +.method-fact span { + color: var(--ink-3); + font-size: 10.5px; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.method-fact strong { + font-size: 12px; + font-weight: 550; + line-height: 1.4; +} + +@media (max-width: 560px) { + .capture-client { + grid-template-columns: 1fr; + } +} + /* ----------------------------------------------------------------- tabs -- */ .wiki-tabs { diff --git a/src/dashboard/public/index.html b/src/dashboard/public/index.html index 69ba1eb22..637b6cdb4 100644 --- a/src/dashboard/public/index.html +++ b/src/dashboard/public/index.html @@ -47,14 +47,15 @@ Your coding agent reads project data into a limited workspace called the context window. Fill it up and earlier work can fall out. This is how much of that workspace you got back — - measured against a holdout group of reads deliberately left - alone, so it is a comparison, not an estimate. + directly removed from optimizer results, including live-graph + substitutions. The separate graph-effect estimate uses a + holdout and is never added until its evidence gate passes.

—
-
tokens you did not have to spend
+
measured context tokens removed from optimizer results
@@ -108,10 +109,32 @@

;w#mQ3ahvRJ>imbDi^usHF3}01q`>Mi`#S zc%ADCjWBt{HA`d!HcZZ~uYs1ad=|x71|VstWX2l=8-uY7%R;8Ey~2Oya-(?)u1mAf z4{1@b%)?BZx$+rHmtOh*&o-X-+>ZK;K{IWc-Z)98);?6kjbp9%DLObjqqofj<-wMA z;Dbkje*j6MBNyX-lB*SCk6E7&^mJg%dM4st5(kiF$t_WhnO^F^WrwxZ1BRuImL!$X@$4biCzebH|4uNCfP$?Dk z6s-t-OPXjt9-tz15M1TZxCR{sF1CJqikWIrITO%<41F^CUT? zWiQAM8yH&uvT$o0`0NMH>4B2vJr8=l!x6}P;U^Ods(VY0_n&n!*WtdL^2if%d2Qk2 zfj|O6$p#oN8vNE5^Ios^Mf9DzeGwmElI*i)#m$=qG5cpA2~+oNd=ND291B_50JMWC z9%lHu>Sx67zDwqmag*xQg|$$w4)mmwAp-F#?f_^&e3u6Ofb@Oi%oT7A#9pZ zy~t7A{y9uo$_q!KvP{&~aT&vu-)Ov$%e%~Kd#4T`QPhW`y}VD)?lkvCGCQ9SW?8p? zHdkbA{5Aye9~Qf*%bcjiQ_u&Cp{`yS>3)~D*?mL&Cr7)5LGJRCYUCg8(Ed3rR6~8o zhQCD#8Fsm`LjSTQHOv?{MxBO;Oa5K8t3L7*;)TRy4oAj=MiiZ-jKXm6s^Lxajc1E8 zVYh9ENVm>(xjR=AM$8VA${3q|a~Pu;amhDVy2S8Ktj=sC3vFf>Qj;mvPL#ZNGgfOJ zQo|huOo$C_r(qpESfA+n%@e-vJm0Aw#u`A#bd6#MsCy3kwNo8-=Xc|k)%#v8x0~m3 zFT4*H|1L8x`lGCoq3+%EY<58}b6@4|Z>ct3Dma8fpYMs^IC*zow$4>Ax?jgHt(;!3 z512-<$b*C41r86``ivdGkGdx>@^q*n;w_M}#{%5EXPlbtpEfxHUs8oB9}kMp#k!!g z%^L?%Xm)?U6O>a{y-YiS1D*k}itx2cIne z?G)f2(S{1o{kEc4n_JMyr~fV>zxm>M1`_o<>|R-=dYb0oGr}b!i--LEw@~i?5E0bT zQoq$@{C4FOTZxFA@-9!I9;RpLp zS`AOi*V~>=|K+Xzp4a8Px5r#ipwsSM3ExZ3RaX!6%xNU8=OqT@RbA%4s|W%T`0d|; z+TKaGA8O2M!&UMd_2@i~k@dVce!U+7`Q^YQCSY&tiDjqf3yr!MF}D||K>r60F%N(n zqvn5h0SxPY^Cdl-d4aoDe6L4K*ttbwZv$X4kCW?M0lMAsRp{a2L*T9h`bf~rJ_n?- z>(W@v_j`Zp`3uN_U7wzl_JpAXAlSoFj}dsojrYrD*PnQ`yNdR5&pvU8aC;6R z)17=MaV{$D6dwcg4l}kf(v>-g0iPagC_leLzejqG*a@*MR_+w?#s6Tl-ST-uFPgv; zEMGQpHr~5t=8p!D49z2?fiFPU@+{mN)*{_K`H}ruU1sw=om>#BGU#p6CO`wVRxE7 zMlgU|wI0v7#a5*G93J-&C%OZd*@!R$9f$0C4witcNC)I;eV-govP1jm%4oLCj~=4) z=f#2Y7`OBL@BAyF)7`4~5c}h`im{vAQaZfrDb6;w*NB=RFt1zgTeAZeGq*Fs7d4B2 z7f~-g&jG|=p8w(c6`nO_aSISXf%0A%lJfaMhlp4wJH!_R=a05-fPE6pvhMVNGxVV4 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%0DiOpro{ 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®7${CU5^WNa%J# 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 z zWGDT5%EEB;cM2D6*8x|dv}|r6pkJIYaM5kow?~Km^11UWS(oyLl3CxG$7VoP>fJsJ z>qvr_W;`pt#dsYLC5L)F615!u<^mA86R_uEb6urT?}B9Rj}COv8b>ORo4lhK+$nn3 zC4zt$l%KllZwlJmDq~WexEss;7iVI&ch0V|4 z$<3U$%+zQ^U1BEle}{5?FBB2Oi9wh0X~UZ@@?HJ|aydRSMNU&kLTGG8S>h|+i2sz( z!8-JO!`dK-XV}LwbJTu&NP7Wl3AehN0<*HKsl_@D&e=>_NkNT{t7|~eh3^F*=EfmI zRkUKz+(hM(yd+Nx2WEHI+_@qqR&ujuj;%g_qc5utHYnJcYp^P;qIDkPPJEAz%?=as5_?T+>oD>n;#4fUt`uOh^BOHZ zdmdIvmJYAtM$xOc%z_BCpMU93pp>sYxnhaL_6v<&xJsL)oo+-B7Vla{@qK9FpWF#B zJJCTUO#f7tT_;j1F!41daj}x=8_+NCA76kL(Y9@VxS!RBeq|*$l!u`T{@AZFhrWN; zlO513Xq9(c5_@iZcJ&-wNbKF+EJiE+l$TomEL#naPYpc(uJ98ke=(4D8+0g4@yufeV{O9Yx&tnC>r3(LT|c*#SKMs%kEI^dpN_K4C=>F? z)bxt7f?PN~ol4Fz|HNA_MEHyQ}brqTPG{SxwOS$tfA@xxlJp}b8hiJs-Ay}w{e=_hvh~^SD2LNW4C!tUjHhDXyLXvGh4I+WjXxO@ zfR)mIQlaE4aN7kg_q)p&z3RM$&I%gw$h&D=5+OEaNev?&(jZR=k_=UpGHH^8()I)rJeQzQRF+6WgP_mh;UkOhM#M6T8`&u>B&gs8$oT{9 zUjepK!t~1ihc{lB74UmNxY-5O%jPwWo}poRfL(2qU2n z-TrSi+$TAOjRp9tJ`nfG(TlGp`OMLMss6_LF-aubXjQZ@_a3!XOnptS7hiVl31sOa zTeNL3$mt%4|Lz*~g{{7o-B*Tc#aKf;*kP9h6b&eM^`LkIvBgCD5tny#-23SM-tT4| z9CCw>$7r~m^rA;Ypmx(vzCoX}WaV(+fS!EOLhY$RU*fx568V%)UZ3AXjG6OA@W(rw zMJV)IX`1%-48KDnpUC)8a}c&A%goz*+*Y(XxdviBio zpX*7tei;x5yRKHc?*9q1F5F^CJLAl`XL0$cT01*DkdM@(&xJhG**~}!6x{BlNmI^~ zXi#O7X@Ruu(ya3~d`-`#CcjcbXb*yCd9!RGMSktCZ(uRm7)m6u$vudr^kuH?lP^K}2u=k?8V1QZ0SaIX@&M&R4CkudUhjBa;Fk zvX0m2IXIIF$pDL;t-yrF@>E{_jYjUG^MC8t;J+=D&Z)5c|jgA6D3uv z8(WcWIq3=f3ow!MwNg+x#Cx*`?l09s7d}^0688$83z6tO|YV#HjXXob< z5h&fD6}AkgB!{g*UCH~%uXSzkG%`}Xep%}YnYR|!zXdnI#<}=cwWtr@Z$LDMT^^Xo z0W+M`EZ#dqUIQCg)>nC36Xq^5sftA2&)RksxoEu>2}5IcrBDmtjb}IGuq%?c`tb>Z zZt2G&K*DIDq^`l%?*VH8_QLx-DUGlJvyY|+?dzzff%1OygHmgLa<1APlpXH*uBIV@ zT)m%q#`%P5ah*Q1MawR3?3^(Hrg5&6sYV@{Zid0ilxR2Q(Gb6|ea2QKk+gq!E(B95 zZRXuOB+JgnyYkbf(?*r~Twg1EY;@_lu4}o=#A!-n=o4XaG(m?JxgA_itatmBJb2)55xnp|Jh(}FRC`ZW&daDS zGHS3qCt)uC$DYLKL?ymSY^2Sm2|7g*ihmzkIq$!onX=%DiQHB` zu*<6YO*6$P^E-eeRl~n3od8ALvIS=59#$S8_zJ1sB*ivGvj#BuxGFIsuC|p3dC9St z_1O-)i9H_UB*boq%uwHq&gXg@?k5WLnkFH&5Z880raVm!Vi7+(SW6V#V%8PqLA^F5D48rY2;ZY85Od#_JJXi-04M?7S!aS@s zHp0Kl#j!PjNf8xQiNC7=N$j(b?IGy4|apGaW;gf>aXH5jjt7CEJL z`NjBfg3|IT+9LY9pN_pq3C<_#H5n}S+)7^TGY98tT&vTF2ttrn!5JTH!}w$LLkB=|Gf20P@e$~+pI2x5#Z0mVzYy)68z{*gsjeH~6stPPO>C;s*nRxKRx&d&pCZf6)meX=YL{ZkaUn0Io|C>+h%$%z zM6+}E6R=`Gt;*>X3%t)%y!4flSahf;aR*@8{0F}cL2cpo4PV!-z~vdKi10XS zj5%pccg6Y9MW<1xK4T9-kQYfY-EKKi?Ko_9ikaPXx{CT9xp+|EKvZ;xsYb4XJod77 zzQ07uSucL5OD>5&c}n+ifF1C!j%n-8rZ!PAe0W)U#t^Z`L`Nx^(JY4+SJ#?1?eKY} zWT?mbom8@N$Vz0xC~#Wy`sB&1pw@qX;)-nMSy5Xf-PQR4y|NWkT;S*qnmo_jXxK!Z-3a+!r zGBZCflk?w6yS)c)5B7M17reuy6M3~;l&_b5)F}DQYiCfWUvCa&yPo#^nIs-j<4y(V z>(c5$@`YCE1ZCU(6)H}7#ACe1`rVH7Y&{iR7I2#*yD@cj3NRllgpBsrx@$M?Y8aY* zS~|8Op}tj4AY$74)oEG_^PI`pFFy>6$wqs|vL&VS_2T^fDvRyU+UnG6vfBy1QqMnm zge4jlNANE?)y3U*_FnGCT~+BMIfRy@BV|ru@C=??Gw2`nN=QtqL>9r8pLN|BKU}Tj zj;gp~KtPj<_m$DR7rO>D!9_0CRTOnlK| z9+2mH;bva#esQ{ns5qD&D$#eMl_@ZY-66yQS?HXpRt~UxAx3`2Hx?I}wQOErX-%}A zUUif}+s7($RW={rUIzAKO{zLTzq)M2@JPcd2y2T6|0hdt@p5{mT2lNH2ez zN9Q^2nqjhPK2=`gQaLuaf;BQ~1fi;-YpR2EE>`!?(!z%6r;fTKDGL6@9#}AUJxmP> zXxk5$;A6QsItZ)g8cVv}zpVe(0;aD{|IVaYF_T??UW3rxt||pQ9)gwj3BeneD+!7< zv%%_VNxarom(>#mN#a{d*;;ydsXhfOHHJCFQgbB#$uw1oCRH??R2%;z#go&~AMmY3 z+Mp|qy`>~6zq&XG#)>rs`o2ink437mu(;@}I5utn-5+>WU?Eye z-?#<48#~9A^8(iTk?WoPc|n?IszOP|l>|d>p0U9i*PdOzJjM}I<(0y7@th!kkBq`Y z@AyWuSl*hmX0d4o4USYogEzEXuD>o)+AGd}{)~V||yfzQ4r9#&M&mA8tim%@w z#EnCaX8q7%0Xm^2A7pB|+~3*8=G5$Y^+fU;x`1mePTx?cl~ebDd2V*(G$4?S-Keyj zf@~I+RP0$7=Z>IOA)3xcT9ZM6cp<}xcbeCS-4{9D#X3FQL&%AX0%Me$^bNHhYU&92T_^e{$aP+6}e+ei9ths%v}cVfw}4gtvq(I(ba?!-VYR7~ z2UZ2&%M(IKi;u4N?xjntN#HpRDjcU~Eawi|0NadI+@w&e@{+}fLca97>YK;9vi-Sq zw8^exDk;eF`sCb(ejqK^8^HB;4R;>aO_Mg4kAvz(nsDbq^{fn13G~O0g<4!QGYx(Er4E?|*IL$`EdGU9 za_1H`@A&hB2yXxoB-=EK6%5hL^kAF~UTP)vaW2?m)PLLF$azgjrmm)Q6;&kOIxu;C zhQ6dFuwW0t(^0t{;Fxm83X?0e!)+{xWuY_2HP|CXxtSIm3H&ERwX+fw(a9_E_nFex z_0x=_UTg6*kHdW8$C6$NdMBwbxtg?*eIU6G3syL%TDQhZ(773<=jhZjPB~MlQQQ-Z zOkN`9g0WTmW&`PzB+9u%5tuyjjMP2xa7B4GGqr6t((Y2uK4&w;TcakX=5WK&O7a$b z{|v(h!mHPLSJ#G2vF46$#pB4pp|{$_rYlRtd@_oLKA#lHj>>bWW#Uk4o8c3`_bzw0 zui~1Hl~3oJEg;T9+@|@p7FAz2BeUC$Zx4DCSOsLFs1XKIGI5Nysl3**L1y;NPJ=CG z7eEGlqraB))mxjAp^L(a>XKV^C2)rI2)zzZ2j`n)crx)V^ot&k$aX@1MTt}6+Ks*L z5*camuUh>>_!Q5a+ZCp%c00JTs!2CLtm*S(am97yURQRtWs<{!1OBHwK;tK92-~+c z!hL2yI8;e)txJkUGp$rwV(Ylt#5zFrEMpl+&S7c_q`Ae*6rFk9jxl9FVUOxEmcT2Pod?|Ee%S2kS9H=sLDdv^i7X%}Mk z%n)DLtB_Bb+}^-C%Uow5)l0CdXiZc7qnW?vUDhgM*Y^xj7qy!Ia20w459|)%(BwhZ z<&9M?wk@hvq=-P=XzDC9Khzb4%T;?)>qvSD)oze2%Pmz-&uP~3!m`4w%hZOn6-~18 z@;;CNSuiJKVXk?qo!42&mBAz+3Z@d@>2iYUIIR?mTs(8wel!h){~(s5t()cmd2T8f zRFMhWoVuOza(9Z2&B#Da$>-;GL@X&oDuP4W%?{qLk8&8?6j6Cp4P2;+{8crJ%0}7Q z=kZ@XPEJ}YfTsS#J0ed;Ukmx^4KTYn{fX63gD`kaPE;6btrN87XCGV(@+g@5A~8$j zt~(krtaQT||Jt31HbTB$dm_F*oA^>HuXS{{XXBpRKkiFOub2ncw?UOO0>dddb&b!h zXC9x~crOd!U=94)Ob5COcnetl6W1D7sK3V%ctGj{6gmOd&ZpaD8b`Z_8lfsamo=94 zx0%nD9j!vsGMf2s6?*zz5pT~~kw3Loi+}I`ud-T91HBA=gox>F&1$C?E+CeH;0Tr( zCa%V02gL4>-UxH^meyNlE2iDzF|}sS5{n)c*fdM(AJtI>Th-|1Xl=!FIauw^ z)Wz=q*{s#N$5ljb*UojGq5k`Ffdy62K+2|-pG~FFz--;nc}n$dON?R}_w>}}!BBc! zMD0%bY4dbaBdnk)86M92v3tip%KC~WAsXQviIws&8|SCTotaBWyW(xON|*4*Q+%WU zu#96Lks0O)3yy#w&)?BcfkqsxTi5Tu*t@*zj?}AL^|@UJ9i_Qb%m=!a7B6;8VLra) zO1{HePBZ^Erm9{RHk(`x9|^Sx#Mf-9_Sg{5el85HG5hWFASan`$zG=Q_ARl^hS`fy zP5U&9eYjp#O{3h}PwOkx$S*QBUb;>tA28yL+sX zC%GJVOzgehK++Ng^U2^ThT|Vqmq_7^ejfGCh=H%5f}a>3>81?kT;ew zM%l$ZdfbmWoaCOhKN}a61ryYOt?`xH=Hd!7G;?Zrf*TPj&%E3p;_Ge*Sf>7pIoV}8 z`6I}MqD@K>_aS~rrH|z`{A_iIkECxC!9043_~rQdlDXSO*WAyfmCY3HtZ{6*`J2m( zJbGQ5OuSAkt4(KS?hW4mJ`Is9+pg--Uf&Wcv|f=10lAP#<~wbSePz^Dv5<*{;WTJX zCM^4TF!vMSyh)DR`Z@z!t+E#MF<)jbFIQ>5glXsyS86(JWt{BId=ju|!NW}1`n`2Q zc1eZNXon!*{L6=CR31tXWAUgfYN#!`9Qo*MhkJry+9RFrpj{nXbZz!=Jj3RQ);XZa zYXC++N+A)SQ6U-=Jv&?_5GRK#fm}TX$!qf#w{8`2_lo<^dBa+o$TL+cq%tH&o{cGL zS}K1vG&L}l!^0=5tnTd!oVkhVNQsS{_1F?ehTwy_!*AF}TQ!5Jx+n|Wf5$I-?qVaF zE4Qm@2Euex*U92SS<22a*4vHi$8G1=C|;+zA7}Z(4+`&wL-}Cs`~oPMSYx$eD&0992?q@hn9?oP2h*&!M}X;GBN`A zh;LlbD;`SOw~?tFTyB1zys<}LA5x?W7%IY-dZy0Q>cmo=6r{f;e$Lb}%JPj?#RcaX z#U9|g`~=djdliMCi#ua27SMD=oGwSj5t*YO^) z^C+zVAYc`hv?Ai7rE4YSVHM(U6{-JyRy24bym`K^;*aXC^{ZCvt^}}e_>Zn^2 z`1_0GQ6hGtKb43Q+p1JCdXllMwZ)8)O^>$4oJzV}pMu#9)XL14puM+2nT%H_PeI+5 zOL>QJzQwM!mw|3rn#hv&4&it}CEPy82G*JFW6^z$3V!pcur06iIgl9ssP%(KT-=KR zD8(%-O|xCr1%Teolc#k_eZxlvUJCfet(Sifab}J+02)e6_qf*Z%gElh$QaCG0%V2N zZDyau&8PR>A@E&HU24$4BbYv%P2V zid;`bWvs9-tLVV)J!{So-Z5)@-+X=b-vK(cU90w8vLSJ7PZ2b~4Q#z&xuu_a2Py)I zwx_sKKdXF@vQ1;{@^9zb?8Y&dDtEDZ|3qxFq)s%Ezt^Q3GCeJw0tsTw8j&{Z4iG(;zdksssej`7s zxyU?BEq@Ha_U<$hq3@q|KaQAfH##4}K-qRKAd|JpS~a=;JfAPDYt}t6zb4X{du>8X}GA zAISuhn0l;b)m4&$#5`i??8(^7agwRbJvMCmi=4!DY;Tnc)8fAfw(VQornkIcAdq{` zA6r)S*u75Hi;^WqovmrQk-I(e!@Ci#ui4H(JAI6CFEkP64t@o^CtqBs#bTK&dtjJaQOtdhCy4DPpjrk8ctQ~@8VO|Dsp}b z$um?{(`(=CsFhW2`F6AKk&Tayl83SQe7ZpEe90UZZ4{F{NHqttD&vJgtQnUbJ3 zzG+u_i;+h+DsixxtL>Ah;KX8pEEV#F^(R*UDA+HS;vxC(b5t3EcA(24_f3ZyuSLnx zZmDtF+?mDrrr&0N!(kXMnvTzrlT}*>AX)8JiX6FA)Yc>8A1YfDnuzq|=6X%b60Q-C z#XzSwpvg^ATRkp;&I6$Kq{Wwc+Sz{lLqqHkmX(WlGex9v_2X>M$rW*7z)Yt11t#2M zzRsepB;!#TUSLCT6s$rvTJpO7%)1Ba3iX5jQkx^x$gHn1#yZzkVkb+hRIIMke&70~B=U4Eot7AO1gu&KfUw%2=Zp!C{Cp%}AwNzTqKq%X z!`}LKh`aCCMVaCCwVDG=7!&H*y|J7{G4O@{1rC`#Qmy|<%HHR8?OkdcYO0h+pOO9 z1TD8t1Y3;*QM9L1if;dL81BUMZ8{ntp{=9U+L8xwT!7;bZ~MZus(v4plK-LgpOmKFyZ@QnZM?s8y63L!Bx=EXAdA2y4V&nU`(+v)e^PBHk z*I=h}K5pwi??!d$?)6Vz60~U&;?sk0^-=^o|GZmhct4l$e(bqK9#Bq`uwA=v0sHtO z=y<1~(ahev1EJOtFvRKA;9(jfz-Ko7 z25Kk1rvEJZ8AX4B^?5PNWBBP)aIcils0smdqn=8OGD*tTi7>oHEzMH{u8|C5SSBp^ zt&!nsS})y97oRq&U1^$oV3e}aY*s9^WsS=22#2P+S_W9i&R@GLv^LkPa5jo6DmQGO z?&7E7;lm6;n|biHP}OqpTsv1Iy!Vv<<8akKfvT?mCjwO+3G#54wS_->i(ysIqPnPx zF6K}KUPv}!b&OOjpF?@9d@^9fyCmlidl!|)y&1@$SQ(Z$?a~QgxypdZup}1Ea(O> zWYSJn!iimbTa>_|yMj9b!g;v5>_XyswW%PcxmV^DTO*Ih15c>^9a}%VN2VU{&(_Qe zc#4T^)s$Y^9eXImv#yH_{>)1SvjE`O1uUo#FG@rfl@45Bz%KNF>3b6i_LtPIns_Cv zk}^i=vBzfu>VaLC^*QVw{ux+9#KAVnvnWLV&ZLX9<6M+4^xC{xLg+sxpT9=1ipeZt`$*06O zZg`tA6*wn6|2&kt^d0j__EEVB)1t3rLmG#Na=O-rtgH5j}E27v%l$CZ;f`e#;Y$$x&x(Z z60U3I%Hn?(g3vx*=sl*l%5G8OvdHUxxp!J~r|V-a0tp~5!XziMK?aRR8nv|2!>oR3 zXLpEWNzIu0+pDzd+*AhW5gk-E_Qza_)vS^s9rHVlq~hlBoP*E5BOVF0W=aTsqt?>e zwzdz9c&@aV+MzVD)%P5ktMzIL`*vxU3ucm;0+>4*JP-_UXPkE{YxJcQ7Ch?N>nq#G zzL!>GrE(qxGy&nHGqG{bi4Q;Z0 zeI)>$uWIg($wdX9(L;#v@KcXQUvlPj;XmQcDAxX)65!zSQ-ePgS78i?K$Y9p|1;~7 zdwsIuB=WYjgs2trqx9jvY$2G+pB`(Bh^=X_fdb?1T(_Aa+Rg(AzBLZ;JD8OIko>%; z)!)m2?cmuI>{wZEgR50F{>a z*ssW4cShz8M#3!b9t}Xc4C5ij47GU7>sl^Vyn9dkgT4P69((WIsnVJcxy~xyjlS7$ ztC1DzSUUJ7(qHSxz<|-a%EYC$mfx-gMi``VlIOh}8m(a|FjJNhE@7Nip3Z>RKrQ=6 z2`rPXaB^Ho5s7|8{n$0nstrDTU45+;JaiV#R1MBnnTAHjhG8n-yzNnvl%FIo#;J$2 zNX>kJt4xDQv`#Wl_eM2O)?Sl__`)o-vUy~gpjvMCoKSQ_K^^utwnoHqe5>C@G<991 zxnB0}pdMICL4PcFqs{1)hf%pNI|f{hR$3`H#j{y&A#W=XXSb~)H(|GjJtBJ|w!iB) zysj>SH`erS*MscRWF0JSMhMqeh4}wmS^-VEBV93K|G=s4)&+CC$V@Gd*TmEkUnt%p_05rJG+$)Qu?ooWrWM0a1 zp9jD6<}cJ`L8SFmUTv!#crU@yk<8Q1Y5>bGr83)Oq!eulwDWa?WNT+|x?BU701DezLi7v_Qk|Hm}L!z98@-kilB>y39N; zyyc}8ZYV|QIgw)>*Z7c&t03mgk9E}(&z9+EhY6#R`<2>Pw`Vb>PIvaR2iWHBJ7Q;Q zLXVs#h#vlATM)E4h}W~4-<_ew(Tlj9WGKo`^)V#@iw{Ra;Xkaj6d?n-E6)%0)t0}N zn8I&W#hl0(fu@C2!vGD+KBNmlarEz0DeVUfh!i2MH-!9(_2DywCe#?5t%yNiuPAZh zS4op~qx>NM=8WP+(TGaUYKL2aSSay;Ql(EG{(uQpKnarc=4QyS!YreBl{VjiNC}6D zM#(ExdxQ3Z#lxVa1e0rqzi(3i z4eQeKrw$w|y>K(+j!y^)h|lVNKv=VfhhAuJ+2_YgG~Lh$Yl;h;%#iK_IL@#OOEO(U z_2y&j%oyiw*Zj);1=Gf4_~btsq;i?(QBqHzJ$sgXwEC+HK$C_(@rOI4d;t|jUq@$X zXUd}(HNEEk4?{@1=xWAGP1hRwVCyEg!4~HW4j63Is@0=TMtyxU*|_wIOCPphMbpWg zXev~8CcA!=&DVN86m&ZiUk475^L^DxmR_qrS~E4@eB}r!l%bkpq}BCWM<7jgdlRdR zj$kF2T@@-oB1oRIiGkj5q%^IR$-UNm4zx}~EXvhR-X+W>oDH<|Kki7o4*EJ!8W-Dq z`1@_eeP8AUg8$0G>O@Q<+z~&3)Z3wJ8_dO^R9azDdHOWi*~>&_sfTnKGe<>(lxNs% z_GCHZ*flVa@gxWl@oz0)6I=`q)@^>LQa3d%E*;48#=vV{;Nu5rcgJb1ZGv3zH{8+c zTdUjU5saT-KPdb+?%p~oj;PJ{CJrH3a1X%(1PBn^5;S;lr*VS2dvFhKL4rF3YaD_F zcbCRp8f#o`HF^EMcfOffYwo)1`r~aLbDn4K-(LH@?M$a*QdTmfbX#uZs&n6P zA{Q2BU6LIC`LhtWmx^fiJ@~xA=)&v9=jmZzL+U+waqfY)xfSs&7x-KX))I4fdORmo zjDO1Cpml@><*Llhy9UE*gUYoBhtc+`vk$L~7^cxr-#};!<|?e4uF&`|BJPILQ!|bx zmNzezZ!bF<;j5GnzQO<6*RpVFDnE?9@Xi#}5QQpGz<&$zoyD1i?pk=^!-dGuhA8+x zphVF%{@d9}c^}?I>%3e=A;Sqq6tGYJy2|)aY5I>$^Q`jOgz>l*r$w`&V$hZytjRyb zBb&;AS2qw+xdb&ECdg8%Be*3#Ut?8a{OHT1y-60l(Ka-}G6^RbsMTKJ00TLBCF zaL+!xiHEnH4)W9%`Ib~v+~wysayp1;*?P%MXWaIjI?^Nt3Jf5E9PpmnrPs2KlCuf= zep9jfW#M%^qGd`GCP&8TGH>CsxRkM_YR&5cN&)^2pbwXNF#W1ypJ%%Iq_;wp08RW4 z43VP&87?OKPr(qMvEIWFf0wb!h)X$e&Lviu+lzboGpZo5q3;n&qBt_gG(bRtv|UMLz^da?EtZme>`?0dEQ! zYOF(E@riB$KAML!+@J(0TaxKDu~y|Tw29aOyh}I)QVBQ}pF33<0a-iz4UfvfA|6EKBb=iae~ zJXR0BI(FY^Ps+#7fMxvzT2wZVeRa`6gc9b>klW z(d|nC<;u$@HWA9Vc(!hip0Nu(?~kXBMNcS|&%UD@%LoNs&G=aVWN#YNLoq6iGk#X} zPLXJ`jos)9O%v}fQ^Rt}s?dg7vi6{gX@BKI+9&rfRp^T2HwKqDMwU+d)LQf`0xZh> z_3zj$j^6bb6f_s4jsL~66oBy z?VTpF)NHT74tRNcxbiz01pbV*(Mgc%*&P|!ebCs~jG0p?f_$MNl#PDG9s6_rnIGb( z--y!MhX%Gz(R`J^a7lw6(u)d$zL>$j*o;1;M`;Jg#{K$%Mj^XJMvFFx2MylZ2*`iN)k>*5r-AH}$>@;J z3J<0qQZ|3tVu^0dl|Dyt9o{~SL;Ccy*5SGx<&gM)#}EQKV6yCSUjo|1jsy$6ngk)B zj~m~p(ZpfwxSBg7RL?Gv4eQGP9j{OM-E4p2>#H=S6V>1+BE)}a3D;5~s$ZHkN*s?2 zpu7`iKe-K|HCs~C9Qw`GeD2@#nhU}l@#roeR-a}&Ihk;;c0-3;Ci&mq$w8$f7(c~# zxKv>!B#gsu08551&{?pkl8cFV$m6Sho6gMPVmcD7ym}ha9rwOoPv=HTc7dfFD>j)@ zoycX<-EqI`7$owhz%6^)Ijap(1~1a@QI3mD5&Qu6K$!*k68J%Qt?Nw~l z$$*yE_%N_R3(#rffc}X>no^qznIN8Oe8E|jKh4`(0$K;QFSb@OSYT*z8CoM|EWxpJ z%4zwHhEcWWpB{>{adcAsO4utz_OGJkKnu9vuiD>ORpMp=uE^D11&k8EoL2`u9z8E1 z8mV6ZT2r<%2|Q9UirlysWo+g+GsU-b7S{8Yrt}?p;DyDn-NVbiqoZd{bsO#NQPdf} zF0R=kq&}ZLFRr7#^+1b3T`%(76;eU-TmUZP&raqy3gz34^&@A&y6n@H?}pZ4^iSd)3{|;|~3T z8nHbYkRc0r&NBw@D6?+v;hfrikCuynv4D!W?3K}`{Tya23G{4pI#l$%jE~PBW?sj> zKkU~(j!mLh4)Z6j9f@JEi0|DBP9$K|d%i6N6e(|e0=+5!=B5$<{I~W?YNM(|aK9^E zQvD;-U3mYcs1?&^yhtoDiK0l%RQ$+YqFoHiqWTX6zfbkAJ{s7)Zef}s%D>2MzFzac zqsW9m%Xm!qKWYwDt2R=Sv|n>&g<5irl*dP{NS|F6KmT-iuJpD1UCd6S1(WbxbuS(N zODU7xpdzEt(6KMpIIP)$$0t(FnvY8hUb0W*x{g>iAklQZwbY|R>YWPXIUapnTO8vs1sU4fqeK$qDf9}i z-Ga;B4c;&sb$y&u%Yqa9505squxnR(LY4otyok}~^9pWl7Z1Yn$~6XMon(q2{+AG- z%iGx;QIhu|!di$O)!Z5|B%=B8Ul-Cz5dZG*^&8a>-BK&XDO7>O`v#3U$Jli`GLWR* z9aLDO1D%B}TGpG;)J&Vt*?^8ly&;2oeU83)H3!}i#bl&S(AE>mf|smsGPOu2n4J36 zJjCl4*7r8J^u|VYZsLf{w;YMkNJzfQt^(~0`iGA3e|O95a|2qVt@uX)(oV<3Jn|Bc zrHt`4{22LL6Es`dHw+djGDXDw7EBxU4fKmbbpAs*{E}l$XpA;tbmy@C=6mM33N5tkopxz4;P3=<|v7 zwMxio89Tp7&H|!nQTI(w>M{T6M_k~+Ui7fCUkgl|eg29W*s}>t;bhrWa(s=~GJ{mP zZCnEWNB%aK^#?>$mMuO^n z;PyEQKm`A)52q#D7@1s>x5a+f4`=PysCLLfjQ)1-nmscYQIrH0m#okclR#G?J2%#P z{o=SE8B`+s6_203*Ck~tqzQDJE%-&H#;0So97>%gOlV^LdDUd=UBMx5C)JVFi5`-q zH6(M%k-BXM!rx2rz#RQP@44vGcngO{ii%V(vhq^wvIw4WTk3D zRth99m)EHpsvi|zBig>DCbPJ%Kf1*Ue~FK;Opx@_9S)4p&Qh(sHJx-y9b5~Pznir* za~g&$^;Af{ya%Z*O!!j4FVO+7fY&1}p!zMvlwl=RcL-6FGlQsGOGE^*`BV6!MA}X6 z(Ul_8fXw&^j*4*bvjT52x+_5Oqm(453`-_?Q`6~C217CoR-4VwB`G=J{=h%Mt1O_Pai1UOde)i?C=RNJLyj%VJR_ zVt>K`V4ksbAK&VxaRZ<I79i+N@-$Q9r!5SKXm?V0LuX=ai97k zKZiGMcWfOC4pEs){#Y0P=J!#qK?v^F-EJOR0Wa#$YxRyorX|N)oG-Cmzi^HOg`Kh>c`vWpGHyURvG6CMW9# zSB32(D*V`M-2Fn(PZ7(Ci5KHtj|Z1x0IzeEX-*IEMU_+n2Y!%`|F$9+3uex ztU2iae<5Y}=Lxjhu%P?tdePM^6hY+6v29|qs7Ccc5Jo(le1Why3(VqfaLW+)zp?YI zchKB`%+DW(0$OXCDuvSM((19)BP|s%!1(KmSj-LUgwF$q)@Y&S)@1Bt-Gb2w7Nb!)>Q59m= zUyS?Tw*kfm+o+#Gu9NX+*40e_NYfaLV-cgW=g35PZp=q`yC1=d8hz1g5Fe~A6j9YD z5lW1Qo`c_N$b=MsEJy~qh1J>bOg6f=vQEYImdi`ELe%I%O^wctZ?7GW(+wK+#T5IZ zZUmNtigzF;4yx;=w~6Ss;8^T__7qQmY&PlPITfp>qIOzI>%IsAMVhOCi?{PekH+XM zV+sryE!5+a-w$cPdhOLC5=COr^kRR-bUtdPBgmQhH)b6qCd*mVLi1rwvQ9q-h0 zXU3QtLrA*$d9r!71g2(y=iSU@F*J>R?RIxEo7uruzsy+kJ<0F+Qmi-MdCg-~28UU=c}RNaipw=j%#g|OevUd{((DPj zlA)ZwE4v^T0gx*|yD&u{_&MC;;@fS=Qd^IDh8WVXPhiCvFxO&lH`-Tu4NiKNVIJZU zPrmQ_h`H;vTH$ScWo2S#GbN$l`SkW&dr84sVxo+`VcdJW%V1Ga^%LAJ1gC9YWk%b-z!& zss+!#7-ULq!@lA#Ip&COcSOZ8sJxYd3bk&9BQbENPbLcBo}R1SdZUbu z(%I8;Mfiv#?E3;P{7S?*&53*#S7PF2j}tcofRrqCdN%r8jgB9Zr`4}f{*iZI-`V5? zXH`R0hV@G5gcLtR!HF4%)p@MhhRkd#5<{{QIs=`)d@)FDav0?LnWWfV}ky*!u@yW214lPf0O(3ub`;^L+;PmZyxUdptk+4 z`_12zerAE!M2n;Dy-kFG4pj4hw23J3f1Yz!2hZKf`dHVq|CYhf9WXo&j^I+7C=~t` zuthybo9XWr{VG42y!Crrx^AYB!o^e5IgFLZ9{k;=nL-?bj0r=2;MdvO=G9fBORfUi zB9L-G_iSOguT*$sqb9hF2wxnw?ltQJJ0&pzyQeYY=zyhSrw*3h862a8e}z}QE|%ZT z5WsC)T|9so_{k#vQ*~myaI<#LS1b$y!jJ8GsP{QO5*|x&xVI7f-JVB&Zgl&N03^|r z|HbvBl?X8CbIt{pmbWer#sSy4j#Ek@z3Nq9b(v5aU?;BxaIKb+%&|>$q|$1$-ignV z*+2sh?wKR=7>?-2c@`;qz~e6xNT&XWh#i)jfx2_Sq6K z{YzCTrsU?*CR27QrTY))L+xu7y4t|63<~laeGq=XfrmAyem)4Pq`nlBUbTx(&e2eI^&Qj;%4sp!n~K$i1j1L1REx!<8zWjRj$Z zO)B?R-a4yZo&&{fZ|XnQ?DM)&9VK{8iadY=bNdyj{j1g-Rccl)|aa{}xt%BH_+mcV7t8#&wW6&^83EiyU&u2MUSloqQ6;*riDH2+~!1yD`1eLo&*3Qj+^bcAu^-GBFA&PyMJs=`l5#Yg6m(~m;Kvcz;=>lV%&l~9+Xdg&=L(64o8X1CJdqWq% zO;1^WH5PJ7NH=Eo>c$|$vkI>}1|42jBRVsU$b+V6ma?jPoE-5$YwX;-I~+N18G2LV zuGr8n&R0XId9h98qlwU_4TgRwjtA7UJq%~xUALh#jaE&q)1uEIk7xw3>Se!)-y5F2 z8>uNLR$lx6OyPNPBQMW=WTBd)`K`inGeD0f4F`SsLg_zQUB@#d;g4-O`b%~FbnL~j z%ZPezqu^?`l*xWL``1@8ESG1 z>d~n{H>eZ$1)rAQ_XTt3X22jK>9Ms`qpNgPWHm$F#8U}*qN8k zT>>8QHD<ekkl}jcf3teD?MK)yQ+%nmQDRZnN*g$X69LY6R^V`!Fv}u zOo&$amIE&f#f&DL?l`6J&0x#p=|J!CbGUAoKex4CrGrJnD9)xPyPHiYmDqsxi_(H^VX-H9@hbr@YnT!Glypy zgt7hCTEKrVlczFYPBCTS?UM}!N?PBszM$jyxpNBi9=lR9H+-`C2C<088CZ)uU;b>? z1v#h4QjtNoIx-j*IZFZc^XT3-(@zl{*Y5;he_#VPD2ACcEv)$;tXFI@RSuW@25i7$ zLTMn&VF3jc3ywO7x2&)6jI(5N0xv zS#G$OUTKEg7zv`X-FWH71a}IWq^(pP;KeJsR7}$U?UHE)~R(0HCi^>;v$>Z zC|4^sT8&wjnqr?lgMO>NTDTcexZuo5CHzI5@J9lJ@op8W)QwCdGX`lr}p-u6CMYKuTB5rpR zw}!5AF054fIYOi#u-VUlCQ8bHwpj>vB`MD0HKx&O`Xq&uduobYzmr64`Y4qV1-Pw* zsQ$(N@pn5%?92ui_PJY543Ldy>#C35PP9|*8h55?llV3|^cgFX-l{-7w`~re&rg7% zJ4aEakqxf=w^2EHp+OS#Ilv~ZuI^%~b<7ry8x!}7Tx+Cs$1XU;@IYdPdpH^Z|6N@e z^|%02lxgKtc1NDLV%lL;PU!{Vk)$Zj?cxKAjPN`e(xnW7Xdp~17b-v5_xt9#qpS4S zYB2!FR2?s-dg*;d8u(Eu%5og{DY4p@wmSD`h2x``JVaD;R5N*rzfSijpEk>HJI0NX zA>R93=-sSI^qC@8WBtXGuMXcqTZld~c6R{ecwe{Te{CM>AeS6$E z;Z2chf>rcSdO%Hy{Kwzog{&jmRigV~v*Y?a<;{&8gC%t#BF~(%M$Ov|llbSGDmpQ% zzwzq3-}-%@aQ}~kagb^Mi@`X_=K3BYw*9FotyZ=+qIPCOzy|W z!hlmsX?Pb^Om?ee7Od<9(5NGLvol?C+0J}JpYWuNRt!2R#A;;IG7UHk{iyO|lk7Vs zDr$0`iYBcQlc{NZ*7tRZvpW?li%q?Y%n~;>pG(26%~pJzVQePaBP}WQYo&XxwZG43 zyzacib{`7Z@PB;@3xKYNNFy>w!zzG{+1~1a=qAUY-e5% z*0McT^A0=7w_DcI?pzb)H}Tf($7nIY=At=AzHC=))X>(QGirMTpfSPuPbZDtJ(Op0 zZ$juz4ty48@r?T1irLg?r+TleL>6VQ8Qyf%H`oLXWzdZ z3&i*1R{nuvx@Ws##2-ItB)NydjA@@BB~;T0Iw9R&28O3OIII`K2t_eLO808q(^^d8b3-x|@HR z(byK7+llGN={wAX54=qgyvTr3Z5pK1KcTjuab3G$JBDP-c96-HtK=T_=fj8F_UXl8 zB1Kb5`g8f`M{V{__J_Cm@4<}ki!*0wTzi?8Q4a?9k@%F6oXI*2g!Ei(fxauHsa`8} z@*EjiY;s4}yqtJo+&G#4`2L%u6A+6Mq)!h@*9tl{ZBm%T?Y%9p8%hAdUH2??J?``s-JJNN;F7S2f*0! z`7U%K(~L05heoNHk8MJ`q~Y;`!v$efR;ul25fds2D9fqSw?;8Npz`9biM zq=hVpFrTS&CgfwlE`Le;U5rac8l%vtig`2>JI^FAPl%}T*EX4(puL?eV(rZ7c z+wtePS0!hT|3e-fs^OPTa16Y~^r;;fC4_zczxDKKXg}zeOR;Mbc#Pb0&CcQc_dv;F z*VB8Kf|vLGvIVdT{@+Wuu|}I~uwL;dwOWT4{k5^8=6R>LFl%-;4Hq7d3)zQBfamFdC3~}`JibLzG|^XLtm_UR-)P1`p0{M7n?ys zow>&0ivO}FBUBxEht zjGV-v&}4MM(0kU>>!eVN(2$@#`%2_F?yS5yy@eA`^I!=;nzh42jSv5b*F#RDZOkph zvoJsOI|eH#aQ0_S)}YIeV+lcVq&;}QoA1^b@4qoRQbs4wxz#mV^H%eT{b2mVvzb3P z%p>N`Lo0!0pW$Kl5>UPK%_Ry9N^p3O7_9N+Iq)G3b++0CMk;jVRvD7rG`4r%+fVrL z>;Z5MaPjX5Ssdo30y-nYNZ6@dG!(}0?ypo0|6GIfN@vTs>CpnavV}&y%WNsK=^0;-~EsN-^yQt;CWvG_7}b1p~Sen7S}$*E1g23qQZyw*Sh6q zdA*;I{b`97DIQ*p%UWkuA$utZv&NF=9^S-<4n(^KAx$u$i7Yf&?{&g-O^G`LI8b9smra6&z;`= zu;~X9uuz>wp5ICg^v1h9*=GeV%hV$@9&{u3UEnJzYk+`tCNR8N_?9jlw6r~2=K|MP z&A{y>ixy7EXa!Y?l54KrC8@Cyz8~|~Lon|`Aleor8Rtt^B7ufD$HF7Lrd3WM1thrI zuMmum+<)5RdTaAV6VGN!>)@6~K_EjS@xW>h7=S7)T%7B$>4ny(F^l;TQwc`B|DqhJ}^VBk{ zK&l8x%fzazZNiP7a2h1Rb`Q!Og0q-?3Sh+fQiW{ked!MiV5Sv!`3KwqWUEWKn|c6$#q zXv#fhwanen{Rd75uzVP&0)gPF9Yc#Kz!NHOn$lbS;VHN8%K595y-)>S2J|ZxldlJ{ z!}U859KcxGfizralp72>7k(h*f)E62NK+o!m&BER*mix3H1S=k#f@ zv)bd_JG)|xl;LnqVHt}bCOZ9^))H$0wg6-Lqx}$bCk6bTL?9RN(i=lWl-u+UI<3Y) z6-Azw;f+^@Na^?Iq%gcOZE6brS`UI~Idffoja=#8bxMOZ$(N3DGHISQ@bwhJ zJ0dxS*GguFz}C!VDe+}%wn4s1u3@0k4`$JaNAeV-KqbVe0QVLjv$GWdbaUTCGXtWa zRVvkDLDYqzV|j&FD_K^n>c!rwvf%Ph~oIC#p9N+Dt1HzYZQoTI%;} z0uI|3e3PBR^etrY|BFB_JfAn$Z# zybRY_pG?qKg4J9m7~QWJMEtR0hugd4#8U25`si1415XK9R|JRJF&T27N1TAR@%1wS z!no-Q_o)StQR2R#g>P`6pKoWX-op`6Lu^76Jm*qi=@Is;TtWk-iZ=aQDreND$O5IZ zRcZ(o#U154b+`cQZsf9$>c>V_eaU{MgbIrhB%cYlljtW1cE8eU2}EDSQ>@(d>Na8Z zTg`p3r$1^uSu90?aS{{fMI$XUFiS5zqT(oBpB)c)pT(%oa7y|M{L4ppTUSbugnS+{YZ06S1dgI2!!0Tkuc_f42I3q#Js(Ftqu_1@0LV3DfXTr}vATJslEJ;mttgdd<1FwQNz7E^LC*_jH zIvBr6D>UN>QL{u7NuZhMD+BHCUr7?St)SDU9r-(!J@ve*(JQt-zdg@asebq$rC@ia z;jYw+wuc^Xd^Cbn*FG*NY!lq_uwG|7F`wuTc@Fq#1#=Hdon74tTSZ?JE^6jka<@C0 zEkd5~KY=nnSn&1Nxz(ley|67}7-pMY^u%mj`1uiJAb2Z_YNFM$Fq#fsU9|jk$G>UV z^rHC;Xup_LZ(ZIc-oGE14!B#d#-k%+$u&^0xd{b4_mSn3Jng*~sJ6ND4vaC-xq^Ug z>4^5V$zv}al+!ixm#wkk?r&K?;@vdni~ZPnmd*0bDaQKm zx}TuEH_ydM4jodh(-5yetj+RNsJXd%jsel$g~+e+CV^-g82?9%68{?0E)@F~#11o&GQQ|)H(yr~1qw-Kd>bH1oY7rZn=PR^FrKV*P zvbau6b^*;;29(_Hyt4!9*ZTy&vh%_zJ^O8OUN@hGOzJTJtlmUE$Eln zu*oLK1@pBQxv;_eQ7(iO)PP~ScQ^%5stZq7=t5a^Klybt*!)+Y%0;%4sT-)0gmZ1e z{m7 zf2eEQ)@8x(Fu7L<9rK(*n&St|Q%(6O{^t}m&z_l?geTQ51sNt@@b!%{yR`|e;ojPHG= z+T-SI0L)43C4Io0eT25(cj3L@!Az2iLRCQc@i!S2kheP&7QDoO7u|IG{qPyM@fR)@ z^4@UGOw%U&GO_p~Xiw+BfMXkD5wAnx*$0n^v6N`fk%ul%T5tT^+xbr#D;aU`ps3iq zvHZ7kjh>Zr^tr3b5%$tbUx7+*-;Hqn?6Ijxec}oMSIh98LSgaIx=yOtTvC&S3HllE zsynuTi8@1-Z~1Gj_=ljo&YtgG=d<}u)Ql9h0$jd+7zLAJxnJR)cJNKVynEEH8K*4~ z1lw73e&I>ele)2GNzBtI8lNG-$QoM@I;;2w`3OW3*Qw=P`60Yja~i;XjQ@4TuI9YU z3OCd`f3?J&>zoU1GILlR?<$bf>?+__{L&jyFTIlyE`)7r&7F<#dYI3wmhBK(^DxfF z;R;Dh%DMvoWmP@8(-0Y|g^%rP3M?kX+I0yd3~ zp#)J$sfkf>M%CMnA9IbK;UEqOKmpj1mQfb00Hj7O%9pPK_cW3-X~8V_AY^NTG6}h8 zzw9yB@mMVmBh(U*SOKf5MIWx7JI~;l3pH1qkJi-E$iU5JX3dq$lh?9W!*N9hi7XrH z(zSl94pYlNaNFh^ux{FUGpIys#>ml!iRg264MNFT7;{;*w}U_4Qq>WJbB`PsN6e0? zAVJr-=ALBA^k&P@W!jXhDZU=p<|VkH_U@^x!%9kPjbAz=0HB>TGD#XzfSP)3w#qAy zFQ-uSD&tV9o5^PHK|aGs)|fu4SS;^(eZJDomee3c-GfEcQU9z?3Vy@q@z(G1CV08W z$M9P9k%(+D-p{<2G+Wj^W{Az-!GFxnqnFC!(X$})l#tBR@is5fChp59okAhg#{$cD ztyquTA6HFMRBV&gTwZ&YqB-cGi4%4ZD^`Nq^tLkH((iTe6FWU<+MHD6u|?# z(mY+*K^!2~3eli1rJSj{YwG-BN6 zvUZ`xvfj@1l36U)@&yILob1fEF%@~qO_{sTNX`(@fzNd->bckkzr3Kh_XeTdUF61X zflR0uU*cL9m3G_wXhG*`Z@nJ`V=U)859|UG#&6QOLYqX$U=n>g-&*PLAVuqLpz{FN z!Rc}ZZNFtKs>WR{UWUTJb>r2y6!zIJM&Z4Zni^iPC(U*<884YYb2ln5anC5_J#*kf zJ^D0o^_{6OkD7Q8SS@{7413Jm&URG9>pp{93QRci1J7kP+i|_{8brx?_>rQDetx{5 zX3C^+X5Na?_$nu%UDo(Z<1XacbcV~QQ8i5+&PjLpMo2DpmkkC1_k^;(} zb>O+`J#-v)JdR9{Pxhs`jiPLkB$CuF%|)*0%w>~j?p0GXzX>gvXLL&V0^`{Bk{r7# z)x=S=f}CZxfTVYXFDgU`vWm5B{X-=AhN1Wuqgkv2iQC&IDijt&LPwu#6<64X*bZs% zb=J1UlAHor)Ru|U-N7}ZKM-}%+>!mplYJjsh7tLEd$jqbs11z^>0szpQm*6T8A>&^ zMqs}a#OkBB?S`zmY)x|z$##iJ5A(tScNifBFwV znM^_WLJmPB^B*`e_dod`UbX!redYfDAz)aBe#ipEhW8bc7RP)bk^@~9(MpKq))Fox zO%p5p_}5wh!UuG@dj`S(1BI&eSq1faF@z8L1mtjM1YN=P`NlG61E-OtYdg3zEyOcb zUBkG+^BxL71?#atnM^Ha8?WY#E+_?ieyi5cY&n~an~_)TXNfmM)M8+)4(lAZHH$vW zh?<=0be@sZ@m%nvTd>EjnVagc(bGJj#I+N<67Ml}0P&QhE_BwVHyrbx!I&6|R=p$!^O+1N|Ax({axO@GtfYS<_-VgVvEE^4Jln>4Gp zMNRk$qW5v3CZzzK7-DUocZmYWY=eCZ#X+pXuJ(M|bkk2mri$6SCrKC`&u7rL@P2u# zlizh!VN5=IC*Fm+O4Cfb|7*4Mm`!GIv|=^(VgPMq#4sn@eewI9_#RGGSsrtR(Ws>P zQfY)*sxiRlS#*_fIGt&D;Mc-h9{+{ALQIpIg}rKE>dQ6Lyh6Qo>aqLY<+NR2`SnWA zYfIiiM0aPknoa+q(zZk>@|^_3Nfabzjiz=hFX8SONK1bq;74m%X>r-Yu!3RS3|TOE zTiubYUnbZbJklz}zDjlZ#I3XXr(wuXfzGe)$~41ave{;l)3|TG{R*W1O;oy>pgF^I zl}QMX+dE-qRNXj%<@sgv4yaDd*FIn^Vz}1vuC**w+u^VX=U2dE{c_VJMJ0_iOEB%# zf4EFu{2<$77zN*9dY5##Mzy@-P3EoQNo_~0pb)zVHQ>4Sf>PVNYB;=F00)4~PskoA zS@wwA6Bmzo=35qVZHxEIxsUZ^JRFqjbqqe8m8y2T{I(!3Vg#KO)%>xO3NmAvJ|oOz zqYXiwkv~>^o7rW8acbDutKwWXZV(L4k5^Y3#1!=;=6Wi$;z=BgqWHW0+Nes)U`oPe z<)zF*xy>DZe77!U%PTXSXn^oI2%h#wX|gsSC^-N`mpFs(rqKvMUa=ild-)+StJyfC zjS#)$K+{lxQC*y*((jJ05b5x6dk|k%#0(H}s1*vprJD%OG6B*xe|ki34Pa=lqS;!x zE(lah;5xmIyrqR*8g@t0{me%zCMoi0gR{TCH>2lpG84R(=6LwqWz$DoNXmH786&lN zJe%2DHVEN&UbeqlWy;9yxRb}3n?|khylND3RXy)EUj*pE5_nZXJ<~c`l(1ZutnI+u zoRpL=V;)!BT?8j@{-pzW(3Dcf_(>%%4nDFeU6m%`_@%>YEi?=Fl;Lcy^`RHEr<2l{ z<=NH;TEaNrIs3V&#O*6ssXeYdi%%1B$V>Xxtyf5kt_9^z7Bh&p9|le~f4;yTJ2*iK zIWl-5gzV6T?(cr5Z7lzb+n&RZQubz;XgzA;D;3lnz2%i!%94QgV6SCWq*6M=4*pRG zj{OtdV=0bHq1e**+z}evFotg*!&Hu+yL*Z3`_j0SwOt9w1F}}Ya@*68Eb01&{MVCWPIB`ZQc>m(17~42 zkG($qG={lN3$Eo*3N%)LgqeBpUmx98M~WUv56^+XGg`90Zo=YjF3;~?7j~>+K?t$K zJ~~qpChz536o%OiXY^c;{WxpL7Ad7JbY7pscq(;pqo8^{C`#W8$lV(=Dannx)I)yZNTWj(=H4BIJ?0*zh$TcK>cRA@d$4~t{uh$L(gn zG$(>ZOQ3;6P@bfg`CT7UfX`M>T%M7lO4Y+w8&@iIx}V+p=(~Hn*(0B*#2Seziu#!! z9*Z2aIlts)Z^-rcz+6H=7gIQyVE&@^pa}{jo?JKCLPQ#S*Q#fHSCw4ErEr7{SQhYbzgCuax<_G9e1kM+;Ctp66L&an}u*&(J?c z>&*?C#j5sTvN(&@3x|^MSiCgVdh`9VkAT&E9mW`j*@mY-^h^W|pclkkyJqINaIt=3 z=;qcODBFr@dK|shHi!0HG~0qpJ%BE|(=wT-`Jl3PDD*)56Y_&akByrVdG_vOS2pVa zB0*Vana=Ma;ZD(oxr&6IOZ6dT*4vdbX7LlJGeMoXm5U?S|ZV9O01Pdl@Pla5jMBSS;daT|XWz_4SzVp@`sj zK*~fmk{bBDqRKU0>cvuLyiwZ(sbUiu#HMx2nOQ=m>5K5RcaxV!LKz%KV&$B`9B9Tv zoCu@D`ar$LO>~L7efRynQitl<^l@}TXtJs*Qmgd=Qwbogl zPhhGf_-wx1W`ZH^&P@c!L`RKmQ@)v(C*Wd56Z81vSSRmcq0T3(cYKL+Cs{^8ZYdCX z%<6;qNBdKo?}tm9)d5fYR8y(D;JX2cRWOnX!$?JH()=S=8)_`yi94ZYZl(5ta<=}X zw{BxIF*6$yzOstKA?mVme7DzITHeE{Gs~!Uhg=#Gdr3Qg=DFntvLyjB!W=!b0#iGl#~%KJUS65A6G`x)+nR39Xj}R! ziqALdXO;z;78)!cjLdb^G~zI)5jJlVKQr)u2-Vx%p@1G9!e*Bx`?U#*utu z?#2jJdm_h>V^VuyQBeit=T51j#cvrXga>`OTFv2@_1tVde@L#b56J)Z2Gg1fI=%3a z-omB)wo2Q_212onc+hH3dF<-jyE*U>xGZ!1t5up+U)(TCEN&)$#ObzC6S47NJh7pj zze|GzH2z^GeAkz+lxwh(U%j@Sy|Y=m5xyDG(^-&7Y8j)RpC;yT^$Nc+R`{7Rn0FLd zHQn3{$&wMqo0YR!xMdgbVJmiAkxt1Ux9xwTGkh>`+E3$d@Ht^lZj)kC))1dUG+ z9MxqrI>s*{=pa7AxNEMTvL3y>-dDA#B*BM&3_3pb9O`g~e zTVdhM!{3u<)UIt&i5aIc9@+VB4_J4tV*nU^DlI~J zVi)z-Ow=$x6Ub*)vduN#nVEuZ{@lix29FBo#?MS4eqb*0&eboLuQCD1g%geHLS)Sl z3%Aqrhz}m-Et_!Er2fM>^FK}|-LdFlcc||{TeRn^W7o}>2sQDm#79Q;>qmk_j^Wqx zH8V_(-6>9G193^6?Pm$APZk=bs;YFmU#33w<2C`zI?8Sr8;jIgb8+SI9vl}fX%eqr zNn`v~zJ~!w14Kl<+MuVAWLA;^NyBo(c?wjif050l(vh>U@@@k}AH5w2( z1Ll?bF(3yh@Xce6*JyX__YKuoh%~hDLw^x%T;EOCFC#%6F{gTd2nynMX=(1 z_-7y&T^_^rv%pBh5dTO7{!1Su|28oc3BfA2|DlRytGk{ow5*x(HG+13m8qVlcVBul zr->V(M2@<9XQo*}F4LSP1D1@mU!T&v>PwZcTz#wtFYWs~tr?0^LZ0$;VoodUYOAo| z($0?_fwfEY962*HU7p7=EBDPdsd4>U!tO1rSK^vin>$>UPssrP6r@wjw0pL$X{~4K zdXoq~GiM?NT^}3`R|pSUa^dH5m9;rJ8C%@Bf{WJ$u~$mXSV-mxxIBv0S0iN_tysYN z9`#k?x8dRzo;zEZv95g^xa$i+3wY>nBowR`Azf`MNgAXrofw|<&GuCU?*ei>jT+R zNx3N6H)T!TLt~#%os9(j94;CP2rC?&5to^miMf6~-!h_5C(A-iIA%bx1jTQPausRn z&CZlceYq2}+tNU1VV8^wt-BaF?7do>3;>@t$PH_r+npsVK3o4^?7ekV)c?LWI+UoC zlF};DB{?)IrF0B1bmvggjVK{83@zQ=-6h>fcS(1HfZ+YYZ|{BfdCq;#+UL3FdG5Mv zUH?K@Yy2=X&g=Dl#rv}{R^DYYbdV=-az!&j}BI=~#3J+oVw7!2X3 z7atChZ90TkrZ>49Fb*Zm)t{c@SQ1fcSCMoS85mRbKDm2ONSRH3*47#VKBu~+I=1vq zqK)m}5iQIEI?cpVU)FxeLKg{RKUET5=-t{-1Te&yx|S5svxs_A^$7NmAl4%#S0wOT(#%xwR$JMia*v2w>e$5kSEeNrf5MtiPlW#r6&2(r_HKFPX2 zXokx7a>P2uaTHQn zLuN-!Z0W;aM~tLykzW=YF$hi&IaWpNj&>TZ)Gm4nWad5bD75u944{f?SmBHs3)X_> zZ*Xt=T)40@c~R9;N4!M>?YxD$F@_Qo$Jmjqc4W~0Fjgte<#4{n?r^W{WEp!R!{s?OtxIzlofTra_q{hZ=BQQQ zyh|4QC(|^Csz%uZTo4883B2O4LOW@bRy04XlOncUJbptbs8@RRs~jkkIBa@J5nX=V zW%qg`(^b96aiy~jQl~^=7bKC0A7%Z%DbxjHIiXXGCOXyOG^^o-+wnKIs7Y@Z)%Jz# z!Gs(NVFeFqLqfR(w!`n=4mM{ORWKmR?hVdTPXZi9*&N+drr-{+9SUL_L9l} zl)bil%ll%9&cG2$5in!II}IsjhbDV#vhk(doW8ad`D}Ffx^?yWiB8)E}P9Cj0o{S3rlI&9m?Rr7b3`5JYpWvcPk$ z@y+!UkBNp1Da+<-K|Ab_cws&T4?kX>UP2^^*bzPw1CGk!Tg;$Vtd}S!=JhW6@H3LJRxwaVyHAUb{v2D7$jhOWT+azzjri=oc0_}P$|*6 zZg5Rf_7U3cRKeJgo(g3m)*_3I9s3T>Gd8bC)+)><!J>O4AB zQWOF*BL*QuBCG!XLdOP)+cEj|o|`XW{^C33JGRF`Tw_Q>7RnLoyh@%Gu(y8Z$WV=8 zW3PQY@LsLI`paWW=05{@+PIK?Fyn=0-83_$J16V8 z%fOI}vQh-goPeEP&t5W{erOi8$b9yR)!X_KcmN)MyBvxAuEexA;%$}E`Hlg zb9`Fb{<#AS!=z%@b1fbHnhZh;GpYRgxZ{3{%)C%jy8?5j?YY9s*8@$whz?&u}hJxd}v2zU0y3Bzr@etTU^Aux)@3Oq#8Vh+!M$7KIX?mT}z zT##91i)|&~mNBhQO^kdkkr>>nys+Evzl>JuiG8{A;DN8ISUwXDYI&&aRJo!dh2q)Iyt8*x`DIWd0Qzm=)iKeCu(&? z<*cm^R(`kQq=liwztb_<9FwC36`>AvA_fM=G?!A%0Yai$?0G3K^g8o;z$EFqn}G6* zqJpyEbr-#NSI{Q|tVoHLux|qzDhi`_oEWr*_+%jSS`_W#0|sTr!u?K)5?P=rfA_Qh zHnR4gKaeG%O?+UU`TcR6BZ~&K32g|Fu`iaB??YT5v1fnd;Q#x`H;ae(UIk1q2AgF)qOs#2)fk6M=+b`}!TDr;OGFYPShK6Qw z`kl%sKu8%rW%d+}(=S+JUhpqQZ=2OxMa!J=U~E{ot26SGz;<7&m``@r?K1PiZHJpm zO(UiY?4~-7cNfBCtJfVGaIIZK=IV8pHH?Y`o5A|&JP@|qUhb3S4jfiWL5<(;7xClF zL!=0nfjywfaAf)yv&{aBS-z$`@Yt5_Dk9$=PCW6@p{SR)^|GA@P^@{P(ewZ#d643E zsp!aNwCDY}H+fJM!d3(geIG86E-9R#DLk|56cTpa;v$QI0fK_{Eu*LaHhLv#h&-HH zGtD$~3%8kYXZU9I^=&!z3-vC*vWuiaI4L3-GE^35zTu50ZVEUHaqsGqA>P&}U97y*a7ijY~BazP5$eRLGDljfV8M6U3O*ofZqV^O8*tNcSzlfFoIR`Um1Q*9 zP};J4sTF0Sy_lhXM>sL0ISKu zyhWXd{WSw}aR*unw4X^!dh-$v@KTvfT7E%`1p$QYW@~-@bFQF#A*bG5zp_3fk2CYk z_d%l^cJO6};vcmAj+TaeJGlh}Z_FySYU(tk{0F1<<3|sjo++Ry>5=9dW+FPl<^qA zPmT)7o0_d7aE7$YF$DLMh7We9&U{>*O|O%DFBfC>Oq%(cOZFuEAD_P(g;#rk7q{Yd zx?#JXLo91GhYqfKQXO{d+k@v~7ZN8JL)Hg`bW*5fMp9Ag8QHC)K9-%P$;K= z{Gu=~(W~)hwNg5>%a+)kZ#o;^(`ncIXR7946&8i@N-DXznpBEJ$HmNJza#i;ZxC2* z-(Ew$jhFO>vswuRl^YvhpR0IXhIuXOML%O9t_?rd_QO4vB9gLojl<*;@aE1(70DuY zoO&Tyku%l$c*%Aw%G`LyliO5b!0zKSTEXF(d`5n(E{d{=A24 zYN3gAwyPCv=3OS*qL9_eQyf~encM_t z*w=TM^{Ox(yoNPBYFVJ--t8`B5tGv=Lx^W~L@U~D3O3f>A(~1tY!9V0VamTA*gnEL zhFzO0n@yzS`$0buTC1a zg`>rMO7q3ZtJlm^aT*`3>}G0nmP#!#V5Lp%J-h1u-uh8rZnrMWSNd@*GN_ zT3JWPLNxH~=CWrc26%ad7KJ?1OdmV}9{Q5kZCxRf5*TSR9XLCU&C`{nf~mKf!=J`7 z292K1fg*l*%zZ96bM;|e#k38Jmlt74{Hy`8Av%kGri}MyeerY86WE0YB4LRUd9sG0CdI?4q2W_dxOv^@nB?~$OKE>u4TNk6Z6n8)zS>D$Yhgx3dx zpuQ1w3>sCI@L1+c?Cdmcy@@}aGsvy6vF|aO<8is(;)cM*qYN5O2l(^zI)3e&e`l{o zSM?wxRTK$;b`TcR$rAD#6v0XFuP)MVrQc;BZZe`lz_ni_f3* z$h3G;RzJ_?m@eQls5;Bs7aiy)kT#oWnq>s(&X+IZo(P{P4-}VvPCMFek(4~EAi$@9 zDqm)V<>n$<4zaHRCpiQg_mNwA819nH-aUesJq`}xjL(xg(E3Hn%rI)Q?QaZMnErDTocos=rR`5>%iBU$4flPz#k4uK9jSm+tW2l^02RP-vU@TQLaQ z<^i!Wr5a7kEw2eyQ4ad`+0iVmfpP6AsAPd)?wyk;t-Vfn(p%nz2}pub&LzV3g4sJN zYS-*|h8>KjQa>^MYRre^e06U9`HxTsr}-`aOCZM7S@J|Kl^(w0C!^HF|>S&a6tN05_y`#awsdOlm?pt2v zS9^H%3(-UFd@x!6u%yM`=KcW}TE$zs_fh z@{aH(z(m6RQ5L&Xs$5O1)ta|TbX1G8RS`%i2#s-^ojcM9@YQ^LN|ITRK)LjmbRsDl zF*}YZA?KVKZLjt5d>x_4H>vlGcoRw3c9pb- znU)w($@bfXIqnY;2r%~hFaFzg)qnAPe<{7Xfz%OfNTB@+H4s9xo_j)>S96j~%{HLK zkwu;Nr*+6<5L6WqXYVyrj^+q!6(q!Ea8k+Q#47tRO}#^CH9M2sd7A7IuyTIU>MQkV zq0ma$ccf!*ActPsRmf=sr5mvt}Ua-ce$Rx?{eO zKLG%%-KZ#e5=PiOJrG>%!@^1?N3el={Ekyl`Pr8-i0djrR%4pO2VyCJ1P9c8-b10z zwNE$ZneQi-kda7g-|^nH_JaqeS?!fsAG-X$1N?hdy9wS_QcdaT=dmDK8$3$)8QrM ztEtxl>KkhMw{XB3nPe~7b1@FARy4ISs;9ur>3DfjN-mKZ`({C+T5ppdQ|6v+wyk^E z{zXVJuH|Z2H_M5-VVo?YZi>@sT82fYzF2>8T6|Phu(tm=strObWRJ?hr_4)uiC}0CRp_`^ zS>xT3`F{T{i9rws+ zKoiyOgShthEDdEwc+A9D2wYqv;McNEDzz=R)pWCP>g-^&U_rlcE_zC00iOHxfuf*- z%J+8j>_+1N+mfSvLIl)806FEOix&@cWtcXxs$29ZQ@5e;0~5>Q4?dC`^fv0U zU@=I}GDe()#)_oF=NAmnUi;1ubYzT<3KCmQ4AmvGjO^ucAhNvUR?9yAhH7`A>LPO9yWs{2m zQ!Irsu_*bq6ndgkvUB76DdmZzENNx;W+Or4^Nm>cA_}42ysmuye+7 zFWAR9O~1=YH97y8u!5z#vi+=7W#hi!YvHaj(zTFJ>A`B1qc8u)8`Epl=Z8K%0GxsR zz;P0T9zy;qx`Hxo_itqxzh8Mc$23;0}>sy&O^(t|k;my?E7=A)6_!Q8C9ZceenV5(^8W}~^xP@M>@ zQ#mFn3`))oT*+)zL9HM`qkd5l&oX1hwz7s?ima-R^zrkbj`i+s6@_cQ@$0B$2kv#X z)W?u``4`=#9*bCwP8uowPi-RUU83>gbK$bgY|$BiB*hJjm}IBzP^8~oL@$tz{TS#! zwUx@b99ln){;|4qs1n8VN!Fwc5O-N!h(mwu9an3@B+||IsFFKw`UpXG$be|d@v zD;H^)6l_DJWNYr04TTdz&9Kd;zA*y{-oVUxvPQ<7-fg~Vp zE-iT#@mr6{Dd7bJ3Z-UqjluPDqlR3*oUEDv%Y!xlPwDPzPPPxkOrxq{1vqvN>lV$F zmm**(%m+!a8Ul@KJ#88NlBgh%Q4!rH0{pAYj$;D6OjX$$dvqkk6la4E6?CImTdUh- zH>`Ww-%dD$k0Rji_Gf|BDyhd~Vz+vdaOlO=%AT9g)JY((shEdrkn8Vt6>s*tspzMO zW6lc>U*)0*9qp&E8pLC42d4h{q2OvR=EwA7HqSP`5GXI}cYh;|-s0CM5+T`ZBPYW{ zDqvl1%1|nMO8NM*taJX%k$Ef9BB#1|_w=E)4z#eF-et6YG!C_b)zpDurCt}Fy+rXT zuS|14M66+mSm}ve)m3o7i*a-fd~)qrEF`I(M8Q0lX?J6Bm9n6`>94_TOfLC8mDR`- zOjUd8p?JIke85Lbgm8Ih(5zFx7dX`IY9ElKdCW1T*n|~~me*rNZ_#@PlXRXC2{$w( zFEgx}{f{ioeAD26%F+bVhu5Lw&sDvg$ISOqDM&BUgy*0U((yOFTM$W0qv5e&t|&(L z2Z3N+@^<)(2kWnD)Fsk4NrP;iI~YW1#Af*1q_0nXxTr02S+*hetBE#wqje2x79KCM zweZg@m%a;JtcFN|>-P?R*8>c+;dve~*-9NW}Rcm;}n2f{rUX=fmpp3 zI;_;il+=>}{CKKR;#0d%z?%(J^8JZT!6Uz%B_XrrFF_1gaQU`Jg7zbKt8YLp2Jc$D z{d0up-fuD8{aqL9@Nf3_|C&|&FH)NSZ&0pYH343HB9Q#;Lmuu7n?>kV0%0^_rm{5G z&^_0LGRoQ3Tp9-am||>p9WwJ_2M|=3z$Ykd6dvk}{QlX8nC=poN#RlZQb#ZH*_t)hN!Gr(Ajj_5nq5&$gaJM_Z63Th(8}8u zAj~h!$lb+v9_C323L;cpQ*+aHc=-%c9Ag1>l>$Lmrz#h`+_?C3p96a`UyalJtzF4IMV#(O6+j4cgs& zBMO3BIvnOI31BPE;ntYZcox(F}^9Y{e`e1L~&dkwLu*HFAkP{?}-Sx)q0Sy;i~} zeb~niQMEa6>bKR$u=$Vs`;7#nD%Zuf3}1P5%utQlSiDk^qk95aktTk7vgueuF;D$u zIw)mnURH#e5r1ljqguW+XT?h_X=5j@X0HD83x@Re^1;MHR$CJ@k#Mu6m)mvuz0`-)`04cXmI&cbL{JRz~9s0otEhVRRd>gke&hS)0`iR1;YGXz|q5;1N$qzB6 z*o3rn^m2(#mBTJCNq$_(Ia{I?uZ~137n`FtP}H9_Ba0H&w9zIflPOWO(~p?njxh7P z>0vTX_o#mZ|C10;2$El4_4R28et6D?3PLCrFhAdYgl|}MWF-l8h^v(vSf8dwG{mY| zWm~^@O zN$!^sc@1e3JM<3f>9k`=2MZz|v8jeir44Fj<73n2W&6E)`5i@LbR>VK?{pwgOS-;X zS&CNAGo{d(0jwsYjW41uJ2RRz3C`~*tEq^evOa}L!C&+#Z*4!V37KFKT! z7jlc-Ry|#;xkf(Lh9TYvD~p@q6Q?4r`}ekylnn8jAns`#HR*BaI@SXZmvWJ{Anxk} zs+CaUz=!sP^Ev&j6QStBun#WshPtmmv5yx~Cpxu4*;o5)yKoUc456G>&H0z)D3%i* z$0g?~DK!F0XCg2|(^ZHhr$bzq6W1fFXpBKDnrLZ0YJ%-{=_sw7q0u8XrR?0#&td03 zoNXBjNv_+r&0xpBoHZhN~8U<4mw7Y`QuuKD8t3-M+_wN;pO@c z6^GwvRw0~%Mwv8Mfd9i6%0~p3%~Xyknzge8^ctV?451u`8Z=O(|DDz7LffC^N^*%$ zAb@*J_*qDgtZN|MoNwN|V&_qFm{Gg`$oUU>L2$8(R}F9-{k~*&J>(*o9MkT5ZK)`& z&%E-8P_}_+oSP%UA$ITTr`ps@=F<5MfJ3~8nmFYt?3fmiOU7?FPY=hO&Q*lNmODh6m;qt|!tS;W>8_eW+A&_Vo(6AHm^`d!WyLWBtdxZd>bc$202D4zbT_rQ zp#RA+m+Wl&p7VrQuEjw4pN++uS4&^1#~V^zjz?YZV7mqPAnCXW3D30eLe5 z9c91#hIeu?Hv>A8&-PW}N2#XI4Y)fM7k)r>c)X$jTtI-LspNXnxJFCgYJEE}7Hm`P zpJ-Tk1|a*O85(*1Y58)B6QA+<(49WADu4sC{!h@^yvLqOogXgJVaCZbI2q{*;Y-p)b$)X~f*^Oyu?9w!*f4KiBqkF+ zrI;XkF%SBe^~QT)hucY9(VG}oyQrv8{&?&=E%|rV&EDP+i{(*s&4(0BU_#Bc(aF}z z-j)?=p%y8Nx?23@iDQQaxmpG$@t%UN)rnK)0va!oK@@lZq_59gCK*bkoqwc`-{#t9Gp8C=yBwfTZ}f7$GfUZ`ElLf7 zT3z3HylR-yhzN3ulh`q>dilE{u_&amMCJHze96Gdz zYelD7K?08f=ab=pTQ>KLn`k^P_0^!(vCo~{1DRCJtfp1U}@UW1b=i8RJ>RJgG zwc9(Q3xnyzUVADYlMqfezq&b$*pE4tS+F!iGSCDO0Wk{9Y}hBg3i_o%YZ*2$uP%?s zeccMoiVo>asu9*U3k(}$j0;PBg9AKL%zv0lJpb>38%Q5*U~t&w%ixYB?AcAwhkukj z4RxAnn%#+nSD?eBlxoi;vgsxO08ox)Zxs-SsA0P(F;L; zQOs<|p_j`>qwgxpk;gQ!VgcPL7kRv)#&yo&lq?{Gf868w%(6;Ya-yy>#dui1=5cf= zf0)uq+2ty*w;qxikR@vu8X3nn7IUmJ@Yp(7kN(nPAvQjaR_K+6M2sIXtl&D`rF6(` z7hp?^C+Be)6dJgJcHnR{qL4t4-t%2cn(Z)(? zN6xTbKL+1Aeug^WGUo_&b-7=cImn5L9mzp*8uGq`*FPh?!2_Yd&idAP?6XF?cK zjY|TR*UQS|LdO?_QHt1_qX>lnS>Sw`oe`)0RAesxuWZpqL)4i+DJe= z?K^<3)KfE0Mk$${J+k#;{K-D45@MhO)Y9>@hkj+il3}0{Y5$AB^N_POY`=+8MUOS? zl+2_7e!nW1fuq4~mXBS<+NYqXoT8EKlgi!&_N>a;!fjEjo`ss<<$1*;J0-GYd4JPX zF(Mg}vFGAT9QPN7=F(;+s@{G|&8sD=7=EBmVlH@AFe z<75Oajq+R2ik=9V=_Cm|TRDG+cw_3%oi-rI`D5>PolIn*&#q$X^a=z$JlQ= zU|(RPr^^;=l~cr?lfN*2XG%mJSQjophHx7{W}18vLMp%jRJ4;`AVK==g0lJdV0OI5 zOS#HNk<`f80@{Eh(5+cISY*y1I9+Q7*hPe1%+JLQR!M4D+2?_?yc>e;;DDW={*r$g z3$sBJy@Lbz)^sEKi&9U*yoU>l7i!{*ie8_g);>^4{adm-Qy6zk^$*UyC!x1;^z-g1 zI&Nf3-$90=|0A9HH561A8UtqKlXC1=oi&vJP5C*S>apHbi`No`DYq$;)V>BSX&+y4@YBYu zfDnES==;O8gyeRD+dNHU2@mtksrUucLJHZpy89>C-(sqW>}<-oh-}}EiU6XktI~lY zALx7QvTES&EZ9VF{F(?h9ripw+62Lr4t%$41%cNVB7o)5t<_l!Ub|`-lN^DVq z)73gT^IDH(G2*yteSqu{{%9-uxE70Y{(3vYXRSXA*XP9*whwqbJWjSvR)SK`m@LEWC{`OX#9Qf zZZhoD!{mONnz`Obm$rYoN~7D1*bYidjW-uk0MWTIus@(+iM2xAa8=>;8I7}nc%b?@ z)tF-D3UFd9Er;5FQWt3xx9uly$a68Y>RpYt$*P9{~vmKsz^XexFr8 zvc*yv(4Ml-{}Pn4E2jQi|2@{e(&FYLFO16v6fsxrrJ*NUj+_%b8e4`YmD_JDgu(*X zI!m5$ARKuai6ypgZPI^q7C1Ucwm8s44n>9(sjtTnyz4- z&B~#_T!<3{(bt7>a?oy#`7ko`E_VC+b64TEzr&<4E3il6lX4&qd{0PBz*~YfS~_rj zO{nf!OCAKGJaqd}@=pDMqO3i&@u{>Me)IiVq#_sj9bAX>_cTk=8VM@p&(J9cA=M$6M_vp3gmNKHUKGxD)biI5 zW-Ji>4V4CG0}fyX9N>Qniy#n1 zu)qOgLb}UUQ4Og;B$n|8nG^!YtjY2(#7+@Q>uk*Y_tNr{H|^u2+5JpR?62d_#{0%z z-uDgk3_O?x(%j5HFH?h+Z82KZ&D}m;he%B#wB!-!LN%TryUyF((0ZRDNlf=Le&FhR zXwY-Y%Urb2HpAspmYFm7!>nf01WT^Ci-z1!KM z0W?5o75TPl+%#I|v0RFjl@7*ip9X8271F0O=^fKkO3tBcZ-*?8YE@m7_}D(c_Q#n0 zdDgVsUvd+ji8X}(;0Z&y4g1qnxHNF=1&V^RO*{p+*iE1PT&ybA(%f*3CoLp1_EXhs zKR2rPtgXEq&4T`P$RHbi1+rnj*L-`uZ@lzJtjR!8i~Byt-v)5+I69rx^a0+H zYuIZkD7u53QoJ4A@jvJn2k@Q815&M=gqBJ z+$DQ{-3D~&w4RNZcdmI$gWt7!uEoBgUExLoIX`cDQjNu3aBFjr18xWLfk@GiB#2M; zxrYp1D)0w&XSu@7SRs)tyCdIkm(61LCZ9=FO_lm$uCHC4H#~C``}z1~L|qqb?p4mc zDBWQ2ybW6~`|?hh@13doTvXVOg$`LOEVxZ zgUc^JhBcjWNe!Y3Jo>&!2DKhGV~cnOt>hrBd9QI+2YZ=aW)h2FwbYhO)Bz1G5Hy*j6?I+Y1=V z=^Fofz3bc@w4IafXy&J`(l-t?>lyBK7l?Z|HrFbfanw$ZOVysc7DaWthkS&T3j(## zxW`W*#P!QtorOpUW03S_(~l>33P_;C*X^7pkazBMuMjL?v3mw8+W_0}|(9N{Ye6;Evfifh)uIU$60>I`@(N#GeR(+66@~K(?4cu-t!f zbj%Y)SKLUmWp)T2J)>sexkoLoM5}SUOmoJHu&u!?b(o|An;`9K?bxBD+c*DyUBCkN zWF+8!7E;mfm>iUq{chcEdKhYeo+=CiU1Td_{oZA#*ak3dGL}@@{+)EsDEHaxJv-Tj zmjiPd z`)5ED?P*yN!P=HvH$Mpnp{!wCT0(EVC^sXr<;8i|Pem*ohWLT2kU4{XQFdR6ox#sj zXWOZ6>PA5O<7~@K1I<|gaF$U4PyvEq*lymSMqaUe8thqLL=y&k>Ic`{;3DdW0ft0j=51M3O2)9h&?DZVU^a zZS0I8=SU#k>UZt?QHp`&Fh*`Cpw9T@R8S}qI~HR*Hxl#-o+nQ8%x;vuht71o$S|#v zp)WL5obFUz^R(|`(D@51zlS8Ajc?ex515=JP(uA>P*R^Tdz^otvu!UALluyZtu@Fj zw^@7tu7U&u;E8<|jdgZ81Zi5NJ7wItI9CIx%uYGXF7j1iWnO(|Yl{q9=-&L)mUQnd z{vlw8ebFl%J3n!ZlYtwfPAo(n*5{TM$zEQR@rfrj-0I#uZSyb~rny8v70Vt;OfT&W zX{aW05qC0VVN)Vi#CUd--6_fiCli9(0X!hsM&cZb~9F?PU0e%jl zd2*;$T+)8d>u;YZSA?~fXXSEYeBoA2Bv`#=n6cf0eRA|yQK#hWG@w`TxL!4{OQ-fO ztmw4dN$3OkQA(E7F>J|&ET!g$>ed|@?>*mja zXvaZa)1qtGdeiE5CyK{Hz4c^>@1@gE@B>LpVe4$CL9eUCH`8gK4Me`uYIt0I{n$;P zQ#=TGVhj|sU!pkJV6UYB!FZn`hbrQI%-VFRbfL#H)K74l0`eokKwi@@HBed4V=IZJ)`$ERj05+58CHdx<-nVKg2 z9vQ@h&*{46DK)@?tw#jCCxcniS?GaML~6PqeX%kxu5}4cPKo5a-bFuho zFLj~4!SMMB>5d;`ygTyFTdx`?2y{c&Wi0m_m>}Qo_A3yMyvyc&sq4kw{*AWf*Ms*k zP}?Do20RrdJ1G~l(_7A4TSO<2C}mjC8+I5bnVk=ns)8lT5MTec(f6G^cm$En`|BS8 zUZ(W@i**(uom$hefTwKzLwmxWY91cH=DkA#tv+6F9!;NMFz`?5gjzw*8_I4tDjQ~& zemyGYDV!j$t5|F4(-=GlEp1>*W@0E56xAY z_^d8bERc!v3Eoxrqq2xGZJ<=ax;sJcl$ouNzb}K7W&qZ$eMEQ?Tql*`BF~zHmnsO| z8OD=U^B2%G_P}D4X-vh5%k?M8dIcCI8{w%jyrP`$qE;j3k^b{~^K-fx(+ff68T!Is zMX4Bf?c3}0v~91^;GJ>|B|XD)V2m*0doC9A^?H~B|~#p z{@LY8y(9|ud_=raxLn^$X57l>l@q9aw;jc4UZ#b0OY)O{U2k0fxo3yHrC5#dbcPK{ z`6^lO-?;q=(GZbU>zXbeWVN^+mQ=FV{QW~((8|m4!&j-vfjs#Bkad7o{95NM(9dtP z!oREG8(JNnE4Z-^h6moHT<`7?I9?sWkyhUJ>=AL22}YO?v2ovw6?luPlP7InVkf zvXMeV&m+b0(#d9u8uRMAw3n~-NGQ#&L*s z^lMgCmTmU3b1)*pFLdJ56%o?b!%t9FV)%E9Ib37oW?DSo8i!;FMexvXKcLXPPP|m@ zUS@Fll#BG@fX1#nX z;}9&|a!$(QZ=YY^B|DV7b(n;Ij!&T4tTuI&p)=R5LuYqZ^dx_PhfpcE%YFS2-RXq1 zu!k#z)QAKa9CgZOj5^s4y@zen-jOv&H~raLG@Cy2`HfU)og6XQviLBP)-T86q4-T9 z8yT3r*16MJc|tFtI=AaP$q5~&;I~SDtbC4)=WUKi7IZ-Wy_NWf>N}`gpZ0UURJR00 zyY%^(5)>=_!GI-ch1BhHj~5#&;|6#26zH1Z9`#?UO9J8dFde<8#ntB&lw~-h>?Uj~ zjp0w5T+3w~UJvC}7Z3DueQ`8sC=9?DIO~W(rqTT)Mzvko9vdSf6Zm2mVN&-;PReu|@1$CYpOK=yg%%8iAbJ|n;Fko1^Q=&}1JBW0U0|tp%#QYrtU&X;1%$(X z7rJ*2Cvcj9Yv?#gipc}%zNzQ^^{5*aTVDoB8I*sSkC%{~XpxGAZ`tQxX-^Kc#R0B| zVU9Iny|Dydu0;;8Ed9YxGX}CB;7w~FU3v=mEgv6*t@FJ&a3MKJ>y*H?54EmAObn9> z5MfO%u2G_%2^ClPtc)s?-$>`?D}}>L{!Y3)+~l;f zIC6lkZ@89Sb`nr{GLy4k$Ji}^IX3pn7TU+yw+VdQ5W!*tgXy$}xOkd-cW7Sijl=Hm zp^RQ|uul;*loSk^rV>g>ed&boaECRtXXg~O{#)2$)$%0$l7n1%<$CObh*b^GFk=JU z?2%R{CJ0H+A7TFEbw2Y0W1N|`s;AReZex%YqEcXcZBo2PMBunm_=0Qp>zmlCg{nkt z@2>oR$Wy>YFuZwx4`6mYA-HGA|7RL2|1t1jUH)knP{sh&>@G`W56mE+@}Jn$;QZ;o zKNel<|I6q5r`<#n(|3W3tvOZpCer{QRpCl!CCHNvXivHh`X5ei%0t~(n2(Hu9C~;p z3CXWllPen#enx*#irlt?VGN1E1Qli*f$F`|(|0#V^3u|uAyDJ~o1`R2 z61;u)!qQ1TZ`r9Wkl6jB3su75eTdX@Ja%nZH?BIDSETVy2#Ki2SS)340o#R)`Y5Gr zy5OK&uv7Y#l5@pA(^suxin?rNZeX`ga#OYPr>-x+a-~n>;gi+FGqF$$PK_TkV8X)K zkh6?3WGi;T^lNqcy6*;SJ<{2tDdmU;|=bgut(p}&Z z>-y-$6|vQn8fya|1WPT3(LomP)qkZhIAL5k5LP&H=1n*jDzzw!$Kfs5o6=F3skyf+ z>8Z3B2n_<6rM8=+)o_UqmH(b`*A|sRfJ%^&r6T1iSYrIkFZr3G-yfsZL4!zCa#@UWn&(L=eIme^_ z#JaJWt1CXkPo-f`<~cXlYcPZ|-`? z-zrAnVzWcm1*An5`cKBMe%!?qysHBx5_9BR;seKdz1rCd=buRkJ_)c&}55ichJBBj37 znYOn9?qsh-LbO~>-Ym>@Y%mhR`Pg3iUDn=ovE~=!H1q#Z7-qJj6clpvd~1Y$jWL4N zm!w+dl@+Z@N+!HakUd@}@~w)@*(Kjq9Sv)C)T8sk^?IYqTK5FyBN#yVEQ{R|wQxLG zqN}@TW&bf6Ab@+et7TFwfGkXT120doh0y)<3S8Z@y(G!T1=9Tz#EG-rVfPYzWTts zXzxEOA>2^8k=dFHzPN4l>MDGZU9hsNxX3(%)zb>bAV&`dI8P#fqA;-2P zhqdM>i#WW_ue2{nvquy@;Iq3wbYD_ z*M?7SY5gF%5?R%zU%e&44Q;o4RPFLgq*JWj3FBh_S9|9j)l|2xdlW@K5U~Lw0-q?- zgeX-(hz%@A?+^$bq(wkLS|TbUT?IryKt+1*Ef7R{73nSXBAq}IQrB6*z0W>(>~qH5 zXWV=4zW0v9UyQL>Va>Uctam>1d46yCLm`!kdS+*gG{AZdHqU9LVUhG&PI$TR^XE^p zDnSoK9QD~%%w;w|kzz*Em0@S2L9^S{p;<(^uzyx5*HL*wVo!Q>!z7hy3?Z_6(@`9} z;Sv93RqF-ZYD-_gojUhq{z0BlHl}BVi;Tf)c~a_ryrGfAK=@CFW-cz7Z~`=h_x3;1 z2%7@?IJ_P*^^4*d5m*)U;IbYN=b6rtA8QyjO%s+8sS0p0$mc2Lopn)%Ipjl{PhH+e zft-o|p;Q%et^ez3E8n?&Y>0WeZQtTDTYWLB0pHACqvjVzKa)f3MpwPEDL#%b)&@(| z{11C&t>s7z>-J>EL~N@YRz04b%b0lvE*TgUp)nKexMP4{=9hVrX-X0&ht*VcqE!kJ zgnl$rS;N-3b8EdZk5GkSoyMJ>1xVrKNmsdS9tE#lFG_Q$;#zZFfkK*~$Zf{At@S(Y z9ETqtOvmzl*?HJQdYxNMOGAw>w`G9rM>#GKlJHdWOd*C%;1sUATxsU}wTsI2+B#VN zg8S(nEw;Za%qs5Kq@};qn0#3g))k{_YF{kd&m!Ncv!@s5#pX;POGh9dRh2&5@g6tQ z6zqDzPG}ixLw|?-M^$EPw#3U|xLR;-$xXA0*&_w3!g++huQJ)_B%9yWa=k2za_d=w zK3`#7jo&3@KPesCsNKh}LieB_Ta5aZmD}|!eY0&Va@p-|MOV~94}(vnI|)bIsK5E0 zyKeGcavIn9zfaq=L`8wYj{5-D!+K zHSY&s;Zp3ao=4MEd#n4D3E6leHo-ntOi_pSwY)kO|0Ad(^!$0IT$9p~HqkxnH=9GO`*toW}HpBuHcW67Gs{lx1~s@9&vD^R)jh6U^~2qYvgjdfFu6A9Cx}Aq`q>CsuesWR*6oV(9wG6gZ%pc!pt1y> zq~&XGXIv6!cTPP~vA^$kw?P3aBj*ZA(HA~kA-I-iNCiIY@eKk|ix^#{*b_!XMg5;;@i0qmE{C+c5u4o2=4OMeHcp0N2YyO+}PEgyV1$^$Co6@|k; zg`lEaSFs0}an5D~)qt;Rza`=HD4q7dcQ!5uTvqNjVVz2|BJQ z2HvEszty&84q%S$rkU*_Px|vG-{%IjUh$j;FJQK&Rw?_7w$ zf`f9Vy)7hw{7XXh&O(YE;Qw#c+F#B>U9@ik!B<1 zd)HvE_HRpkvo#2y+ydzL8tdXejm5vt?jq<7vN8=n%VjfLtZwK#B?E!Ydpf6!I+~px z8#=9W(yN{wd`S6jeLTGO%_J)Mal677X2&-_LFIM0MP2ri9vJ=aBDH>%MAv*@ey76_ zh+Ag=tYxzm4oB*7rLwyQ?P?`i=Cc#`K|(+~LW74d9kg^iC6Ds_ zqor`ke%Hs8B?gdI?<#%)iy>}Q%Fe}jexxl^8_EUpWbn;R99{jh1pBy`l}{#eN0;c- z_rqnzu4qQyZdG-UleNHt5GW(gT*?~esP4g=%< zrvD}1@qKY%v09ah-p=hBmFWI-ARXNDZd;v%SD!o%3Nl+04vk=&p9r`=pXMN4&efn(8djWnfILC&V^ji-mgPH`W2Y<%i|Bq|zA}q$H zxfh|FsKJWb2CMYXQ-`whY+i>tjVpQi(jNvBzZPa>R+76KB86!)s`Oi+-#*C5rMc+C z1EmG&U}$CHq=S0C+qg&{1HAWcKvFs~kR$y4NzR$wvK<-%(CEk)p5t%`pnOEL&{aQO z2bWT}AG5p(9+(I;&Pk9pvOfD5w8YECR-kVSF)=leEn)&^5*K?z(4;dnF6#UNQdURq zZw9Sein^;rDc>Z$>iFOxcvV*~vzj(OsmH>8E=76EBIR9b#KSPq{cdvLE;2|3jUDy# zZ`~7NPv^9!mK0!}*_;ru$v?mao$UqT)vD8-{Njblr*-QOtYR|#h1(MG4?$Tt{VsoD ze)-fyn^jDxQ5nCZ%=@iB-Sj>nu6yV@Rqr7hD~CR3Q&Y{r+$uM?sA*8AX-iL1}? z@Z)B^J9;vRD;HatnWi5VPx7*>j(E8~OlhTj3cVKwKa!T$yU$0!oQbooX7Um)`Wo5wZY%cbNTq8FUEIsZu6RIF(>4@rmqYh;OXN*JP~tQH42b?^$*nR z!Xw5T7yf-o_}b}f*Qq87HiRn_8?9y@tmI0Pxe4ZOr>b< z#REj#J>LGeHvBiQ#{V1Iu!#NEoED7f1_|_D7&0t}Kd;6#MeF{ud6)~SiX*-Oll2}Z zM&swJ1_LnRhm5&z_`KVwKub)yiLJYDeSYHGzS~}tz)p-Xj@apmxS#YS$iME*DzkOK zG+MR9F#OS4*w7zNi@9|%rnVtR4cv8oYF%kbK@FZq^}|y#yChFACfqL3!xazY_?$lSuRIIzIbZ;Y7hx59<)mef3up zIYk)v_R*9>d@$dT`ie6_cQHRPQ<5Y#%sl_TcpWz9`((L5VB2OcM>xG zPSZW!EN->5J5O6)G4cKuy~mA@B=s|%(N;|Y6OiE!;+`AWFJkaFUUTk$#A`mij6*|B zr1@6Bg!Sgtm}U2A3otnUhtqNq7k{sk>`kA2XYz5Z0S)1^W#GngMzMj#`QN!fN*AK^ zUjNdcMJ#YRSqm&J^yt^(x>wHy!zz8rF(Xcb%&Erk0ROC`<&Ej3kHf0II)4PC|K2rB z>m7rJ#E|U(m8w^>>qSJ@BOf?=uxJrEsJ#u(#KuSmd{?2iFm2|VN1)T)9+MnTlniE* zN)RglqXK*@pt4)FR5w&OS*s8pK|vjZ$Fh&}G+Ql}R@S=uizp3d2qk43+Q-9grdAPQ zpRK=1;>xS~+0$kkMjJkhG_xIs)O>p?wIP(1S4Ms*d`uSpSxHCLRd{snxGH|(%cMRQ zQrKVJE%j@L{Ln*X@nFoQeFwF`?3^lalj6+(bmzg7DuPAc-IT|ya`XCWjPL80XX-xr zFtG|~hiUm$7Ik(?Xq5eSUrwM(r+K6s3bQ&J+U|6MkahT%7kP!Eo`T%q;%XYXZ#?Su z7|3Kst~Ru@mDkplG`A%)vq!1QdOET6hOyw(@a5duXuKJSJIZv%ios+Y z5Buq0(;N@mKK>!rx!(||5fmw5O3cV|zg3p=?aY?1U;NF9zWxR0_MuTxtf$vBY>{#c zf6@-0y8g!#LTu>O(K3yi!a?ZObMJ*y4>`S{-?@0KOz;E9bhVSoE`I2#dNngFSFF%^ zwKa)H)r1OmEzlZBR6Dw8>}Ynr^|9EsFg2xsJob|dYVV+Prl(k#nfMDp6kg90m$=Z; zRIDXv3vXuW1C?x$EdekoQ0T@POKC&Xb!AEwK9=TJJ?!VyGcCs`{XDZ-)`BHK?U>if zVBZ3a7cxFBP@#6+T`tN05lH^TKieDnRnWnZbmER;qP*+EaFH+SsSzYwyEOAD@=3jd zLe_cP{0nkJ`BwY=G(sEP?*tTHxhsm4{i_y$;7%SrzhGOJ?9iqU1>4CCbdHXNs2W_o z-oErr`MIh_+DDldY_ZvU(hnY@%!%%AHHH1U0;NddWg+d;N0^>=&Pjw;+$rGsrYU#1 zXNl$O`j6Jc``HiiSGc0vZMv2`YrjOB2Olc3p44y~{itXySyCV-AD#KDA>w;;=^5c5 zc?9dve??r*@Hibk+OfB8-1Y#g8F2>HR_>Ur#m`*cn82WGp~Ztv5gnH?Ht3B!6PV30 z>>6kMi2hgRs$NMotjLG%@s4A7G)03bchDP*K5hYfkcN(^=RR7FPgcgCtoy02*Yp=0 zXL{BGvIwA{FKA@@V&<=+lWOB_H%NUag%(fB+Di9zYNvB%gf(3betJE{ZU{88^bHVoE48WGpAsJxWY=z#)H-8N?Y`-wx4O z%FaKBohnh)Zm&G&6fsp;$9f1pHwQ1uF|xTLJDTP`JgRYvJ1y4Sn`e;k*-MAoxbRdn zJ1H(O6`3__@0c1TGAklm?WykrO1&Im4+z`o?s{nn9)0^;t+|KW`!MKsV_83kZ$4_% zAraYxE?DpTB@1z9)~A=5!E%Np?4i6u@^ud?*zaS%ZNxKc>yXTs*7xRlyI(GU$?{0^ zRgtyTbJd9Ok}xX1ejfAYCO-j}yv0`(9Rwl_`hpb=0_MVm*0ijByK|{phsTT0_a z?BHCl@OiZ-g+g)+tin6?ftBLE^I!QZA@&G!|GJ<2?~CyR0j82jcGb@nTRR_UXc6}~-c+iUD^ov`H+_5W?+lmL6rrt_%3@&JE^2tQZ zesVqq`uQk|tf@!t2sg%fip3JHWr)08NS?4B6g3Fhet%ERxgx;I`XhH%^ELC4CnCC*zte z-XjXuvd=&*^ALGf!$m#DmAj%bZ^3xUFV3gvzc_RsgU?xo4U6D)#0+gg*aJ{p3+V^YpYQTZa;qTe{X8-|N{rxARip?n_|o z%0Htt9E+8mBA?p>HatrM*D>n!94gn#llSEoN4pgE11@d*#Nqo>y5tj+pWfO#(%!uwoLsrhzOUuXpJ0;5 z+ja8G^F35V`_FXYa(_RHQ(%j0Nxe034SYE{-EVsiWLt;rlbZe%#z~)^TeFYT2;JV^ zbt9$mPe21c6H|LAI-a&BU$KEC=G9x@tuK{H{hVi=78VSL7^w24U< zq*Vua?ywEj5SvB^M-Hs4d+%Ri+SfuB+{Sd7mb;QDE~d%j)ugt(L^&4*)|KfQetLak zqmHsb;3MJjc^m8Fb(D#U{VOd0+Ehwe`vpL%YLRQIloA{ zX=#tH-~Ltmzw?b&l(Q&7E0fYFRAt%7pCwBo4os2 zTn%LdSOnZRF*FG9G}R%)u??VMvNDdYkL?6iiB^pOi?QEH5@AFNfZm}&d7xP(n<&aO z0UApm8Nd<)@PInfR=yS9k3!%VD`H@|4p9r{bB6O>;~P{?}T(>n z{=>~?O%%0lgFbb=qNZVcVD82S3A4a8>9G@`ghB$esQgTI+NwP_7v`OSK-Q#aF56ps zVn`9Zu0YPgl^W;6TOq%MB17Vu0^_{lF=M3?FqH2`R8te$(EZcaub`CrQjWF3l1B!$iw`PaD$P53mEzMe#?*z4v znQ2_{6}S({{|>r?0dnAU$t0&?V`7h$dt>F(N_XUH7-|P&RM}uS#H#axn`nS?!#)(G zUzQT3`)rh`D89M>^1~C?3jn@iG4I(_ds(i?d{b>QGz|#|Z)sAz7UbPl9+USYA zPN6xC(fMwn$ze1Uk6b9*$AkG%Kr=dItrW(e0&5B*(epD3GS+^ER5`Il^sJw%A=Vu~ zfmu@mhV1Jw+lTO&-3rukD@z;=-T|8(vG+E|5agX6#T#F*tW4aDRN6nye-zEQ`2k*Jy*I)YNN0GLIKFanFJ$td?J

+
+
+
+

Token accounting

+

+ Direct optimizer measurements and graph-memory costs share one ledger without mixing in an unfinished causal estimate. +

+
+ measured on this machine +
+
+

+
+
+
+

Measured by agent

+

+ New optimizer measurements use MCP handshake identity. Historical rows without identity remain unattributed instead of being guessed. +

+
+
+

@@ -158,9 +181,9 @@

-

Recent agent activity

+

Recent measured optimizer activity

- What the active CLI actually did, most recent first. + Before/after context cost and savings from optimizer operations, most recent first.

@@ -174,6 +197,8 @@ Action Times used Context used + Context USD + Tokens saved diff --git a/src/dashboard/public/js/dashboard.js b/src/dashboard/public/js/dashboard.js index e5d47291c..be8eef9e8 100644 --- a/src/dashboard/public/js/dashboard.js +++ b/src/dashboard/public/js/dashboard.js @@ -69,46 +69,119 @@ async function load() { // Every panel is independent: the graph is worth showing even when there is // no active session, and vice versa. One missing answer must not blank the // whole page. - const [diagnostics, balance, status, constellation] = await Promise.all([ - get('/diagnostics/hooks?hours=24&limit=100'), - get('/wiki/balance?scope=all'), - get('/wiki/status?scope=all'), - get('/wiki/constellation?cap=90&scope=all'), - ]); - let summary = { ok: false, body: null }; - let events = { ok: false, body: null }; - if (!diagnostics.ok || !diagnostics.body?.summary?.available) { - [summary, events] = await Promise.all([ - get('/session-summary'), - get('/session-events?limit=100'), + const [diagnostics, analytics, balance, status, constellation] = + await Promise.all([ + get('/diagnostics/hooks?hours=24&limit=100'), + get('/analytics/overview?limit=40'), + get('/wiki/balance?scope=all'), + get('/wiki/status?scope=all'), + get('/wiki/constellation?cap=90&scope=all'), ]); - } - - renderSavings(balance.body, status.body); - renderVerdict(balance.body, status.body); + const needsLegacy = + !(diagnostics.ok && diagnostics.body?.summary?.available) && + !(analytics.ok && analytics.body?.available); + const [summary, events] = needsLegacy + ? await Promise.all([ + get('/session-summary'), + get('/session-events?limit=100'), + ]) + : [null, null]; + + renderSavings(analytics.body, balance.body, status.body); + renderAccounting(analytics.body, balance.body); + renderVerdict(analytics.body, balance.body, status.body); renderGraph(constellation.body, status.body); - const session = + const session = joinActivity( diagnostics.ok && diagnostics.body?.summary?.available ? activityFromDiagnostics(diagnostics.body) - : summary.ok && summary.body?.success - ? summary.body - : null; + : null, + analytics.ok && analytics.body?.available ? analytics.body : null, + summary?.ok && summary.body?.success ? summary.body : null, + events?.ok ? events.body?.events : null, + balance.body + ); renderKpis(session); + renderClientLedger(session, balance.body); renderCategories(session); renderServers(session); - renderTimeline( - session?.activityMode === 'hooks' - ? session.events - : events.ok - ? events.body?.events - : null - ); + renderTimeline(session?.events); renderBreakdown(session); $('last-updated').textContent = new Date().toLocaleTimeString(); } +function joinActivity(hooks, analytics, legacy, legacyEvents, balance) { + if (!hooks && !analytics && !legacy) return null; + if (!hooks && !analytics) return { ...legacy, events: legacyEvents || [] }; + + const measuredRows = analytics?.byAction || []; + const measuredByName = new Map(measuredRows.map((row) => [row.name, row])); + const hookRows = toolRows(hooks); + const names = new Set([ + ...measuredByName.keys(), + ...hookRows.map((row) => row.name), + ]); + const toolBreakdown = [...names].map((name) => { + const measured = measuredByName.get(name); + const observed = hookRows.find((row) => row.name === name); + return { + name, + count: observed?.count ?? measured?.totalOperations ?? 0, + observedCalls: observed?.count ?? null, + measuredOperations: measured?.totalOperations ?? 0, + tokens: measured?.totalOptimizedTokens ?? null, + totalOriginalTokens: measured?.totalOriginalTokens ?? null, + tokensSaved: measured?.totalTokensSaved ?? null, + contextUsd: measured?.contextUsd ?? null, + savedUsd: measured?.savedUsd ?? null, + }; + }); + const native = balance?.nativeOptimizer; + if (native?.substitutions) { + toolBreakdown.push({ + name: 'live_graph_substitution', + count: native.substitutions, + observedCalls: native.substitutions, + measuredOperations: native.substitutions, + tokens: native.tokensReturned, + totalOriginalTokens: native.tokensReturned + native.tokensSaved, + tokensSaved: native.tokensSaved, + contextUsd: (native.tokensReturned / 1e6) * USD_PER_MILLION_TOKENS, + savedUsd: (native.tokensSaved / 1e6) * USD_PER_MILLION_TOKENS, + }); + } + const recentMeasured = [ + ...(analytics?.recent || []), + ...(native?.recent || []).map((row) => ({ + ...row, + contextUsd: + (Number(row.optimizedTokens || 0) / 1e6) * USD_PER_MILLION_TOKENS, + savedUsd: (Number(row.tokensSaved || 0) / 1e6) * USD_PER_MILLION_TOKENS, + })), + ].sort( + (a, b) => Date.parse(b.timestamp || '') - Date.parse(a.timestamp || '') + ); + + return { + ...(hooks || {}), + activityMode: 'combined', + analytics, + legacy, + totalTokens: + analytics?.summary?.totalOptimizedTokens ?? legacy?.totalTokens ?? null, + totalTools: + hooks?.totalTools ?? + analytics?.summary?.totalOperations ?? + legacy?.totalTools ?? + 0, + toolBreakdown, + events: recentMeasured.length + ? recentMeasured + : legacyEvents || hooks?.events || [], + }; +} + function activityFromDiagnostics(report) { const events = report.events || []; const actions = events.filter( @@ -123,10 +196,13 @@ function activityFromDiagnostics(report) { toolBreakdown[name] ||= { count: 0, tokens: null }; toolBreakdown[name].count += 1; } + for (const [name, count] of Object.entries(report.summary.byTool || {})) { + toolBreakdown[name] = { count, tokens: null }; + } return { activityMode: 'hooks', totalHooks: report.summary.total || 0, - totalTools: actions.length, + totalTools: report.summary.actions ?? actions.length, activeClients: Object.keys(report.summary.byClient || {}).length, p95DurationMs: report.summary.p95DurationMs, successRate: report.summary.successRate, @@ -138,11 +214,16 @@ function activityFromDiagnostics(report) { /* ------------------------------------------------------------- the hero -- */ -function renderSavings(balance, status) { - const saved = Number(balance?.estimatedTokensAvoided); +function renderSavings(analytics, balance, status) { + const mcpSaved = Number(analytics?.summary?.totalTokensSaved || 0); + const nativeSaved = Number(balance?.nativeOptimizer?.tokensSaved || 0); + const saved = mcpSaved + nativeSaved; const foot = $('saved-foot'); - if (!balance?.sufficientData || !Number.isFinite(saved) || saved <= 0) { + const hasDirectMeasurement = + Boolean(analytics?.summary?.measuredSavingsOperations) || + Number(balance?.nativeOptimizer?.substitutions || 0) > 0; + if (!hasDirectMeasurement || !Number.isFinite(saved)) { // Before there is a measurement, say what will appear and why -- and do // NOT show a zero, which reads as failure rather than as "not yet". $('saved-tokens').textContent = '—'; @@ -152,21 +233,25 @@ function renderSavings(balance, status) { const learned = Number(status?.nodes) || 0; foot.innerHTML = learned - ? `Still measuring. ${fmt(learned)} things learned so far — the savings ` + - `figure appears once there is enough of a comparison to be honest about.` - : `Nothing measured yet. Work normally in a supported coding agent for a few minutes ` + - `and this fills itself in.`; + ? `${fmt(learned)} things are learned. Measured optimizer savings appear after an optimizer operation reports both its original and returned context size.` + : `Nothing measured yet. Use an optimizer read, search, edit, or other context-reducing tool and this fills itself in.`; return; } const spentAnyway = - Number(balance.injectedTokens || 0) + Number(balance.harvestTokens || 0); - const wouldHave = saved + spentAnyway; + Number(analytics?.summary?.measuredOptimizedTokens || 0) + + Number(balance?.nativeOptimizer?.tokensReturned || 0); + const wouldHave = + Number(analytics?.summary?.totalOriginalTokens || 0) + + nativeSaved + + Number(balance?.nativeOptimizer?.tokensReturned || 0); const percent = wouldHave > 0 ? (saved / wouldHave) * 100 : 0; countUp($('saved-tokens'), saved); - $('saved-money').textContent = - `$${((saved / 1e6) * USD_PER_MILLION_TOKENS).toFixed(2)}`; + $('saved-money').textContent = formatUsd( + Number(analytics?.summary?.savedUsd || 0) + + (nativeSaved / 1e6) * USD_PER_MILLION_TOKENS + ); $('saved-percent').textContent = `${percent.toFixed(0)}%`; comparison($('comparison'), { @@ -177,8 +262,178 @@ function renderSavings(balance, status) { }); foot.textContent = - `Measured against ${fmt(balance.holdouts)} reads deliberately left alone, ` + - `so this is a comparison rather than a guess.`; + `${fmt(analytics?.summary?.totalOperations || 0)} MCP operations context-accounted and ${fmt(balance?.nativeOptimizer?.substitutions || 0)} native substitutions recorded. ` + + `Graph-effect savings remain separate and are ${balance?.sufficientData ? 'measured' : 'still collecting'}.`; +} + +function formatUsd(value) { + const number = Number(value); + if (!Number.isFinite(number)) return 'Not measured'; + if (number === 0) return '$0.00'; + if (number < 0.01) return `$${number.toFixed(4)}`; + return `$${number.toLocaleString(undefined, { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + })}`; +} + +function renderAccounting(analytics, balance) { + const host = $('accounting-grid'); + const note = $('accounting-note'); + const summary = analytics?.summary; + const graphCost = + Number(balance?.deliveryTokens ?? balance?.injectedTokens ?? 0) + + Number(balance?.harvestTokens || 0); + const causalSaved = balance?.sufficientData + ? Number(balance.estimatedTokensAvoided) + : null; + const hasDirect = + Boolean(summary?.totalOperations) || + Number(balance?.nativeOptimizer?.substitutions || 0) > 0; + const hasSavingsMeasurement = + Boolean(summary?.measuredSavingsOperations) || + Number(balance?.nativeOptimizer?.substitutions || 0) > 0; + const canComputeNet = hasSavingsMeasurement || causalSaved != null; + const combinedNet = canComputeNet + ? Number(summary?.totalTokensSaved || 0) + + Number(balance?.nativeOptimizer?.tokensSaved || 0) + + Number(causalSaved || 0) - + graphCost + : null; + const cards = [ + [ + 'Original context', + summary?.measuredSavingsOperations + ? compact(summary.totalOriginalTokens) + : 'Not measured', + 'known before-state only', + ], + [ + 'Returned context', + summary ? compact(summary.totalOptimizedTokens) : 'Not measured', + summary + ? `${formatUsd(summary.contextUsd)} · ${fmt(summary.actualReturnedContextOperations || 0)} actual-return · ${fmt(summary.legacyReportedContextOperations || 0)} legacy rows` + : 'actual results returned to clients', + ], + [ + 'Optimizer saved', + hasSavingsMeasurement + ? compact( + Number(summary?.totalTokensSaved || 0) + + Number(balance?.nativeOptimizer?.tokensSaved || 0) + ) + : 'Not measured', + hasSavingsMeasurement + ? `${formatUsd( + Number(summary?.savedUsd || 0) + + (Number(balance?.nativeOptimizer?.tokensSaved || 0) / 1e6) * + USD_PER_MILLION_TOKENS + )} · MCP + native` + : 'USD unavailable', + ], + [ + 'Graph memory cost', + balance ? compact(graphCost) : 'Not measured', + balance + ? `${formatUsd((graphCost / 1e6) * USD_PER_MILLION_TOKENS)} · delivery + harvest` + : 'delivery + harvest', + ], + [ + 'Causal graph saving', + causalSaved == null ? 'Collecting' : compact(causalSaved), + causalSaved == null + ? `${fmt(balance?.injections || 0)}/20 treated · ${fmt(balance?.holdouts || 0)}/5 holdout` + : 'holdout measured', + ], + [ + 'Combined net measured', + combinedNet == null ? 'Not measured' : compact(combinedNet), + causalSaved == null + ? 'optimizer saving − graph cost; causal graph benefit excluded' + : 'optimizer + causal graph saving − graph cost', + ], + ]; + host.innerHTML = cards + .map( + ([label, value, detail]) => ` +
+ ${escapeHtml(label)} + ${escapeHtml(value)} + ${escapeHtml(detail)} +
` + ) + .join(''); + note.textContent = hasDirect + ? `${analytics?.source || 'No MCP operation rows yet'}; ${balance?.nativeOptimizer?.source || 'no native substitutions recorded'}. USD uses a $${analytics?.referenceUsdPerMillionTokens || USD_PER_MILLION_TOKENS}/million reference rate; graph causal savings are never counted before the holdout gate passes.` + : 'No direct optimizer before/after measurements have been recorded yet.'; +} + +function renderClientLedger(session, balance) { + const host = $('client-ledger'); + const analytics = session?.analytics; + const activeClients = new Set(Object.keys(session?.clients || {})); + const rows = (analytics?.byClient || []).map((row) => ({ ...row })); + for (const [name, native] of Object.entries( + balance?.nativeOptimizer?.byClient || {} + )) { + const current = rows.find((row) => row.name === name); + if (current) { + current.totalOperations += native.substitutions || 0; + current.totalOptimizedTokens += native.tokensReturned || 0; + current.totalTokensSaved += native.tokensSaved || 0; + current.contextUsd += + ((native.tokensReturned || 0) / 1e6) * USD_PER_MILLION_TOKENS; + current.nativeSubstitutions = native.substitutions || 0; + } else { + rows.push({ + name, + attribution: + name === 'Historical — client not recorded' + ? 'historical-unattributed' + : 'recorded', + totalOperations: native.substitutions || 0, + totalOptimizedTokens: native.tokensReturned || 0, + totalTokensSaved: native.tokensSaved || 0, + contextUsd: + ((native.tokensReturned || 0) / 1e6) * USD_PER_MILLION_TOKENS, + nativeSubstitutions: native.substitutions || 0, + }); + } + } + for (const client of activeClients) { + if (!rows.some((row) => row.name === client)) { + rows.push({ + name: client, + attribution: 'lifecycle-only', + totalOperations: 0, + totalOptimizedTokens: null, + totalTokensSaved: null, + contextUsd: null, + }); + } + } + if (!rows.length) { + host.innerHTML = teach( + 'No agent attribution yet', + 'New MCP operations record their client identity after the handshake.' + ); + return; + } + host.innerHTML = rows + .map( + (row) => ` +
+
+ ${escapeHtml(row.name)} + ${row.attribution === 'historical-unattributed' ? 'historical total; client was not stored' : row.attribution === 'lifecycle-only' ? 'lifecycle active; optimizer cost not yet attributed' : `${row.nativeSubstitutions ? `${fmt(row.nativeSubstitutions)} graph substitutions · ` : ''}attributed by client protocol`} +
+
Operations${fmt(row.totalOperations)}
+
Returned context${row.totalOptimizedTokens == null ? 'Not measured' : fmt(row.totalOptimizedTokens)}
+
Context USD${row.contextUsd == null ? 'Not measured' : formatUsd(row.contextUsd)}
+
Saved${row.totalTokensSaved == null ? 'Not measured' : fmt(row.totalTokensSaved)}
+
` + ) + .join(''); } /** A number that lands rather than appearing. Skipped when motion is reduced. */ @@ -198,13 +453,27 @@ function countUp(node, target) { requestAnimationFrame(step); } -function renderVerdict(balance, status) { +function renderVerdict(analytics, balance, status) { const box = $('verdict'); const title = $('verdict-title'); const detail = $('verdict-detail'); box.hidden = false; box.classList.remove('is-ok', 'is-warn', 'is-bad'); + const directSaved = + Number(analytics?.summary?.totalTokensSaved || 0) + + Number(balance?.nativeOptimizer?.tokensSaved || 0); + const graphCost = + Number(balance?.deliveryTokens ?? balance?.injectedTokens ?? 0) + + Number(balance?.harvestTokens || 0); + + if (!balance?.sufficientData && directSaved > 0) { + box.classList.add('is-ok'); + title.textContent = 'Saving context now'; + detail.textContent = `${fmt(directSaved)} tokens were removed by measured optimizer operations. The separate causal graph-effect study is still collecting (${fmt(balance?.injections || 0)}/20 treated, ${fmt(balance?.holdouts || 0)}/5 holdout).`; + return; + } + if (!balance?.sufficientData) { box.classList.add('is-warn'); title.textContent = 'Still learning'; @@ -215,10 +484,9 @@ function renderVerdict(balance, status) { return; } - const net = Number(balance.netTokens || 0); - const cost = - Number(balance.injectedTokens || 0) + Number(balance.harvestTokens || 0); - const ratio = cost > 0 ? (net + cost) / cost : Infinity; + const net = + directSaved + Number(balance.estimatedTokensAvoided || 0) - graphCost; + const ratio = graphCost > 0 ? (net + graphCost) / graphCost : Infinity; if (net > 0) { box.classList.add('is-ok'); @@ -379,7 +647,7 @@ function renderKpis(s) { } const cards = - s.activityMode === 'hooks' + s.activityMode === 'hooks' || s.activityMode === 'combined' ? [ { label: 'Lifecycle events', @@ -449,7 +717,7 @@ function renderKpis(s) { function renderCategories(s) { const host = $('category-chart'); - if (s?.activityMode === 'hooks') { + if (s?.clients) { const slices = Object.entries(s.clients).map(([client, values], index) => ({ label: client, value: values.total || 0, @@ -481,24 +749,24 @@ function renderCategories(s) { function renderServers(s) { const host = $('server-chart'); - if (s?.activityMode === 'hooks') { + if (s?.analytics?.byAction?.length) { const slices = toolRows(s) - .filter((row) => row.count > 0) + .filter((row) => Number(row.tokensSaved) > 0) .map((row, index) => ({ label: row.name || row.tool, - value: row.count, + value: row.tokensSaved, color: SERVER_COLORS[index % SERVER_COLORS.length], })) .sort((a, b) => b.value - a.value); if (!slices.length) { host.innerHTML = teach( - 'No actions observed yet', - 'Lifecycle hooks are healthy, but no pre-tool action is present in the selected 24-hour window.' + 'No measured savings yet', + 'Optimizer operations are recorded here after both their original and returned context sizes are known.' ); return; } donut(host, slices, { - centerLabel: 'actions observed', + centerLabel: 'tokens saved', centerValue: compact(slices.reduce((sum, item) => sum + item.value, 0)), }); return; @@ -550,7 +818,7 @@ function renderTimeline(events) { ${escapeHtml(action.tool)} ${escapeHtml(action.detail)} - ${action.tokens ? `${compact(action.tokens)} context tokens` : action.costLabel} + ${action.contextTokens != null ? (action.tokens == null ? `${compact(action.contextTokens)} context · ${action.costLabel}` : `${compact(action.contextTokens)} context · ${formatUsd(action.contextUsd)} · ${compact(action.tokens)} saved`) : action.tokens ? `${compact(action.tokens)} context tokens` : action.costLabel} ${e.timestamp ? new Date(e.timestamp).toLocaleTimeString() : ''} `; }) @@ -558,6 +826,26 @@ function renderTimeline(events) { } function describeEvent(event) { + if (event.originalTokens != null && event.optimizedTokens != null) { + const isNative = event.name === 'live_graph_substitution'; + return { + tool: isNative + ? `Live graph substitution${event.client ? ` · ${event.client}` : ''}` + : `${event.name || event.toolName || 'optimizer operation'}${event.client ? ` · ${event.client}` : ''}`, + detail: + event.savingsMeasured === false + ? `${fmt(event.optimizedTokens)} returned context tokens; no before baseline` + : `${fmt(event.originalTokens)} → ${fmt(event.optimizedTokens)} context tokens`, + tokens: + event.savingsMeasured === false ? null : Number(event.tokensSaved || 0), + contextTokens: Number(event.optimizedTokens || 0), + contextUsd: event.contextUsd, + costLabel: + event.savingsMeasured === false + ? `${formatUsd(event.contextUsd)} context · saving not measurable` + : `${formatUsd(event.contextUsd)} context · ${formatUsd(event.savedUsd)} saved`, + }; + } const hookEvent = String(event.hookEvent || '').trim(); const client = String(event.client || '').trim(); const tool = String( @@ -602,7 +890,7 @@ function renderBreakdown(s) { const rows = toolRows(s); if (!rows.length) { body.innerHTML = - '' + + '' + teach( 'No actions counted yet', 'Each kind of observed agent action gets a row here, so repeat costs are easy to spot.' @@ -617,6 +905,8 @@ function renderBreakdown(s) { ${escapeHtml(t.name || t.tool)} ${fmt(t.count)} ${t.tokens == null ? 'Not measured' : fmt(t.tokens)} + ${t.contextUsd == null ? 'Not measured' : formatUsd(t.contextUsd)} + ${t.tokensSaved == null ? 'Not measured' : fmt(t.tokensSaved)} ` ) .join(''); diff --git a/src/dashboard/public/js/wiki.js b/src/dashboard/public/js/wiki.js index be3600214..53c43a4cd 100644 --- a/src/dashboard/public/js/wiki.js +++ b/src/dashboard/public/js/wiki.js @@ -93,6 +93,10 @@ async function loadBalance() { balance = await api(scoped('/api/wiki/balance')); } catch { grid.innerHTML = [ + 'Graph substitutions', + 'Direct graph tokens saved', + 'Graph context returned', + 'Direct saving value', 'Memory deliveries', 'Kept back for comparison', 'Cost of remembering', @@ -125,6 +129,31 @@ async function loadBalance() { // what "injected" means. The words describe what happened, not what the code // calls it. const tiles = [ + [ + 'Graph substitutions', + measuredValue( + 'nativeSubstitutions', + balance.nativeOptimizer?.substitutions + ), + ], + [ + 'Direct graph tokens saved', + metricState('nativeSubstitutions')?.status === 'not-measured' + ? 'Not measured' + : `${nf.format(balance.nativeOptimizer?.tokensSaved || 0)} tokens`, + ], + [ + 'Graph context returned', + metricState('nativeSubstitutions')?.status === 'not-measured' + ? 'Not measured' + : `${nf.format(balance.nativeOptimizer?.tokensReturned || 0)} tokens`, + ], + [ + 'Direct saving value', + metricState('nativeSubstitutions')?.status === 'not-measured' + ? 'Not measured' + : `$${((Number(balance.nativeOptimizer?.tokensSaved || 0) / 1e6) * 3).toFixed(4)}`, + ], [ 'Memory deliveries', measuredValue( @@ -170,7 +199,10 @@ async function loadBalance() { ) .join(''); - verdict.textContent = balance.verdict; + verdict.textContent = + !balance.sufficientData && Number(balance.nativeOptimizer?.tokensSaved) > 0 + ? `${nf.format(balance.nativeOptimizer.tokensSaved)} tokens saved by ${nf.format(balance.nativeOptimizer.substitutions)} direct graph substitutions; the separate causal reuse study is still collecting.` + : balance.verdict; verdict.dataset.state = !balance.sufficientData ? 'insufficient' : balance.netTokens > 0 @@ -189,17 +221,52 @@ async function loadBalance() { ? `latest event ${new Date(freshness.lastEventAt).toLocaleString()}` : 'no telemetry event has been observed'; - if (balance.sufficientData) { - method.textContent = - `Measured against ${nf.format(balance.holdouts)} withheld control touches — not estimated. ` + - `Net after injection and harvest cost: ${nf.format(balance.netTokens)} tokens. ` + - `${coverageText}; ${freshnessText}.`; - } else { - method.textContent = - `The graph has ${nf.format(balance.injections)} measured file deliveries and ${nf.format(balance.holdouts)} file holdouts; ` + - 'the savings estimate unlocks at 20 and 5. Command and session-start deliveries are counted above but excluded from the file-read comparison because they have no valid downstream file-read join. ' + - `${coverageText}; ${freshnessText}.`; - } + const facts = balance.sufficientData + ? [ + [ + 'Study', + `${nf.format(balance.injections)} treated · ${nf.format(balance.holdouts)} holdout`, + ], + [ + 'Causal method', + 'Control-arm comparison of downstream reads; not estimated from file size', + ], + [ + 'Net graph effect', + `${nf.format(balance.netTokens)} tokens after delivery and harvest cost`, + ], + ['Coverage', coverageText], + ['Freshness', freshnessText], + ] + : [ + [ + 'Direct substitution', + `${nf.format(balance.nativeOptimizer?.tokensSaved || 0)} tokens saved across ${nf.format(balance.nativeOptimizer?.substitutions || 0)} served results`, + ], + [ + 'Causal method', + 'Control-arm comparison of downstream reads; no effect is estimated before the evidence gate', + ], + [ + 'File study', + `${nf.format(balance.injections)}/20 treated · ${nf.format(balance.holdouts)}/5 holdout`, + ], + [ + 'Excluded surfaces', + 'Command and session-start deliveries have no valid downstream file-read join', + ], + ['Coverage', coverageText], + ['Freshness', freshnessText], + ]; + method.innerHTML = facts + .map( + ([label, value]) => ` +
+ ${escapeHtml(label)} + ${escapeHtml(value)} +
` + ) + .join(''); } /* ---- Causal evidence ------------------------------------------------ */ @@ -1096,6 +1163,7 @@ async function loadHookHealth() { const grid = el('hook-health-grid'); const status = el('hook-health-status'); const detail = el('hook-health-detail'); + const clientsHost = el('hook-health-clients'); try { const [report, mcpReport] = await Promise.all([ api('/api/diagnostics/hooks?hours=24&limit=20'), @@ -1161,25 +1229,66 @@ async function loadHookHealth() { : unhealthy ? 'bad' : 'ok'; - const clients = Object.entries(summary.byClient || {}) - .map( - ([name, value]) => - `${name}: ${value.total} runs, ${value.failures} failures, ${value.timeouts} timeouts, ${value.blocked || 0} policy blocks, ${value.skipped || 0} skipped; surfaces: ${(value.hookEvents || []).join(', ') || 'unknown'}` - ) - .join(' · '); - const mcpClients = Object.entries(mcp.clients || {}) + const clients = new Map(); + for (const [name, value] of Object.entries(summary.byClient || {})) { + clients.set(name, { + name, + kinds: ['Lifecycle hooks'], + activity: [`${nf.format(value.total)} hook runs`], + reliability: [ + `${nf.format(value.failures)} hook failures · ${nf.format(value.timeouts)} timeouts`, + ], + policy: [ + `${nf.format(value.blocked || 0)} blocked · ${nf.format(value.skipped || 0)} skipped`, + ], + coverage: [ + `hooks: ${(value.hookEvents || []).join(', ') || 'surface unknown'}`, + ], + unhealthy: value.failures > 0 || value.timeouts > 0, + }); + } + for (const [name, value] of Object.entries(mcp.clients || {})) { + const client = clients.get(name) || { + name, + kinds: [], + activity: [], + reliability: [], + policy: [], + coverage: [], + unhealthy: false, + }; + client.kinds.push('MCP'); + client.activity.push(`${nf.format(value.calls)} MCP calls`); + client.reliability.push(`${nf.format(value.failures)} MCP failures`); + client.policy.push(`${nf.format(value.initialized)} handshakes`); + client.coverage.push('MCP: stdio tool protocol'); + client.unhealthy ||= value.failures > 0; + clients.set(name, client); + } + clientsHost.innerHTML = [...clients.values()] .map( - ([name, value]) => - `${name}: ${value.initialized} MCP handshake(s), ${value.calls} call(s), ${value.failures} failure(s)` + (client) => ` +
+
+ ${escapeHtml(client.name)} + ${escapeHtml(client.kinds.join(' + '))} +
+
+
Activity
${escapeHtml(client.activity.join(' · '))}
+
Runtime
${escapeHtml(client.reliability.join(' · '))}
+
Control
${escapeHtml(client.policy.join(' · '))}
+
Coverage
${escapeHtml(client.coverage.join(' · '))}
+
+
` ) - .join(' · '); + .join(''); detail.textContent = - [clients, mcpClients].filter(Boolean).join(' · ') || - 'Privacy-safe JSONL diagnostics retain no prompts, commands, or tool output.'; + 'Diagnostics are privacy-safe: no prompts, commands, file paths, or tool output are retained.'; } catch { grid.innerHTML = ''; status.textContent = 'Capture diagnostics unavailable.'; status.dataset.state = 'bad'; + clientsHost.innerHTML = ''; detail.textContent = ''; } } diff --git a/src/dashboard/public/wiki.html b/src/dashboard/public/wiki.html index 3b3780530..b7cd304f8 100644 --- a/src/dashboard/public/wiki.html +++ b/src/dashboard/public/wiki.html @@ -35,6 +35,7 @@

What your coding agents have learned and whether it helps

Hook and MCP capture health

+

@@ -56,7 +57,7 @@

-

+