@loreai/core 0.20.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@ export declare const LoreConfig: z.ZodObject<{
15
15
  ltm: z.ZodDefault<z.ZodNumber>;
16
16
  targetCacheReadCostPerTurn: z.ZodDefault<z.ZodNumber>;
17
17
  maxLayer0Tokens: z.ZodOptional<z.ZodNumber>;
18
- targetBustCost: z.ZodDefault<z.ZodNumber>;
18
+ targetBustCost: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
19
19
  maxContextTokens: z.ZodOptional<z.ZodNumber>;
20
20
  }, z.core.$strip>>;
21
21
  idleResumeMinutes: z.ZodDefault<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8OrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAIpD,wBAAgB,MAAM,IAAI,UAAU,CAEnC;AAED,wBAAsB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAajE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsOrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAIpD,wBAAgB,MAAM,IAAI,UAAU,CAEnC;AAED,wBAAsB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAajE"}
@@ -1,23 +1,44 @@
1
1
  import type { LoreMessageWithParts } from "./types";
2
2
  type MessageWithParts = LoreMessageWithParts;
3
- /** Compute the context ceiling from a per-bust cost target and cache-write price per token. */
4
- export declare function computeContextCap(targetBustCost: number, cacheWriteCostPerToken: number): number;
5
- /** Set the static context ceiling. Called by the host adapter after computing
6
- * from model pricing. The effective per-session cap may be lower due to
7
- * dynamic adaptation (bust rate EMA). */
8
- export declare function setMaxContextTokens(tokens: number): void;
9
- /** Returns the current static ceiling (for external callers / tests). */
10
- export declare function getMaxContextTokens(): number;
11
- /**
12
- * Feed cache usage data after each API response. Updates the per-session
13
- * bust rate EMA and inter-bust interval, which adjust the effective context
14
- * cap dynamically.
3
+ /**
4
+ * Set cache pricing for the current model. Called by the host adapter after
5
+ * looking up model cost data. Required for tier-based bust-vs-continue
6
+ * decisions. When not set (both 0), tier decisions fall back to conservative
7
+ * defaults: always compress at tier boundaries.
8
+ */
9
+ export declare function setCachePricing(writeCost: number, readCost: number): void;
10
+ /** Returns current pricing (for tests). */
11
+ export declare function getCachePricing(): {
12
+ write: number;
13
+ read: number;
14
+ };
15
+ /**
16
+ * Decide whether compression is economical at a tier boundary.
17
+ *
18
+ * @param currentTokens - expected input tokens if we stay at the current layer
19
+ * @param compressedTokens - expected tokens after compression
20
+ * @param consecutiveBusts - how many turns in a row we've busted the cache
21
+ * @param threshold - bust cost must be < threshold × continue cost to compress (default 0.85)
22
+ * @returns true if compression is worth it
23
+ */
24
+ export declare function shouldCompress(currentTokens: number, compressedTokens: number, consecutiveBusts: number, threshold?: number): boolean;
25
+ /**
26
+ * Determine which tier the given token count falls into.
27
+ * Returns 0, 1, or 2 corresponding to the tier index.
28
+ */
29
+ export declare function getTier(tokens: number): number;
30
+ /**
31
+ * Record cache usage from an API response. Tracks consecutive busts for
32
+ * the rolling bust detection used by shouldCompress().
33
+ *
34
+ * A "bust" is when cache_write > 50% of total input tokens.
15
35
  *
16
36
  * @param cacheWrite - cache_creation_input_tokens from the API response
17
37
  * @param cacheRead - cache_read_input_tokens from the API response
38
+ * @param inputTokens - total input_tokens from the API response (includes uncached)
18
39
  * @param sessionID - session that produced this response
19
40
  */
