@mrrlin-dev/mcp 0.4.141 → 0.4.142

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 (2) hide show
  1. package/dist/bin.cjs +31 -23
  2. package/package.json +1 -1
package/dist/bin.cjs CHANGED
@@ -43772,6 +43772,28 @@ function addTurnTokenUsage(total, turn) {
43772
43772
  outputTokens: add2(total.outputTokens, turn.outputTokens)
43773
43773
  };
43774
43774
  }
43775
+ var CONTEXT_WINDOW_TOKENS = 2e5;
43776
+ function extractContextWindow(method, params) {
43777
+ if (method !== TOKEN_USAGE_NOTIFICATION_METHOD)
43778
+ return null;
43779
+ if (params === null || typeof params !== "object")
43780
+ return null;
43781
+ const usage = params.tokenUsage;
43782
+ if (usage === null || typeof usage !== "object")
43783
+ return null;
43784
+ const window = readCount(usage, "modelContextWindow");
43785
+ return window !== null && window > 0 ? window : null;
43786
+ }
43787
+ function isNearContextLimit(usage, contextWindow) {
43788
+ if (!usage)
43789
+ return false;
43790
+ const contextTokens = (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0);
43791
+ if (contextTokens <= 0)
43792
+ return false;
43793
+ const window = contextWindow && contextWindow > 0 ? contextWindow : CONTEXT_WINDOW_TOKENS;
43794
+ const remainingTokens = window - contextTokens;
43795
+ return remainingTokens / window < 0.03 || remainingTokens < 4e3;
43796
+ }
43775
43797
 
43776
43798
  // ../../packages/agent-client/dist/providers/codex/event-mapper.js
43777
43799
  var CodexBridgeEventMapper = class {
@@ -43938,7 +43960,8 @@ var CodexBridgeEventMapper = class {
43938
43960
  const usage = extractTurnTokenUsage(TOKEN_USAGE_NOTIFICATION_METHOD, notification.params);
43939
43961
  if (!usage)
43940
43962
  return [];
43941
- return [{ type: "token_usage", usage }];
43963
+ const contextWindow = extractContextWindow(TOKEN_USAGE_NOTIFICATION_METHOD, notification.params);
43964
+ return [contextWindow === null ? { type: "token_usage", usage } : { type: "token_usage", usage, contextWindow }];
43942
43965
  }
43943
43966
  /** Bare `error` notifications carry model-stream failures ({ error: { message }, willRetry }).
43944
43967
  * Retryable ones (willRetry=true) are transport noise — codex is still driving the turn — so
@@ -63794,7 +63817,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
63794
63817
  }
63795
63818
 
63796
63819
  // src/_generated/version.ts
63797
- var PKG_VERSION = "0.4.141";
63820
+ var PKG_VERSION = "0.4.142";
63798
63821
 
63799
63822
  // src/bridge-allowed-origins.ts
63800
63823
  var DEFAULT_DIRECTOR_BRIDGE_ALLOWED_ORIGINS = [
@@ -67883,6 +67906,7 @@ async function driveTurn(deps, codex, projectSlug, runId, leaseId, threadId, inp
67883
67906
  let touch = () => {
67884
67907
  };
67885
67908
  let turnUsage = null;
67909
+ let turnContextWindow = null;
67886
67910
  const promptBytes = Buffer.byteLength(inputText, "utf8");
67887
67911
  const turnStartedAt = Date.now();
67888
67912
  let lastActivityAt = turnStartedAt;
@@ -67914,6 +67938,7 @@ async function driveTurn(deps, codex, projectSlug, runId, leaseId, threadId, inp
67914
67938
  pending.push(persist(event));
67915
67939
  if (event.type === "token_usage") {
67916
67940
  turnUsage = event.usage;
67941
+ turnContextWindow = event.contextWindow ?? turnContextWindow;
67917
67942
  } else if (event.type === "rate_limits") {
67918
67943
  const signal = detectExhaustedProviderLimit(event.snapshot, Date.now());
67919
67944
  if (signal) {
@@ -67975,7 +68000,7 @@ async function driveTurn(deps, codex, projectSlug, runId, leaseId, threadId, inp
67975
68000
  clearInterval(touchTimer);
67976
68001
  unsub();
67977
68002
  }
67978
- const telemetry = { promptBytes, usage: turnUsage };
68003
+ const telemetry = { promptBytes, usage: turnUsage, contextWindow: turnContextWindow };
67979
68004
  return turnError ? { ok: false, error: turnError, interruptFailed, telemetry } : { ok: true, telemetry };
67980
68005
  });
67981
68006
  }
@@ -68238,14 +68263,6 @@ async function driveRun(deps, projectSlug, runId) {
68238
68263
  runTelemetry.usage = addTurnTokenUsage(runTelemetry.usage, outcome.telemetry.usage);
68239
68264
  return outcome;
68240
68265
  };
68241
- const isContextBudgetExhausted = (usage) => {
68242
- if (!usage) return false;
68243
- const contextTokens = (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0);
68244
- if (contextTokens <= 0) return false;
68245
- const maxTokens = 2e5;
68246
- const remainingTokens = maxTokens - contextTokens;
68247
- return remainingTokens / maxTokens < 0.03 || remainingTokens < 4e3;
68248
- };
68249
68266
  const effortDecision = deriveEffort({
68250
68267
  impact: task.impact,
68251
68268
  type: task.type,
@@ -68589,7 +68606,7 @@ Continue executing task ${task.id}. Make the next concrete increment of progress
68589
68606
  await failRun(deps, projectSlug, task, runId, leaseId, outcome.error);
68590
68607
  return;
68591
68608
  }
68592
- if (isContextBudgetExhausted(outcome.telemetry.usage)) {
68609
+ if (isNearContextLimit(outcome.telemetry.usage, outcome.telemetry.contextWindow)) {
68593
68610
  console.warn(
68594
68611
  JSON.stringify({
68595
68612
  event: "context_budget_gate_triggered",
@@ -78803,18 +78820,9 @@ function createBridgeMessageHandler(deps) {
78803
78820
  return;
78804
78821
  }
78805
78822
  if (event.type === "token_usage") {
78806
- const usage = event.usage;
78823
+ const { usage, contextWindow } = event;
78807
78824
  turnTokenUsage = addTurnTokenUsage(turnTokenUsage, usage);
78808
- if (turnTokenUsage) {
78809
- const totalTokens = (turnTokenUsage.inputTokens ?? 0) + (turnTokenUsage.outputTokens ?? 0);
78810
- if (totalTokens > 0) {
78811
- const maxTokens = 2e5;
78812
- const remainingTokens = maxTokens - totalTokens;
78813
- if (remainingTokens / maxTokens < 0.03 || remainingTokens < 4e3) {
78814
- contextBudgetGateTriggered = true;
78815
- }
78816
- }
78817
- }
78825
+ if (isNearContextLimit(usage, contextWindow)) contextBudgetGateTriggered = true;
78818
78826
  return;
78819
78827
  }
78820
78828
  if (event.type === "turn_completed" || event.type === "rate_limits") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.4.141",
3
+ "version": "0.4.142",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mrrlin-mcp": "dist/bin.cjs"