picocode-core 0.9.178 → 0.9.179
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/package.json +1 -1
- package/src/derive.js +19 -0
package/package.json
CHANGED
package/src/derive.js
CHANGED
|
@@ -183,6 +183,14 @@ export function deriveState(events) {
|
|
|
183
183
|
toolTrimVersions: new Map(),
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
+
const references = toolResultArchive(events).references
|
|
187
|
+
const historyTokens = () => Math.ceil(JSON.stringify(applyToolTrims(
|
|
188
|
+
elideStaleToolResults(state.providerHistory), state.trimmedToolIds,
|
|
189
|
+
state.toolTrimVersions, state.toolItems, references,
|
|
190
|
+
)).length / 4)
|
|
191
|
+
let measuredBaseline = null
|
|
192
|
+
let contextEdited = false
|
|
193
|
+
|
|
186
194
|
for (const event of effectiveEvents) {
|
|
187
195
|
if (event.type === 'usage') {
|
|
188
196
|
if (!dropped.has(event.id)) {
|
|
@@ -194,6 +202,8 @@ export function deriveState(events) {
|
|
|
194
202
|
if (event.data.lastPrompt !== undefined) {
|
|
195
203
|
state.lastPromptTokens = event.data.lastPrompt
|
|
196
204
|
state.lastPromptModel = event.data.model
|
|
205
|
+
measuredBaseline = { tokens: event.data.lastPrompt, history: historyTokens() }
|
|
206
|
+
contextEdited = false
|
|
197
207
|
}
|
|
198
208
|
}
|
|
199
209
|
continue
|
|
@@ -238,6 +248,8 @@ export function deriveState(events) {
|
|
|
238
248
|
if (!canceledUndoTargets.has(event.id)) foldRewind(state, event)
|
|
239
249
|
break
|
|
240
250
|
case 'compact': {
|
|
251
|
+
measuredBaseline = null
|
|
252
|
+
contextEdited = false
|
|
241
253
|
const { summary, keepFrom, sessionFile } = event.data
|
|
242
254
|
if (keepFrom !== undefined || sessionFile) {
|
|
243
255
|
const idx = keepFrom ? state.historyEventIds.indexOf(keepFrom) : -1
|
|
@@ -260,6 +272,7 @@ export function deriveState(events) {
|
|
|
260
272
|
break
|
|
261
273
|
}
|
|
262
274
|
case 'tool_trim':
|
|
275
|
+
contextEdited = true
|
|
263
276
|
for (const callId of event.data.callIds || []) {
|
|
264
277
|
state.trimmedToolIds.add(callId)
|
|
265
278
|
state.toolTrimVersions.set(callId, event.data.version?.algorithm || 'tool-trim-v1')
|
|
@@ -267,10 +280,13 @@ export function deriveState(events) {
|
|
|
267
280
|
state.lastPromptTokens = 0
|
|
268
281
|
break
|
|
269
282
|
case 'tool_restore':
|
|
283
|
+
contextEdited = true
|
|
270
284
|
for (const callId of event.data.callIds || []) state.trimmedToolIds.delete(callId)
|
|
271
285
|
state.lastPromptTokens = 0
|
|
272
286
|
break
|
|
273
287
|
case 'clear':
|
|
288
|
+
measuredBaseline = null
|
|
289
|
+
contextEdited = false
|
|
274
290
|
state.transcript = []
|
|
275
291
|
state.providerHistory = []
|
|
276
292
|
state.historyEventIds = []
|
|
@@ -303,6 +319,9 @@ export function deriveState(events) {
|
|
|
303
319
|
}
|
|
304
320
|
}
|
|
305
321
|
|
|
322
|
+
state.estimatedPromptTokens = contextEdited && measuredBaseline
|
|
323
|
+
? Math.max(0, measuredBaseline.tokens + historyTokens() - measuredBaseline.history)
|
|
324
|
+
: null
|
|
306
325
|
const effectiveHistory = elideStaleToolResults(state.providerHistory)
|
|
307
326
|
state.providerHistory = applyToolTrims(effectiveHistory, state.trimmedToolIds, state.toolTrimVersions, state.toolItems, toolResultArchive(events).references)
|
|
308
327
|
annotateToolContext(state, state.providerHistory, state.trimmedToolIds)
|