20
- export declare function updateBustRate(cacheWrite: number, cacheRead: number, sessionID?: string, lastLayer?: number): void;
41
+ export declare function recordCacheUsage(cacheWrite: number, cacheRead: number, inputTokens: number, sessionID?: string): void;
21
42
  type DistillationSnapshot = {
22
43
  /** Cached distillation rows from the most recent DB read */
23
44
  rows: Distillation[];
@@ -141,9 +162,7 @@ export declare function inspectSessionState(sessionID: string): {
141
162
  postIdleCompact: boolean;
142
163
  lastTurnAt: number;
143
164
  distillationSnapshot: DistillationSnapshot | null;
144
- bustRateEMA: number;
145
- dynamicContextCap: number;
146
- consecutiveLayer4: number;
165
+ consecutiveBusts: number;
147
166
  } | null;
148
167
  /**
149
168
  * For testing only — set the session's lastTurnAt field. Used to simulate
@@ -218,6 +237,10 @@ export type TransformResult = {
218
237
  distilledBudget: number;
219
238
  rawBudget: number;
220
239
  refreshLtm: boolean;
240
+ /** When set, the conversation is growing unsustainably — 5+ consecutive
241
+ * cache busts detected. The pipeline should inject a warning message
242
+ * advising the user to compact or start a new conversation. */
243
+ unsustainable?: boolean;
221
244
  };
222
245
  export declare function needsUrgentDistillation(sessionID: string): boolean;
