@leanandmean/coding-agent 0.74.1-scramjet.44 → 0.74.1-scramjet.45

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.
Files changed (42) hide show
  1. package/dist/cli/list-models.d.ts +1 -1
  2. package/dist/cli/list-models.d.ts.map +1 -1
  3. package/dist/cli/list-models.js +1 -5
  4. package/dist/cli/list-models.js.map +1 -1
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +12 -13
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  9. package/dist/core/compaction/branch-summarization.js +22 -18
  10. package/dist/core/compaction/branch-summarization.js.map +1 -1
  11. package/dist/core/compaction/compaction.d.ts +3 -5
  12. package/dist/core/compaction/compaction.d.ts.map +1 -1
  13. package/dist/core/compaction/compaction.js +42 -10
  14. package/dist/core/compaction/compaction.js.map +1 -1
  15. package/dist/core/extensions/types.d.ts +5 -7
  16. package/dist/core/extensions/types.d.ts.map +1 -1
  17. package/dist/core/extensions/types.js.map +1 -1
  18. package/dist/core/model-registry.d.ts +3 -2
  19. package/dist/core/model-registry.d.ts.map +1 -1
  20. package/dist/core/model-registry.js +34 -31
  21. package/dist/core/model-registry.js.map +1 -1
  22. package/dist/core/model-resolver.d.ts.map +1 -1
  23. package/dist/core/model-resolver.js +3 -2
  24. package/dist/core/model-resolver.js.map +1 -1
  25. package/dist/core/sdk.d.ts.map +1 -1
  26. package/dist/core/sdk.js +9 -2
  27. package/dist/core/sdk.js.map +1 -1
  28. package/dist/modes/interactive/components/footer.d.ts +1 -1
  29. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  30. package/dist/modes/interactive/components/footer.js +4 -9
  31. package/dist/modes/interactive/components/footer.js.map +1 -1
  32. package/dist/modes/rpc/rpc-client.d.ts +3 -2
  33. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  34. package/dist/modes/rpc/rpc-client.js.map +1 -1
  35. package/docs/compaction.md +10 -4
  36. package/docs/custom-provider.md +9 -2
  37. package/docs/extensions.md +2 -2
  38. package/docs/models.md +22 -5
  39. package/docs/rpc.md +3 -5
  40. package/docs/sdk.md +8 -0
  41. package/examples/extensions/border-status-editor.ts +1 -6
  42. package/package.json +4 -4
@@ -17,7 +17,7 @@ import { basename, dirname, resolve } from "node:path";
17
17
  // SCRAMJET-DIVERGENCE: provider-safe harness tool-call id generation for the persisted-settlement
18
18
  // acknowledgement key (#341).
19
19
  import { generateHarnessToolCallId } from "@leanandmean/agent";
20
- import { clampThinkingLevel, cleanupSessionResources, flattenSystemPrompt, getContextWindowBudget, getSupportedThinkingLevels, isContextOverflow, modelsAreEqual, resetApiProviders, } from "@leanandmean/ai";
20
+ import { clampThinkingLevel, cleanupSessionResources, flattenSystemPrompt, getSupportedThinkingLevels, isContextOverflow, modelsAreEqual, resetApiProviders, } from "@leanandmean/ai";
21
21
  import { theme } from "../modes/interactive/theme/theme.js";
22
22
  import { stripFrontmatter } from "../utils/frontmatter.js";
23
23
  import { sleep } from "../utils/sleep.js";
