token-optimizer-opencode 1.0.6 → 1.0.13
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/continuity/matcher.d.ts +18 -0
- package/dist/continuity/matcher.d.ts.map +1 -1
- package/dist/continuity/matcher.js +34 -1
- package/dist/continuity/matcher.js.map +1 -1
- package/dist/continuity/restore.d.ts +8 -1
- package/dist/continuity/restore.d.ts.map +1 -1
- package/dist/continuity/restore.js +43 -1
- package/dist/continuity/restore.js.map +1 -1
- package/dist/continuity/resume-lean.d.ts +126 -0
- package/dist/continuity/resume-lean.d.ts.map +1 -0
- package/dist/continuity/resume-lean.js +437 -0
- package/dist/continuity/resume-lean.js.map +1 -0
- package/dist/dashboard/generator.d.ts.map +1 -1
- package/dist/dashboard/generator.js +232 -36
- package/dist/dashboard/generator.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -4
- package/dist/index.js.map +1 -1
- package/dist/nudges/fresh-session-nudge.d.ts +72 -0
- package/dist/nudges/fresh-session-nudge.d.ts.map +1 -0
- package/dist/nudges/fresh-session-nudge.js +190 -0
- package/dist/nudges/fresh-session-nudge.js.map +1 -0
- package/dist/nudges/verbosity-steer.d.ts +28 -0
- package/dist/nudges/verbosity-steer.d.ts.map +1 -0
- package/dist/nudges/verbosity-steer.js +61 -0
- package/dist/nudges/verbosity-steer.js.map +1 -0
- package/dist/pricing.d.ts +58 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +307 -0
- package/dist/pricing.js.map +1 -0
- package/dist/savings.baseline.test.d.ts +2 -0
- package/dist/savings.baseline.test.d.ts.map +1 -0
- package/dist/savings.baseline.test.js +100 -0
- package/dist/savings.baseline.test.js.map +1 -0
- package/dist/savings.d.ts +41 -3
- package/dist/savings.d.ts.map +1 -1
- package/dist/savings.js +296 -86
- package/dist/savings.js.map +1 -1
- package/dist/storage/trends.d.ts +74 -0
- package/dist/storage/trends.d.ts.map +1 -1
- package/dist/storage/trends.js +199 -0
- package/dist/storage/trends.js.map +1 -1
- package/dist/util/context-window.d.ts.map +1 -1
- package/dist/util/context-window.js +2 -1
- package/dist/util/context-window.js.map +1 -1
- package/dist/util/env.d.ts +2 -0
- package/dist/util/env.d.ts.map +1 -1
- package/dist/util/env.js +4 -0
- package/dist/util/env.js.map +1 -1
- package/package.json +1 -1
- package/dist/nudges/tool-call-warn.d.ts +0 -7
- package/dist/nudges/tool-call-warn.d.ts.map +0 -1
- package/dist/nudges/tool-call-warn.js +0 -20
- package/dist/nudges/tool-call-warn.js.map +0 -1
package/dist/storage/trends.js
CHANGED
|
@@ -22,6 +22,22 @@ CREATE TABLE IF NOT EXISTS session_log (
|
|
|
22
22
|
created_at REAL NOT NULL
|
|
23
23
|
);
|
|
24
24
|
`;
|
|
25
|
+
const SAVINGS_EVENTS_SCHEMA = `
|
|
26
|
+
CREATE TABLE IF NOT EXISTS savings_events (
|
|
27
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
+
timestamp TEXT NOT NULL,
|
|
29
|
+
event_type TEXT NOT NULL,
|
|
30
|
+
tokens_saved INTEGER DEFAULT 0,
|
|
31
|
+
cost_saved_usd REAL DEFAULT 0.0,
|
|
32
|
+
session_id TEXT,
|
|
33
|
+
detail TEXT,
|
|
34
|
+
model TEXT
|
|
35
|
+
);
|
|
36
|
+
`;
|
|
37
|
+
// Sonnet input rate ($/M tokens) used as fallback when the active model is
|
|
38
|
+
// unknown at savings-log time (e.g. checkpoint inject fires before the first
|
|
39
|
+
// assistant message arrives). Matches Python's _log_savings_event fallback.
|
|
40
|
+
const SONNET_INPUT_RATE_PER_MTOK = 3.0;
|
|
25
41
|
export class TrendsStore {
|
|
26
42
|
db = null;
|
|
27
43
|
dbPath;
|
|
@@ -38,9 +54,192 @@ export class TrendsStore {
|
|
|
38
54
|
this.db.exec("PRAGMA journal_mode=WAL");
|
|
39
55
|
this.db.exec("PRAGMA busy_timeout=3000");
|
|
40
56
|
this.db.exec(TRENDS_SCHEMA);
|
|
57
|
+
this.db.exec(SAVINGS_EVENTS_SCHEMA);
|
|
41
58
|
}
|
|
42
59
|
return this.db;
|
|
43
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Log a realized-savings event to the savings_events table.
|
|
63
|
+
*
|
|
64
|
+
* This is the TypeScript equivalent of Python's `_log_savings_event`.
|
|
65
|
+
* Model is not known at checkpoint-inject time, so cost_saved_usd is
|
|
66
|
+
* priced at the Sonnet input fallback rate — same behaviour as Python's
|
|
67
|
+
* resolver when the session model cannot be determined.
|
|
68
|
+
*
|
|
69
|
+
* Guards:
|
|
70
|
+
* - tokensSaved <= 0 → no-op (never credit zero or negative)
|
|
71
|
+
* - Any exception → silently swallowed (must never break the caller)
|
|
72
|
+
*/
|
|
73
|
+
logSavingsEvent(eventType, tokensSaved, sessionId, detail, model = null) {
|
|
74
|
+
if (tokensSaved <= 0)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
const db = this.connect();
|
|
78
|
+
const costSavedUsd = (tokensSaved * SONNET_INPUT_RATE_PER_MTOK) / 1_000_000;
|
|
79
|
+
db.run(`INSERT INTO savings_events (timestamp, event_type, tokens_saved, cost_saved_usd, session_id, detail, model)
|
|
80
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
|
|
81
|
+
new Date().toISOString(),
|
|
82
|
+
eventType,
|
|
83
|
+
tokensSaved,
|
|
84
|
+
costSavedUsd,
|
|
85
|
+
sessionId ?? null,
|
|
86
|
+
detail ?? null,
|
|
87
|
+
model ?? null,
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Best-effort: never crash the caller over savings tracking
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* True if a savings event of the given type for the given target session was
|
|
96
|
+
* already credited within the specified window.
|
|
97
|
+
*
|
|
98
|
+
* Prevents double-counting when a user opens the same cold session from two
|
|
99
|
+
* different fresh sessions (cross-session dedup). Mirrors Python's
|
|
100
|
+
* `_resume_lean_already_credited` which dedups on the TARGET session_uuid.
|
|
101
|
+
*
|
|
102
|
+
* Best-effort: returns false on any error so we never block savings accounting.
|
|
103
|
+
*/
|
|
104
|
+
hasRecentSavingsEvent(eventType, sessionId, withinMs) {
|
|
105
|
+
if (!sessionId || withinMs <= 0)
|
|
106
|
+
return false;
|
|
107
|
+
try {
|
|
108
|
+
const db = this.connect();
|
|
109
|
+
const cutoff = new Date(Date.now() - withinMs).toISOString();
|
|
110
|
+
const row = db.query(`SELECT 1 FROM savings_events
|
|
111
|
+
WHERE event_type = ?
|
|
112
|
+
AND session_id = ?
|
|
113
|
+
AND timestamp >= ?
|
|
114
|
+
LIMIT 1`).get(eventType, sessionId, cutoff);
|
|
115
|
+
return row !== null;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Returns the tokens_cache_write value from session_log for the given session,
|
|
123
|
+
* or 0 if not found / unavailable.
|
|
124
|
+
*
|
|
125
|
+
* This is the closest opencode equivalent to Python's
|
|
126
|
+
* `cache_create_1h_tokens + cache_create_5m_tokens` — the real cold-rewrite
|
|
127
|
+
* cost that a lean resume avoids. Used by logResumeLeanSavings for the
|
|
128
|
+
* primary avoided-cost estimate.
|
|
129
|
+
*
|
|
130
|
+
* OVERCOUNT VERIFICATION (Fix 7): tokens_cache_write is populated from
|
|
131
|
+
* `t?.cache?.write` in the message.updated handler, which maps directly to
|
|
132
|
+
* OpenCode SDK's `Message.tokens.cache.write` field. Per the SDK type definition
|
|
133
|
+
* (types.gen.d.ts L120), `cache.write` is the cache CREATION count only —
|
|
134
|
+
* distinct from `cache.read` (cheap hits). A `--resume` cold rewrite ONLY incurs
|
|
135
|
+
* write (creation) cost; read hits on an established cache do NOT re-pay write cost.
|
|
136
|
+
* Therefore tokens_cache_write is write-only and does NOT conflate cache-read tokens.
|
|
137
|
+
* No discount needed: this column is the correct, non-overcounting avoided-cost metric.
|
|
138
|
+
*
|
|
139
|
+
* Best-effort: returns 0 on any error.
|
|
140
|
+
*/
|
|
141
|
+
getSessionCacheWrite(sessionId) {
|
|
142
|
+
if (!sessionId)
|
|
143
|
+
return 0;
|
|
144
|
+
try {
|
|
145
|
+
const db = this.connect();
|
|
146
|
+
const row = db.query(`SELECT tokens_cache_write FROM session_log
|
|
147
|
+
WHERE session_id = ?
|
|
148
|
+
ORDER BY created_at DESC
|
|
149
|
+
LIMIT 1`).get(sessionId);
|
|
150
|
+
return (row?.tokens_cache_write ?? 0) > 0 ? row.tokens_cache_write : 0;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return 0;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Summarize compression/volume-reduction savings_events over the window for
|
|
158
|
+
* the realized-savings compression add-back (pool #3).
|
|
159
|
+
*
|
|
160
|
+
* Mirrors Python's `_get_savings_summary`: the returned `totalCostSavedUsd` is
|
|
161
|
+
* the MEASURED compression floor with estimated-tier categories relocated OUT
|
|
162
|
+
* (setup_optimization, mcp_cap, hint_followed) and tool_archive re-expansions
|
|
163
|
+
* NETTED against tool_archive (a re-popped result didn't stay collapsed, so its
|
|
164
|
+
* eager credit is reversed, floored at 0). What remains is the directly-metered
|
|
165
|
+
* removed-token dollars the old way would have re-read.
|
|
166
|
+
*
|
|
167
|
+
* Best-effort: returns zeros on any error (never throws). `now` is injectable
|
|
168
|
+
* for testing.
|
|
169
|
+
*/
|
|
170
|
+
getCompressionSavings(days = 30, now = Date.now()) {
|
|
171
|
+
try {
|
|
172
|
+
const db = this.connect();
|
|
173
|
+
const cutoff = new Date(now - days * 86_400_000).toISOString();
|
|
174
|
+
const rows = db
|
|
175
|
+
.query(`SELECT event_type, COUNT(*) as cnt,
|
|
176
|
+
SUM(tokens_saved) as tok, SUM(cost_saved_usd) as cost
|
|
177
|
+
FROM savings_events WHERE timestamp >= ? GROUP BY event_type`)
|
|
178
|
+
.all(cutoff);
|
|
179
|
+
const byCategory = new Map();
|
|
180
|
+
for (const r of rows) {
|
|
181
|
+
byCategory.set(r.event_type, {
|
|
182
|
+
events: r.cnt,
|
|
183
|
+
tokens: r.tok ?? 0,
|
|
184
|
+
cost: r.cost ?? 0,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// Relocate estimated-tier categories OUT of the measured total (A1/A3/U-G
|
|
188
|
+
// in measure.py: setup_optimization is a one-time trim double-counted by
|
|
189
|
+
// structural_savings; mcp_cap and hint_followed are observed-trigger but
|
|
190
|
+
// estimated-magnitude; verbosity_steer output reduction is estimated not
|
|
191
|
+
// metered). They never belong in the measured realized total.
|
|
192
|
+
for (const k of ["setup_optimization", "mcp_cap", "hint_followed", "verbosity_steer"]) {
|
|
193
|
+
byCategory.delete(k);
|
|
194
|
+
}
|
|
195
|
+
// B6: net tool_archive re-expansions against tool_archive (re-popped
|
|
196
|
+
// results didn't stay collapsed), floored at 0. The debit is not its own line.
|
|
197
|
+
const reexpand = byCategory.get("tool_archive_reexpand");
|
|
198
|
+
if (reexpand) {
|
|
199
|
+
byCategory.delete("tool_archive_reexpand");
|
|
200
|
+
const ta = byCategory.get("tool_archive");
|
|
201
|
+
if (ta) {
|
|
202
|
+
ta.tokens = Math.max(0, ta.tokens - reexpand.tokens);
|
|
203
|
+
ta.cost = Math.max(0, ta.cost - reexpand.cost);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
let totalTokensSaved = 0;
|
|
207
|
+
let totalCostSavedUsd = 0;
|
|
208
|
+
let totalEvents = 0;
|
|
209
|
+
for (const v of byCategory.values()) {
|
|
210
|
+
totalTokensSaved += v.tokens;
|
|
211
|
+
totalCostSavedUsd += v.cost;
|
|
212
|
+
totalEvents += v.events;
|
|
213
|
+
}
|
|
214
|
+
return { totalTokensSaved, totalCostSavedUsd, totalEvents };
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return { totalTokensSaved: 0, totalCostSavedUsd: 0, totalEvents: 0 };
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Sum the ESTIMATED verbosity_steer savings (cost_saved_usd) over the window.
|
|
222
|
+
* These are estimated output-token reductions from lean-output conciseness nudges —
|
|
223
|
+
* the trigger is observed but the magnitude is not metered. Mirrors measure.py
|
|
224
|
+
* `_get_savings_summary` which relocates verbosity_steer to the estimated tier.
|
|
225
|
+
* The caller reprices to the baseline OUTPUT rate and adds as a separate pool.
|
|
226
|
+
*
|
|
227
|
+
* Best-effort: returns 0 on any error (never throws). `now` is injectable.
|
|
228
|
+
*/
|
|
229
|
+
getVerbositySavings(days = 30, now = Date.now()) {
|
|
230
|
+
try {
|
|
231
|
+
const db = this.connect();
|
|
232
|
+
const cutoff = new Date(now - days * 86_400_000).toISOString();
|
|
233
|
+
const row = db
|
|
234
|
+
.query(`SELECT SUM(cost_saved_usd) as cost
|
|
235
|
+
FROM savings_events WHERE timestamp >= ? AND event_type = 'verbosity_steer'`)
|
|
236
|
+
.get(cutoff);
|
|
237
|
+
return Math.max(0, row?.cost ?? 0);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
44
243
|
close() {
|
|
45
244
|
if (this.db) {
|
|
46
245
|
this.db.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trends.js","sourceRoot":"","sources":["../../src/storage/trends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;CAoBrB,CAAC;
|
|
1
|
+
{"version":3,"file":"trends.js","sourceRoot":"","sources":["../../src/storage/trends.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-window.d.ts","sourceRoot":"","sources":["../../src/util/context-window.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-window.d.ts","sourceRoot":"","sources":["../../src/util/context-window.ts"],"names":[],"mappings":"AA+EA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkB3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../src/util/context-window.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAA2B;IACpD,
|
|
1
|
+
{"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../src/util/context-window.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAA2B;IACpD,2DAA2D;IAC3D,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAE,SAAS;IAC5B,iBAAiB,EAAE,SAAS;IAC5B,mBAAmB,EAAE,SAAS;IAC9B,kBAAkB,EAAE,OAAO;IAE3B,sBAAsB;IACtB,aAAa,EAAE,SAAS;IACxB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,OAAO;IACvB,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,OAAO;IACxB,SAAS,EAAE,OAAO;IAClB,oBAAoB,EAAE,OAAO;IAC7B,eAAe,EAAE,OAAO;IACxB,SAAS,EAAE,OAAO;IAClB,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,OAAO;IACrB,sBAAsB;IACtB,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,OAAO;IACtB,mBAAmB;IACnB,EAAE,EAAE,OAAO;IACX,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAElB,gBAAgB;IAChB,kBAAkB,EAAE,SAAS;IAC7B,wBAAwB,EAAE,SAAS;IACnC,uBAAuB,EAAE,SAAS;IAClC,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,SAAS;IAC7B,uBAAuB,EAAE,SAAS;IAClC,kBAAkB,EAAE,SAAS;IAC7B,uBAAuB,EAAE,SAAS;IAElC,WAAW;IACX,aAAa,EAAE,OAAO;IACtB,aAAa,EAAE,OAAO;IAEtB,OAAO;IACP,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,OAAO;IAErB,UAAU;IACV,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,OAAO;IAExB,MAAM;IACN,QAAQ,EAAE,OAAO;IAEjB,QAAQ;IACR,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,SAAS,EAAE,OAAO;IAClB,eAAe,EAAE,OAAO;IACxB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAEvC,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,sBAAsB,CAAC;IAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAElC,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,8EAA8E;IAC9E,6EAA6E;IAC7E,+DAA+D;IAC/D,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IAE7E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
package/dist/util/env.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface TokenOptimizerConfig {
|
|
|
10
10
|
relevanceThreshold: number;
|
|
11
11
|
checkpointCooldownSeconds: number;
|
|
12
12
|
checkpointMaxChars: number;
|
|
13
|
+
freshNudgeQualityThreshold: number;
|
|
14
|
+
freshNudgeMinFillPct: number;
|
|
13
15
|
features: {
|
|
14
16
|
qualityNudges: boolean;
|
|
15
17
|
loopDetection: boolean;
|
package/dist/util/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,EAAE,MAAM,CAAC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE;QACR,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,OAAO,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAgCD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,EAAE,MAAM,CAAC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE;QACR,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,OAAO,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAgCD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,oBAAoB,CA6C3E"}
|
package/dist/util/env.js
CHANGED
|
@@ -50,6 +50,10 @@ export function resolveConfig(options) {
|
|
|
50
50
|
relevanceThreshold: floatEnv("TOKEN_OPTIMIZER_RELEVANCE_THRESHOLD", 0.6),
|
|
51
51
|
checkpointCooldownSeconds: intEnv("TOKEN_OPTIMIZER_CHECKPOINT_COOLDOWN_SECONDS", 90),
|
|
52
52
|
checkpointMaxChars: intEnv("TOKEN_OPTIMIZER_CHECKPOINT_MAX_CHARS", 2000),
|
|
53
|
+
// Fresh-session nudge firing thresholds. Overridable via PluginOptions like
|
|
54
|
+
// every other tunable (previously env-only, inconsistent with the rest).
|
|
55
|
+
freshNudgeQualityThreshold: intEnv("TOKEN_OPTIMIZER_FRESH_NUDGE_QUALITY", typeof opts.freshNudgeQualityThreshold === "number" ? opts.freshNudgeQualityThreshold : 70),
|
|
56
|
+
freshNudgeMinFillPct: intEnv("TOKEN_OPTIMIZER_FRESH_NUDGE_MIN_FILL", typeof opts.freshNudgeMinFillPct === "number" ? opts.freshNudgeMinFillPct : 50),
|
|
53
57
|
features: {
|
|
54
58
|
qualityNudges: features.qualityNudges !== false && boolEnv("TOKEN_OPTIMIZER_NUDGES", true),
|
|
55
59
|
loopDetection: features.loopDetection !== false && boolEnv("TOKEN_OPTIMIZER_LOOP_DETECTION", true),
|
package/dist/util/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "token-optimizer-opencode",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "Context quality scoring, smart compaction, and session continuity for OpenCode. Full parity with the Claude Code Token Optimizer plugin.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/plugin.js",
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export interface ToolCallWarningResult {
|
|
2
|
-
shouldWarn: boolean;
|
|
3
|
-
level: "WARNING" | "CRITICAL" | null;
|
|
4
|
-
message: string | null;
|
|
5
|
-
}
|
|
6
|
-
export declare function checkToolCallFatigue(toolCalls: number, fillPct: number, warnThreshold: number, criticalThreshold: number): ToolCallWarningResult;
|
|
7
|
-
//# sourceMappingURL=tool-call-warn.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-warn.d.ts","sourceRoot":"","sources":["../../src/nudges/tool-call-warn.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,GACxB,qBAAqB,CAoBvB"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export function checkToolCallFatigue(toolCalls, fillPct, warnThreshold, criticalThreshold) {
|
|
2
|
-
if (fillPct < 0.5)
|
|
3
|
-
return { shouldWarn: false, level: null, message: null };
|
|
4
|
-
if (toolCalls >= criticalThreshold) {
|
|
5
|
-
return {
|
|
6
|
-
shouldWarn: true,
|
|
7
|
-
level: "CRITICAL",
|
|
8
|
-
message: `[Token Optimizer] ${criticalThreshold}+ tool calls at ${Math.round(fillPct * 100)}% fill. Instruction adherence severely degraded. Start a fresh session.`,
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
if (toolCalls >= warnThreshold) {
|
|
12
|
-
return {
|
|
13
|
-
shouldWarn: true,
|
|
14
|
-
level: "WARNING",
|
|
15
|
-
message: `[Token Optimizer] ${warnThreshold}+ tool calls at ${Math.round(fillPct * 100)}% fill. Consider a fresh session.`,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
return { shouldWarn: false, level: null, message: null };
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=tool-call-warn.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-warn.js","sourceRoot":"","sources":["../../src/nudges/tool-call-warn.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,OAAe,EACf,aAAqB,EACrB,iBAAyB;IAEzB,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE5E,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;QACnC,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,qBAAqB,iBAAiB,mBAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,yEAAyE;SACrK,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,qBAAqB,aAAa,mBAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,mCAAmC;SAC3H,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC"}
|