mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-24 09:01:27 +08:00
- #2290 suggest-compact: honor ECC_CONTEXT_WINDOW_TOKENS / CLAUDE_CODE_AUTO_COMPACT_WINDOW so 400k-window models (Opus 4.x) no longer report ~double context usage; add override + isolation tests in transcript-context.test.js. - #2282 install: bare-language syntax is legacy-only by design, but the error now distinguishes a supported-but-wrong-mode target (gemini/codex/…) from a genuinely unknown one and points to --profile/--modules/--skills. - #2276 cost-report: the command + cost-tracking skill targeted a SQLite DB no tracker writes. Repoint both at the real ~/.claude/metrics/costs.jsonl (JSONL, estimated_cost_usd), reduce cumulative-per-session snapshots to latest-per-session, and use node instead of sqlite3 for cross-platform support. - #2272 gateguard: make the 'confirm no existing file' checklist item tool-agnostic (Glob/Grep or find/grep via Bash) so hosts without a Glob tool don't get a dead tool call. Full suite 2839/2839; lint green.
This commit is contained in:
@@ -98,9 +98,7 @@ function readLatestContextTokens(transcriptPath, options = {}) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const tailBytes = Number.isInteger(options.tailBytes) && options.tailBytes > 0
|
||||
? options.tailBytes
|
||||
: DEFAULT_TRANSCRIPT_TAIL_BYTES;
|
||||
const tailBytes = Number.isInteger(options.tailBytes) && options.tailBytes > 0 ? options.tailBytes : DEFAULT_TRANSCRIPT_TAIL_BYTES;
|
||||
|
||||
const tail = readFileTail(transcriptPath, tailBytes);
|
||||
if (!tail) {
|
||||
@@ -124,9 +122,7 @@ function readLatestContextTokens(transcriptPath, options = {}) {
|
||||
|
||||
const tokens = extractUsageTokens(record);
|
||||
if (tokens > 0) {
|
||||
const model = record.message && typeof record.message.model === 'string'
|
||||
? record.message.model
|
||||
: '';
|
||||
const model = record.message && typeof record.message.model === 'string' ? record.message.model : '';
|
||||
return { tokens, model };
|
||||
}
|
||||
}
|
||||
@@ -141,6 +137,15 @@ function readLatestContextTokens(transcriptPath, options = {}) {
|
||||
* suffix); otherwise the standard 200k window.
|
||||
*/
|
||||
function resolveContextWindowTokens(tokens, model) {
|
||||
// Explicit window override wins: 400k models (e.g. Opus 4.x) match neither the
|
||||
// 200k default nor the 1M marker and would otherwise report ~double usage (#2290).
|
||||
// Honor ECC's own knob and Claude Code's native CLAUDE_CODE_AUTO_COMPACT_WINDOW.
|
||||
const env = (typeof process !== 'undefined' && process.env) || {};
|
||||
const envWindow = Number.parseInt(env.ECC_CONTEXT_WINDOW_TOKENS || env.CLAUDE_CODE_AUTO_COMPACT_WINDOW || '', 10);
|
||||
if (Number.isInteger(envWindow) && envWindow > 0) {
|
||||
return envWindow;
|
||||
}
|
||||
|
||||
if (typeof model === 'string' && model.includes(LARGE_WINDOW_MODEL_MARKER)) {
|
||||
return LARGE_CONTEXT_WINDOW_TOKENS;
|
||||
}
|
||||
@@ -169,9 +174,7 @@ function resolveContextThreshold(env, windowTokens) {
|
||||
}
|
||||
}
|
||||
|
||||
return windowTokens >= LARGE_CONTEXT_WINDOW_TOKENS
|
||||
? DEFAULT_CONTEXT_THRESHOLD_LARGE
|
||||
: DEFAULT_CONTEXT_THRESHOLD_STANDARD;
|
||||
return windowTokens >= LARGE_CONTEXT_WINDOW_TOKENS ? DEFAULT_CONTEXT_THRESHOLD_LARGE : DEFAULT_CONTEXT_THRESHOLD_STANDARD;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -181,9 +184,7 @@ function resolveContextThreshold(env, windowTokens) {
|
||||
function resolveContextInterval(env) {
|
||||
const raw = env && env.COMPACT_CONTEXT_INTERVAL;
|
||||
const parsed = Number.parseInt(raw, 10);
|
||||
return Number.isInteger(parsed) && parsed > 0 && parsed <= MAX_TOKEN_SETTING
|
||||
? parsed
|
||||
: DEFAULT_CONTEXT_INTERVAL_TOKENS;
|
||||
return Number.isInteger(parsed) && parsed > 0 && parsed <= MAX_TOKEN_SETTING ? parsed : DEFAULT_CONTEXT_INTERVAL_TOKENS;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -205,9 +206,7 @@ function computeContextBucket(tokens, threshold, interval) {
|
||||
* Human-readable label for a context window size (e.g. "200k", "1M").
|
||||
*/
|
||||
function formatWindowLabel(windowTokens) {
|
||||
return windowTokens >= LARGE_CONTEXT_WINDOW_TOKENS
|
||||
? '1M'
|
||||
: `${Math.round(windowTokens / 1000)}k`;
|
||||
return windowTokens >= LARGE_CONTEXT_WINDOW_TOKENS ? '1M' : `${Math.round(windowTokens / 1000)}k`;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
Reference in New Issue
Block a user