@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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"}
package/dist/bun/index.js CHANGED
@@ -26612,19 +26612,11 @@ var LoreConfig = external_exports.object({
26612
26612
  * cost-aware formula from targetCacheReadCostPerTurn. 0 = disabled
26613
26613
  * (no cap, use full context). Default: undefined (use cost-aware auto). */
26614
26614
  maxLayer0Tokens: external_exports.number().min(0).optional(),
26615
- /** Target maximum cost (USD) for a single full cache bust (cold write of
26616
- * the entire context). Controls the total-context token cap at layer 1+:
26617
- * maxContextTokens = targetBustCost / cacheWriteCostPerToken.
26618
- * For opus-4-6 ($6.25/M write): $1.00 → 160K cap.
26619
- * For sonnet-4 ($3.75/M write): $1.00 → 267K (effectively uncapped at 200K).
26620
- * The cap is further adjusted dynamically per session based on observed
26621
- * bust rate (EMA) and break frequency. Default: 1.00. Set to 0 to disable. */
26622
- targetBustCost: external_exports.number().min(0).default(1),
26623
- /** Direct override for the total-context token cap at layer 1+. When set,
26624
- * bypasses the cost-aware formula from targetBustCost. 0 = disabled.
26625
- * Default: undefined (use cost-aware auto). */
26615
+ /** @deprecated Ignored. Tier-based bust-vs-continue replaces static cap. */
26616
+ targetBustCost: external_exports.number().min(0).default(1).optional(),
26617
+ /** @deprecated Ignored. Tier-based bust-vs-continue replaces static cap. */
26626
26618
  maxContextTokens: external_exports.number().min(0).optional()
26627
- }).default({ distilled: 0.25, raw: 0.4, output: 0.25, ltm: 0.05, targetCacheReadCostPerTurn: 0.1, targetBustCost: 1 }),
26619
+ }).default({ distilled: 0.25, raw: 0.4, output: 0.25, ltm: 0.05, targetCacheReadCostPerTurn: 0.1 }),
26628
26620
  /**
26629
26621
  * Cold-cache idle-resume handling.
26630
26622
  *
@@ -29936,70 +29928,41 @@ function estimateMessage(msg) {
29936
29928
  }
29937
29929
  var contextLimit = 2e5;
29938
29930
  var outputReserved = 32e3;
29939
- var maxLayer0Tokens = 0;
29940
- var MIN_LAYER0_FLOOR = 4e4;
29941
- var maxContextTokensCeiling = 0;
29942
- var MIN_CONTEXT_FLOOR = 13e4;
29943
- function computeContextCap(targetBustCost, cacheWriteCostPerToken) {
29944
- if (targetBustCost <= 0 || cacheWriteCostPerToken <= 0) return 0;
29945
- return Math.max(MIN_CONTEXT_FLOOR, Math.floor(targetBustCost / cacheWriteCostPerToken));
29946
- }
29947
- function setMaxContextTokens(tokens) {
29948
- maxContextTokensCeiling = Math.max(0, Math.floor(tokens));
29931
+ var TIER_BOUNDARIES = [2e5, 5e5];
29932
+ var cacheWriteCostPerToken = 0;
29933
+ var cacheReadCostPerToken = 0;
29934
+ function setCachePricing(writeCost, readCost) {
29935
+ cacheWriteCostPerToken = Math.max(0, writeCost);
29936
+ cacheReadCostPerToken = Math.max(0, readCost);
29949
29937
  }
29950
- function getMaxContextTokens() {
29951
- return maxContextTokensCeiling;
29938
+ function getCachePricing() {
29939
+ return { write: cacheWriteCostPerToken, read: cacheReadCostPerToken };
29952
29940
  }
29953
- function updateBustRate(cacheWrite, cacheRead, sessionID, lastLayer) {
29941
+ var maxLayer0Tokens = 0;
29942
+ var MIN_LAYER0_FLOOR = 4e4;
29943
+ function shouldCompress(currentTokens, compressedTokens, consecutiveBusts, threshold = 0.85) {
29944
+ if (consecutiveBusts >= 5) return false;
29945
+ if (cacheWriteCostPerToken <= 0 || cacheReadCostPerToken <= 0) return false;
29946
+ const bustCost = compressedTokens * cacheWriteCostPerToken;
29947
+ const continueCost = currentTokens * cacheReadCostPerToken;
29948
+ return bustCost < threshold * continueCost;
29949
+ }
29950
+ function getTier(tokens) {
29951
+ if (tokens <= TIER_BOUNDARIES[0]) return 0;
29952
+ if (tokens <= TIER_BOUNDARIES[1]) return 1;
29953
+ return 2;
29954
+ }
29955
+ function recordCacheUsage(cacheWrite, cacheRead, inputTokens, sessionID) {
29954
29956
  if (!sessionID) return;
29955
29957
  const state = getSessionState(sessionID);
29956
- if (lastLayer === 4) {
29957
- state.consecutiveLayer4++;
29958
- if (state.consecutiveLayer4 >= 5 && state.dynamicContextCap > 0 && maxContextTokensCeiling > 0) {
29959
- state.dynamicContextCap = Math.min(
29960
- maxContextTokensCeiling,
29961
- Math.floor(state.dynamicContextCap * 1.1)
29962
- );
29958
+ const total = inputTokens > 0 ? inputTokens : cacheWrite + cacheRead;
29959
+ if (total > 0) {
29960
+ if (cacheWrite / total > 0.5) {
29961
+ state.consecutiveBusts++;
29962
+ } else {
29963
+ state.consecutiveBusts = 0;
29963
29964
  }
29964
- return;
29965
- }
29966
- if (lastLayer !== void 0) {
29967
- state.consecutiveLayer4 = 0;
29968
29965
  }
29969
- const total = cacheWrite + cacheRead;
29970
- if (total === 0) return;
29971
- const bustRatio = cacheWrite / total;
29972
- state.bustRateEMA = state.bustRateEMA < 0 ? bustRatio : state.bustRateEMA * 0.7 + bustRatio * 0.3;
29973
- const now = Date.now();
29974
- if (bustRatio > 0.5) {
29975
- if (state.lastBustAt > 0) {
29976
- const interval = now - state.lastBustAt;
29977
- state.interBustIntervalEMA = state.interBustIntervalEMA < 0 ? interval : state.interBustIntervalEMA * 0.7 + interval * 0.3;
29978
- }
29979
- state.lastBustAt = now;
29980
- }
29981
- adaptContextCap(state);
29982
- }
29983
- function adaptContextCap(state) {
29984
- if (maxContextTokensCeiling <= 0) return;
29985
- const cap = state.dynamicContextCap > 0 ? state.dynamicContextCap : maxContextTokensCeiling;
29986
- let newCap = cap;
29987
- if (state.bustRateEMA > 0.8) {
29988
- newCap = Math.floor(cap * 0.9);
29989
- } else if (state.bustRateEMA < 0.3) {
29990
- newCap = Math.floor(cap * 1.05);
29991
- }
29992
- if (state.interBustIntervalEMA > 0) {
29993
- if (state.interBustIntervalEMA < 2 * 6e4) {
29994
- newCap = Math.floor(newCap * 0.95);
29995
- } else if (state.interBustIntervalEMA > 10 * 6e4) {
29996
- newCap = Math.floor(newCap * 1.03);
29997
- }
29998
- }
29999
- state.dynamicContextCap = Math.max(
30000
- MIN_CONTEXT_FLOOR,
30001
- Math.min(maxContextTokensCeiling, newCap)
30002
- );
30003
29966
  }
30004
29967
  var FIRST_TURN_OVERHEAD = 15e3;
30005
29968
  var calibratedOverhead = null;
@@ -30020,11 +29983,7 @@ function makeSessionState() {
30020
29983
  cameOutOfIdle: false,
30021
29984
  postIdleCompact: false,
30022
29985
  consecutiveHighLayer: 0,
30023
- consecutiveLayer4: 0,
30024
- bustRateEMA: -1,
30025
- interBustIntervalEMA: -1,
30026
- lastBustAt: 0,
30027
- dynamicContextCap: 0,
29986
+ consecutiveBusts: 0,
30028
29987
  distillationSnapshot: null
30029
29988
  };
30030
29989
  }
@@ -30036,13 +29995,10 @@ function getSessionState(sessionID) {
30036
29995
  state.forceMinLayer = loadForceMinLayer(sessionID);
30037
29996
  const persisted = loadSessionTracking(sessionID);
30038
29997
  if (persisted && persisted.lastTurnAt > 0) {
30039
- state.dynamicContextCap = persisted.dynamicContextCap;
30040
- state.bustRateEMA = persisted.bustRateEMA;
30041
- state.interBustIntervalEMA = persisted.interBustIntervalEMA;
30042
29998
  state.lastLayer = persisted.lastLayer;
30043
29999
  state.lastKnownInput = persisted.lastKnownInput;
30044
30000
  state.lastTurnAt = persisted.lastTurnAt;
30045
- state.lastBustAt = persisted.lastBustAt;
30001
+ state.consecutiveBusts = persisted.dynamicContextCap;
30046
30002
  }
30047
30003
  sessionStates.set(sessionID, state);
30048
30004
  }
@@ -30078,9 +30034,9 @@ function setModelLimits(limits) {
30078
30034
  function setMaxLayer0Tokens(tokens) {
30079
30035
  maxLayer0Tokens = Math.max(0, Math.floor(tokens));
30080
30036
  }
30081
- function computeLayer0Cap(targetCostPerTurn, cacheReadCostPerToken) {
30082
- if (targetCostPerTurn <= 0 || cacheReadCostPerToken <= 0) return 0;
30083
- const rawCap = Math.floor(targetCostPerTurn / cacheReadCostPerToken);
30037
+ function computeLayer0Cap(targetCostPerTurn, cacheReadCostPerToken2) {
30038
+ if (targetCostPerTurn <= 0 || cacheReadCostPerToken2 <= 0) return 0;
30039
+ const rawCap = Math.floor(targetCostPerTurn / cacheReadCostPerToken2);
30084
30040
  return Math.max(rawCap, MIN_LAYER0_FLOOR);
30085
30041
  }
30086
30042
  function setLtmTokens(tokens, sessionID) {
@@ -30149,9 +30105,7 @@ function inspectSessionState(sessionID) {
30149
30105
  postIdleCompact: state.postIdleCompact,
30150
30106
  lastTurnAt: state.lastTurnAt,
30151
30107
  distillationSnapshot: state.distillationSnapshot,
30152
- bustRateEMA: state.bustRateEMA,
30153
- dynamicContextCap: state.dynamicContextCap,
30154
- consecutiveLayer4: state.consecutiveLayer4
30108
+ consecutiveBusts: state.consecutiveBusts
30155
30109
  };
30156
30110
  }
30157
30111
  function setLastTurnAtForTest(sessionID, ms) {
@@ -30161,13 +30115,12 @@ function saveGradientState(sessionID) {
30161
30115
  const state = sessionStates.get(sessionID);
30162
30116
  if (!state) return;
30163
30117
  saveSessionTracking(sessionID, {
30164
- dynamicContextCap: state.dynamicContextCap,
30165
- bustRateEMA: state.bustRateEMA,
30166
- interBustIntervalEMA: state.interBustIntervalEMA,
30167
30118
  lastLayer: state.lastLayer,
30168
30119
  lastKnownInput: state.lastKnownInput,
30169
30120
  lastTurnAt: state.lastTurnAt,
30170
- lastBustAt: state.lastBustAt
30121
+ // Repurpose the dead dynamicContextCap column (v24, always 0 now)
30122
+ // to persist consecutiveBusts — avoids a new DB migration.
30123
+ dynamicContextCap: state.consecutiveBusts
30171
30124
  });
30172
30125
  }
30173
30126
  function loadDistillations(projectPath2, sessionID) {
@@ -30612,8 +30565,7 @@ function transformInner(input) {
30612
30565
  0,
30613
30566
  contextLimit - outputReserved - overhead - sessLtmTokens
30614
30567
  );
30615
- const effectiveCap = sid && sessState.dynamicContextCap > 0 ? sessState.dynamicContextCap : maxContextTokensCeiling;
30616
- const usable = effectiveCap > 0 && usableRaw > effectiveCap ? effectiveCap : usableRaw;
30568
+ const usable = usableRaw;
30617
30569
  const distilledBudget = Math.floor(usable * cfg.budget.distilled);
30618
30570
  let rawBudget = Math.floor(usable * cfg.budget.raw);
30619
30571
  let effectiveMinLayer = sessState.forceMinLayer;
@@ -30634,8 +30586,7 @@ function transformInner(input) {
30634
30586
  if (postIdleCompact) {
30635
30587
  sessState.postIdleCompact = false;
30636
30588
  effectiveMinLayer = Math.max(effectiveMinLayer, 1);
30637
- const postIdleRawFraction = effectiveCap > 0 ? 0.3 : 0.2;
30638
- rawBudget = Math.floor(usable * postIdleRawFraction);
30589
+ rawBudget = Math.floor(usable * 0.2);
30639
30590
  info(
30640
30591
  `post-idle compact: session=${sid} rawBudget=${rawBudget} (${Math.floor(usable * cfg.budget.raw)}\u2192${rawBudget})`
30641
30592
  );
@@ -30669,6 +30620,28 @@ function transformInner(input) {
30669
30620
  refreshLtm: false
30670
30621
  };
30671
30622
  }
30623
+ if (effectiveMinLayer === 0 && layer0Input > layer0Ceiling && layer0Input <= maxInput && sid) {
30624
+ const busts = getSessionState(sid).consecutiveBusts;
30625
+ const compressedEstimate = distilledBudget + rawBudget;
30626
+ if (!shouldCompress(Math.round(layer0Input), compressedEstimate, busts)) {
30627
+ const messageTokens = calibrated ? expectedInput - (sessLtmTokens - sessState.lastKnownLtm) : expectedInput - overhead - sessLtmTokens;
30628
+ info(
30629
+ `tier gate: session=${sid} skipping compression \u2014 bustCost not justified (input=${Math.round(layer0Input)} compressed=${compressedEstimate} busts=${busts})`
30630
+ );
30631
+ return {
30632
+ messages: input.messages,
30633
+ layer: 0,
30634
+ distilledTokens: 0,
30635
+ rawTokens: Math.max(0, messageTokens),
30636
+ totalTokens: Math.max(0, messageTokens),
30637
+ usable,
30638
+ distilledBudget,
30639
+ rawBudget,
30640
+ refreshLtm: false,
30641
+ unsustainable: busts >= 5
30642
+ };
30643
+ }
30644
+ }
30672
30645
  const turnStart = currentTurnStart(input.messages);
30673
30646
  const dedupMessages = deduplicateToolOutputs(input.messages, turnStart);
30674
30647
  const distillations = sid ? loadDistillationsCached(input.projectPath, sid, input.messages, sessState) : [];
@@ -30752,6 +30725,7 @@ function transformInner(input) {
30752
30725
  }
30753
30726
  const nuclearRaw = [...olderMessages, ...currentTurn];
30754
30727
  const nuclearRawTokens = olderTokens + currentTurnTokens;
30728
+ const unsustainable = sid ? getSessionState(sid).consecutiveBusts >= 5 : false;
30755
30729
  return {
30756
30730
  messages: [...nuclearPrefix, ...nuclearRaw],
30757
30731
  layer: 4,
@@ -30761,7 +30735,8 @@ function transformInner(input) {
30761
30735
  usable,
30762
30736
  distilledBudget,
30763
30737
  rawBudget,
30764
- refreshLtm: true
30738
+ refreshLtm: true,
30739
+ unsustainable
30765
30740
  };
30766
30741
  }
30767
30742
  function transform2(input) {
@@ -30786,7 +30761,7 @@ function transform2(input) {
30786
30761
  state.consecutiveHighLayer = 0;
30787
30762
  }
30788
30763
  info(
30789
- `gradient: session=${sid} layer=${result.layer} tokens=${result.totalTokens} (distilled=${result.distilledTokens} raw=${result.rawTokens}) usable=${result.usable} cap=${maxLayer0Tokens || "off"}`
30764
+ `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"}`
30790
30765
  );
30791
30766
  }
30792
30767
  return result;
@@ -33914,7 +33889,6 @@ export {
33914
33889
  clearGitRemoteCache,
33915
33890
  clearLoreFileCache,
33916
33891
  close,
33917
- computeContextCap,
33918
33892
  computeLayer0Cap,
33919
33893
  config2 as config,
33920
33894
  consolidationUser,
@@ -33942,6 +33916,7 @@ export {
33942
33916
  ftsQuery,
33943
33917
  ftsQueryOr,
33944
33918
  ftsQueryRelaxed,
33919
+ getCachePricing,
33945
33920
  getGitRemote,
33946
33921
  getInstanceId,
33947
33922
  getKV,
@@ -33952,8 +33927,8 @@ export {
33952
33927
  getLastTurnAt,
33953
33928
  getLtmBudget,
33954
33929
  getLtmTokens,
33955
- getMaxContextTokens,
33956
33930
  getMeta,
33931
+ getTier,
33957
33932
  h,
33958
33933
  importFromFile,
33959
33934
  importLoreFile,
@@ -33990,6 +33965,7 @@ export {
33990
33965
  projectPath,
33991
33966
  recallById,
33992
33967
  reciprocalRankFusion,
33968
+ recordCacheUsage,
33993
33969
  recursiveUser,
33994
33970
  renderMarkdown,
33995
33971
  resolveProjectByRemoteOrPath,
@@ -34002,15 +33978,16 @@ export {
34002
33978
  saveSessionTracking,
34003
33979
  searchRecall,
34004
33980
  serialize,
33981
+ setCachePricing,
34005
33982
  setForceMinLayer,
34006
33983
  setKV,
34007
33984
  setLastImportAt,
34008
33985
  setLastTurnAtForTest,
34009
33986
  setLtmTokens,
34010
- setMaxContextTokens,
34011
33987
  setMaxLayer0Tokens,
34012
33988
  setMeta,
34013
33989
  setModelLimits,
33990
+ shouldCompress,
34014
33991
  shouldImport,
34015
33992
  shouldImportLoreFile,
34016
33993
  strong2 as strong,
@@ -34020,7 +33997,6 @@ export {
34020
33997
  transform2 as transform,
34021
33998
  ul,
34022
33999
  unescapeMarkdown,
34023
- updateBustRate,
34024
34000
  worker_model_exports as workerModel,
34025
34001
  workerSessionIDs
34026
34002
  };