223
246
  export declare function transform(input: {
@@ -1 +1 @@
1
- {"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../src/gradient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../src/gradient.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export { load, config, type LoreConfig } from "./config";
18
18
  export { db, dbPath, ensureProject, getLastImportAt, setLastImportAt, isFirstRun, projectId, projectName, projectPath, resolveProjectByRemoteOrPath, mergeProjectInternal, loadForceMinLayer, saveForceMinLayer, saveSessionCosts, loadSessionCosts, loadAllSessionCosts, type SessionCostSnapshot, saveSessionTracking, loadSessionTracking, loadHeaderSessionIndex, type SessionTrackingState, type LoadedSessionTracking, getKV, setKV, getMeta, setMeta, getInstanceId, close, } from "./db";
19
19
  export { normalizeRemoteUrl, getGitRemote, clearGitRemoteCache } from "./git";
20
20
  export { enableHostedMode, isHostedMode } from "./hosted";
21
- export { transform, setModelLimits, setMaxLayer0Tokens, computeLayer0Cap, setMaxContextTokens, computeContextCap, getMaxContextTokens, updateBustRate, needsUrgentDistillation, calibrate, setLtmTokens, getLtmTokens, getLtmBudget, setForceMinLayer, getLastTransformedCount, getLastTransformEstimate, getLastLayer, toolStripAnnotation, onIdleResume, getLastTurnAt, consumeCameOutOfIdle, saveGradientState, setLastTurnAtForTest, inspectSessionState, } from "./gradient";
21
+ export { transform, setModelLimits, setMaxLayer0Tokens, computeLayer0Cap, setCachePricing, getCachePricing, shouldCompress, getTier, recordCacheUsage, needsUrgentDistillation, calibrate, setLtmTokens, getLtmTokens, getLtmBudget, setForceMinLayer, getLastTransformedCount, getLastTransformEstimate, getLastLayer, toolStripAnnotation, onIdleResume, getLastTurnAt, consumeCameOutOfIdle, saveGradientState, setLastTurnAtForTest, inspectSessionState, } from "./gradient";
22
22
  export { formatKnowledge, formatDistillations, DISTILLATION_SYSTEM, distillationUser, RECURSIVE_SYSTEM, recursiveUser, CURATOR_SYSTEM, curatorUser, CONSOLIDATION_SYSTEM, consolidationUser, QUERY_EXPANSION_SYSTEM, COMPACT_SUMMARY_TEMPLATE, buildCompactPrompt, } from "./prompt";
23
23
  export { shouldImport, importFromFile, exportToFile, exportLoreFile, importLoreFile, shouldImportLoreFile, loreFileExists, clearLoreFileCache, LORE_FILE, } from "./agents-file";
24
24
  export { workerSessionIDs, isWorkerSession } from "./worker";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -26629,19 +26629,11 @@ var LoreConfig = external_exports.object({
26629
26629
  * cost-aware formula from targetCacheReadCostPerTurn. 0 = disabled
26630
26630
  * (no cap, use full context). Default: undefined (use cost-aware auto). */
26631
26631
  maxLayer0Tokens: external_exports.number().min(0).optional(),
26632
- /** Target maximum cost (USD) for a single full cache bust (cold write of
26633
- * the entire context). Controls the total-context token cap at layer 1+:
26634
- * maxContextTokens = targetBustCost / cacheWriteCostPerToken.
26635
- * For opus-4-6 ($6.25/M write): $1.00 → 160K cap.
26636
- * For sonnet-4 ($3.75/M write): $1.00 → 267K (effectively uncapped at 200K).
26637
- * The cap is further adjusted dynamically per session based on observed
26638
- * bust rate (EMA) and break frequency. Default: 1.00. Set to 0 to disable. */
26639
- targetBustCost: external_exports.number().min(0).default(1),
26640
- /** Direct override for the total-context token cap at layer 1+. When set,
26641
- * bypasses the cost-aware formula from targetBustCost. 0 = disabled.
26642
- * Default: undefined (use cost-aware auto). */
26632
+ /** @deprecated Ignored. Tier-based bust-vs-continue replaces static cap. */
26633
+ targetBustCost: external_exports.number().min(0).default(1).optional(),
26634
+ /** @deprecated Ignored. Tier-based bust-vs-continue replaces static cap. */
26643
26635
  maxContextTokens: external_exports.number().min(0).optional()
26644
- }).default({ distilled: 0.25, raw: 0.4, output: 0.25, ltm: 0.05, targetCacheReadCostPerTurn: 0.1, targetBustCost: 1 }),
26636
+ }).default({ distilled: 0.25, raw: 0.4, output: 0.25, ltm: 0.05, targetCacheReadCostPerTurn: 0.1 }),
26645
26637
  /**
26646
26638
  * Cold-cache idle-resume handling.
26647
26639
  *
@@ -29953,70 +29945,41 @@ function estimateMessage(msg) {
29953
29945
  }
29954
29946
  var contextLimit = 2e5;
29955
29947
  var outputReserved = 32e3;
29956
- var maxLayer0Tokens = 0;
29957
- var MIN_LAYER0_FLOOR = 4e4;
29958
- var maxContextTokensCeiling = 0;
29959
- var MIN_CONTEXT_FLOOR = 13e4;
29960
- function computeContextCap(targetBustCost, cacheWriteCostPerToken) {
29961
- if (targetBustCost <= 0 || cacheWriteCostPerToken <= 0) return 0;
29962
- return Math.max(MIN_CONTEXT_FLOOR, Math.floor(targetBustCost / cacheWriteCostPerToken));
29963
- }
29964
- function setMaxContextTokens(tokens) {
29965
- maxContextTokensCeiling = Math.max(0, Math.floor(tokens));
29948
+ var TIER_BOUNDARIES = [2e5, 5e5];
29949
+ var cacheWriteCostPerToken = 0;
29950
+ var cacheReadCostPerToken = 0;
29951
+ function setCachePricing(writeCost, readCost) {
29952
+ cacheWriteCostPerToken = Math.max(0, writeCost);
29953
+ cacheReadCostPerToken = Math.max(0, readCost);
29966
29954
  }
29967
- function getMaxContextTokens() {
29968
- return maxContextTokensCeiling;
29955
+ function getCachePricing() {
29956
+ return { write: cacheWriteCostPerToken, read: cacheReadCostPerToken };
29969
29957
  }
29970
- function updateBustRate(cacheWrite, cacheRead, sessionID, lastLayer) {
29958
+ var maxLayer0Tokens = 0;
29959
+ var MIN_LAYER0_FLOOR = 4e4;
29960
+ function shouldCompress(currentTokens, compressedTokens, consecutiveBusts, threshold = 0.85) {
29961
+ if (consecutiveBusts >= 5) return false;
29962
+ if (cacheWriteCostPerToken <= 0 || cacheReadCostPerToken <= 0) return false;
29963
+ const bustCost = compressedTokens * cacheWriteCostPerToken;
29964
+ const continueCost = currentTokens * cacheReadCostPerToken;
29965
+ return bustCost < threshold * continueCost;
29966
+ }
29967
+ function getTier(tokens) {
29968
+ if (tokens <= TIER_BOUNDARIES[0]) return 0;
29969
+ if (tokens <= TIER_BOUNDARIES[1]) return 1;
29970
+ return 2;
29971
+ }
29972
+ function recordCacheUsage(cacheWrite, cacheRead, inputTokens, sessionID) {
29971
29973
  if (!sessionID) return;
29972
29974
  const state = getSessionState(sessionID);
29973
- if (lastLayer === 4) {
29974
- state.consecutiveLayer4++;
29975
- if (state.consecutiveLayer4 >= 5 && state.dynamicContextCap > 0 && maxContextTokensCeiling > 0) {
29976
- state.dynamicContextCap = Math.min(
29977
- maxContextTokensCeiling,
29978
- Math.floor(state.dynamicContextCap * 1.1)
29979
- );
29975
+ const total = inputTokens > 0 ? inputTokens : cacheWrite + cacheRead;
29976
+ if (total > 0) {
29977
+ if (cacheWrite / total > 0.5) {
29978
+ state.consecutiveBusts++;
29979
+ } else {
29980
+ state.consecutiveBusts = 0;
29980
29981
  }
29981
- return;
29982
- }
29983
- if (lastLayer !== void 0) {
29984
- state.consecutiveLayer4 = 0;
29985
29982
  }
29986
- const total = cacheWrite + cacheRead;
29987
- if (total === 0) return;
29988
- const bustRatio = cacheWrite / total;
29989
- state.bustRateEMA = state.bustRateEMA < 0 ? bustRatio : state.bustRateEMA * 0.7 + bustRatio * 0.3;
29990
- const now = Date.now();
29991
- if (bustRatio > 0.5) {
29992
- if (state.lastBustAt > 0) {
29993
- const interval = now - state.lastBustAt;
29994
- state.interBustIntervalEMA = state.interBustIntervalEMA < 0 ? interval : state.interBustIntervalEMA * 0.7 + interval * 0.3;
29995
- }
29996
- state.lastBustAt = now;
29997
- }
29998
- adaptContextCap(state);
29999
- }
30000
- function adaptContextCap(state) {
30001
- if (maxContextTokensCeiling <= 0) return;
30002
- const cap = state.dynamicContextCap > 0 ? state.dynamicContextCap : maxContextTokensCeiling;
30003
- let newCap = cap;
30004
- if (state.bustRateEMA > 0.8) {
30005
- newCap = Math.floor(cap * 0.9);
30006
- } else if (state.bustRateEMA < 0.3) {
30007
- newCap = Math.floor(cap * 1.05);
30008
- }
30009
- if (state.interBustIntervalEMA > 0) {
30010
- if (state.interBustIntervalEMA < 2 * 6e4) {
30011
- newCap = Math.floor(newCap * 0.95);
30012
- } else if (state.interBustIntervalEMA > 10 * 6e4) {
30013
- newCap = Math.floor(newCap * 1.03);
30014
- }
30015
- }
30016
- state.dynamicContextCap = Math.max(
30017
- MIN_CONTEXT_FLOOR,
30018
- Math.min(maxContextTokensCeiling, newCap)
30019
- );
30020
29983
  }
30021
29984
  var FIRST_TURN_OVERHEAD = 15e3;
30022
29985
  var calibratedOverhead = null;
@@ -30037,11 +30000,7 @@ function makeSessionState() {
30037
30000
  cameOutOfIdle: false,
30038
30001
  postIdleCompact: false,
30039
30002
  consecutiveHighLayer: 0,
30040
- consecutiveLayer4: 0,
30041
- bustRateEMA: -1,
30042
- interBustIntervalEMA: -1,
30043
- lastBustAt: 0,
30044
- dynamicContextCap: 0,
30003
+ consecutiveBusts: 0,
30045
30004
  distillationSnapshot: null
30046
30005
  };
30047
30006
  }
@@ -30053,13 +30012,10 @@ function getSessionState(sessionID) {
30053
30012
  state.forceMinLayer = loadForceMinLayer(sessionID);
30054
30013
  const persisted = loadSessionTracking(sessionID);
30055
30014
  if (persisted && persisted.lastTurnAt > 0) {
30056
- state.dynamicContextCap = persisted.dynamicContextCap;
30057
- state.bustRateEMA = persisted.bustRateEMA;
30058
- state.interBustIntervalEMA = persisted.interBustIntervalEMA;
30059
30015
  state.lastLayer = persisted.lastLayer;
30060
30016
  state.lastKnownInput = persisted.lastKnownInput;
30061
30017
  state.lastTurnAt = persisted.lastTurnAt;
30062
- state.lastBustAt = persisted.lastBustAt;
30018
+ state.consecutiveBusts = persisted.dynamicContextCap;
30063
30019
  }
30064
30020
  sessionStates.set(sessionID, state);
30065
30021
  }
@@ -30095,9 +30051,9 @@ function setModelLimits(limits) {
30095
30051
  function setMaxLayer0Tokens(tokens) {
30096
30052
  maxLayer0Tokens = Math.max(0, Math.floor(tokens));
30097
30053
  }
30098
- function computeLayer0Cap(targetCostPerTurn, cacheReadCostPerToken) {
30099
- if (targetCostPerTurn <= 0 || cacheReadCostPerToken <= 0) return 0;
30100
- const rawCap = Math.floor(targetCostPerTurn / cacheReadCostPerToken);
30054
+ function computeLayer0Cap(targetCostPerTurn, cacheReadCostPerToken2) {
30055
+ if (targetCostPerTurn <= 0 || cacheReadCostPerToken2 <= 0) return 0;
30056
+ const rawCap = Math.floor(targetCostPerTurn / cacheReadCostPerToken2);
30101
30057
  return Math.max(rawCap, MIN_LAYER0_FLOOR);
30102
30058
  }
30103
30059
  function setLtmTokens(tokens, sessionID) {
@@ -30166,9 +30122,7 @@ function inspectSessionState(sessionID) {
30166
30122
  postIdleCompact: state.postIdleCompact,
30167
30123
  lastTurnAt: state.lastTurnAt,
30168
30124
  distillationSnapshot: state.distillationSnapshot,
30169
- bustRateEMA: state.bustRateEMA,
30170
- dynamicContextCap: state.dynamicContextCap,
30171
- consecutiveLayer4: state.consecutiveLayer4
30125
+ consecutiveBusts: state.consecutiveBusts
30172
30126
  };
30173
30127
  }
30174
30128
  function setLastTurnAtForTest(sessionID, ms) {
@@ -30178,13 +30132,12 @@ function saveGradientState(sessionID) {
30178
30132
  const state = sessionStates.get(sessionID);
30179
30133
  if (!state) return;
30180
30134
  saveSessionTracking(sessionID, {
30181
- dynamicContextCap: state.dynamicContextCap,
30182
- bustRateEMA: state.bustRateEMA,
30183
- interBustIntervalEMA: state.interBustIntervalEMA,
30184
30135
  lastLayer: state.lastLayer,
30185
30136
  lastKnownInput: state.lastKnownInput,
30186
30137
  lastTurnAt: state.lastTurnAt,
30187
- lastBustAt: state.lastBustAt
30138
+ // Repurpose the dead dynamicContextCap column (v24, always 0 now)
30139
+ // to persist consecutiveBusts — avoids a new DB migration.
30140
+ dynamicContextCap: state.consecutiveBusts
30188
30141
  });
30189
30142
  }
30190
30143
  function loadDistillations(projectPath2, sessionID) {
@@ -30629,8 +30582,7 @@ function transformInner(input) {
30629
30582
  0,
30630
30583
  contextLimit - outputReserved - overhead - sessLtmTokens
30631
30584
  );
30632
- const effectiveCap = sid && sessState.dynamicContextCap > 0 ? sessState.dynamicContextCap : maxContextTokensCeiling;
30633
- const usable = effectiveCap > 0 && usableRaw > effectiveCap ? effectiveCap : usableRaw;
30585
+ const usable = usableRaw;
30634
30586
  const distilledBudget = Math.floor(usable * cfg.budget.distilled);
30635
30587
  let rawBudget = Math.floor(usable * cfg.budget.raw);
30636
30588
  let effectiveMinLayer = sessState.forceMinLayer;
@@ -30651,8 +30603,7 @@ function transformInner(input) {
30651
30603
  if (postIdleCompact) {
30652
30604
  sessState.postIdleCompact = false;
30653
30605
  effectiveMinLayer = Math.max(effectiveMinLayer, 1);
30654
- const postIdleRawFraction = effectiveCap > 0 ? 0.3 : 0.2;
30655
- rawBudget = Math.floor(usable * postIdleRawFraction);
30606
+ rawBudget = Math.floor(usable * 0.2);
30656
30607
  info(
30657
30608
  `post-idle compact: session=${sid} rawBudget=${rawBudget} (${Math.floor(usable * cfg.budget.raw)}\u2192${rawBudget})`
30658
30609
  );
@@ -30686,6 +30637,28 @@ function transformInner(input) {
30686
30637
  refreshLtm: false
30687
30638
  };
30688
30639
  }
30640
+ if (effectiveMinLayer === 0 && layer0Input > layer0Ceiling && layer0Input <= maxInput && sid) {
30641
+ const busts = getSessionState(sid).consecutiveBusts;
30642
+ const compressedEstimate = distilledBudget + rawBudget;
30643
+ if (!shouldCompress(Math.round(layer0Input), compressedEstimate, busts)) {
30644
+ const messageTokens = calibrated ? expectedInput - (sessLtmTokens - sessState.lastKnownLtm) : expectedInput - overhead - sessLtmTokens;
30645
+ info(
30646
+ `tier gate: session=${sid} skipping compression \u2014 bustCost not justified (input=${Math.round(layer0Input)} compressed=${compressedEstimate} busts=${busts})`
30647
+ );
30648
+ return {
30649
+ messages: input.messages,
30650
+ layer: 0,
30651
+ distilledTokens: 0,
30652
+ rawTokens: Math.max(0, messageTokens),
30653
+ totalTokens: Math.max(0, messageTokens),
30654
+ usable,
30655
+ distilledBudget,
30656
+ rawBudget,
30657
+ refreshLtm: false,
30658
+ unsustainable: busts >= 5
30659
+ };
30660
+ }
30661
+ }
30689
30662
  const turnStart = currentTurnStart(input.messages);
30690
30663
  const dedupMessages = deduplicateToolOutputs(input.messages, turnStart);
30691
30664
  const distillations = sid ? loadDistillationsCached(input.projectPath, sid, input.messages, sessState) : [];
@@ -30769,6 +30742,7 @@ function transformInner(input) {
30769
30742
  }
30770
30743
  const nuclearRaw = [...olderMessages, ...currentTurn];
30771
30744
  const nuclearRawTokens = olderTokens + currentTurnTokens;
30745
+ const unsustainable = sid ? getSessionState(sid).consecutiveBusts >= 5 : false;
30772
30746
  return {
30773
30747
  messages: [...nuclearPrefix, ...nuclearRaw],
30774
30748
  layer: 4,
@@ -30778,7 +30752,8 @@ function transformInner(input) {
30778
30752
  usable,
30779
30753
  distilledBudget,
30780
30754
  rawBudget,
30781
- refreshLtm: true
30755
+ refreshLtm: true,
30756
+ unsustainable
30782
30757
  };
30783
30758
  }
30784
30759
  function transform2(input) {
@@ -30803,7 +30778,7 @@ function transform2(input) {
30803
30778
  state.consecutiveHighLayer = 0;
30804
30779
  }
30805
30780
  info(
30806
- `gradient: session=${sid} layer=${result.layer} tokens=${result.totalTokens} (distilled=${result.distilledTokens} raw=${result.rawTokens}) usable=${result.usable} cap=${maxLayer0Tokens || "off"}`
30781
+ `gradient: session=${sid} layer=${result.layer} tokens=${result.totalTokens} (distilled=${result.distilledTokens} raw=${result.rawTokens}) usable=${result.usable} tier=${getTier(result.totalTokens)} l0cap=${maxLayer0Tokens || "off"}`
30807
30782
  );
30808
30783
  }
30809
30784
  return result;
@@ -33931,7 +33906,6 @@ export {
33931
33906
  clearGitRemoteCache,
33932
33907
  clearLoreFileCache,
33933
33908
  close,
33934
- computeContextCap,
33935
33909
  computeLayer0Cap,
33936
33910
  config2 as config,
33937
33911
  consolidationUser,
@@ -33959,6 +33933,7 @@ export {
33959
33933
  ftsQuery,
33960
33934
  ftsQueryOr,
33961
33935
  ftsQueryRelaxed,
33936
+ getCachePricing,
33962
33937
  getGitRemote,
33963
33938
  getInstanceId,
33964
33939
  getKV,
@@ -33969,8 +33944,8 @@ export {
33969
33944
  getLastTurnAt,
33970
33945
  getLtmBudget,
33971
33946
  getLtmTokens,
33972
- getMaxContextTokens,
33973
33947
  getMeta,
33948
+ getTier,
33974
33949
  h,
33975
33950
  importFromFile,
33976
33951
  importLoreFile,
@@ -34007,6 +33982,7 @@ export {
34007
33982
  projectPath,
34008
33983
  recallById,
34009
33984
  reciprocalRankFusion,
33985
+ recordCacheUsage,
34010
33986
  recursiveUser,
34011
33987
  renderMarkdown,
34012
33988
  resolveProjectByRemoteOrPath,
@@ -34019,15 +33995,16 @@ export {
34019
33995
  saveSessionTracking,
34020
33996
  searchRecall,
34021
33997
  serialize,
33998
+ setCachePricing,
34022
33999
  setForceMinLayer,
34023
34000
  setKV,
34024
34001
  setLastImportAt,
34025
34002
  setLastTurnAtForTest,
34026
34003
  setLtmTokens,
34027
- setMaxContextTokens,
34028
34004
  setMaxLayer0Tokens,
34029
34005
  setMeta,
34030
34006
  setModelLimits,
34007
+ shouldCompress,
34031
34008
  shouldImport,
34032
34009
  shouldImportLoreFile,
34033
34010
  strong2 as strong,
@@ -34037,7 +34014,6 @@ export {
34037
34014
  transform2 as transform,
34038
34015
  ul,
34039
34016
  unescapeMarkdown,
34040
- updateBustRate,
34041
34017
  worker_model_exports as workerModel,
34042
34018
  workerSessionIDs
34043
34019
  };