token-optimizer-opencode 1.0.8 → 1.0.14

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 (55) hide show
  1. package/README.md +15 -23
  2. package/dist/continuity/matcher.d.ts +15 -0
  3. package/dist/continuity/matcher.d.ts.map +1 -1
  4. package/dist/continuity/matcher.js +30 -1
  5. package/dist/continuity/matcher.js.map +1 -1
  6. package/dist/continuity/restore.d.ts +8 -1
  7. package/dist/continuity/restore.d.ts.map +1 -1
  8. package/dist/continuity/restore.js +43 -1
  9. package/dist/continuity/restore.js.map +1 -1
  10. package/dist/continuity/resume-lean.d.ts +126 -0
  11. package/dist/continuity/resume-lean.d.ts.map +1 -0
  12. package/dist/continuity/resume-lean.js +437 -0
  13. package/dist/continuity/resume-lean.js.map +1 -0
  14. package/dist/dashboard/generator.d.ts.map +1 -1
  15. package/dist/dashboard/generator.js +232 -36
  16. package/dist/dashboard/generator.js.map +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +58 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/nudges/fresh-session-nudge.d.ts +72 -0
  21. package/dist/nudges/fresh-session-nudge.d.ts.map +1 -0
  22. package/dist/nudges/fresh-session-nudge.js +190 -0
  23. package/dist/nudges/fresh-session-nudge.js.map +1 -0
  24. package/dist/nudges/verbosity-steer.d.ts +28 -0
  25. package/dist/nudges/verbosity-steer.d.ts.map +1 -0
  26. package/dist/nudges/verbosity-steer.js +61 -0
  27. package/dist/nudges/verbosity-steer.js.map +1 -0
  28. package/dist/pricing.d.ts +58 -0
  29. package/dist/pricing.d.ts.map +1 -0
  30. package/dist/pricing.js +307 -0
  31. package/dist/pricing.js.map +1 -0
  32. package/dist/savings.baseline.test.d.ts +2 -0
  33. package/dist/savings.baseline.test.d.ts.map +1 -0
  34. package/dist/savings.baseline.test.js +100 -0
  35. package/dist/savings.baseline.test.js.map +1 -0
  36. package/dist/savings.d.ts +41 -3
  37. package/dist/savings.d.ts.map +1 -1
  38. package/dist/savings.js +296 -86
  39. package/dist/savings.js.map +1 -1
  40. package/dist/storage/trends.d.ts +61 -0
  41. package/dist/storage/trends.d.ts.map +1 -1
  42. package/dist/storage/trends.js +149 -0
  43. package/dist/storage/trends.js.map +1 -1
  44. package/dist/util/context-window.d.ts.map +1 -1
  45. package/dist/util/context-window.js +2 -1
  46. package/dist/util/context-window.js.map +1 -1
  47. package/dist/util/env.d.ts +2 -0
  48. package/dist/util/env.d.ts.map +1 -1
  49. package/dist/util/env.js +4 -0
  50. package/dist/util/env.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/nudges/tool-call-warn.d.ts +0 -7
  53. package/dist/nudges/tool-call-warn.d.ts.map +0 -1
  54. package/dist/nudges/tool-call-warn.js +0 -20
  55. package/dist/nudges/tool-call-warn.js.map +0 -1
@@ -91,6 +91,155 @@ export class TrendsStore {
91
91
  // Best-effort: never crash the caller over savings tracking
92
92
  }
93
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
+ }
94
243
  close() {
95
244
  if (this.db) {
96
245
  this.db.close();
@@ -1 +1 @@
1
- {"version":3,"file":"trends.js","sourceRoot":"","sources":["../../src/storage/trends.ts"],"names":[],"mappings":"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"}
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":"AA8EA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkB3D"}
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,5 +1,6 @@
1
1
  const MODEL_CONTEXT_WINDOWS = {
2
- // Anthropic (Opus/Sonnet 1M GA since March 13, 2026)
2
+ // Anthropic (Fable/Opus/Sonnet 1M GA since March 13, 2026)
3
+ fable: 1_000_000,
3
4
  opus: 1_000_000,
4
5
  sonnet: 1_000_000,
5
6
  haiku: 200_000,
@@ -1 +1 @@
1
- {"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../src/util/context-window.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAA2B;IACpD,qDAAqD;IACrD,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"}
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"}
@@ -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;
@@ -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,CAmC3E"}
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),
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"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"}
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.8",
3
+ "version": "1.0.14",
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"}