🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

sipcode

Package Overview
Dependencies
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sipcode - npm Package Compare versions

Comparing version
1.6.8
to
1.6.10
+20
dist/commands/forecast.d.ts
import { type FileSystem } from "../lib/fs.js";
import { type Clock } from "../lib/clock.js";
import { type ProcessEnv } from "../lib/process.js";
export interface ForecastOptions {
json?: boolean;
agent?: string;
cwd?: string;
}
export interface ForecastDeps {
fs?: FileSystem;
clock?: Clock;
env?: ProcessEnv;
stdout?: (s: string) => void;
stderr?: (s: string) => void;
}
export interface ForecastExit {
readonly exitCode: 0 | 1;
}
export declare function runForecastCmd(opts?: ForecastOptions, deps?: ForecastDeps): Promise<ForecastExit>;
//# sourceMappingURL=forecast.d.ts.map
{"version":3,"file":"forecast.d.ts","sourceRoot":"","sources":["../../src/commands/forecast.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AASpE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAClC,IAAI,GAAE,eAAoB,EAC1B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,YAAY,CAAC,CAwCvB"}
/**
* `sipcode forecast` — projected month-end spend.
* Mirrors `today.ts` orchestration.
*/
import { ASSERT_NO_NETWORK } from "../lib/privacy.js";
void ASSERT_NO_NETWORK;
import { RealFileSystem } from "../lib/fs.js";
import { RealClock } from "../lib/clock.js";
import { RealProcessEnv } from "../lib/process.js";
import { getAgentById } from "../modules/agents/registry.js";
import { loadPricingForDate } from "../lib/pricing/load.js";
import { analyzeTokens } from "../modules/transcript/analyzers/tokens.js";
import { runForecast } from "../modules/forecast/runForecast.js";
import { formatForecastTerminal } from "../modules/forecast/format-terminal.js";
import { formatForecastJson } from "../modules/forecast/format-json.js";
export async function runForecastCmd(opts = {}, deps = {}) {
const fs = deps.fs ?? new RealFileSystem();
const clock = deps.clock ?? new RealClock();
const env = deps.env ?? new RealProcessEnv();
const stdout = deps.stdout ?? ((s) => process.stdout.write(s + "\n"));
const stderr = deps.stderr ?? ((s) => process.stderr.write(s + "\n"));
const agent = getAgentById((opts.agent ?? "claude-code"));
const now = clock.now();
const pricing = loadPricingForDate(now);
const discovery = await agent.discoverSessions({ fs, env, clock });
if (!discovery.ok) {
stderr(discovery.error.map((e) => e.message).join("\n"));
return { exitCode: 1 };
}
const sessions = [];
for (const meta of discovery.value) {
let content;
try {
content = await fs.readFile(meta.filePath);
}
catch {
continue;
}
const parseResult = agent.parseTranscript(content);
if (!parseResult.ok)
continue;
const parsed = parseResult.value;
const startedAt = parsed.startedAt ?? new Date(meta.mtimeMs).toISOString();
const tokens = analyzeTokens(parsed, pricing);
sessions.push({ startedAt, estCostUSD: tokens.estCostUSD });
}
const report = runForecast({ sessions, now });
if (opts.json) {
stdout(formatForecastJson(report));
}
else {
stdout(formatForecastTerminal(report));
}
return { exitCode: 0 };
}
//# sourceMappingURL=forecast.js.map
{"version":3,"file":"forecast.js","sourceRoot":"","sources":["../../src/commands/forecast.ts"],"names":[],"mappings":"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"}
import { type FileSystem } from "../lib/fs.js";
import { type Clock } from "../lib/clock.js";
import { type ProcessEnv } from "../lib/process.js";
export interface TodayOptions {
json?: boolean;
agent?: string;
cwd?: string;
}
export interface TodayDeps {
fs?: FileSystem;
clock?: Clock;
env?: ProcessEnv;
stdout?: (s: string) => void;
stderr?: (s: string) => void;
}
export interface TodayExit {
readonly exitCode: 0 | 1;
}
export declare function runTodayCmd(opts?: TodayOptions, deps?: TodayDeps): Promise<TodayExit>;
//# sourceMappingURL=today.d.ts.map
{"version":3,"file":"today.d.ts","sourceRoot":"","sources":["../../src/commands/today.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAUpE,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;AAED,wBAAsB,WAAW,CAC/B,IAAI,GAAE,YAAiB,EACvB,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,SAAS,CAAC,CAgEpB"}
/**
* `sipcode today` — daily dashboard.
*
* Thin orchestrator: discover sessions → parse → analyze → aggregate → runToday.
* Mirrors the pattern in `stats.ts` and `trend.ts`.
*/
import { ASSERT_NO_NETWORK } from "../lib/privacy.js";
void ASSERT_NO_NETWORK;
import { RealFileSystem } from "../lib/fs.js";
import { RealClock } from "../lib/clock.js";
import { RealProcessEnv } from "../lib/process.js";
import { getAgentById } from "../modules/agents/registry.js";
import { loadPricingForDate } from "../lib/pricing/load.js";
import { analyzeTokens } from "../modules/transcript/analyzers/tokens.js";
import { analyzeDuplicateReads } from "../modules/transcript/analyzers/duplicateReads.js";
import { runToday } from "../modules/today/runToday.js";
import { formatTodayTerminal } from "../modules/today/format-terminal.js";
import { formatTodayJson } from "../modules/today/format-json.js";
export async function runTodayCmd(opts = {}, deps = {}) {
const fs = deps.fs ?? new RealFileSystem();
const clock = deps.clock ?? new RealClock();
const env = deps.env ?? new RealProcessEnv();
const stdout = deps.stdout ?? ((s) => process.stdout.write(s + "\n"));
const stderr = deps.stderr ?? ((s) => process.stderr.write(s + "\n"));
const agent = getAgentById((opts.agent ?? "claude-code"));
const now = clock.now();
const pricing = loadPricingForDate(now);
const discovery = await agent.discoverSessions({ fs, env, clock });
if (!discovery.ok) {
stderr(discovery.error.map((e) => e.message).join("\n"));
return { exitCode: 1 };
}
const sessions = [];
for (const meta of discovery.value) {
let content;
try {
content = await fs.readFile(meta.filePath);
}
catch {
continue;
}
const parseResult = agent.parseTranscript(content);
if (!parseResult.ok)
continue;
const parsed = parseResult.value;
const startedAt = parsed.startedAt ?? new Date(meta.mtimeMs).toISOString();
const tokens = analyzeTokens(parsed, pricing);
const dups = analyzeDuplicateReads(parsed);
const totalTokens = tokens.inputTokens +
tokens.outputTokens +
tokens.cacheReadTokens +
tokens.cacheCreationTokens;
const top = dups.topOffenders[0];
const session = {
sessionId: meta.sessionId,
startedAt,
totalTokens,
outputTokens: tokens.outputTokens,
estCostUSD: tokens.estCostUSD,
duplicateReadTokenCost: dups.duplicateReadTokenCost,
topDuplicateReadFile: top
? {
path: top.filePath,
count: top.readCount,
// Convert tokens to USD using session's average $/token (rough but fine for a "top leak" headline).
costUSD: totalTokens > 0 ? (top.duplicateTokenCost / totalTokens) * tokens.estCostUSD : 0,
}
: undefined,
};
sessions.push(session);
}
const report = runToday({ sessions, now });
if (opts.json) {
stdout(formatTodayJson(report));
}
else {
stdout(formatTodayTerminal(report));
}
return { exitCode: 0 };
}
//# sourceMappingURL=today.js.map
{"version":3,"file":"today.js","sourceRoot":"","sources":["../../src/commands/today.ts"],"names":[],"mappings":"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"}
import { type FileSystem } from "../lib/fs.js";
import { type Clock } from "../lib/clock.js";
import { type ProcessEnv } from "../lib/process.js";
export interface TrendOptions {
metric?: string;
since?: string;
json?: boolean;
agent?: string;
cwd?: string;
}
export interface TrendDeps {
fs?: FileSystem;
clock?: Clock;
env?: ProcessEnv;
stdout?: (s: string) => void;
stderr?: (s: string) => void;
}
export interface TrendResultExit {
readonly exitCode: 0 | 1;
}
export declare function runTrend(opts?: TrendOptions, deps?: TrendDeps): Promise<TrendResultExit>;
/** Parse "30d" / "4w" / "3m" into a day count. Returns null on invalid input. */
export declare function parseSinceWindow(s: string): number | null;
//# sourceMappingURL=trend.d.ts.map
{"version":3,"file":"trend.d.ts","sourceRoot":"","sources":["../../src/commands/trend.ts"],"names":[],"mappings":"AAYA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAepE,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;AAQD,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,YAAiB,EACvB,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,eAAe,CAAC,CAkF1B;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAezD"}
/**
* `sipcode trend` — single-metric time-series across a window.
*
* Thin orchestrator: enumerate transcripts → parse → analyze → bucket per day
* via the pure compute module → render.
*
* Uses the same transcript discovery + parse path as `sipcode stats`. Where
* stats shows totals (cost, savings, top-N tasks), trend shows ONE metric
* over time — the question is "is this getting better?", not "how much?".
*/
import { ASSERT_NO_NETWORK } from "../lib/privacy.js";
void ASSERT_NO_NETWORK;
import { RealFileSystem } from "../lib/fs.js";
import { RealClock } from "../lib/clock.js";
import { RealProcessEnv } from "../lib/process.js";
import { getAgentById } from "../modules/agents/registry.js";
import { loadPricingForDate } from "../lib/pricing/load.js";
import { analyzeTokens } from "../modules/transcript/analyzers/tokens.js";
import { analyzeDuplicateReads } from "../modules/transcript/analyzers/duplicateReads.js";
import { computeTrend, } from "../modules/trend/compute.js";
import { formatTrendTerminal } from "../modules/trend/format-terminal.js";
import { formatTrendJson } from "../modules/trend/format-json.js";
import path from "node:path";
const VALID_METRICS = new Set([
"output-ratio",
"cost-per-session",
"recoverable-tokens-per-session",
]);
export async function runTrend(opts = {}, deps = {}) {
const fs = deps.fs ?? new RealFileSystem();
const clock = deps.clock ?? new RealClock();
const env = deps.env ?? new RealProcessEnv();
const stdout = deps.stdout ?? ((s) => process.stdout.write(s + "\n"));
const stderr = deps.stderr ?? ((s) => process.stderr.write(s + "\n"));
const metric = (opts.metric ?? "output-ratio");
if (!VALID_METRICS.has(metric)) {
stderr(`unknown metric '${metric}'. valid: output-ratio, cost-per-session, recoverable-tokens-per-session.`);
return { exitCode: 1 };
}
const sinceDays = parseSinceWindow(opts.since ?? "30d");
if (sinceDays === null) {
stderr(`unrecognized --since '${opts.since}'. use NNd / NNw / NNm (e.g. 30d, 4w, 3m).`);
return { exitCode: 1 };
}
const until = clock.now();
const since = new Date(until.getTime() - sinceDays * 86_400_000);
const sinceIso = since.toISOString().slice(0, 10);
const untilIso = until.toISOString().slice(0, 10);
const agent = getAgentById((opts.agent ?? "claude-code"));
// Pricing — keyed off the window upper bound.
const pricing = loadPricingForDate(until);
// Discover transcripts via the agent layer (mirrors stats).
const metasResult = await agent.discoverSessions({ fs, env, clock });
if (!metasResult.ok) {
stderr(metasResult.error.map((e) => e.message).join("\n"));
return { exitCode: 1 };
}
const metas = metasResult.value;
// Pre-filter by mtime then parse and aggregate.
const sessions = [];
for (const meta of metas) {
const mtimeIso = new Date(meta.mtimeMs).toISOString().slice(0, 10);
if (mtimeIso < sinceIso)
continue;
let content;
try {
content = await fs.readFile(meta.filePath);
}
catch {
continue;
}
const parseResult = agent.parseTranscript(content);
if (!parseResult.ok)
continue;
const parsed = parseResult.value;
const startedAt = parsed.startedAt ?? new Date(meta.mtimeMs).toISOString();
const startedDay = startedAt.slice(0, 10);
if (startedDay < sinceIso || startedDay > untilIso)
continue;
const totals = analyzeTokens(parsed, pricing);
const dups = analyzeDuplicateReads(parsed);
const totalTokens = totals.inputTokens +
totals.outputTokens +
totals.cacheReadTokens +
totals.cacheCreationTokens;
sessions.push({
startedAt,
totalTokens,
outputTokens: totals.outputTokens,
estCostUSD: totals.estCostUSD,
duplicateReadTokens: dups.duplicateReadTokenCost,
});
}
const result = computeTrend(sessions, metric, sinceIso, untilIso);
if (opts.json) {
stdout(formatTrendJson(result));
}
else {
stdout(formatTrendTerminal(result));
}
return { exitCode: 0 };
}
/** Parse "30d" / "4w" / "3m" into a day count. Returns null on invalid input. */
export function parseSinceWindow(s) {
const m = s.trim().toLowerCase().match(/^(\d+)([dwm])$/);
if (!m)
return null;
const n = Number(m[1]);
if (!Number.isFinite(n) || n <= 0)
return null;
switch (m[2]) {
case "d":
return n;
case "w":
return n * 7;
case "m":
return n * 30;
default:
return null;
}
}
// Used so unused imports don't warn during the path-only build copy step.
void path;
//# sourceMappingURL=trend.js.map
{"version":3,"file":"trend.js","sourceRoot":"","sources":["../../src/commands/trend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,KAAK,iBAAiB,CAAC;AACvB,OAAO,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EACL,YAAY,GAGb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAsB7B,MAAM,aAAa,GAA6B,IAAI,GAAG,CAAC;IACtD,cAAc;IACd,kBAAkB;IAClB,gCAAgC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAqB,EAAE,EACvB,OAAkB,EAAE;IAEpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,cAAc,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,cAAc,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,cAAc,CAAgB,CAAC;IAC9D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,CACJ,mBAAmB,MAAM,2EAA2E,CACrG,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,CACJ,yBAAyB,IAAI,CAAC,KAAK,4CAA4C,CAChF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,aAAa,CAAY,CAAC,CAAC;IAErE,8CAA8C;IAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE1C,4DAA4D;IAC5D,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAEhC,gDAAgD;IAChD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,QAAQ,GAAG,QAAQ;YAAE,SAAS;QAElC,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,SAAS;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,UAAU,GAAG,QAAQ,IAAI,UAAU,GAAG,QAAQ;YAAE,SAAS;QAE7D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,WAAW,GACf,MAAM,CAAC,WAAW;YAClB,MAAM,CAAC,YAAY;YACnB,MAAM,CAAC,eAAe;YACtB,MAAM,CAAC,mBAAmB,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS;YACT,WAAW;YACX,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,mBAAmB,EAAE,IAAI,CAAC,sBAAsB;SACjD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACzB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,KAAK,IAAI,CAAC"}
/**
* Adaptive baseline window resolver — shared by `today` and `forecast`.
*
* Strategy: cascade 30→14→7→3 days. Each tier requires at least that many
* days of available history (where "available" = (now - earliestSession) ≥
* tier). If none of the tiers match, return "insufficient".
*
* Pure — takes a list of session-start ISO timestamps + `now`, returns the
* resolved window. No I/O.
*/
export interface BaselineWindow {
readonly windowDays: number;
readonly isPartial: boolean;
/** Human-readable, e.g. "last 30 days" or "last 12 days (all you have so far)". */
readonly label: string;
/** ISO date (YYYY-MM-DD) at the start of the window, inclusive. */
readonly sliceStartIso: string;
}
export type BaselineResolution = {
kind: "ok";
window: BaselineWindow;
} | {
kind: "insufficient";
daysAvailable: number;
};
/** Minimum days of history to consider ANY baseline. */
export declare const MIN_DAYS_FOR_BASELINE = 3;
/**
* Resolve the best baseline window for the given session history.
*
* @param sessionStarts ISO timestamps of session start. Order doesn't matter.
* @param now wall-clock used to compute "how many days of history."
*/
export declare function resolveBaseline(sessionStarts: ReadonlyArray<string>, now: Date): BaselineResolution;
//# sourceMappingURL=baseline-window.d.ts.map
{"version":3,"file":"baseline-window.d.ts","sourceRoot":"","sources":["../../src/lib/baseline-window.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAIpD,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,EACpC,GAAG,EAAE,IAAI,GACR,kBAAkB,CA8BpB"}
/**
* Adaptive baseline window resolver — shared by `today` and `forecast`.
*
* Strategy: cascade 30→14→7→3 days. Each tier requires at least that many
* days of available history (where "available" = (now - earliestSession) ≥
* tier). If none of the tiers match, return "insufficient".
*
* Pure — takes a list of session-start ISO timestamps + `now`, returns the
* resolved window. No I/O.
*/
const TIERS = [30, 14, 7, 3];
/** Minimum days of history to consider ANY baseline. */
export const MIN_DAYS_FOR_BASELINE = 3;
/**
* Resolve the best baseline window for the given session history.
*
* @param sessionStarts ISO timestamps of session start. Order doesn't matter.
* @param now wall-clock used to compute "how many days of history."
*/
export function resolveBaseline(sessionStarts, now) {
if (sessionStarts.length === 0)
return { kind: "insufficient", daysAvailable: 0 };
let earliestMs = Infinity;
for (const iso of sessionStarts) {
const t = Date.parse(iso);
if (Number.isFinite(t) && t < earliestMs)
earliestMs = t;
}
if (!Number.isFinite(earliestMs)) {
return { kind: "insufficient", daysAvailable: 0 };
}
const daysAvailable = Math.floor((now.getTime() - earliestMs) / 86_400_000);
if (daysAvailable < MIN_DAYS_FOR_BASELINE) {
return { kind: "insufficient", daysAvailable };
}
for (const tier of TIERS) {
if (daysAvailable >= tier) {
const isPartial = tier < 30 && daysAvailable < 30;
const label = isPartial
? `last ${tier} days (all you have so far)`
: `last ${tier} days`;
const sliceStartIso = toIsoDay(now.getTime() - tier * 86_400_000);
return {
kind: "ok",
window: { windowDays: tier, isPartial, label, sliceStartIso },
};
}
}
return { kind: "insufficient", daysAvailable };
}
function toIsoDay(ms) {
return new Date(ms).toISOString().slice(0, 10);
}
//# sourceMappingURL=baseline-window.js.map
{"version":3,"file":"baseline-window.js","sourceRoot":"","sources":["../../src/lib/baseline-window.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,MAAM,KAAK,GAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhD,wDAAwD;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAoC,EACpC,GAAS;IAET,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAElF,IAAI,UAAU,GAAG,QAAQ,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU;YAAE,UAAU,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;IAC5E,IAAI,aAAa,GAAG,qBAAqB,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,IAAI,aAAa,GAAG,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,SAAS;gBACrB,CAAC,CAAC,QAAQ,IAAI,6BAA6B;gBAC3C,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;YACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC;YAClE,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU;IAC1B,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC"}
{
"as_of": "2026-06-11",
"source_url": "https://www.anthropic.com/pricing",
"models": {
"claude-opus-4": {
"input_per_mtok": 15.00,
"output_per_mtok": 75.00,
"cache_read_per_mtok": 1.50,
"cache_creation_per_mtok": 18.75
},
"claude-opus-4-6": {
"input_per_mtok": 15.00,
"output_per_mtok": 75.00,
"cache_read_per_mtok": 1.50,
"cache_creation_per_mtok": 18.75
},
"claude-opus-4-7": {
"input_per_mtok": 15.00,
"output_per_mtok": 75.00,
"cache_read_per_mtok": 1.50,
"cache_creation_per_mtok": 18.75
},
"claude-opus-4-8": {
"input_per_mtok": 15.00,
"output_per_mtok": 75.00,
"cache_read_per_mtok": 1.50,
"cache_creation_per_mtok": 18.75
},
"claude-sonnet-4": {
"input_per_mtok": 3.00,
"output_per_mtok": 15.00,
"cache_read_per_mtok": 0.30,
"cache_creation_per_mtok": 3.75
},
"claude-sonnet-4-6": {
"input_per_mtok": 3.00,
"output_per_mtok": 15.00,
"cache_read_per_mtok": 0.30,
"cache_creation_per_mtok": 3.75
},
"claude-haiku-4": {
"input_per_mtok": 0.80,
"output_per_mtok": 4.00,
"cache_read_per_mtok": 0.08,
"cache_creation_per_mtok": 1.00
},
"claude-haiku-4-5": {
"input_per_mtok": 0.80,
"output_per_mtok": 4.00,
"cache_read_per_mtok": 0.08,
"cache_creation_per_mtok": 1.00
}
}
}
/**
* JSON renderer for `sipcode forecast --json` / `forecast_monthly_spend` MCP tool.
*/
import type { ForecastReport } from "./types.js";
export declare function formatForecastJson(report: ForecastReport): string;
//# sourceMappingURL=format-json.d.ts.map
{"version":3,"file":"format-json.d.ts","sourceRoot":"","sources":["../../../src/modules/forecast/format-json.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEjE"}
export function formatForecastJson(report) {
return JSON.stringify(report, null, 2);
}
//# sourceMappingURL=format-json.js.map
{"version":3,"file":"format-json.js","sourceRoot":"","sources":["../../../src/modules/forecast/format-json.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
/**
* Terminal renderer for `sipcode forecast`. Pure.
*/
import type { ForecastReport } from "./types.js";
export declare function formatForecastTerminal(report: ForecastReport): string;
//# sourceMappingURL=format-terminal.d.ts.map
{"version":3,"file":"format-terminal.d.ts","sourceRoot":"","sources":["../../../src/modules/forecast/format-terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAsCrE"}
export function formatForecastTerminal(report) {
const lines = [];
const monthLabel = report.monthEnd?.monthLabel ?? "this month";
const daysRemainingNote = report.monthEnd
? ` (${report.monthEnd.daysRemaining} day${report.monthEnd.daysRemaining === 1 ? "" : "s"} remaining)`
: "";
lines.push(`sipcode forecast · projection to end of ${monthLabel}${daysRemainingNote}`);
lines.push("");
if (report.status !== "ok" || report.trajectoryInput === null || report.monthEnd === null) {
lines.push(" " + report.headline);
return lines.join("\n");
}
const t = report.trajectoryInput;
const me = report.monthEnd;
const partial = t.isPartial ? ` (partial — all you have so far)` : "";
lines.push(` current pace (last ${t.windowDays} days${partial})`);
lines.push(` avg daily spend $${t.avgDailySpendUSD.toFixed(2)} across ${t.sessionsSampled} sessions`);
lines.push(` median daily spend $${t.medianDailySpendUSD.toFixed(2)}`);
lines.push("");
lines.push(` projected month-end`);
lines.push(` spend $${me.projectedSpendUSD.toFixed(2)} (range: $${me.confidenceLowUSD.toFixed(0)} – $${me.confidenceHighUSD.toFixed(0)})`);
if (report.comparison !== null &&
report.comparison.lastMonthSpendUSD !== null &&
report.comparison.vsLastMonthPct !== null) {
const dir = report.comparison.vsLastMonthPct < 0 ? "less" : "more";
lines.push(` vs last month ${Math.abs(report.comparison.vsLastMonthPct).toFixed(1)}% ${dir} than ${dropPrev(me.monthLabel)} ($${report.comparison.lastMonthSpendUSD.toFixed(2)})`);
}
lines.push("");
lines.push(" " + report.headline);
return lines.join("\n");
}
function dropPrev(monthLabel) {
return "previous month";
}
//# sourceMappingURL=format-terminal.js.map
{"version":3,"file":"format-terminal.js","sourceRoot":"","sources":["../../../src/modules/forecast/format-terminal.ts"],"names":[],"mappings":"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"}
/**
* Pure runner for `sipcode forecast` / `forecast_monthly_spend` MCP tool.
*
* Logic:
* - trajectory window = adaptive 14d → 7d (forecast NEEDS ≥7 days to be useful).
* - projected spend = avgDailySpend × daysRemainingInMonth + spendSoFarThisMonth.
* - confidence band = ±min(stdev(dailySpend) × daysRemaining, 0.20 × projected).
* - vs last month comparison if ≥1 session in previous calendar month.
*
* All five ForecastStatus branches handled with structured output. Never throws.
*/
import type { ForecastReport } from "./types.js";
/** Same session shape as today's runner. */
export interface ForecastSession {
readonly startedAt: string;
readonly estCostUSD: number;
}
export interface RunForecastInput {
readonly sessions: ReadonlyArray<ForecastSession>;
readonly now: Date;
}
export declare function runForecast(input: RunForecastInput): ForecastReport;
//# sourceMappingURL=runForecast.d.ts.map
{"version":3,"file":"runForecast.d.ts","sourceRoot":"","sources":["../../../src/modules/forecast/runForecast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,YAAY,CAAC;AAEpB,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,cAAc,CAgGnE"}
const FORECAST_MIN_DAYS_HISTORY = 7;
export function runForecast(input) {
const { sessions, now } = input;
if (sessions.length === 0) {
return empty("no-data", "No Claude Code sessions found yet. Run `claude` in any project to start.");
}
const daysRemaining = daysRemainingInMonth(now);
if (daysRemaining <= 1) {
const monthLabel = monthLabelFor(now);
return empty("near-month-end", `${monthLabel} ${daysRemaining <= 0 ? "ended" : "ends tomorrow"}. Forecast not meaningful at this point.`);
}
// Recent activity check: any session in the last 14 days.
const lookbackMs = now.getTime() - 14 * 86_400_000;
const hasRecent = sessions.some((s) => Date.parse(s.startedAt) >= lookbackMs);
if (!hasRecent) {
return empty("no-recent-activity", "No sessions in your last 14 days — can't forecast a trajectory.");
}
// Adaptive trajectory window: 14 → 7, requires enough history.
const earliestMs = Math.min(...sessions.map((s) => Date.parse(s.startedAt)).filter(Number.isFinite));
const daysAvailable = Math.floor((now.getTime() - earliestMs) / 86_400_000);
if (daysAvailable < FORECAST_MIN_DAYS_HISTORY) {
return empty("insufficient-data", `Forecast needs at least 7 days of session history. Currently have ${daysAvailable}.`);
}
const windowDays = daysAvailable >= 14 ? 14 : 7;
const isPartial = daysAvailable < 14;
const trajectoryStartMs = now.getTime() - windowDays * 86_400_000;
const sampled = sessions.filter((s) => Date.parse(s.startedAt) >= trajectoryStartMs);
const dailySpend = bucketDailySpend(sampled, windowDays, now);
const avgDailySpendUSD = mean(dailySpend);
const medianDailySpendUSD = median(dailySpend);
const sigma = stdev(dailySpend);
const monthStart = startOfMonth(now);
const spendSoFarUSD = sessions
.filter((s) => Date.parse(s.startedAt) >= monthStart.getTime())
.reduce((sum, s) => sum + s.estCostUSD, 0);
const projectedExtra = avgDailySpendUSD * daysRemaining;
const projectedSpendUSD = spendSoFarUSD + projectedExtra;
const bandRaw = sigma * daysRemaining;
const bandCap = Math.max(0, 0.2 * projectedSpendUSD);
const band = Math.max(0, Math.min(bandRaw, bandCap));
const confidenceLowUSD = Math.max(0, projectedSpendUSD - band);
const confidenceHighUSD = projectedSpendUSD + band;
const trajectoryInput = {
windowDays,
isPartial,
sessionsSampled: sampled.length,
avgDailySpendUSD,
medianDailySpendUSD,
};
const monthEnd = {
monthLabel: monthLabelFor(now),
daysRemaining,
projectedSpendUSD,
confidenceLowUSD,
confidenceHighUSD,
spendSoFarUSD,
};
const comparison = buildLastMonthComparison(sessions, now, projectedSpendUSD);
const headline = buildHeadline(trajectoryInput, monthEnd, comparison);
return {
schemaVersion: "sipcode-forecast/1",
status: "ok",
trajectoryInput,
monthEnd,
comparison,
headline,
};
}
function empty(status, headline) {
return {
schemaVersion: "sipcode-forecast/1",
status,
trajectoryInput: null,
monthEnd: null,
comparison: null,
headline,
};
}
function daysRemainingInMonth(now) {
const lastDay = new Date(now.getFullYear(), now.getMonth() + 1, 0).getDate();
return lastDay - now.getDate();
}
function monthLabelFor(now) {
const months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
];
return `${months[now.getMonth()]} ${now.getFullYear()}`;
}
function startOfMonth(d) {
return new Date(d.getFullYear(), d.getMonth(), 1);
}
function bucketDailySpend(sessions, windowDays, now) {
const buckets = new Array(windowDays).fill(0);
const baseMs = now.getTime() - windowDays * 86_400_000;
for (const s of sessions) {
const t = Date.parse(s.startedAt);
if (!Number.isFinite(t) || t < baseMs)
continue;
const idx = Math.min(windowDays - 1, Math.max(0, Math.floor((t - baseMs) / 86_400_000)));
buckets[idx] = (buckets[idx] ?? 0) + s.estCostUSD;
}
return buckets;
}
function mean(xs) {
if (xs.length === 0)
return 0;
let s = 0;
for (const x of xs)
s += x;
return s / xs.length;
}
function median(xs) {
if (xs.length === 0)
return 0;
const s = [...xs].sort((a, b) => a - b);
const mid = Math.floor(s.length / 2);
return s.length % 2 === 0 ? ((s[mid - 1] ?? 0) + (s[mid] ?? 0)) / 2 : (s[mid] ?? 0);
}
function stdev(xs) {
if (xs.length < 2)
return 0;
const m = mean(xs);
let sq = 0;
for (const x of xs)
sq += (x - m) * (x - m);
return Math.sqrt(sq / (xs.length - 1));
}
function buildLastMonthComparison(sessions, now, projectedSpendUSD) {
const lastMonthStart = new Date(now.getFullYear(), now.getMonth() - 1, 1);
const thisMonthStart = new Date(now.getFullYear(), now.getMonth(), 1);
let lastMonthSpend = 0;
let any = false;
for (const s of sessions) {
const t = Date.parse(s.startedAt);
if (t >= lastMonthStart.getTime() && t < thisMonthStart.getTime()) {
lastMonthSpend += s.estCostUSD;
any = true;
}
}
if (!any) {
return { lastMonthSpendUSD: null, vsLastMonthPct: null };
}
const pct = lastMonthSpend > 0
? ((projectedSpendUSD - lastMonthSpend) / lastMonthSpend) * 100
: 0;
return { lastMonthSpendUSD: lastMonthSpend, vsLastMonthPct: pct };
}
function buildHeadline(trajectory, monthEnd, comparison) {
const parts = [];
parts.push(`At your current pace ($${trajectory.avgDailySpendUSD.toFixed(2)}/day across ${trajectory.windowDays} days of recent sessions), you're on track to spend about $${Math.round(monthEnd.projectedSpendUSD)} by month-end.`);
if (comparison.lastMonthSpendUSD !== null && comparison.vsLastMonthPct !== null) {
const dir = comparison.vsLastMonthPct < 0 ? "less than" : "more than";
parts.push(`${Math.abs(comparison.vsLastMonthPct).toFixed(1)}% ${dir} last month ($${comparison.lastMonthSpendUSD.toFixed(2)}).`);
}
parts.push(`Confidence range: $${monthEnd.confidenceLowUSD.toFixed(0)}–$${monthEnd.confidenceHighUSD.toFixed(0)}.`);
return parts.join(" ");
}
//# sourceMappingURL=runForecast.js.map
{"version":3,"file":"runForecast.js","sourceRoot":"","sources":["../../../src/modules/forecast/runForecast.ts"],"names":[],"mappings":"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"}
/**
* `forecast_monthly_spend` / `sipcode forecast` — public types.
*
* Schema pinned at `sipcode-forecast/1`.
*/
export type ForecastStatus = "ok" | "insufficient-data" | "near-month-end" | "no-recent-activity" | "no-data";
export interface ForecastTrajectoryInput {
readonly windowDays: number;
readonly isPartial: boolean;
readonly sessionsSampled: number;
readonly avgDailySpendUSD: number;
readonly medianDailySpendUSD: number;
}
export interface ForecastMonthEnd {
readonly monthLabel: string;
readonly daysRemaining: number;
readonly projectedSpendUSD: number;
readonly confidenceLowUSD: number;
readonly confidenceHighUSD: number;
readonly spendSoFarUSD: number;
}
export interface ForecastComparison {
readonly lastMonthSpendUSD: number | null;
/** Positive = current month projected higher than last. */
readonly vsLastMonthPct: number | null;
}
export interface ForecastReport {
readonly schemaVersion: "sipcode-forecast/1";
readonly status: ForecastStatus;
readonly trajectoryInput: ForecastTrajectoryInput | null;
readonly monthEnd: ForecastMonthEnd | null;
readonly comparison: ForecastComparison | null;
readonly headline: string;
}
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/forecast/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,mBAAmB,GACnB,gBAAgB,GAChB,oBAAoB,GACpB,SAAS,CAAC;AAEd,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,2DAA2D;IAC3D,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
/**
* `forecast_monthly_spend` / `sipcode forecast` — public types.
*
* Schema pinned at `sipcode-forecast/1`.
*/
export {};
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/forecast/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
/**
* Extract top-level Python symbols via tree-sitter-python.
*
* Mirrors `ts-symbols.ts`. Returns the same `ExtractedSymbol[]` shape so the
* orchestrator can treat both languages uniformly.
*
* Impure (depends on tree-sitter native binding). Loader is wrapped so an
* environment without the binding falls through to "pass through full file."
*/
import type { ExtractedSymbol } from "./ts-symbols.js";
export declare function isPyFile(filePath: string): boolean;
export declare function extractPySymbols(_filePath: string, content: string): ExtractedSymbol[];
//# sourceMappingURL=py-symbols.d.ts.map
{"version":3,"file":"py-symbols.d.ts","sourceRoot":"","sources":["../../../../src/modules/proxy/ast/py-symbols.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,iBAAiB,CAAC;AAkCnE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,eAAe,EAAE,CAWnB"}
import { createRequire } from "node:module";
let cached;
function loadParser() {
if (cached !== undefined)
return cached;
try {
const localRequire = createRequire(import.meta.url);
const Parser = localRequire("tree-sitter");
const Py = localRequire("tree-sitter-python");
cached = { Parser, langPy: Py };
}
catch {
cached = null;
}
return cached;
}
export function isPyFile(filePath) {
return /\.pyi?$/i.test(filePath);
}
export function extractPySymbols(_filePath, content) {
const bundle = loadParser();
if (!bundle)
return [];
try {
const parser = new bundle.Parser();
parser.setLanguage(bundle.langPy);
const tree = parser.parse(content);
return collectSymbols(tree.rootNode);
}
catch {
return [];
}
}
function collectSymbols(root) {
const out = [];
for (const child of root.children) {
pushSymbol(child, out);
}
return out;
}
function pushSymbol(node, out) {
const startLine = node.startPosition.row + 1;
const endLine = node.endPosition.row + 1;
switch (node.type) {
case "function_definition":
case "async_function_definition": {
const name = nameOf(node);
if (name) {
out.push(buildSymbol(name, "function", startLine, endLine));
}
return;
}
case "decorated_definition": {
// Walk the wrapped definition; treat as same kind, decoration adds lines.
const inner = node.children.find((c) => c.type === "function_definition" ||
c.type === "async_function_definition" ||
c.type === "class_definition");
if (inner) {
const name = nameOf(inner);
if (name) {
const kind = inner.type === "class_definition" ? "class" : "function";
out.push(buildSymbol(name, kind, startLine, endLine));
}
}
return;
}
case "class_definition": {
const name = nameOf(node);
if (name) {
out.push(buildSymbol(name, "class", startLine, endLine));
}
return;
}
case "expression_statement": {
// Module-level assignment: NAME = ...
const assign = node.children[0];
if (assign && assign.type === "assignment") {
const left = assign.children[0];
if (left && left.type === "identifier" && left.text) {
out.push(buildSymbol(left.text, "const", startLine, endLine));
}
}
return;
}
default:
return;
}
}
function nameOf(node) {
const id = node.childForFieldName("name");
if (id && id.text)
return id.text;
for (const c of node.children) {
if (c.type === "identifier")
return c.text;
}
return null;
}
function buildSymbol(name, kind, startLine, endLine) {
return {
name,
kind,
startLine,
endLine,
isTopLevel: true,
// Python doesn't distinguish "exported" at parse time; treat all top-level
// names as exported unless they start with underscore (PEP 8 convention).
isExported: !name.startsWith("_"),
};
}
//# sourceMappingURL=py-symbols.js.map
{"version":3,"file":"py-symbols.js","sourceRoot":"","sources":["../../../../src/modules/proxy/ast/py-symbols.ts"],"names":[],"mappings":"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"}
/**
* Score extracted symbols against recent session signals.
*
* Pure. No I/O. Takes the symbols extracted from a file plus the signal
* cache loaded by the orchestrator, returns each symbol with a 0-1
* confidence score.
*
* Match types (highest score wins):
* - exact: symbol name === signal pattern → 1.0
* - substring: symbol name contains pattern (or vice versa) → 0.8
* - word-bdry: pattern is a CamelCase / snake_case word in symbol → 0.7
* - regex-match: pattern (as regex) matches symbol → 0.7
* - no match: 0.0
*
* The orchestrator's confidence gate (default 0.7) means only exact and
* substring matches reliably trigger AST trim — word-boundary and regex
* land right at the threshold so the orchestrator can still pass through
* the full file if it wants extra caution.
*
* Glob patterns are explicitly NOT scored — they tell us file types of
* interest, not symbol names. They're recorded for future use.
*/
import type { ExtractedSymbol } from "./ts-symbols.js";
import type { Signal } from "../signal-cache.js";
export interface ScoredSymbol {
readonly symbol: ExtractedSymbol;
/** Match confidence 0-1. */
readonly confidence: number;
/** Which signal pattern produced the best score (for debug/reasoning). */
readonly matchedPattern?: string;
}
/** Default minimum confidence for "safe to use this symbol for trim." */
export declare const DEFAULT_CONFIDENCE_THRESHOLD = 0.7;
/**
* Score each symbol against the signals. Symbols with no match score 0
* and are still returned (caller decides what to do with low-confidence
* symbols).
*/
export declare function scoreSymbols(symbols: ReadonlyArray<ExtractedSymbol>, signals: ReadonlyArray<Signal>): ScoredSymbol[];
/**
* Pick symbols above the confidence threshold to use for AST trim. Returns
* empty when nothing crosses the bar — caller should pass through the full
* file.
*/
export declare function pickRelevantSymbols(scored: ReadonlyArray<ScoredSymbol>, threshold?: number): ScoredSymbol[];
/**
* Compute a 0-1 score for how well symbol matches pattern.
* Pure helper, exported for tests.
*/
export declare function matchScore(symbol: string, pattern: string): number;
//# sourceMappingURL=relevance.d.ts.map
{"version":3,"file":"relevance.d.ts","sourceRoot":"","sources":["../../../../src/modules/proxy/ast/relevance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,EACvC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAC7B,YAAY,EAAE,CAmBhB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EACnC,SAAS,GAAE,MAAqC,GAC/C,YAAY,EAAE,CAIhB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBlE"}
/** Default minimum confidence for "safe to use this symbol for trim." */
export const DEFAULT_CONFIDENCE_THRESHOLD = 0.7;
/**
* Score each symbol against the signals. Symbols with no match score 0
* and are still returned (caller decides what to do with low-confidence
* symbols).
*/
export function scoreSymbols(symbols, signals) {
const grepPatterns = signals
.filter((s) => s.kind === "grep-pattern")
.map((s) => s.pattern);
return symbols.map((symbol) => {
let best = 0;
let bestPattern;
for (const pattern of grepPatterns) {
const score = matchScore(symbol.name, pattern);
if (score > best) {
best = score;
bestPattern = pattern;
}
}
return bestPattern !== undefined
? { symbol, confidence: best, matchedPattern: bestPattern }
: { symbol, confidence: best };
});
}
/**
* Pick symbols above the confidence threshold to use for AST trim. Returns
* empty when nothing crosses the bar — caller should pass through the full
* file.
*/
export function pickRelevantSymbols(scored, threshold = DEFAULT_CONFIDENCE_THRESHOLD) {
return scored
.filter((s) => s.confidence >= threshold)
.sort((a, b) => b.confidence - a.confidence);
}
/**
* Compute a 0-1 score for how well symbol matches pattern.
* Pure helper, exported for tests.
*/
export function matchScore(symbol, pattern) {
if (!symbol || !pattern)
return 0;
if (symbol === pattern)
return 1.0;
const symLower = symbol.toLowerCase();
const patLower = pattern.toLowerCase();
if (symLower === patLower)
return 0.95;
if (symLower.includes(patLower) || patLower.includes(symLower)) {
// Length-aware: short pattern matching a long symbol is less reliable.
// E.g. pattern "id" inside symbol "validateUserId" — match but not perfect.
const ratio = Math.min(patLower.length, symLower.length) / Math.max(patLower.length, symLower.length);
return 0.7 + 0.1 * ratio;
}
// Word-boundary on CamelCase / snake_case.
const words = splitIdentifier(symbol);
for (const w of words) {
if (w.toLowerCase() === patLower)
return 0.7;
}
// Regex attempt — patterns from Grep can be valid regex.
try {
const re = new RegExp(pattern);
if (re.test(symbol))
return 0.7;
}
catch {
// not a valid regex; ignore
}
return 0;
}
/** Split CamelCase / snake_case / kebab-case into lowercase words. */
function splitIdentifier(s) {
return s
.replace(/([a-z])([A-Z])/g, "$1_$2")
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2")
.split(/[_\-]+/)
.filter(Boolean);
}
//# sourceMappingURL=relevance.js.map
{"version":3,"file":"relevance.js","sourceRoot":"","sources":["../../../../src/modules/proxy/ast/relevance.ts"],"names":[],"mappings":"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"}
/**
* Extract top-level symbols from a TypeScript/JavaScript file via tree-sitter.
*
* Impure: depends on tree-sitter native bindings. Loader is wrapped in
* try/catch — if the binding fails to load (Bun, Alpine, broken install),
* the orchestrator falls back to "pass through full file" so Claude Code
* is never broken.
*
* Returns symbols ordered by appearance. Each has 1-indexed startLine and
* endLine matching the `offset` semantics of Claude Code's Read tool.
*
* Lives outside `rewriters/` so the rewriter-purity guard doesn't apply.
*/
export type SymbolKind = "function" | "class" | "interface" | "type" | "const" | "let" | "var" | "enum";
export interface ExtractedSymbol {
readonly name: string;
readonly kind: SymbolKind;
/** 1-indexed line where the declaration starts. */
readonly startLine: number;
/** 1-indexed line where the declaration ends. */
readonly endLine: number;
/** True if this is at the top level of the file (vs nested). */
readonly isTopLevel: true;
/** True if exported (export keyword present). */
readonly isExported: boolean;
}
/** Returns true iff the file extension is supported by this extractor. */
export declare function isTsLikeFile(filePath: string): boolean;
/**
* Extract top-level symbols. Returns empty array on parser-load failure or
* a parse error so the orchestrator falls through to "pass through full file."
*/
export declare function extractTsSymbols(filePath: string, content: string): ExtractedSymbol[];
//# sourceMappingURL=ts-symbols.d.ts.map
{"version":3,"file":"ts-symbols.d.ts","sourceRoot":"","sources":["../../../../src/modules/proxy/ast/ts-symbols.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,KAAK,GACL,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAyCD,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,eAAe,EAAE,CAWnB"}
import { createRequire } from "node:module";
let cached; // undefined = not tried, null = tried and failed
function loadParser() {
if (cached !== undefined)
return cached;
try {
// createRequire from this module's URL so we resolve tree-sitter
// against the install where dist/modules/proxy/ast/ts-symbols.js lives
// (the user's node_modules), not the spawning process's cwd.
const localRequire = createRequire(import.meta.url);
const Parser = localRequire("tree-sitter");
const TS = localRequire("tree-sitter-typescript");
cached = { Parser, langTs: TS.typescript, langTsx: TS.tsx };
}
catch {
cached = null;
}
return cached;
}
/** Returns true iff the file extension is supported by this extractor. */
export function isTsLikeFile(filePath) {
return /\.(ts|tsx|js|jsx|mjs|cjs|mts|cts)$/i.test(filePath);
}
/** True iff this filePath is TSX/JSX (needs the tsx grammar). */
function isJsxLike(filePath) {
return /\.(tsx|jsx)$/i.test(filePath);
}
/**
* Extract top-level symbols. Returns empty array on parser-load failure or
* a parse error so the orchestrator falls through to "pass through full file."
*/
export function extractTsSymbols(filePath, content) {
const bundle = loadParser();
if (!bundle)
return [];
try {
const parser = new bundle.Parser();
parser.setLanguage(isJsxLike(filePath) ? bundle.langTsx : bundle.langTs);
const tree = parser.parse(content);
return collectSymbols(tree.rootNode);
}
catch {
return [];
}
}
function collectSymbols(root) {
const out = [];
for (const child of root.children) {
pushSymbol(child, out, /*exported=*/ false);
}
return out;
}
function pushSymbol(node, out, exportedContext) {
const startLine = node.startPosition.row + 1;
const endLine = node.endPosition.row + 1;
switch (node.type) {
case "export_statement": {
// Walk into the wrapped declaration with exportedContext=true.
for (const c of node.children) {
if (c.type === "export" || c.type === "default")
continue;
pushSymbol(c, out, /*exported=*/ true);
}
return;
}
case "function_declaration": {
const name = nameOf(node);
if (name) {
out.push({
name,
kind: "function",
startLine,
endLine,
isTopLevel: true,
isExported: exportedContext,
});
}
return;
}
case "class_declaration": {
const name = nameOf(node);
if (name) {
out.push({
name,
kind: "class",
startLine,
endLine,
isTopLevel: true,
isExported: exportedContext,
});
}
return;
}
case "interface_declaration": {
const name = nameOf(node);
if (name) {
out.push({
name,
kind: "interface",
startLine,
endLine,
isTopLevel: true,
isExported: exportedContext,
});
}
return;
}
case "type_alias_declaration": {
const name = nameOf(node);
if (name) {
out.push({
name,
kind: "type",
startLine,
endLine,
isTopLevel: true,
isExported: exportedContext,
});
}
return;
}
case "enum_declaration": {
const name = nameOf(node);
if (name) {
out.push({
name,
kind: "enum",
startLine,
endLine,
isTopLevel: true,
isExported: exportedContext,
});
}
return;
}
case "lexical_declaration":
case "variable_declaration": {
// const|let|var x = ... ; possibly multiple declarators.
const kindWord = firstChildText(node);
const kind = kindWord === "const" ? "const" : kindWord === "let" ? "let" : "var";
for (const c of node.children) {
if (c.type === "variable_declarator") {
const name = nameOf(c);
if (name) {
out.push({
name,
kind,
startLine,
endLine,
isTopLevel: true,
isExported: exportedContext,
});
}
}
}
return;
}
default:
return;
}
}
function nameOf(node) {
const id = node.childForFieldName("name");
if (id && id.text)
return id.text;
// Fallback: scan children for an identifier-like node.
for (const c of node.children) {
if (c.type === "identifier" || c.type === "type_identifier") {
return c.text;
}
}
return null;
}
function firstChildText(node) {
return node.children[0]?.text ?? null;
}
//# sourceMappingURL=ts-symbols.js.map
{"version":3,"file":"ts-symbols.js","sourceRoot":"","sources":["../../../../src/modules/proxy/ast/ts-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyD5C,IAAI,MAAuC,CAAC,CAAC,iDAAiD;AAE9F,SAAS,UAAU;IACjB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,iEAAiE;QACjE,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAA2B,CAAC;QACrE,MAAM,EAAE,GAAG,YAAY,CAAC,wBAAwB,CAG/C,CAAC;QACF,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,qCAAqC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,iEAAiE;AACjE,SAAS,SAAS,CAAC,QAAgB;IACjC,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,GAAsB,EACtB,eAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IAEzC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,+DAA+D;YAC/D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;oBAAE,SAAS;gBAC1D,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,IAAI,EAAE,UAAU;oBAChB,SAAS;oBACT,OAAO;oBACP,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,SAAS;oBACT,OAAO;oBACP,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,IAAI,EAAE,WAAW;oBACjB,SAAS;oBACT,OAAO;oBACP,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,IAAI,EAAE,MAAM;oBACZ,SAAS;oBACT,OAAO;oBACP,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,IAAI,EAAE,MAAM;oBACZ,SAAS;oBACT,OAAO;oBACP,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,qBAAqB,CAAC;QAC3B,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,yDAAyD;YACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,GACR,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACtE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,IAAI,EAAE,CAAC;wBACT,GAAG,CAAC,IAAI,CAAC;4BACP,IAAI;4BACJ,IAAI;4BACJ,SAAS;4BACT,OAAO;4BACP,UAAU,EAAE,IAAI;4BAChB,UAAU,EAAE,eAAe;yBAC5B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QACD;YACE,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC;IAClC,uDAAuD;IACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC5D,OAAO,CAAC,CAAC,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;AACxC,CAAC"}
import { type StoreIO } from "./signal-cache.js";
import type { PreToolUseInput, HookSpecificOutput, ProxyStatsEntry } from "./types.js";
export interface HookAstReadResult {
readonly hookOutput: HookSpecificOutput | null;
readonly statsEntry: ProxyStatsEntry | null;
}
/**
* Files smaller than this (in lines) aren't worth trimming. We'd save at most
* MIN_LINES_TO_TRIM tokens; not worth the overhead of injecting a slice
* + risk of missing context.
*/
export declare const MIN_LINES_TO_TRIM = 200;
/** Lines of context around each picked symbol. */
export declare const CONTEXT_LINES = 5;
export interface AstIO extends StoreIO {
readFile(p: string): Promise<string | null>;
now(): Date;
}
export declare const realAstIO: AstIO;
/**
* Side-effect: record a signal derived from this tool call (Grep/Glob/Bash).
* Fire-and-forget; failures don't block anything. Use this for every tool
* call routed by the hook script.
*/
export declare function recordSignal(input: PreToolUseInput, homeDir: string, io?: AstIO): Promise<void>;
export declare function hookAstRead(input: PreToolUseInput, homeDir: string, io?: AstIO): Promise<HookAstReadResult>;
//# sourceMappingURL=hookAstRead.d.ts.map
{"version":3,"file":"hookAstRead.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/hookAstRead.ts"],"names":[],"mappings":"AAiCA,OAAO,EAML,KAAK,OAAO,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;CAC7C;AAID;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,kDAAkD;AAClD,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,KAAM,SAAQ,OAAO;IACpC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,IAAI,IAAI,CAAC;CACb;AAED,eAAO,MAAM,SAAS,EAAE,KAYvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,EAAE,GAAE,KAAiB,GACpB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,EAAE,GAAE,KAAiB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAoE5B"}
/**
* Hook-side orchestrator for B3 AST-aware symbol reads.
*
* For TS/JS Read calls without offset/limit:
* 1. Read the file
* 2. Extract top-level symbols via tree-sitter
* 3. Load the per-session signal cache
* 4. Score each symbol against recent grep patterns
* 5. If any symbol's confidence ≥ threshold AND the file is large enough
* to bother trimming, inject offset/limit to read just the picked
* symbol(s) plus a small surrounding buffer
* 6. Otherwise, pass through the full file (Claude reads as normal)
*
* Safety: when ANY of (file too small, no signals, no confident match,
* parser error) holds, we pass through. The cost of a missed trim is just
* "tokens we could have saved." The cost of a wrong trim is "Claude can't
* see the line it needed" — which is far worse. Bias hard toward pass-through.
*
* Lives outside `rewriters/` so the rewriter-purity guard doesn't apply.
*/
import { promises as fs } from "node:fs";
import { extractTsSymbols, isTsLikeFile, } from "./ast/ts-symbols.js";
import { extractPySymbols, isPyFile } from "./ast/py-symbols.js";
import { scoreSymbols, pickRelevantSymbols, DEFAULT_CONFIDENCE_THRESHOLD, } from "./ast/relevance.js";
import { loadSignals, appendSignal, sessionSignalsPath, deriveSignalFromInput, realStoreIO, } from "./signal-cache.js";
const EMPTY = { hookOutput: null, statsEntry: null };
/**
* Files smaller than this (in lines) aren't worth trimming. We'd save at most
* MIN_LINES_TO_TRIM tokens; not worth the overhead of injecting a slice
* + risk of missing context.
*/
export const MIN_LINES_TO_TRIM = 200;
/** Lines of context around each picked symbol. */
export const CONTEXT_LINES = 5;
export const realAstIO = {
...realStoreIO,
async readFile(p) {
try {
return await fs.readFile(p, "utf-8");
}
catch {
return null;
}
},
now() {
return new Date();
},
};
/**
* Side-effect: record a signal derived from this tool call (Grep/Glob/Bash).
* Fire-and-forget; failures don't block anything. Use this for every tool
* call routed by the hook script.
*/
export async function recordSignal(input, homeDir, io = realAstIO) {
try {
if (!input.session_id)
return;
const signal = deriveSignalFromInput(input.tool_name, input.tool_input, io.now().getTime());
if (!signal)
return;
const p = sessionSignalsPath(homeDir, input.session_id);
await appendSignal(p, signal, io);
}
catch {
// never throw from a signal-write
}
}
export async function hookAstRead(input, homeDir, io = realAstIO) {
try {
if (input.tool_name !== "Read")
return EMPTY;
const filePath = input.tool_input.file_path;
if (typeof filePath !== "string" || filePath.length === 0)
return EMPTY;
// Supported: TS/JS family and Python.
const ext = isTsLikeFile(filePath)
? "ts"
: isPyFile(filePath)
? "py"
: null;
if (ext === null)
return EMPTY;
// Bail if the model asked for a slice — they have intent, don't override.
if (input.tool_input.offset !== undefined || input.tool_input.limit !== undefined) {
return EMPTY;
}
if (!input.session_id)
return EMPTY;
const content = await io.readFile(filePath);
if (content === null)
return EMPTY;
const lineCount = countLines(content);
if (lineCount < MIN_LINES_TO_TRIM)
return EMPTY;
const symbols = ext === "py" ? extractPySymbols(filePath, content) : extractTsSymbols(filePath, content);
if (symbols.length === 0)
return EMPTY; // parser failed or empty
const signalsPath = sessionSignalsPath(homeDir, input.session_id);
const signals = await loadSignals(signalsPath, io);
if (signals.length === 0)
return EMPTY; // no signal to trim by
const scored = scoreSymbols(symbols, signals);
const picked = pickRelevantSymbols(scored, DEFAULT_CONFIDENCE_THRESHOLD);
if (picked.length === 0)
return EMPTY;
const slice = computeSlice(picked, lineCount);
// If our slice ends up covering ~the whole file, there's no point.
if (slice.limit >= Math.floor(lineCount * 0.8))
return EMPTY;
const savedTokensEstimate = estimateSavedTokens(lineCount, slice.limit);
const note = `ast-trim: returning lines ${slice.offset + 1}-${slice.offset + slice.limit} ` +
`(symbols ${picked.map((p) => p.symbol.name).join(", ")}; ` +
`confidence ${picked[0].confidence.toFixed(2)})`;
return {
hookOutput: {
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "allow",
updatedInput: {
...input.tool_input,
offset: slice.offset,
limit: slice.limit,
},
},
},
statsEntry: {
timestamp: io.now().toISOString(),
toolName: "Read",
rewriterName: "ast-read",
savedTokensEstimate,
integrityScore: 0.7, // we kept the symbol(s) Claude searched for; bias to conservative
},
};
}
catch {
return EMPTY;
}
}
function countLines(s) {
let n = 1;
for (let i = 0; i < s.length; i++) {
if (s.charCodeAt(i) === 10 /* \n */)
n++;
}
return n;
}
/** Pick a window covering the picked symbols + CONTEXT_LINES on each side. */
function computeSlice(picked, totalLines) {
let minStart = Infinity;
let maxEnd = -Infinity;
for (const p of picked) {
if (p.symbol.startLine < minStart)
minStart = p.symbol.startLine;
if (p.symbol.endLine > maxEnd)
maxEnd = p.symbol.endLine;
}
const start = Math.max(1, minStart - CONTEXT_LINES);
const end = Math.min(totalLines, maxEnd + CONTEXT_LINES);
return {
offset: start - 1, // Claude Code's offset is 0-indexed
limit: end - start + 1,
};
}
/** Heuristic: ~4 chars/line average, ~4 chars/token. Treat 1 line ≈ 12 tokens. */
function estimateSavedTokens(totalLines, keptLines) {
const droppedLines = Math.max(0, totalLines - keptLines);
return droppedLines * 12;
}
//# sourceMappingURL=hookAstRead.js.map
{"version":3,"file":"hookAstRead.js","sourceRoot":"","sources":["../../../src/modules/proxy/hookAstRead.ts"],"names":[],"mappings":"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"}
export type SignalKind = "grep-pattern" | "glob-pattern";
export interface Signal {
/** Tool name that produced this signal (Bash/Grep/Glob). */
readonly tool: string;
/** What kind of signal this is. */
readonly kind: SignalKind;
/** The raw query/pattern Claude sent. */
readonly pattern: string;
/** When this signal was captured (epoch ms). */
readonly capturedAtMs: number;
}
export interface StoreIO {
read(p: string): Promise<string | null>;
append(p: string, content: string): Promise<void>;
}
export declare const realStoreIO: StoreIO;
export declare function sessionSignalsPath(home: string, sessionId: string): string;
/**
* Load signals for a session, newest-first. Caps the load at MAX_SIGNALS to
* keep relevance scoring fast even on long sessions.
*/
export declare const MAX_SIGNALS = 200;
export declare function loadSignals(filePath: string, io?: StoreIO): Promise<Signal[]>;
export declare function appendSignal(filePath: string, signal: Signal, io?: StoreIO): Promise<void>;
/**
* Pull search patterns from a PreToolUse input. Returns null when the tool
* doesn't carry any usable signal. Pure.
*/
export declare function deriveSignalFromInput(toolName: string, toolInput: Record<string, unknown>, nowMs: number): Signal | null;
//# sourceMappingURL=signal-cache.d.ts.map
{"version":3,"file":"signal-cache.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/signal-cache.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AAEzD,MAAM,WAAW,MAAM;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,WAAW,EAAE,OAczB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,EAAE,GAAE,OAAqB,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,EAAE,GAAE,OAAqB,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAmCf"}
/**
* Per-session signal cache for B3 AST-aware reads.
*
* Records Grep/Glob patterns Claude has searched for. The AST-read
* orchestrator uses these as the relevance signal: when Claude later Reads a
* .ts file, symbols whose name matches any recent grep pattern get a high
* relevance score and the orchestrator can inject offset/limit to return only
* those symbols' line ranges instead of the full file.
*
* Cache file: `~/.sipcode/proxy-signals/<session-id>.jsonl`. Session-keyed
* because each Claude Code session has its own search intent.
*
* StoreIO seam mirrors read-cache.ts so tests can inject in-memory I/O.
*/
import { promises as fs } from "node:fs";
import path from "node:path";
export const realStoreIO = {
async read(p) {
try {
return await fs.readFile(p, "utf-8");
}
catch (err) {
const code = err.code;
if (code === "ENOENT")
return null;
throw err;
}
},
async append(p, content) {
await fs.mkdir(path.dirname(p), { recursive: true });
await fs.appendFile(p, content, "utf-8");
},
};
export function sessionSignalsPath(home, sessionId) {
return path.join(home, ".sipcode", "proxy-signals", `${sessionId}.jsonl`);
}
/**
* Load signals for a session, newest-first. Caps the load at MAX_SIGNALS to
* keep relevance scoring fast even on long sessions.
*/
export const MAX_SIGNALS = 200;
export async function loadSignals(filePath, io = realStoreIO) {
const raw = await io.read(filePath);
if (raw === null)
return [];
const out = [];
for (const line of raw.split("\n")) {
const trimmed = line.trim();
if (!trimmed)
continue;
try {
const e = JSON.parse(trimmed);
if (e &&
typeof e === "object" &&
typeof e.pattern === "string" &&
typeof e.capturedAtMs === "number") {
out.push(e);
}
}
catch {
// skip malformed line
}
}
out.sort((a, b) => b.capturedAtMs - a.capturedAtMs);
return out.slice(0, MAX_SIGNALS);
}
export async function appendSignal(filePath, signal, io = realStoreIO) {
await io.append(filePath, JSON.stringify(signal) + "\n");
}
/**
* Pull search patterns from a PreToolUse input. Returns null when the tool
* doesn't carry any usable signal. Pure.
*/
export function deriveSignalFromInput(toolName, toolInput, nowMs) {
// Native Grep
if (toolName === "Grep") {
const pattern = toolInput.pattern;
if (typeof pattern === "string" && pattern.length > 0) {
return { tool: "Grep", kind: "grep-pattern", pattern, capturedAtMs: nowMs };
}
return null;
}
// Native Glob
if (toolName === "Glob") {
const pattern = toolInput.pattern;
if (typeof pattern === "string" && pattern.length > 0) {
return { tool: "Glob", kind: "glob-pattern", pattern, capturedAtMs: nowMs };
}
return null;
}
// Bash grep — best-effort pattern extraction.
if (toolName === "Bash") {
const command = toolInput.command;
if (typeof command !== "string")
return null;
const m = command.match(/^\s*(?:grep|rg|ag)\s+(?:--?[a-zA-Z][a-zA-Z0-9-]*(?:=\S+)?\s+)*['"]?([^\s'"]+)['"]?/);
if (m && m[1]) {
return {
tool: "Bash",
kind: "grep-pattern",
pattern: m[1],
capturedAtMs: nowMs,
};
}
return null;
}
return null;
}
//# sourceMappingURL=signal-cache.js.map
{"version":3,"file":"signal-cache.js","sourceRoot":"","sources":["../../../src/modules/proxy/signal-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAoB7B,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,KAAK,CAAC,IAAI,CAAC,CAAC;QACV,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;YACjD,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACnC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO;QACrB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,SAAiB;IAChE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,KAAc,WAAW;IAEzB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW,CAAC;YACxC,IACE,CAAC;gBACD,OAAO,CAAC,KAAK,QAAQ;gBACrB,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAC7B,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,EAClC,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,MAAc,EACd,KAAc,WAAW;IAEzB,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,SAAkC,EAClC,KAAa;IAEb,cAAc;IACd,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,cAAc;IACd,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8CAA8C;IAC9C,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CACrB,oFAAoF,CACrF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACd,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACb,YAAY,EAAE,KAAK;aACpB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
/**
* JSON renderer for `sipcode today --json` / `get_today_summary` MCP tool. Pure.
*
* The schema is the public contract from v1.6.10+. Pinned schemaVersion.
*/
import type { TodayReport } from "./types.js";
export declare function formatTodayJson(report: TodayReport): string;
//# sourceMappingURL=format-json.d.ts.map
{"version":3,"file":"format-json.d.ts","sourceRoot":"","sources":["../../../src/modules/today/format-json.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE3D"}
export function formatTodayJson(report) {
return JSON.stringify(report, null, 2);
}
//# sourceMappingURL=format-json.js.map
{"version":3,"file":"format-json.js","sourceRoot":"","sources":["../../../src/modules/today/format-json.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
/**
* Terminal renderer for `sipcode today`. Pure.
*/
import type { TodayReport } from "./types.js";
export declare function formatTodayTerminal(report: TodayReport): string;
//# sourceMappingURL=format-terminal.d.ts.map
{"version":3,"file":"format-terminal.d.ts","sourceRoot":"","sources":["../../../src/modules/today/format-terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAoD/D"}
export function formatTodayTerminal(report) {
const lines = [];
const dateLabel = report.today?.dateLocal ?? "today";
lines.push(`sipcode today · ${dateLabel}`);
lines.push("");
if (report.status === "no-data") {
lines.push(" " + report.headline);
return lines.join("\n");
}
if (report.today !== null) {
const t = report.today;
lines.push(` spend so far $${fmt(t.totalSpendUSD)} across ${t.sessionCount} session${t.sessionCount === 1 ? "" : "s"}`);
lines.push(` tokens so far ${fmtTokens(t.totalTokens)} output ratio ${t.outputRatioPct.toFixed(1)}%`);
if (t.topLeak !== null) {
lines.push(` top leak $${fmt(t.topLeak.costUSD)} ${t.topLeak.description}`);
}
lines.push("");
}
if (report.baseline !== null && report.comparison !== null) {
const b = report.baseline;
const c = report.comparison;
const label = b.isPartial
? `vs your last ${b.windowDays} days (all you have so far)`
: `vs your last ${b.windowDays} days (median)`;
lines.push(`${label}:`);
lines.push(` spend / day $${fmt(b.medianSpendPerDayUSD)} → today is ${fmtDelta(c.spendDeltaPct, "%")} ${arrow(c.spendDeltaPct, /*lowerIsBetter=*/ true)}`);
lines.push(` tokens / day ${fmtTokens(b.medianTokensPerDay)} → today is ${fmtDelta(c.tokenDeltaPct, "%")} ${arrow(c.tokenDeltaPct, /*lowerIsBetter=*/ true)}`);
lines.push(` output ratio ${b.medianOutputRatioPct.toFixed(1)}% → today is ${fmtDeltaPp(c.outputRatioDeltaPp)} ${arrow(-c.outputRatioDeltaPp, /*lowerIsBetter=*/ true)}`);
}
else if (report.baseline !== null && report.comparison === null) {
lines.push(`(no sessions today — baseline ${report.baseline.windowDays}d still shown above headline)`);
}
else {
lines.push("(no baseline yet — need ≥3 days of session history)");
}
lines.push("");
lines.push(report.headline);
return lines.join("\n");
}
function fmt(v) {
return v.toFixed(2);
}
function fmtTokens(v) {
if (v >= 1000)
return `${(v / 1000).toFixed(1)}K`;
return v.toLocaleString("en-US");
}
function fmtDelta(pct, unit) {
const abs = Math.abs(pct);
if (abs < 0.5)
return `even with baseline`;
return `${abs.toFixed(0)}${unit} ${pct < 0 ? "lower" : "higher"}`;
}
function fmtDeltaPp(pp) {
const abs = Math.abs(pp);
if (abs < 0.05)
return "even with baseline";
const sign = pp >= 0 ? "+" : "−";
return `${sign}${abs.toFixed(1)}pp`;
}
function arrow(pctChange, lowerIsBetter) {
if (Math.abs(pctChange) < 0.5)
return "·";
const better = lowerIsBetter ? pctChange < 0 : pctChange > 0;
return better ? "↓" : "↑";
}
//# sourceMappingURL=format-terminal.js.map
{"version":3,"file":"format-terminal.js","sourceRoot":"","sources":["../../../src/modules/today/format-terminal.ts"],"names":[],"mappings":"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"}
import type { TodayReport } from "./types.js";
/** Shape we accept from upstream. Subset of stats AggregatedSession. */
export interface TodaySession {
readonly sessionId: string;
readonly startedAt: string;
readonly totalTokens: number;
readonly outputTokens: number;
readonly estCostUSD: number;
readonly duplicateReadTokenCost: number;
/** Optional cost-USD attributed to the top duplicate-read file. */
readonly topDuplicateReadFile?: {
path: string;
count: number;
costUSD: number;
} | undefined;
}
export interface RunTodayInput {
readonly sessions: ReadonlyArray<TodaySession>;
readonly now: Date;
}
export declare function runToday(input: RunTodayInput): TodayReport;
//# sourceMappingURL=runToday.d.ts.map
{"version":3,"file":"runToday.d.ts","sourceRoot":"","sources":["../../../src/modules/today/runToday.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,YAAY,CAAC;AAEpB,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC9F;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB;AAKD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CA4E1D"}
/**
* Pure runner for `sipcode today` / `get_today_summary` MCP tool.
*
* Takes a pre-aggregated session list + `now`, returns a TodayReport. No I/O.
* All four TodayStatus branches handled with structured output — never throws.
*/
import { resolveBaseline } from "../../lib/baseline-window.js";
/** Minimum sessions today to render the full headline. */
const MIN_SESSIONS_FOR_OK = 1;
export function runToday(input) {
const { sessions, now } = input;
if (sessions.length === 0) {
return {
schemaVersion: "sipcode-today/1",
status: "no-data",
today: null,
baseline: null,
comparison: null,
headline: "No Claude Code sessions found yet. Run `claude` in any project to start.",
};
}
const todayIso = toLocalDay(now);
const todaySessions = sessions.filter((s) => toLocalDay(new Date(s.startedAt)) === todayIso);
// Compute today's block (may be null when no sessions today).
const todayBlock = todaySessions.length >= MIN_SESSIONS_FOR_OK
? buildTodayBlock(todayIso, todaySessions)
: null;
const baselineResolution = resolveBaseline(sessions.map((s) => s.startedAt), now);
// no-data already handled above. From here we either have:
// - baseline ok + sessions today → "ok"
// - baseline ok + no sessions today → "no-sessions-today"
// - baseline insufficient → "no-baseline" (today rendered if present)
if (baselineResolution.kind === "insufficient") {
return {
schemaVersion: "sipcode-today/1",
status: "no-baseline",
today: todayBlock,
baseline: null,
comparison: null,
headline: todayBlock !== null
? `Showing today only ($${fmtUsd(todayBlock.totalSpendUSD)}). Need 3+ days of history to compute a baseline.`
: "No sessions today yet. Need 3+ days of history to compute a baseline.",
};
}
const baselineSessions = sessions.filter((s) => s.startedAt.slice(0, 10) >= baselineResolution.window.sliceStartIso);
const baseline = buildBaseline(baselineResolution.window, baselineSessions);
if (todayBlock === null) {
return {
schemaVersion: "sipcode-today/1",
status: "no-sessions-today",
today: null,
baseline,
comparison: null,
headline: `No sessions today yet. Your ${baseline.windowDays}-day median is $${fmtUsd(baseline.medianSpendPerDayUSD)}/day — go build something.`,
};
}
const comparison = buildComparison(todayBlock, baseline);
const headline = buildHeadline(todayBlock, baseline, comparison);
return {
schemaVersion: "sipcode-today/1",
status: "ok",
today: todayBlock,
baseline,
comparison,
headline,
};
}
function buildTodayBlock(dateLocal, todaySessions) {
let totalSpendUSD = 0;
let totalTokens = 0;
let outputTokens = 0;
let topLeak = null;
for (const s of todaySessions) {
totalSpendUSD += s.estCostUSD;
totalTokens += s.totalTokens;
outputTokens += s.outputTokens;
if (s.topDuplicateReadFile !== undefined &&
(topLeak === null || s.topDuplicateReadFile.costUSD > topLeak.costUSD)) {
topLeak = {
kind: "duplicate-reads",
description: `${s.topDuplicateReadFile.count} re-reads of ${shortPath(s.topDuplicateReadFile.path)}`,
costUSD: s.topDuplicateReadFile.costUSD,
};
}
}
return {
dateLocal,
sessionCount: todaySessions.length,
totalSpendUSD,
totalTokens,
outputRatioPct: totalTokens > 0 ? (outputTokens / totalTokens) * 100 : 0,
topLeak,
};
}
function buildBaseline(window, baselineSessions) {
const perDay = new Map();
for (const s of baselineSessions) {
const day = s.startedAt.slice(0, 10);
const cur = perDay.get(day) ?? { spend: 0, tokens: 0, outRatio: 0, sessions: 0 };
cur.spend += s.estCostUSD;
cur.tokens += s.totalTokens;
cur.outRatio += s.totalTokens > 0 ? s.outputTokens / s.totalTokens : 0;
cur.sessions += 1;
perDay.set(day, cur);
}
const spendDays = [];
const tokenDays = [];
const outRatioDays = [];
for (const v of perDay.values()) {
spendDays.push(v.spend);
tokenDays.push(v.tokens);
outRatioDays.push((v.outRatio / v.sessions) * 100);
}
return {
windowDays: window.windowDays,
isPartial: window.isPartial,
medianSpendPerDayUSD: median(spendDays),
medianTokensPerDay: median(tokenDays),
medianOutputRatioPct: median(outRatioDays),
};
}
function buildComparison(today, baseline) {
return {
spendDeltaPct: pctChange(baseline.medianSpendPerDayUSD, today.totalSpendUSD),
tokenDeltaPct: pctChange(baseline.medianTokensPerDay, today.totalTokens),
outputRatioDeltaPp: today.outputRatioPct - baseline.medianOutputRatioPct,
};
}
function buildHeadline(today, baseline, comparison) {
const parts = [];
const direction = comparison.spendDeltaPct < 0 ? "below" : "above";
const magnitude = Math.round(Math.abs(comparison.spendDeltaPct));
parts.push(`You've spent $${fmtUsd(today.totalSpendUSD)} today across ${today.sessionCount} session${today.sessionCount === 1 ? "" : "s"} — ${magnitude}% ${direction} your ${baseline.windowDays}-day median.`);
parts.push(`Output ratio ${today.outputRatioPct.toFixed(1)}% (vs ${baseline.medianOutputRatioPct.toFixed(1)}% baseline).`);
if (today.topLeak !== null) {
parts.push(`Top leak: ${today.topLeak.description} ($${fmtUsd(today.topLeak.costUSD)}).`);
}
return parts.join(" ");
}
function toLocalDay(d) {
const y = d.getFullYear();
const m = String(d.getMonth() + 1).padStart(2, "0");
const day = String(d.getDate()).padStart(2, "0");
return `${y}-${m}-${day}`;
}
function median(xs) {
if (xs.length === 0)
return 0;
const s = [...xs].sort((a, b) => a - b);
const mid = Math.floor(s.length / 2);
return s.length % 2 === 0 ? ((s[mid - 1] ?? 0) + (s[mid] ?? 0)) / 2 : (s[mid] ?? 0);
}
function pctChange(base, value) {
if (base === 0)
return 0;
return ((value - base) / base) * 100;
}
function fmtUsd(v) {
return v.toFixed(2);
}
function shortPath(p) {
const parts = p.split(/[\\/]/);
return parts.slice(-2).join("/");
}
//# sourceMappingURL=runToday.js.map
{"version":3,"file":"runToday.js","sourceRoot":"","sources":["../../../src/modules/today/runToday.ts"],"names":[],"mappings":"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"}
/**
* `get_today_summary` / `sipcode today` — public types.
*
* Schema is part of the public contract from v1.6.10 (or whatever patch this
* lands in). Renames are breaking changes.
*/
export type TodayStatus = "ok" | "no-sessions-today" | "no-baseline" | "no-data";
export interface TodayLeak {
readonly kind: "duplicate-reads" | "idle-context" | "other";
readonly description: string;
readonly costUSD: number;
}
export interface TodayBlock {
readonly dateLocal: string;
readonly sessionCount: number;
readonly totalSpendUSD: number;
readonly totalTokens: number;
readonly outputRatioPct: number;
readonly topLeak: TodayLeak | null;
}
export interface TodayBaseline {
readonly windowDays: number;
readonly isPartial: boolean;
readonly medianSpendPerDayUSD: number;
readonly medianTokensPerDay: number;
readonly medianOutputRatioPct: number;
}
export interface TodayComparison {
readonly spendDeltaPct: number;
readonly tokenDeltaPct: number;
/** Points (NOT percent): outputRatioPct(today) - outputRatioPct(baseline). */
readonly outputRatioDeltaPp: number;
}
export interface TodayReport {
readonly schemaVersion: "sipcode-today/1";
readonly status: TodayStatus;
readonly today: TodayBlock | null;
readonly baseline: TodayBaseline | null;
readonly comparison: TodayComparison | null;
readonly headline: string;
}
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/today/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GACnB,IAAI,GACJ,mBAAmB,GACnB,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,OAAO,CAAC;IAC5D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
/**
* `get_today_summary` / `sipcode today` — public types.
*
* Schema is part of the public contract from v1.6.10 (or whatever patch this
* lands in). Renames are breaking changes.
*/
export {};
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/today/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
/**
* `sipcode trend` — single-metric time-series across a window.
*
* Different from `sipcode stats` (which shows totals): trend tracks ONE
* metric per day, designed to be robust to session-length variance and
* project-mix variance. The single most-useful metric per the v1.2.2
* post-launch reader: `output_ratio` (output_tokens / total_tokens). If
* Sipcode is working, this trends UP across the next month even as your
* project mix changes.
*
* Pure compute. Loaders, formatters, and the CLI handler live in sibling
* files. Mirrors stats/ module layout.
*/
export type TrendMetric = "output-ratio" | "cost-per-session" | "recoverable-tokens-per-session";
export interface TrendSession {
/** ISO date when the session started (used to bucket by day). */
readonly startedAt: string;
readonly totalTokens: number;
readonly outputTokens: number;
readonly estCostUSD: number;
/** Tokens that could have been recovered by re-read dedup. */
readonly duplicateReadTokens: number;
}
export interface TrendDay {
readonly date: string;
readonly sessions: number;
readonly value: number;
/** Sum of the metric numerator (e.g. output tokens) for inspection. */
readonly numerator: number;
/** Sum of the metric denominator (e.g. total tokens) for inspection. */
readonly denominator: number;
}
export interface TrendResult {
readonly metric: TrendMetric;
readonly window: {
since: string;
until: string;
};
readonly days: TrendDay[];
/** Median value across days, ignoring empty days. */
readonly median: number;
/** Sloped %/day (positive = improving for ratio, negative for cost). */
readonly slopePerDay: number;
/** Plain-language verdict for terminal display. */
readonly verdict: TrendVerdict;
}
export type TrendVerdict = "insufficient-data" | "improving" | "stable" | "regressing";
/** Minimum non-empty days needed to compute a slope. */
export declare const MIN_DAYS_FOR_SLOPE = 5;
export declare function computeTrend(sessions: ReadonlyArray<TrendSession>, metric: TrendMetric, since: string, until: string): TrendResult;
/** Inclusive ISO day enumeration. Pure. */
export declare function enumerateDays(since: string, until: string): string[];
//# sourceMappingURL=compute.d.ts.map
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/modules/trend/compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,kBAAkB,GAClB,gCAAgC,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,MAAM,YAAY,GACpB,mBAAmB,GACnB,WAAW,GACX,QAAQ,GACR,YAAY,CAAC;AAEjB,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAKpC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,EACrC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,WAAW,CAeb;AAkDD,2CAA2C;AAC3C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASpE"}
/**
* `sipcode trend` — single-metric time-series across a window.
*
* Different from `sipcode stats` (which shows totals): trend tracks ONE
* metric per day, designed to be robust to session-length variance and
* project-mix variance. The single most-useful metric per the v1.2.2
* post-launch reader: `output_ratio` (output_tokens / total_tokens). If
* Sipcode is working, this trends UP across the next month even as your
* project mix changes.
*
* Pure compute. Loaders, formatters, and the CLI handler live in sibling
* files. Mirrors stats/ module layout.
*/
/** Minimum non-empty days needed to compute a slope. */
export const MIN_DAYS_FOR_SLOPE = 5;
/** Window threshold (in absolute value of slopePerDay) for stable verdict. */
const STABLE_SLOPE_MAGNITUDE = 0.001;
export function computeTrend(sessions, metric, since, until) {
const days = bucketByDay(sessions, metric, since, until);
const nonEmpty = days.filter((d) => d.sessions > 0);
const median = computeMedian(nonEmpty.map((d) => d.value));
const slopePerDay = nonEmpty.length >= MIN_DAYS_FOR_SLOPE ? linearSlope(nonEmpty) : 0;
const verdict = decideVerdict(nonEmpty.length, slopePerDay, metric);
return {
metric,
window: { since, until },
days,
median,
slopePerDay,
verdict,
};
}
function bucketByDay(sessions, metric, since, until) {
const buckets = new Map();
for (const day of enumerateDays(since, until)) {
buckets.set(day, { num: 0, den: 0, sessions: 0 });
}
for (const s of sessions) {
const day = s.startedAt.slice(0, 10);
const b = buckets.get(day);
if (!b)
continue;
b.sessions += 1;
switch (metric) {
case "output-ratio":
b.num += s.outputTokens;
b.den += s.totalTokens;
break;
case "cost-per-session":
b.num += s.estCostUSD;
b.den += 1; // per session
break;
case "recoverable-tokens-per-session":
b.num += s.duplicateReadTokens;
b.den += 1;
break;
}
}
const out = [];
for (const [date, b] of buckets) {
const value = b.den > 0 ? b.num / b.den : 0;
out.push({
date,
sessions: b.sessions,
value,
numerator: b.num,
denominator: b.den,
});
}
out.sort((a, b) => a.date.localeCompare(b.date));
return out;
}
/** Inclusive ISO day enumeration. Pure. */
export function enumerateDays(since, until) {
const out = [];
const s = isoToTime(since);
const u = isoToTime(until);
if (s > u)
return out;
for (let t = s; t <= u; t += 86_400_000) {
out.push(toIso(t));
}
return out;
}
function isoToTime(iso) {
return Date.parse(iso + "T00:00:00Z");
}
function toIso(ms) {
return new Date(ms).toISOString().slice(0, 10);
}
function computeMedian(xs) {
if (xs.length === 0)
return 0;
const s = [...xs].sort((a, b) => a - b);
const mid = Math.floor(s.length / 2);
return s.length % 2 === 0 ? ((s[mid - 1] ?? 0) + (s[mid] ?? 0)) / 2 : s[mid] ?? 0;
}
/** Linear-regression slope using least squares. Pure. */
function linearSlope(days) {
const n = days.length;
if (n < 2)
return 0;
let sumX = 0;
let sumY = 0;
let sumXY = 0;
let sumXX = 0;
for (let i = 0; i < n; i++) {
const x = i;
const y = days[i].value;
sumX += x;
sumY += y;
sumXY += x * y;
sumXX += x * x;
}
const meanX = sumX / n;
const meanY = sumY / n;
const denom = sumXX - n * meanX * meanX;
if (denom === 0)
return 0;
return (sumXY - n * meanX * meanY) / denom;
}
function decideVerdict(daysWithData, slope, metric) {
if (daysWithData < MIN_DAYS_FOR_SLOPE)
return "insufficient-data";
if (Math.abs(slope) < STABLE_SLOPE_MAGNITUDE)
return "stable";
// For output-ratio: higher = better (more output per total). Positive slope = improving.
// For cost-per-session: lower = better. Negative slope = improving.
// For recoverable-tokens-per-session: lower = better. Negative slope = improving.
const higherIsBetter = metric === "output-ratio";
if (higherIsBetter)
return slope > 0 ? "improving" : "regressing";
return slope < 0 ? "improving" : "regressing";
}
//# sourceMappingURL=compute.js.map
{"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/modules/trend/compute.ts"],"names":[],"mappings":"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"}
/**
* JSON renderer for `sipcode trend --json`. Pure.
*
* Schema is part of the public contract from v1.6.9 onward. Versioned.
*/
import type { TrendResult } from "./compute.js";
export declare function formatTrendJson(result: TrendResult): string;
//# sourceMappingURL=format-json.d.ts.map
{"version":3,"file":"format-json.d.ts","sourceRoot":"","sources":["../../../src/modules/trend/format-json.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAc3D"}
export function formatTrendJson(result) {
return JSON.stringify({
schemaVersion: "sipcode-trend/1",
metric: result.metric,
window: result.window,
verdict: result.verdict,
median: result.median,
slopePerDay: result.slopePerDay,
days: result.days,
}, null, 2);
}
//# sourceMappingURL=format-json.js.map
{"version":3,"file":"format-json.js","sourceRoot":"","sources":["../../../src/modules/trend/format-json.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,aAAa,EAAE,iBAAiB;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
import type { TrendResult } from "./compute.js";
export declare function formatTrendTerminal(result: TrendResult): string;
//# sourceMappingURL=format-terminal.d.ts.map
{"version":3,"file":"format-terminal.d.ts","sourceRoot":"","sources":["../../../src/modules/trend/format-terminal.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,cAAc,CAAC;AAE3E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAoB/D"}
/**
* Terminal renderer for `sipcode trend`. Pure.
*
* Shows: title, plain-language verdict, sparkline, per-day stats footer.
* No color/emoji in the test path; we add chalk in the command handler.
*/
import { sparkline, sparklineStats } from "../stats/sparkline.js";
export function formatTrendTerminal(result) {
const lines = [];
const title = metricTitle(result.metric);
lines.push(`sipcode trend · ${title}`);
lines.push("");
const verdictLine = verdictSentence(result.verdict, result.metric, result.slopePerDay);
lines.push(` ${verdictLine}`);
lines.push("");
const values = result.days.map((d) => d.value);
const spark = sparkline(values, 30);
lines.push(` ${result.window.since} → ${result.window.until}`);
lines.push(` ${spark}`);
const stats = sparklineStats(values);
lines.push(` min ${fmtMetric(stats.min, result.metric)} · median ${fmtMetric(stats.median, result.metric)} · max ${fmtMetric(stats.max, result.metric)}`);
lines.push("");
lines.push(` total sessions across window: ${result.days.reduce((a, d) => a + d.sessions, 0)}`);
return lines.join("\n");
}
function metricTitle(m) {
switch (m) {
case "output-ratio":
return "output ratio (output tokens / total tokens, higher = leaner context)";
case "cost-per-session":
return "cost per session (USD, lower = better)";
case "recoverable-tokens-per-session":
return "recoverable tokens per session (duplicate reads, lower = better)";
}
}
function verdictSentence(verdict, metric, slopePerDay) {
switch (verdict) {
case "insufficient-data":
return "insufficient data — need at least 5 days with sessions to compute a trend.";
case "stable":
return "stable — no measurable change in the window.";
case "improving": {
const direction = metric === "output-ratio" ? "up" : "down";
return `improving — trending ${direction} ${fmtSlope(slopePerDay, metric)} per day.`;
}
case "regressing": {
const direction = metric === "output-ratio" ? "down" : "up";
return `regressing — trending ${direction} ${fmtSlope(slopePerDay, metric)} per day.`;
}
}
}
function fmtMetric(v, m) {
switch (m) {
case "output-ratio":
return `${(v * 100).toFixed(1)}%`;
case "cost-per-session":
return `$${v.toFixed(4)}`;
case "recoverable-tokens-per-session":
return v.toLocaleString("en-US");
}
}
function fmtSlope(slope, m) {
const abs = Math.abs(slope);
switch (m) {
case "output-ratio":
return `${(abs * 100).toFixed(2)} pp`;
case "cost-per-session":
return `$${abs.toFixed(4)}`;
case "recoverable-tokens-per-session":
return Math.round(abs).toLocaleString("en-US") + " tokens";
}
}
//# sourceMappingURL=format-terminal.js.map
{"version":3,"file":"format-terminal.js","sourceRoot":"","sources":["../../../src/modules/trend/format-terminal.ts"],"names":[],"mappings":"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"}
+35
-0

@@ -123,2 +123,37 @@ #!/usr/bin/env node

program
.command("today")
.description("Daily dashboard: spend so far + vs your N-day median (adaptive 30/14/7/3).")
.option("--json", "machine-readable output")
.option("--agent <id>", "claude-code | cursor | auto")
.action(async (opts) => {
const { runTodayCmd } = await import("./commands/today.js");
const r = await runTodayCmd(opts);
if (r?.exitCode)
process.exit(r.exitCode);
});
program
.command("forecast")
.description("Projected month-end spend with confidence band + last-month comparison.")
.option("--json", "machine-readable output")
.option("--agent <id>", "claude-code | cursor | auto")
.action(async (opts) => {
const { runForecastCmd } = await import("./commands/forecast.js");
const r = await runForecastCmd(opts);
if (r?.exitCode)
process.exit(r.exitCode);
});
program
.command("trend")
.description("Track ONE metric over time (output ratio, cost/session, recoverable tokens) — answers 'is this getting better?'.")
.option("--metric <name>", "output-ratio | cost-per-session | recoverable-tokens-per-session", "output-ratio")
.option("--since <window>", "time window: NNd | NNw | NNm (e.g. 30d, 4w, 3m)", "30d")
.option("--json", "machine-readable output")
.option("--agent <id>", "which agent to source transcripts from: claude-code | cursor | auto")
.action(async (opts) => {
const { runTrend } = await import("./commands/trend.js");
const r = await runTrend(opts);
if (r?.exitCode)
process.exit(r.exitCode);
});
program
.command("score")

@@ -125,0 +160,0 @@ .description("Audit how agent-friendly this codebase is (0-100, tiered badge).")

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACtC,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;KACpD,MAAM,CAAC,QAAQ,EAAE,6CAA6C,CAAC;KAC/D,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;KACvE,MAAM,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;KACpE,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,MAAM,CAAC,cAAc,EAAE,qEAAqE,CAAC;KAC7F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC;KACxD,MAAM,CAAC,WAAW,EAAE,gCAAgC,CAAC;KACrD,MAAM,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;KACpD,MAAM,CACL,qBAAqB,EACrB,kEAAkE,CACnE;KACA,MAAM,CAAC,cAAc,EAAE,oDAAoD,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,gCAAgC,CAAC;KACvD,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,SAAS,EAAE,wDAAwD,CAAC;KAC3E,MAAM,CAAC,kBAAkB,EAAE,uDAAuD,CAAC;KACnF,MAAM,CAAC,cAAc,EAAE,oDAAoD,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,QAAQ,CAAC,cAAc,EAAE,wCAAwC,CAAC;KAClE,MAAM,CAAC,aAAa,EAAE,4CAA4C,CAAC;KACnE,MAAM,CAAC,YAAY,EAAE,mCAAmC,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;KACvE,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,qEAAqE,CAAC;KAC7F,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAChC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,IAAI,MAAM,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4EAA4E,CAAC;KACzF,MAAM,CAAC,WAAW,EAAE,4DAA4D,CAAC;KACjF,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC3E,MAAM,CAAC,eAAe,EAAE,oDAAoD,CAAC;KAC7E,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;KAC1D,MAAM,CAAC,cAAc,EAAE,oDAAoD,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uEAAuE,CAAC;KACpF,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;KACrD,MAAM,CAAC,eAAe,EAAE,sDAAsD,CAAC;KAC/E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,wDAAwD,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,CAAC;KAC7E,MAAM,CAAC,cAAc,EAAE,4EAA4E,CAAC;KACpG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,EAAE,KAAK,CAAC;KACnF,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;KACvE,MAAM,CAAC,QAAQ,EAAE,6CAA6C,CAAC;KAC/D,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,kBAAkB,EAAE,8BAA8B,EAAE,MAAM,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,oCAAoC,EAAE,GAAG,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,qEAAqE,CAAC;KAC7F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,MAAM,CAAC,SAAS,EAAE,sDAAsD,CAAC;KACzE,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,4EAA4E,CAAC;KACzF,MAAM,CAAC,WAAW,EAAE,gFAAgF,CAAC;KACrG,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC3E,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;KAC1D,MAAM,CAAC,SAAS,EAAE,+DAA+D,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yHAAyH,CAAC;KACtI,MAAM,CAAC,WAAW,EAAE,mEAAmE,CAAC;KACxF,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;KACvE,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;KAC1D,MAAM,CAAC,SAAS,EAAE,gCAAgC,CAAC;KACnD,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mJAAmJ,CAAC;KAChK,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,YAAY,EAAE,sEAAsE,CAAC;KAC5F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAChE,4EAA4E;IAC5E,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;QACjB,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK;KAC9B,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,oEAAoE,CAAC;KACjF,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;KACxD,MAAM,CAAC,QAAQ,EAAE,yCAAyC,CAAC;KAC3D,MAAM,CAAC,SAAS,EAAE,0CAA0C,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,yFAAyF,CAAC;KAC9G,MAAM,CAAC,QAAQ,EAAE,wFAAwF,CAAC;KAC1G,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,gBAAgB,EAAE,kEAAkE,CAAC;KAC5F,MAAM,CAAC,UAAU,EAAE,oFAAoF,CAAC;KACxG,MAAM,CAAC,QAAQ,EAAE,wIAAwI,CAAC;KAC1J,MAAM,CAAC,gBAAgB,EAAE,0DAA0D,CAAC;KACpF,MAAM,CAAC,2BAA2B,EAAE,kDAAkD,CAAC;KACvF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4FAA4F,CAAC;KACzG,MAAM,CAAC,sBAAsB,EAAE,qEAAqE,CAAC;KACrG,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,qEAAqE,CAAC;KAC7F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;AAED,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,YAAiB,EACvB,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,WAAW,CAAC,CA2GtB"}
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;AAED,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,YAAiB,EACvB,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,WAAW,CAAC,CA4GtB"}

@@ -20,3 +20,3 @@ /**

import { parseSettings, renderSettings } from "../modules/hygiene/settingsJson.js";
import { installProxyHook, uninstallProxyHook, proxyHookScriptPath, runRewriterModuleUrl, hookReadDedupModuleUrl, } from "../modules/proxy/install.js";
import { installProxyHook, uninstallProxyHook, proxyHookScriptPath, runRewriterModuleUrl, hookReadDedupModuleUrl, hookAstReadModuleUrl, } from "../modules/proxy/install.js";
import { generateProxyHookScript } from "../modules/proxy/proxyHookScript.js";

@@ -85,3 +85,3 @@ import { readReport } from "../modules/proxy/stats-store.js";

const nextSettings = renderSettings(nextObj);
const newScript = generateProxyHookScript(runRewriterModuleUrl(), hookReadDedupModuleUrl());
const newScript = generateProxyHookScript(runRewriterModuleUrl(), hookReadDedupModuleUrl(), hookAstReadModuleUrl());
const existingScript = await readFile(scriptPath);

@@ -88,0 +88,0 @@ const settingsChanged = existingRaw !== nextSettings;

@@ -1,1 +0,1 @@

{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,KAAK,iBAAiB,CAAC;AACvB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAuBxE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAqB,EAAE,EACvB,OAAkB,EAAE;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ;QACb,CAAC,KAAK,EAAE,CAAS,EAAE,EAAE;YACnB,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,MAAM,SAAS,GACb,IAAI,CAAC,SAAS;QACd,CAAC,KAAK,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE;YAC9B,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,MAAM,UAAU,GACd,IAAI,CAAC,UAAU;QACf,CAAC,KAAK,EAAE,CAAS,EAAE,EAAE;YACnB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IAEL,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAE/D,YAAY;IACZ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAChF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE1C,gBAAgB;IAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CACJ,OAAO;gBACL,CAAC,CAAC,mDAAmD,YAAY,eAAe,UAAU,EAAE;gBAC5F,CAAC,CAAC,gCAAgC,CACrC,CAAC;YACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACzC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,uBAAuB,CACvC,oBAAoB,EAAE,EACtB,sBAAsB,EAAE,CACzB,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,WAAW,KAAK,YAAY,CAAC;QACrD,MAAM,aAAa,GAAG,cAAc,KAAK,SAAS,CAAC;QAEnD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,MAAM,CAAC,+CAA+C,CAAC,CAAC;gBACxD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzB,CAAC;YACD,MAAM,CAAC,8BAA8B,CAAC,CAAC;YACvC,IAAI,aAAa;gBAAE,MAAM,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;YACnE,IAAI,eAAe;gBAAE,MAAM,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;YACxE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC3C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,aAAa;YAAE,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1D,IAAI,eAAe;YAAE,MAAM,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,CACJ,8FAA8F,CAC/F,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnE,MAAM,CACJ,SAAS;QACP,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,8DAA8D,CACnE,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACzB,CAAC"}
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"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"}

@@ -299,2 +299,20 @@ #!/usr/bin/env node

}
async function toolGetTodaySummary() {
const { runTodayCmd } = await import("../commands/today.js");
const buf = [];
const errs = [];
const r = await runTodayCmd({ json: true }, { stdout: (s) => buf.push(s), stderr: (s) => errs.push(s) });
if (r.exitCode !== 0)
return fail(errs.join("\n") || "today failed");
return ok(buf.join("\n"));
}
async function toolForecastMonthlySpend() {
const { runForecastCmd } = await import("../commands/forecast.js");
const buf = [];
const errs = [];
const r = await runForecastCmd({ json: true }, { stdout: (s) => buf.push(s), stderr: (s) => errs.push(s) });
if (r.exitCode !== 0)
return fail(errs.join("\n") || "forecast failed");
return ok(buf.join("\n"));
}
async function toolGetAgentScore(cwd) {

@@ -492,2 +510,20 @@ const { runScoreCmd } = await import("../commands/score.js");

{
name: "get_today_summary",
description: "Daily dashboard — answers 'how am I doing today?' Returns spend so far today, sessions count, output ratio, and a comparison to the user's adaptive N-day median (cascades 30→14→7→3 based on available history). Includes a one-paragraph headline plus structured fields. Status field: ok | no-sessions-today | no-baseline | no-data. Use this when the user asks 'how am I doing today?', 'what have I spent today?', or 'how's my Claude usage looking?'.",
inputSchema: {
type: "object",
properties: {},
},
schema: z.object({}),
},
{
name: "forecast_monthly_spend",
description: "Projects month-end Claude spend at the user's current trajectory (last 14 or 7 days, adaptive). Returns avg + median daily spend, projected month-end total with an honest confidence band (±1σ daily-spend stdev, capped at ±20% of projection), spend-so-far this month, and an optional comparison to last month's actual spend. Status field: ok | insufficient-data | near-month-end | no-recent-activity | no-data. Use this when the user asks 'how much will I spend this month?', 'am I on track?', or 'how does this month compare to last?'.",
inputSchema: {
type: "object",
properties: {},
},
schema: z.object({}),
},
{
name: "get_drift_report",

@@ -592,2 +628,8 @@ description: "Detect context/cost drift: whether the user's recent Claude Code sessions regressed (cost/turn up, cache-hit-rate down, re-read waste up) vs their own baseline. Returns JSON. Use when the user asks 'is my agent getting more expensive / sloppier?' or 'has anything regressed?'.",

}
case "get_today_summary": {
return await withTimeout(name, 10_000, toolGetTodaySummary());
}
case "forecast_monthly_spend": {
return await withTimeout(name, 10_000, toolForecastMonthlySpend());
}
default:

@@ -594,0 +636,0 @@ return fail(`Tool ${name} is registered but has no handler.`);

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}

@@ -14,2 +14,4 @@ import { HOOK_PROXY_ID } from "../hygiene/types.js";

export declare function hookReadDedupModuleUrl(): string;
/** `file://` URL of the compiled `hookAstRead.js`. v1.7.0+. */
export declare function hookAstReadModuleUrl(): string;
/** Add (or replace) the proxy PreToolUse hook entry. Idempotent. */

@@ -16,0 +18,0 @@ export declare function installProxyHook(settings: JsonObj, scriptPath: string): JsonObj;

@@ -1,1 +0,1 @@

{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/install.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvC,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO/E;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE7D"}
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/install.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvC,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO/E;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE7D"}

@@ -28,2 +28,6 @@ /**

}
/** `file://` URL of the compiled `hookAstRead.js`. v1.7.0+. */
export function hookAstReadModuleUrl() {
return new URL("./hookAstRead.js", import.meta.url).href;
}
/** Add (or replace) the proxy PreToolUse hook entry. Idempotent. */

@@ -30,0 +34,0 @@ export function installProxyHook(settings, scriptPath) {

@@ -1,1 +0,1 @@

{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/modules/proxy/install.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,CAAC;AAIzB,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,QAAiB,EAAE,UAAkB;IACpE,OAAO,iBAAiB,CAAC,QAAQ,EAAE;QACjC,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,GAAG;QACZ,UAAU;QACV,EAAE,EAAE,aAAa;KAClB,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,QAAiB;IAClD,OAAO,kBAAkB,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,CAAC"}
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/modules/proxy/install.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,CAAC;AAIzB,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,QAAiB,EAAE,UAAkB;IACpE,OAAO,iBAAiB,CAAC,QAAQ,EAAE;QACjC,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,GAAG;QACZ,UAAU;QACV,EAAE,EAAE,aAAa;KAClB,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,QAAiB;IAClD,OAAO,kBAAkB,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,CAAC"}

@@ -16,11 +16,12 @@ /**

/** Marker used to detect/upgrade/uninstall a Sipcode-generated hook safely. */
export declare const SIPCODE_PROXY_HOOK_SIGNATURE = "SIPCODE_PROXY_HOOK_SIGNATURE/v3";
export declare const SIPCODE_PROXY_HOOK_SIGNATURE = "SIPCODE_PROXY_HOOK_SIGNATURE/v4";
/**
* @param runRewriterUrl absolute `file://` URL to the compiled `runRewriter.js`.
* @param hookReadDedupUrl absolute `file://` URL to the compiled `hookReadDedup.js`.
* Added in v3 (v1.6.6). Routes Read tool calls through
* the re-read dedup orchestrator before falling back
* to the rewriter registry.
* @param hookReadDedupUrl absolute `file://` URL to the compiled `hookReadDedup.js` (v3).
* @param hookAstReadUrl absolute `file://` URL to the compiled `hookAstRead.js` (v4, v1.7.0+).
* AST-aware symbol trim for TS/JS files. Records search
* signals on every Grep/Glob/Bash call and uses them to
* inject offset+limit on subsequent Read calls.
*/
export declare function generateProxyHookScript(runRewriterUrl: string, hookReadDedupUrl: string): string;
export declare function generateProxyHookScript(runRewriterUrl: string, hookReadDedupUrl: string, hookAstReadUrl: string): string;
//# sourceMappingURL=proxyHookScript.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"proxyHookScript.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/proxyHookScript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,oCAAoC,CAAC;AAE9E;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CA4ER"}
{"version":3,"file":"proxyHookScript.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/proxyHookScript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,oCAAoC,CAAC;AAE9E;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,GACrB,MAAM,CAmGR"}

@@ -16,11 +16,12 @@ /**

/** Marker used to detect/upgrade/uninstall a Sipcode-generated hook safely. */
export const SIPCODE_PROXY_HOOK_SIGNATURE = "SIPCODE_PROXY_HOOK_SIGNATURE/v3";
export const SIPCODE_PROXY_HOOK_SIGNATURE = "SIPCODE_PROXY_HOOK_SIGNATURE/v4";
/**
* @param runRewriterUrl absolute `file://` URL to the compiled `runRewriter.js`.
* @param hookReadDedupUrl absolute `file://` URL to the compiled `hookReadDedup.js`.
* Added in v3 (v1.6.6). Routes Read tool calls through
* the re-read dedup orchestrator before falling back
* to the rewriter registry.
* @param hookReadDedupUrl absolute `file://` URL to the compiled `hookReadDedup.js` (v3).
* @param hookAstReadUrl absolute `file://` URL to the compiled `hookAstRead.js` (v4, v1.7.0+).
* AST-aware symbol trim for TS/JS files. Records search
* signals on every Grep/Glob/Bash call and uses them to
* inject offset+limit on subsequent Read calls.
*/
export function generateProxyHookScript(runRewriterUrl, hookReadDedupUrl) {
export function generateProxyHookScript(runRewriterUrl, hookReadDedupUrl, hookAstReadUrl) {
return `#!/usr/bin/env node

@@ -30,8 +31,6 @@ // ${SIPCODE_PROXY_HOOK_SIGNATURE}

//
// Reads a PreToolUse event on stdin. Two paths:
// 1) tool_name === "Read" → ask hookReadDedup whether the file is unchanged
// since an earlier turn in this session; if so, emit a deny+reason
// output so Claude knows the content is already in its context.
// 2) anything else → ask runRewriter whether the input should be rewritten
// to produce naturally-compact output; if so, emit updatedInput.
// PreToolUse routing:
// - All calls: record search signal (Grep/Glob/Bash grep patterns) for AST relevance.
// - Read calls: try AST trim first; if no trim, try re-read dedup.
// - Non-Read calls: try the rewriter registry.
// Never throws — any failure degrades to a no-op so Claude Code is never disrupted.

@@ -44,2 +43,4 @@ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";

let hookReadDedup;
let hookAstRead;
let recordSignal;
try {

@@ -55,2 +56,8 @@ ({ runRewriter } = await import(${JSON.stringify(runRewriterUrl)}));

}
try {
({ hookAstRead, recordSignal } = await import(${JSON.stringify(hookAstReadUrl)}));
} catch {
hookAstRead = null;
recordSignal = null;
}

@@ -71,10 +78,27 @@ let raw = "";

// Record search signal on every applicable tool call (Grep/Glob/Bash grep).
// Fire-and-forget; failures swallowed inside recordSignal.
if (input && recordSignal) {
try {
await recordSignal(input, homedir());
} catch {}
}
let result = null;
if (input && input.tool_name === "Read" && hookReadDedup) {
try {
result = await hookReadDedup(input, homedir());
} catch {
result = null;
if (input && input.tool_name === "Read") {
if (hookAstRead) {
try {
result = await hookAstRead(input, homedir());
} catch {
result = null;
}
}
if ((!result || !result.hookOutput) && hookReadDedup) {
try {
result = await hookReadDedup(input, homedir());
} catch {
result = null;
}
}
}

@@ -81,0 +105,0 @@

@@ -1,1 +0,1 @@

{"version":3,"file":"proxyHookScript.js","sourceRoot":"","sources":["../../../src/modules/proxy/proxyHookScript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,4BAA4B,GAAG,iCAAiC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,cAAsB,EACtB,gBAAwB;IAExB,OAAO;KACJ,4BAA4B;;;;;;;;;;;;;;;;;oCAiBG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;;sCAK5B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDrE,CAAC;AACF,CAAC"}
{"version":3,"file":"proxyHookScript.js","sourceRoot":"","sources":["../../../src/modules/proxy/proxyHookScript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,4BAA4B,GAAG,iCAAiC,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,cAAsB,EACtB,gBAAwB,EACxB,cAAsB;IAEtB,OAAO;KACJ,4BAA4B;;;;;;;;;;;;;;;;;oCAiBG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;;sCAK5B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;;kDAKpB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE/E,CAAC;AACF,CAAC"}

@@ -16,6 +16,16 @@ export interface ProxyEstimate {

*
* Also counts B5 dedup credit: when the same `Read(file_path)` appears twice
* or more in the same transcript, each subsequent re-read counts as a
* dedup-saved 2000 tokens. The heuristic without this was undercounting the
* proxy's biggest single feature (B5, shipped v1.6.6).
* Credits three classes of savings:
* - Registry rewriters (git/npm/grep/cat/etc.) — actual savedTokensEstimate
* - B5 dedup (re-read of same file_path) — DEDUP_TOKENS_PER_REREAD
* - B3 AST trim (first read of an AST-eligible file after any prior Grep) —
* AST_TRIM_TOKENS_PER_HIT
*
* The B3 credit is conservative: we only count a Read as AST-eligible if
* (a) it's the FIRST read of that file (so we don't double-count with dedup),
* (b) the file extension is TS/JS/Python, and (c) any Grep has fired earlier
* in the same transcript (the signal cache would have a pattern to match).
* We do NOT verify that the grep pattern actually matches a symbol in the
* file — that requires reading the file, which violates the pure-walker
* contract this function maintains. The result is a credible upper bound,
* not a measured number, which is the contract `--vs-rtk` advertises.
*/

@@ -22,0 +32,0 @@ export declare function estimateProxyOverToolCalls(calls: ReadonlyArray<{

@@ -1,1 +0,1 @@

{"version":3,"file":"vsRtk.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/vsRtk.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAUD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GACvE,aAAa,CA8Bf;AAMD,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,CA2BtE"}
{"version":3,"file":"vsRtk.d.ts","sourceRoot":"","sources":["../../../src/modules/proxy/vsRtk.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAoBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,GACvE,aAAa,CAiDf;AAMD,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,CA2BtE"}

@@ -17,13 +17,31 @@ /**

* Per-re-read estimated tokens. Conservative: a typical source file in the
* corpus is ~6-15 KB → ~1500-3750 tokens. We credit 2000 per dedup. Matches
* the savedTokensEstimate floor used by other rewriters so the preview stays
* internally consistent.
* corpus is ~6-15 KB → ~1500-3750 tokens. We credit 2000 per dedup.
*/
const DEDUP_TOKENS_PER_REREAD = 2000;
/**
* Per-AST-trim estimated tokens. A first read of a TS/JS/Python file that
* comes AFTER a Grep is the textbook B3 scenario: AST extracts the symbol
* matching the grep pattern, returns just that symbol's line range + buffer.
* Conservative: typical file is ~3-8 KB, symbol slice ~500-1500 tokens kept,
* so saving ~2500-3500 tokens. We credit 3000.
*/
const AST_TRIM_TOKENS_PER_HIT = 3000;
/** File extensions where AST trim can fire. */
const AST_ELIGIBLE_RE = /\.(ts|tsx|js|jsx|mjs|cjs|mts|cts|pyi?)$/i;
/** Replay the rewriter registry over a transcript's tool calls. Pure.
*
* Also counts B5 dedup credit: when the same `Read(file_path)` appears twice
* or more in the same transcript, each subsequent re-read counts as a
* dedup-saved 2000 tokens. The heuristic without this was undercounting the
* proxy's biggest single feature (B5, shipped v1.6.6).
* Credits three classes of savings:
* - Registry rewriters (git/npm/grep/cat/etc.) — actual savedTokensEstimate
* - B5 dedup (re-read of same file_path) — DEDUP_TOKENS_PER_REREAD
* - B3 AST trim (first read of an AST-eligible file after any prior Grep) —
* AST_TRIM_TOKENS_PER_HIT
*
* The B3 credit is conservative: we only count a Read as AST-eligible if
* (a) it's the FIRST read of that file (so we don't double-count with dedup),
* (b) the file extension is TS/JS/Python, and (c) any Grep has fired earlier
* in the same transcript (the signal cache would have a pattern to match).
* We do NOT verify that the grep pattern actually matches a symbol in the
* file — that requires reading the file, which violates the pure-walker
* contract this function maintains. The result is a credible upper bound,
* not a measured number, which is the contract `--vs-rtk` advertises.
*/

@@ -35,5 +53,18 @@ export function estimateProxyOverToolCalls(calls) {

const seenReadFiles = new Set();
let anyGrepSeen = false;
for (const c of calls) {
toolCalls++;
// B5 dedup credit (pure detection: file_path seen before in this transcript).
// Track grep activity for B3 credit eligibility.
if (c.name === "Grep" && typeof c.input === "object" && c.input !== null) {
const pat = c.input.pattern;
if (typeof pat === "string" && pat.length > 0)
anyGrepSeen = true;
}
else if (c.name === "Bash" && typeof c.input === "object" && c.input !== null) {
const cmd = c.input.command;
if (typeof cmd === "string" && /^\s*(?:grep|rg|ag)\b/.test(cmd)) {
anyGrepSeen = true;
}
}
// Read tool: track first-read for B3 credit, re-reads for B5 credit.
if (c.name === "Read" && typeof c.input === "object" && c.input !== null) {

@@ -48,2 +79,7 @@ const fp = c.input.file_path;

seenReadFiles.add(fp);
// B3 AST trim credit (first read of an AST-eligible file post-grep).
if (anyGrepSeen && AST_ELIGIBLE_RE.test(fp)) {
rewrites++;
estSavedTokens += AST_TRIM_TOKENS_PER_HIT;
}
}

@@ -50,0 +86,0 @@ continue;

@@ -1,1 +0,1 @@

{"version":3,"file":"vsRtk.js","sourceRoot":"","sources":["../../../src/modules/proxy/vsRtk.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"vsRtk.js","sourceRoot":"","sources":["../../../src/modules/proxy/vsRtk.ts"],"names":[],"mappings":"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"}
{
"name": "sipcode",
"version": "1.6.8",
"version": "1.6.10",
"description": "Sip your tokens. Don't gulp them. — Unified token optimization for AI coding agents.",

@@ -5,0 +5,0 @@ "keywords": [

@@ -7,3 +7,3 @@ <div align="center">

### [**Visit the site →**](https://anuj7411.github.io/sipcode/) · [npm](https://www.npmjs.com/package/sipcode) · [benchmark methodology](benchmark/METHODOLOGY.md)
### [**Visit the site →**](https://anuj7411.github.io/sipcode/) · [npm](https://www.npmjs.com/package/sipcode) · [benchmark methodology](benchmark/METHODOLOGY.md) · [changelog](CHANGELOG.md)

@@ -10,0 +10,0 @@ [![npm version](https://img.shields.io/npm/v/sipcode.svg?color=5B4FCF&label=npm)](https://www.npmjs.com/package/sipcode)