billion-context 0.1.69 → 0.1.70-pr.458.275
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.
- package/README.md +2 -1
- package/dist/index.js +43 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,7 +65,8 @@ The proxy runs in one of two modes, and **the mode decides who executes
|
|
|
65
65
|
| **Summary carrier on the wire** | **the `compress` tool call** | **an `acp_summary` user message** |
|
|
66
66
|
| System messages on the wire | always exactly 1 (client + prompt) | always exactly 1 (client + prompt) — summaries ride on user messages |
|
|
67
67
|
| SGLang "single system" 400 (#377) | cannot happen | cannot happen (summaries are user messages, not system) |
|
|
68
|
-
| Proxy-injected tools
|
|
68
|
+
| Proxy-injected `compress` tools | none — the agent registers the 4 ACP tools natively | the 4 context tools (when enabled) |
|
|
69
|
+
| Proxy-injected nudge | **yes** — the agent has no nudge channel of its own, so the proxy-side nudge is the proactive compression trigger (preflight alone only fires at the hard limit; #451) | yes (when enabled) |
|
|
69
70
|
|
|
70
71
|
**Why the carriers differ.** In plugin mode the agent owns compression: the
|
|
71
72
|
`compress` call + result live in the agent's own history and are re-sent every
|
package/dist/index.js
CHANGED
|
@@ -51584,6 +51584,20 @@ async function* runCompressLoop(upstream, ctx, requestBody, requestOptions, adap
|
|
|
51584
51584
|
coreMessages.push(...hidden.messages);
|
|
51585
51585
|
}
|
|
51586
51586
|
}
|
|
51587
|
+
if (ctx.refreshFolded && proxyResults.some((pr2) => pr2.name === "compress" && !pr2.result.includes("FAILED"))) {
|
|
51588
|
+
try {
|
|
51589
|
+
const refreshed = ctx.refreshFolded(coreMessages);
|
|
51590
|
+
if (refreshed.length > 0) {
|
|
51591
|
+
coreMessages.length = 0;
|
|
51592
|
+
coreMessages.push(...refreshed);
|
|
51593
|
+
ctx.session.stats.compressCreditTokens = 0;
|
|
51594
|
+
ctx.log(`[acp-loop] round ${round}: re-request view refreshed to post-compress fold`);
|
|
51595
|
+
}
|
|
51596
|
+
} catch (err2) {
|
|
51597
|
+
ctx.log(`[acp-loop] round ${round}: fold refresh failed (${String(err2)}); keeping pre-compress view`);
|
|
51598
|
+
log("warn", `[acp-loop] fold refresh failed: ${String(err2)}`);
|
|
51599
|
+
}
|
|
51600
|
+
}
|
|
51587
51601
|
}
|
|
51588
51602
|
for (const tc of realToolCalls) {
|
|
51589
51603
|
if (tc.passthrough) continue;
|
|
@@ -56584,7 +56598,7 @@ function diagTagSummary(messages, sessionId, strategy) {
|
|
|
56584
56598
|
}
|
|
56585
56599
|
return `[${sessionId}] processTurn: ${messages.length} msgs, renderTags=${strategy}, ${textTagged} text tagged, ${toolTagged} tool tagged (should be 0 with text-only)`;
|
|
56586
56600
|
}
|
|
56587
|
-
function diagNudge(turn, sessionId, tokenCount, limit, model) {
|
|
56601
|
+
function diagNudge(turn, sessionId, tokenCount, limit, model, willInject) {
|
|
56588
56602
|
const n = turn.nudge;
|
|
56589
56603
|
if (!n) return `[${sessionId}] nudge: unavailable`;
|
|
56590
56604
|
const b2 = n.breakdown ?? {};
|
|
@@ -56594,7 +56608,7 @@ function diagNudge(turn, sessionId, tokenCount, limit, model) {
|
|
|
56594
56608
|
const interval = b2["nudgeGrowthTokens"] ?? 0;
|
|
56595
56609
|
const pendingT1 = b2["pendingT1"] ?? 0;
|
|
56596
56610
|
const ref = b2["growthReference"] ?? 0;
|
|
56597
|
-
const inject = n.shouldInject ? `INJECT T${n.tier ?? "?"}` : "
|
|
56611
|
+
const inject = !n.shouldInject ? "idle" : willInject ? `INJECT T${n.tier ?? "?"}` : `ARMED-SUPPRESSED T${n.tier ?? "?"}`;
|
|
56598
56612
|
const modelTag = model ? ` model=${model}` : "";
|
|
56599
56613
|
return `[${sessionId}] nudge ${inject}: usage=${pct2} (${tokenCount}/${limit}), growth=${growth}/${floor} (ref=${ref}, interval=${interval}), pendingT1=${pendingT1}/${interval}${modelTag}, reason="${n.reason.slice(0, 120)}"`;
|
|
56600
56614
|
}
|
|
@@ -56629,7 +56643,8 @@ function prepareAnthropic(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56629
56643
|
if (t) session.meta.title = t;
|
|
56630
56644
|
}
|
|
56631
56645
|
log2("info", diagTagSummary(turn.messages, sessionId, "text-only"));
|
|
56632
|
-
|
|
56646
|
+
const willInjectNudge = opts.compress.injectNudge && !!turn.nudge?.shouldInject;
|
|
56647
|
+
log2("info", diagNudge(turn, sessionId, tokenCount, config.modelContextLimit, parsed.model, willInjectNudge));
|
|
56633
56648
|
processedMessages = stripKernelSummaries(turn.messages, turn.state);
|
|
56634
56649
|
reapOrphanBlocks(session, msgs, deactivateBlock);
|
|
56635
56650
|
rebuiltMessages = coreToAnthropic(processedMessages, cacheControls);
|
|
@@ -56637,7 +56652,7 @@ function prepareAnthropic(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56637
56652
|
if (injectTools) {
|
|
56638
56653
|
toolsOut = injectTool(parsed.tools);
|
|
56639
56654
|
}
|
|
56640
|
-
if (
|
|
56655
|
+
if (willInjectNudge && turn.nudge) {
|
|
56641
56656
|
try {
|
|
56642
56657
|
const rendered = renderNudgeText(turn.nudge, prompts);
|
|
56643
56658
|
if (rendered.text) {
|
|
@@ -56654,7 +56669,7 @@ function prepareAnthropic(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56654
56669
|
markDirty(session);
|
|
56655
56670
|
const rebuilt = { ...parsed, messages: rebuiltMessages, system: systemOut, tools: toolsOut };
|
|
56656
56671
|
delete rebuilt.prompt_cache_key;
|
|
56657
|
-
return { body: JSON.stringify(rebuilt), session, processedMessages, originalMessages, anthropicSystem: parsed.system, protocol: "anthropic", stream: stream2, compressInjected: injectTools, pluginMode, nudge, prompts };
|
|
56672
|
+
return { body: JSON.stringify(rebuilt), session, processedMessages, originalMessages, anthropicSystem: parsed.system, protocol: "anthropic", stream: stream2, compressInjected: injectTools, pluginMode, nudge, prompts, renderTags: "text-only" };
|
|
56658
56673
|
}
|
|
56659
56674
|
function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session, pluginMode) {
|
|
56660
56675
|
const sessionId = session.id;
|
|
@@ -56686,7 +56701,8 @@ function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session,
|
|
|
56686
56701
|
if (t) session.meta.title = t;
|
|
56687
56702
|
}
|
|
56688
56703
|
log2("info", diagTagSummary(turn.messages, sessionId, "text-only"));
|
|
56689
|
-
|
|
56704
|
+
const willInjectNudge = opts.compress.injectNudge && !!turn.nudge?.shouldInject && shouldInject;
|
|
56705
|
+
log2("info", diagNudge(turn, sessionId, tokenCount, config.modelContextLimit, parsed.model, willInjectNudge));
|
|
56690
56706
|
processedMessages = stripKernelSummaries(turn.messages, turn.state);
|
|
56691
56707
|
reapOrphanBlocks(session, msgs, deactivateBlock);
|
|
56692
56708
|
rebuiltMessages = systemToUser(coreToOpenai(processedMessages));
|
|
@@ -56697,7 +56713,7 @@ function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session,
|
|
|
56697
56713
|
if (injectTools) {
|
|
56698
56714
|
toolsOut = injectOpenaiTool(parsed.tools);
|
|
56699
56715
|
}
|
|
56700
|
-
if (
|
|
56716
|
+
if (willInjectNudge && turn.nudge) {
|
|
56701
56717
|
try {
|
|
56702
56718
|
const rendered = renderNudgeText(turn.nudge, prompts);
|
|
56703
56719
|
if (rendered.text) {
|
|
@@ -56717,7 +56733,7 @@ function prepareOpenai(parsed, req, opts, core, config, prompts, log2, session,
|
|
|
56717
56733
|
}
|
|
56718
56734
|
snapshotMessages(session, originalMessages);
|
|
56719
56735
|
markDirty(session);
|
|
56720
|
-
return { body: JSON.stringify(rebuilt), session, processedMessages, originalMessages, protocol: "openai", stream: stream2, compressInjected: injectTools, pluginMode, nudge, prompts, openaiSystemText };
|
|
56736
|
+
return { body: JSON.stringify(rebuilt), session, processedMessages, originalMessages, protocol: "openai", stream: stream2, compressInjected: injectTools, pluginMode, nudge, prompts, openaiSystemText, renderTags: "text-only" };
|
|
56721
56737
|
}
|
|
56722
56738
|
function prepareResponses(parsed, req, opts, core, config, prompts, log2, session, identity, pluginMode, upstreamOrigin) {
|
|
56723
56739
|
const sessionId = session.id;
|
|
@@ -56755,6 +56771,7 @@ function prepareResponses(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56755
56771
|
const injectTools = shouldInject && !pluginMode;
|
|
56756
56772
|
const isCompactionTrigger = hasCompactionTrigger(parsed.input);
|
|
56757
56773
|
const responsesTextProtocol = FORCE_TEXT_PROTOCOL || resolveCompressProtocol(opts.routes, upstreamOrigin) === "marker";
|
|
56774
|
+
const renderTags = process.env.ACP_RENDER_NONE || isCompactionTrigger ? "none" : "text-only";
|
|
56758
56775
|
try {
|
|
56759
56776
|
const projection = responsesToCore(parsed);
|
|
56760
56777
|
responsesProjection = projection;
|
|
@@ -56764,7 +56781,7 @@ function prepareResponses(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56764
56781
|
log2("info", `[${sessionId}] input items: ${Array.isArray(parsed.input) ? parsed.input.map((i) => i.type).join(",") : "(string)"}`);
|
|
56765
56782
|
}
|
|
56766
56783
|
const tokenCount = session.stats.lastInputTokens;
|
|
56767
|
-
const turn = core.processTurn({ messages: msgs, state: session.state, config, tokenCount, renderTags
|
|
56784
|
+
const turn = core.processTurn({ messages: msgs, state: session.state, config, tokenCount, renderTags });
|
|
56768
56785
|
session.state = turn.state;
|
|
56769
56786
|
session.stats.compressCreditTokens = 0;
|
|
56770
56787
|
if (turn.nudge) turn.nudge.compressibleRanges = viableRanges(turn.nudge.compressibleRanges);
|
|
@@ -56775,7 +56792,8 @@ function prepareResponses(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56775
56792
|
if (t) session.meta.title = t;
|
|
56776
56793
|
}
|
|
56777
56794
|
log2("info", diagTagSummary(turn.messages, sessionId, "text-only"));
|
|
56778
|
-
|
|
56795
|
+
const willInjectNudge = opts.compress.injectNudge && !!turn.nudge?.shouldInject && shouldInject && !isCompactionTrigger;
|
|
56796
|
+
log2("info", diagNudge(turn, sessionId, tokenCount, config.modelContextLimit, parsed.model, willInjectNudge));
|
|
56779
56797
|
processedMessages = stripKernelSummaries(turn.messages, turn.state);
|
|
56780
56798
|
reapOrphanBlocks(session, msgs, deactivateBlock);
|
|
56781
56799
|
rebuiltInput = patchResponsesInput(projection, processedMessages);
|
|
@@ -56791,7 +56809,7 @@ function prepareResponses(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56791
56809
|
const devContent = [...projection.systemParts, ...forgedSummaries].join("\n\n---\n\n");
|
|
56792
56810
|
rebuiltInput = injectResponsesDeveloperMessage(rebuiltInput, devContent);
|
|
56793
56811
|
}
|
|
56794
|
-
if (
|
|
56812
|
+
if (willInjectNudge && turn.nudge) {
|
|
56795
56813
|
try {
|
|
56796
56814
|
const rendered = renderNudgeText(turn.nudge, prompts);
|
|
56797
56815
|
if (rendered.text) {
|
|
@@ -56858,6 +56876,7 @@ function prepareResponses(parsed, req, opts, core, config, prompts, log2, sessio
|
|
|
56858
56876
|
responsesTextProtocol,
|
|
56859
56877
|
nudge,
|
|
56860
56878
|
prompts,
|
|
56879
|
+
renderTags,
|
|
56861
56880
|
resetAfterSuccess: isCompactionTrigger,
|
|
56862
56881
|
codexForge
|
|
56863
56882
|
};
|
|
@@ -57360,9 +57379,21 @@ ${hdrText}
|
|
|
57360
57379
|
const textProtocol = prepared.protocol === "responses" && !!prepared.responsesTextProtocol;
|
|
57361
57380
|
const systemPrompt = textProtocol ? buildCompressHybridSystemPrompt(prepared.prompts ?? defaultPrompts) : buildCompressSystemPrompt(prepared.prompts ?? defaultPrompts);
|
|
57362
57381
|
const adapter = pickAdapter(prepared.protocol, parsedReq, textProtocol, prepared.responsesProjection, prepared.anthropicSystem, prepared.openaiSystemText);
|
|
57382
|
+
const refreshFolded = (current) => {
|
|
57383
|
+
const turn = core.processTurn({
|
|
57384
|
+
messages: prepared.originalMessages,
|
|
57385
|
+
state: prepared.session.state,
|
|
57386
|
+
config,
|
|
57387
|
+
tokenCount: prepared.session.stats.lastInputTokens,
|
|
57388
|
+
renderTags: prepared.renderTags ?? "text-only"
|
|
57389
|
+
});
|
|
57390
|
+
prepared.session.state = turn.state;
|
|
57391
|
+
const records = current.filter((m2) => typeof m2.id === "string" && m2.id.startsWith("acp_loop_"));
|
|
57392
|
+
return stripKernelSummaries([...turn.messages, ...records], turn.state);
|
|
57393
|
+
};
|
|
57363
57394
|
const loop = runCompressLoop(
|
|
57364
57395
|
streamToRead,
|
|
57365
|
-
{ core, config, messages: prepared.processedMessages.length > 0 ? prepared.processedMessages : prepared.originalMessages, compressMessages: prepared.originalMessages, session: prepared.session, log: ctx.log, proxyUrl, protocol: prepared.protocol, textProtocol, debug: opts.debug, nudge: prepared.nudge },
|
|
57396
|
+
{ core, config, messages: prepared.processedMessages.length > 0 ? prepared.processedMessages : prepared.originalMessages, compressMessages: prepared.originalMessages, session: prepared.session, log: ctx.log, proxyUrl, protocol: prepared.protocol, textProtocol, debug: opts.debug, nudge: prepared.nudge, refreshFolded },
|
|
57366
57397
|
parsedReq,
|
|
57367
57398
|
{ url: upstreamUrl, headers: reqHeaders },
|
|
57368
57399
|
adapter,
|