@duetso/agent 0.1.192 → 0.1.193
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/dist/package.json
CHANGED
|
@@ -50,8 +50,21 @@ export declare function calculateWireBytes(messages: AgentMessage[]): number;
|
|
|
50
50
|
export declare function calculateWireTokens(messages: AgentMessage[]): number;
|
|
51
51
|
/**
|
|
52
52
|
* Drop messages whose timestamp is at or before the eviction horizon, then
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* pick a provider-valid head for the surviving tail.
|
|
54
|
+
*
|
|
55
|
+
* Preferred anchor is the next real `user` turn: the cleanest head and the
|
|
56
|
+
* strongest context anchor. But a long autonomous run (a tool loop with no
|
|
57
|
+
* intervening user input) can leave a post-horizon tail with NO user turn
|
|
58
|
+
* at all. Skipping to a user message then would walk off the end and return
|
|
59
|
+
* an empty list — which starves the wire and lets the model loop forever,
|
|
60
|
+
* re-planning identically from durable memory every turn because it never
|
|
61
|
+
* sees its own recent work (see session_rUjMi_pUNzhB). When no user turn
|
|
62
|
+
* survives, fall back to keeping the recent tail anchored on the first
|
|
63
|
+
* non-orphan message: drop only leading `toolResult` messages, since a tool
|
|
64
|
+
* result whose matching tool call was evicted is the one head shape the
|
|
65
|
+
* provider rejects. The budget walk in {@link findEvictionHorizon} still
|
|
66
|
+
* bounds how much of that tail rides the wire, so this never reintroduces
|
|
67
|
+
* unbounded context growth — it only guarantees a non-empty, valid payload.
|
|
55
68
|
*/
|
|
56
69
|
export declare function applyEvictionHorizon(messages: AgentMessage[], horizon: number): AgentMessage[];
|
|
57
70
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire-shaping.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/wire-shaping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAAsC,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAU/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CAEvD;AA+DD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAInE;AA+BD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAIpE;AAED
|
|
1
|
+
{"version":3,"file":"wire-shaping.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/wire-shaping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAAsC,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAU/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CAEvD;AA+DD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAInE;AA+BD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAIpE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAwB9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,OAAO,GACtD,MAAM,CASR"}
|
|
@@ -149,8 +149,21 @@ export function calculateWireTokens(messages) {
|
|
|
149
149
|
}
|
|
150
150
|
/**
|
|
151
151
|
* Drop messages whose timestamp is at or before the eviction horizon, then
|
|
152
|
-
*
|
|
153
|
-
*
|
|
152
|
+
* pick a provider-valid head for the surviving tail.
|
|
153
|
+
*
|
|
154
|
+
* Preferred anchor is the next real `user` turn: the cleanest head and the
|
|
155
|
+
* strongest context anchor. But a long autonomous run (a tool loop with no
|
|
156
|
+
* intervening user input) can leave a post-horizon tail with NO user turn
|
|
157
|
+
* at all. Skipping to a user message then would walk off the end and return
|
|
158
|
+
* an empty list — which starves the wire and lets the model loop forever,
|
|
159
|
+
* re-planning identically from durable memory every turn because it never
|
|
160
|
+
* sees its own recent work (see session_rUjMi_pUNzhB). When no user turn
|
|
161
|
+
* survives, fall back to keeping the recent tail anchored on the first
|
|
162
|
+
* non-orphan message: drop only leading `toolResult` messages, since a tool
|
|
163
|
+
* result whose matching tool call was evicted is the one head shape the
|
|
164
|
+
* provider rejects. The budget walk in {@link findEvictionHorizon} still
|
|
165
|
+
* bounds how much of that tail rides the wire, so this never reintroduces
|
|
166
|
+
* unbounded context growth — it only guarantees a non-empty, valid payload.
|
|
154
167
|
*/
|
|
155
168
|
export function applyEvictionHorizon(messages, horizon) {
|
|
156
169
|
if (horizon <= 0)
|
|
@@ -159,12 +172,25 @@ export function applyEvictionHorizon(messages, horizon) {
|
|
|
159
172
|
while (firstKept < messages.length && messageTimestamp(messages[firstKept]) <= horizon) {
|
|
160
173
|
firstKept += 1;
|
|
161
174
|
}
|
|
162
|
-
while (firstKept < messages.length && messages[firstKept].role !== "user") {
|
|
163
|
-
firstKept += 1;
|
|
164
|
-
}
|
|
165
175
|
if (firstKept === 0)
|
|
166
176
|
return messages;
|
|
167
|
-
|
|
177
|
+
let userAnchor = firstKept;
|
|
178
|
+
while (userAnchor < messages.length && messages[userAnchor].role !== "user") {
|
|
179
|
+
userAnchor += 1;
|
|
180
|
+
}
|
|
181
|
+
if (userAnchor < messages.length)
|
|
182
|
+
return messages.slice(userAnchor);
|
|
183
|
+
let nonOrphan = firstKept;
|
|
184
|
+
while (nonOrphan < messages.length && messages[nonOrphan].role === "toolResult") {
|
|
185
|
+
nonOrphan += 1;
|
|
186
|
+
}
|
|
187
|
+
// Degenerate tail of nothing but orphan tool results: empty-after-skip and
|
|
188
|
+
// provider-invalid both lose, so keep the raw post-horizon slice — a
|
|
189
|
+
// non-empty payload is the lesser evil and effectively never happens in
|
|
190
|
+
// practice (tool results sit adjacent to the call that produced them).
|
|
191
|
+
if (nonOrphan >= messages.length)
|
|
192
|
+
return messages.slice(firstKept);
|
|
193
|
+
return messages.slice(nonOrphan);
|
|
168
194
|
}
|
|
169
195
|
/**
|
|
170
196
|
* Walk oldest-first, advance the horizon past each message in turn, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire-shaping.js","sourceRoot":"","sources":["../../../src/turn-runner/wire-shaping.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wire-shaping.js","sourceRoot":"","sources":["../../../src/turn-runner/wire-shaping.ts"],"names":[],"mappings":"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"}
|