@@ -1760,8 +1760,8 @@ export class AgentSession {
1760
1760
  // Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false
1761
1761
  if (skipAbortedCheck && assistantMessage.stopReason === "aborted")
1762
1762
  return;
1763
- // SCRAMJET-DIVERGENCE: operational context checks use the provider budget, not advertised capacity.
1764
- const contextWindow = this.model ? getContextWindowBudget(this.model) : 0;
1763
+ // SCRAMJET-DIVERGENCE: Total context and independent input limits are separate constraints.
1764
+ const contextWindow = this.model?.contextWindow ?? 0;
1765
1765
  // Skip overflow check if the message came from a different model.
1766
1766
  // This handles the case where user switched from a smaller-context model (e.g. opus)
1767
1767
  // to a larger-context model (e.g. codex) - the overflow error from the old model
@@ -1776,7 +1776,8 @@ export class AgentSession {
1776
1776
  return;
1777
1777
  }
1778
1778
  // Case 1: Overflow - LLM returned context overflow error
1779
- if (sameModel && isContextOverflow(assistantMessage, contextWindow)) {
1779
+ if (sameModel &&
1780
+ isContextOverflow(assistantMessage, Math.min(contextWindow, this.model?.maxInputTokens ?? Infinity))) {
1780
1781
  if (this._overflowRecoveryAttempted) {
1781
1782
  this._emit({
1782
1783
  type: "compaction_end",
@@ -1821,7 +1822,8 @@ export class AgentSession {
1821
1822
  else {
1822
1823
  contextTokens = calculateContextTokens(assistantMessage.usage);
1823
1824
  }
1824
- if (shouldCompact(contextTokens, contextWindow, settings)) {
1825
+ if (shouldCompact(contextTokens, contextWindow, settings) ||
1826
+ (contextWindow > settings.reserveTokens && contextTokens > (this.model?.maxInputTokens ?? Infinity))) {
1825
1827
  await this._runAutoCompaction("threshold", false);
1826
1828
  }
1827
1829
  }
@@ -2318,9 +2320,8 @@ export class AgentSession {
2318
2320
  if (message.stopReason !== "error" || !message.errorMessage)
2319
2321
  return false;
2320
2322
  // Context overflow is handled by compaction, not retry
2321
- // SCRAMJET-DIVERGENCE: retry classification uses the provider's operational context budget.
2322
- const contextWindow = this.model ? getContextWindowBudget(this.model) : 0;
2323
- if (isContextOverflow(message, contextWindow))
2323
+ const contextWindow = this.model?.contextWindow ?? 0;
2324
+ if (isContextOverflow(message, Math.min(contextWindow, this.model?.maxInputTokens ?? Infinity)))
2324
2325
  return false;
2325
2326
  const err = message.errorMessage;
2326
2327
  // Match: overloaded_error, provider returned error, rate limit, 429, 500, 502, 503, 504, service unavailable, network/connection errors (including connection lost), WebSocket transport closes/errors, fetch failed, premature stream endings, HTTP/2 closed before response, terminated, retry delay exceeded
@@ -2779,8 +2780,7 @@ export class AgentSession {
2779
2780
  if (!model)
2780
2781
  return undefined;
2781
2782
  const contextWindow = model.contextWindow ?? 0;
2782
- const contextWindowBudget = getContextWindowBudget(model);
2783
- if (contextWindow <= 0 || contextWindowBudget <= 0)
2783
+ if (contextWindow <= 0)
2784
2784
  return undefined;
2785
2785
  // After compaction, the last assistant usage reflects pre-compaction context size.
2786
2786
  // We can only trust usage from an assistant that responded after the latest compaction.
@@ -2805,15 +2805,14 @@ export class AgentSession {
2805
2805
  }
2806
2806
  }
2807
2807
  if (!hasPostCompactionUsage) {
2808
- return { tokens: null, contextWindow, contextWindowBudget, percent: null };
2808
+ return { tokens: null, contextWindow, percent: null };
2809
2809
  }
2810
2810
  }
2811
2811
  const estimate = estimateContextTokens(this.messages);
2812
- const percent = (estimate.tokens / contextWindowBudget) * 100;
2812
+ const percent = (estimate.tokens / contextWindow) * 100;
2813
2813
  return {
2814
2814
  tokens: estimate.tokens,
2815
2815
  contextWindow,
2816
- contextWindowBudget,
2817
2816
  percent,
2818
2817
  };
2819
2818
  }