@te-river/opencode-team-mode 1.8.2 → 1.8.4

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 (59) hide show
  1. package/README.md +499 -1012
  2. package/README.zh-CN.md +493 -909
  3. package/dist/host/v2-prune.d.ts +81 -1
  4. package/dist/host/v2-prune.d.ts.map +1 -1
  5. package/dist/host/v2-prune.js +303 -18
  6. package/dist/host/v2-prune.js.map +1 -1
  7. package/dist/host/v2-retry.d.ts +8 -0
  8. package/dist/host/v2-retry.d.ts.map +1 -1
  9. package/dist/host/v2-retry.js +8 -2
  10. package/dist/host/v2-retry.js.map +1 -1
  11. package/dist/host/v2-session.d.ts +8 -0
  12. package/dist/host/v2-session.d.ts.map +1 -1
  13. package/dist/host/v2-session.js +18 -5
  14. package/dist/host/v2-session.js.map +1 -1
  15. package/dist/host/v2-state.d.ts +165 -0
  16. package/dist/host/v2-state.d.ts.map +1 -0
  17. package/dist/host/v2-state.js +448 -0
  18. package/dist/host/v2-state.js.map +1 -0
  19. package/dist/host/v2-tail.d.ts +102 -0
  20. package/dist/host/v2-tail.d.ts.map +1 -0
  21. package/dist/host/v2-tail.js +198 -0
  22. package/dist/host/v2-tail.js.map +1 -0
  23. package/dist/host/v2-types.d.ts +2 -0
  24. package/dist/host/v2-types.d.ts.map +1 -1
  25. package/dist/host/v2-usage.d.ts +72 -2
  26. package/dist/host/v2-usage.d.ts.map +1 -1
  27. package/dist/host/v2-usage.js +142 -9
  28. package/dist/host/v2-usage.js.map +1 -1
  29. package/dist/host/v2.d.ts.map +1 -1
  30. package/dist/host/v2.js +187 -3
  31. package/dist/host/v2.js.map +1 -1
  32. package/dist/prompts/lead.d.ts +1 -1
  33. package/dist/prompts/lead.d.ts.map +1 -1
  34. package/dist/prompts/lead.js +12 -0
  35. package/dist/prompts/lead.js.map +1 -1
  36. package/dist/prompts/shared.d.ts +1 -1
  37. package/dist/prompts/shared.d.ts.map +1 -1
  38. package/dist/prompts/shared.js +5 -0
  39. package/dist/prompts/shared.js.map +1 -1
  40. package/dist/tm/config-layers.d.ts.map +1 -1
  41. package/dist/tm/config-layers.js +4 -0
  42. package/dist/tm/config-layers.js.map +1 -1
  43. package/dist/tm/config.d.ts +8 -0
  44. package/dist/tm/config.d.ts.map +1 -1
  45. package/dist/tm/config.js.map +1 -1
  46. package/dist/tm/dispatch.d.ts +17 -0
  47. package/dist/tm/dispatch.d.ts.map +1 -1
  48. package/dist/tm/dispatch.js +52 -7
  49. package/dist/tm/dispatch.js.map +1 -1
  50. package/dist/tm/pipelines.d.ts +9 -0
  51. package/dist/tm/pipelines.d.ts.map +1 -1
  52. package/dist/tm/pipelines.js +1 -1
  53. package/dist/tm/pipelines.js.map +1 -1
  54. package/dist/tm/stats.d.ts +11 -0
  55. package/dist/tm/stats.d.ts.map +1 -1
  56. package/dist/tm/stats.js +34 -1
  57. package/dist/tm/stats.js.map +1 -1
  58. package/docs/v2-port-notes.md +7 -3
  59. package/package.json +1 -1
@@ -0,0 +1,198 @@
1
+ /**
2
+ * 易变注入的请求尾部 (`dynamicTail`) — 把「每轮都可能变」的上下文搬到
3
+ * `event.messages` 的最后一条,而不是塞进 `event.system`。
4
+ *
5
+ * 为什么:system 前缀是 provider 前缀缓存最值钱的部分。状态卡每轮都变(账本
6
+ * 动一下、窗口 bucket 跳一格、重试指令出现/消失),它一改,system 里它之后的
7
+ * 每一个 token 都失去缓存命中——一份 ≤300 token 的卡片能让几万 token 的 system
8
+ * 前缀全部作废。把它挪到请求末尾的一条 user 消息,system 就保持逐字节稳定。
9
+ *
10
+ * 形状:
11
+ * - 生产者(状态卡 / 窗口 / 重试指令 / 拆分建议)`set(sid, key, text)` 写进
12
+ * 进程内 sink;每个 key 每会话只有一格(后者覆盖前者)。
13
+ * - 本层注册**最后**一个 `session.hook("context")`(在 prune 之后,所以它追加
14
+ * 的消息不会被同一请求的修剪看见):`take(sid)` 取出并清空,按
15
+ * state → window → retry → advice 的顺序渲染成**一条**消息:
16
+ * `{ id: "team-dynamic", role: "user", content: [{ type: "text", text }] }`。
17
+ * - 宿主会跨请求复用 `event.messages`,所以追加前先剥掉以 `[Team 动态上下文]`
18
+ * 开头的旧尾部——否则每轮多一条,最后挤掉真正的工作。
19
+ *
20
+ * **默认 off(2026-10-22 实测)。** 宿主 2.1.x 会把这条例 `role:"user"` 消息持久化进
21
+ * 会话历史,并在下一次请求里把它当作「最后一条用户消息」回放(`synthetic:true` 也拦不住),
22
+ * 所以本层默认不注册;功能保留,只在确认宿主提供非唤醒通道后手动 `dynamicTail: "on"`。
23
+ *
24
+ * `dynamicTail: "off"` 时本层根本不注册,四个生产者各自走原来的 `event.system`
25
+ * 路径,逐字节与改动前一致(这是回滚路径,也是套件里钉住的对照)。
26
+ */
27
+ import { resolveConfig } from "../tm/config.js";
28
+ /** 尾部消息的标记:`event.messages` 里首段文本以它开头的那条就是我们的。 */
29
+ export const DYNAMIC_TAIL_MARKER = "[Team 动态上下文]";
30
+ /** 一条尾部消息的 id——便于宿主/测试认出它,不是能力令牌。 */
31
+ export const DYNAMIC_TAIL_MESSAGE_ID = "team-dynamic";
32
+ /**
33
+ * 渲染顺序是**声明**的,不是 Map 的插入顺序:四个生产者按各自 hook 的注册
34
+ * 顺序写入,若靠插入顺序,重排注册就会重排消息体(一条会被前缀缓存的内容)。
35
+ */
36
+ export const DYNAMIC_SECTION_ORDER = ["state", "window", "retry", "advice"];
37
+ const SECTION_TITLES = {
38
+ state: "状态卡",
39
+ window: "窗口占用",
40
+ retry: "重试指令",
41
+ advice: "拆分建议",
42
+ };
43
+ /**
44
+ * 进程内 sink:`Map<sessionID, Map<key, text>>`。
45
+ *
46
+ * 不做 TTL:`take` 在每个请求的尾部层里清空自己,sink 的生命周期就是「两个
47
+ * hook 之间」——一个会话的残留最多活到它下一次组装请求,且只影响它自己。
48
+ */
49
+ export function createDynamicSink() {
50
+ const bySession = new Map();
51
+ const keyOf = (sessionID) => (typeof sessionID === "string" ? sessionID.trim() : "");
52
+ return {
53
+ set(sessionID, key, text) {
54
+ const sid = keyOf(sessionID);
55
+ if (!sid || typeof text !== "string" || !text.trim())
56
+ return;
57
+ let slot = bySession.get(sid);
58
+ if (!slot) {
59
+ slot = new Map();
60
+ bySession.set(sid, slot);
61
+ }
62
+ slot.set(key, text);
63
+ },
64
+ take(sessionID) {
65
+ const sid = keyOf(sessionID);
66
+ const slot = sid ? bySession.get(sid) : undefined;
67
+ if (!slot || slot.size === 0)
68
+ return new Map();
69
+ bySession.delete(sid);
70
+ return slot;
71
+ },
72
+ peek(sessionID, key) {
73
+ const sid = keyOf(sessionID);
74
+ if (!sid)
75
+ return undefined;
76
+ return bySession.get(sid)?.get(key);
77
+ },
78
+ };
79
+ }
80
+ /** 一条消息的首段文本(`content[]` 是 v2 的形状,`parts[]` 是旧形状;两者都认)。 */
81
+ export function firstTextOf(message) {
82
+ if (!message || typeof message !== "object")
83
+ return "";
84
+ const m = message;
85
+ const parts = Array.isArray(m.content) ? m.content : Array.isArray(m.parts) ? m.parts : [];
86
+ for (const part of parts) {
87
+ if (typeof part === "string")
88
+ return part;
89
+ const text = part?.text;
90
+ if (typeof text === "string")
91
+ return text;
92
+ }
93
+ return typeof m.text === "string" ? m.text : "";
94
+ }
95
+ /** 是我们上一轮追加的尾部消息吗?marker 前缀或我们铸造的 id,任一即可。 */
96
+ export function isDynamicTailMessage(message) {
97
+ if (!message || typeof message !== "object")
98
+ return false;
99
+ if (message.id === DYNAMIC_TAIL_MESSAGE_ID)
100
+ return true;
101
+ return firstTextOf(message).trimStart().startsWith(DYNAMIC_TAIL_MARKER);
102
+ }
103
+ /** 渲染一条尾部消息的正文:首行 marker,每段前一行 `### <段名>`。 */
104
+ export function renderDynamicTail(sections) {
105
+ const out = [DYNAMIC_TAIL_MARKER];
106
+ for (const key of DYNAMIC_SECTION_ORDER) {
107
+ const body = sections.get(key);
108
+ if (!body || !body.trim())
109
+ continue;
110
+ out.push(`### ${SECTION_TITLES[key]}`);
111
+ out.push(body.trim());
112
+ }
113
+ return out.join("\n");
114
+ }
115
+ const isOff = (value) => typeof value === "string" && /^(off|0|false|no)$/i.test(value.trim());
116
+ /** `dynamicTail: "off"`(以及旧的假值拼写)关闭;注册表默认 off,只有显式 on 才走尾部注入。 */
117
+ export function resolveDynamicTailConfig(config = resolveConfig()) {
118
+ return { enabled: !isOff(config.dynamicTail) };
119
+ }
120
+ /**
121
+ * 注册请求尾部层。**必须是最后一个 `session.hook("context")`**:四个生产者都在
122
+ * 它之前写入 sink,prune 也在它之前看过消息数组,它负责把 sink 的内容收成一条
123
+ * 消息并在同一次请求里剥掉旧尾部。
124
+ */
125
+ export async function applyV2DynamicTail(ctx, input) {
126
+ const report = {
127
+ enabled: input.enabled !== false,
128
+ messages: 0,
129
+ bytes: 0,
130
+ stripped: 0,
131
+ empty: 0,
132
+ noMessages: 0,
133
+ foreignSkipped: 0,
134
+ threw: 0,
135
+ };
136
+ const registrations = [];
137
+ if (!report.enabled)
138
+ return { registrations, report };
139
+ const session = ctx.session;
140
+ if (!session || typeof session.hook !== "function")
141
+ return { registrations, report };
142
+ registrations.push(await session.hook("context", (event) => {
143
+ try {
144
+ // #22:不属于我们的会话一个字节都不动(不剥、不取、不追加)。
145
+ if (input.scope && input.scope.count(input.scope.decide(event)) !== "ours") {
146
+ report.foreignSkipped++;
147
+ return;
148
+ }
149
+ // 不消费 sink:内容留给下一次能承载它的请求,而不是在这里丢掉。
150
+ if (!Array.isArray(event?.messages)) {
151
+ report.noMessages++;
152
+ return;
153
+ }
154
+ const sid = typeof event.sessionID === "string" ? event.sessionID : "";
155
+ // 先取 sink:**空 sink 一个字节都不动**(消息数组原样返回)。 这既是
156
+ // 回滚对照,也是重放安全:宿主在进程内重放同一个 hook 时,第二次的
157
+ // sink 已经空了,若此时还去剥旧尾部,就会把自己刚追加的那条删掉。
158
+ const sections = input.sink.take(sid);
159
+ if (sections.size === 0) {
160
+ report.empty++;
161
+ return;
162
+ }
163
+ // 再剥旧尾部:宿主会跨请求复用这个数组,不剥就会一轮一条地累积。
164
+ // 只有我们自己的 marker/id 会被碰——别人的消息一个字节都不动。
165
+ for (let i = event.messages.length - 1; i >= 0; i--) {
166
+ if (!isDynamicTailMessage(event.messages[i]))
167
+ continue;
168
+ event.messages.splice(i, 1);
169
+ report.stripped++;
170
+ }
171
+ const text = renderDynamicTail(sections);
172
+ // 形状来自宿主实测:`{id, role, content:[{type:"text",text}]}`。
173
+ // 形状来自宿主自己的注入(实测):`{id, role:"user", content:[{type:"text",text,synthetic:true}]}`。
174
+ // `synthetic:true` 是关键——宿主用它标记"注入的上下文"而非用户输入(其子代理回复注入同形),
175
+ // 这也是本层不会把尾部消息当成新一次用户发言的前提(CLI 探针已验证该 part 仍送达模型)。
176
+ event.messages.push({ id: DYNAMIC_TAIL_MESSAGE_ID, role: "user", content: [{ type: "text", text, synthetic: true }] });
177
+ report.messages++;
178
+ const bytes = Buffer.byteLength(text, "utf8");
179
+ report.bytes += bytes;
180
+ try {
181
+ input.onEvent?.({
182
+ event: "tail",
183
+ bytes,
184
+ sections: DYNAMIC_SECTION_ORDER.filter((k) => sections.has(k)).join(","),
185
+ session: sid ? "known" : "absent",
186
+ });
187
+ }
188
+ catch {
189
+ /* 轨迹是附加物,不能成为请求失败的理由 */
190
+ }
191
+ }
192
+ catch {
193
+ report.threw++;
194
+ }
195
+ }));
196
+ return { registrations, report };
197
+ }
198
+ //# sourceMappingURL=v2-tail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-tail.js","sourceRoot":"","sources":["../../src/host/v2-tail.ts"],"names":[],"mappings":"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"}
@@ -161,6 +161,8 @@ export interface V2PermissionDomain {
161
161
  }
162
162
  export interface V2SessionContext {
163
163
  readonly agent?: string;
164
+ /** The session this request belongs to; absent on the compaction variant only. */
165
+ readonly sessionID?: string;
164
166
  readonly system: unknown[];
165
167
  readonly messages: unknown[];
166
168
  readonly tools: Record<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"v2-types.d.ts","sourceRoot":"","sources":["../../src/host/v2-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v2-types.d.ts","sourceRoot":"","sources":["../../src/host/v2-types.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,8 @@
7
7
  * `readModelKey` pulls the providerID+modelID that produced it, `lastUsageOf` walks a
8
8
  * transcript for the newest reading, and `percentOf` turns a numerator plus the
9
9
  * catalog's `limit.context` into the percent every threshold in this package compares
10
- * against.
10
+ * against. `cacheStatsOf` turns that same block's cache counters into a hit rate — and
11
+ * answers NULL, never 0%, when the provider reported no cache at all.
11
12
  *
12
13
  * Until 1.7.0 these lived in `v2-compaction.ts`, whose layer submitted
13
14
  * `ctx.session.compact({sessionID})` on its own once a session crossed 75% of the
@@ -28,23 +29,92 @@
28
29
  * catalog does not describe has no percent — `percentOf` answers 0 instead of inventing
29
30
  * a window.
30
31
  */
32
+ import type { V2Context } from "./v2-types.js";
31
33
  /**
32
34
  * The host's usage block, summed the way the host sums it. Returns null when the object
33
35
  * carries no numbers at all — "we did not find them" is not "usage is zero".
34
36
  */
35
37
  export declare function readUsedTokens(message: unknown): number | null;
38
+ /**
39
+ * Cache accounting carried by ONE usage block. `present` records whether the block
40
+ * had a `cache` object at all: providers that report no caching and providers that
41
+ * report a 0-hit cache are different facts, and only the second one is a rate.
42
+ */
43
+ export interface UsageCacheCounts {
44
+ read: number;
45
+ write: number;
46
+ input: number;
47
+ present: boolean;
48
+ }
36
49
  /** The model that produced that usage — the key we need to find its context limit. */
37
50
  export declare function readModelKey(message: unknown): {
38
51
  providerID: string;
39
52
  id: string;
40
53
  } | null;
41
- /** Newest message that carries usage wins — that is what the host's meter calls `usage.last`. */
54
+ /**
55
+ * Newest message that carries usage wins — that is what the host's meter calls
56
+ * `usage.last`. `cache` rides along from the SAME block as `used`, so the hit rate
57
+ * can never be computed against a different request than the token total.
58
+ */
42
59
  export declare function lastUsageOf(messages: unknown): {
43
60
  used: number;
44
61
  model: {
45
62
  providerID: string;
46
63
  id: string;
47
64
  } | null;
65
+ cache: UsageCacheCounts;
48
66
  } | null;
49
67
  export declare function percentOf(used: number, limit: number): number;
68
+ /**
69
+ * One window reading: the newest usage, the catalog window that produced it, and
70
+ * the percent between them. `model` is NON-null by construction — a reading
71
+ * without a model has no denominator, and that case returns null instead of a
72
+ * guessed 0%. `cache` is the cache accounting of the SAME usage block; its
73
+ * `present` flag is what `cacheStatsOf` refuses to turn into a 0% hit rate.
74
+ */
75
+ export interface UsagePercentReading {
76
+ used: number;
77
+ limit: number;
78
+ percent: number;
79
+ model: {
80
+ providerID: string;
81
+ id: string;
82
+ };
83
+ cache: UsageCacheCounts;
84
+ }
85
+ export type UsagePercentReader = (sessionID: string, messages: unknown) => Promise<UsagePercentReading | null>;
86
+ /** The cache numbers, plus the one ratio they support. */
87
+ export interface CacheStats {
88
+ read: number;
89
+ write: number;
90
+ input: number;
91
+ /** `read / (read + write + input)`, 0..1 — null when it cannot be computed. */
92
+ hitRate: number | null;
93
+ }
94
+ /**
95
+ * Cache hit rate from one usage reading.
96
+ *
97
+ * NULL, never 0, in two cases — and the distinction is the whole point:
98
+ * - the block carried no `cache` object: that provider does not report caching,
99
+ * so "0% hit" would be a number we invented from a missing field;
100
+ * - all three values are 0: the denominator is 0, and dividing is guessing.
101
+ * A provider that really reported `cache: { read: 0, write: 0 }` with a non-zero
102
+ * input IS a 0% rate and comes back as `0`.
103
+ *
104
+ * `read / (read + write + input)`: the denominator counts every input token once,
105
+ * because a cache read and a cache write are both a way an input token was billed.
106
+ */
107
+ export declare function cacheStatsOf(reading: UsagePercentReading | null | undefined): CacheStats;
108
+ /**
109
+ * Resolve "how full is this window" from the request plus the catalog — the same
110
+ * denominator the desktop's usage meter reads (`ctx.model.list()` → `limit.context`),
111
+ * which is what makes the percent we render mean the same percent.
112
+ *
113
+ * The catalog is read LAZILY and cached for the process (a refresh happens once per
114
+ * unknown model key, not once per request), because `model.list` is an async host call
115
+ * on the request path. Every uncertain branch returns NULL rather than a number:
116
+ * no usage, no model key, no catalog entry → "we could not read it", which the caller
117
+ * must render as "no entry", never as "0%".
118
+ */
119
+ export declare function createUsagePercent(ctx: V2Context): UsagePercentReader;
50
120
  //# sourceMappingURL=v2-usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v2-usage.d.ts","sourceRoot":"","sources":["../../src/host/v2-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAW9D;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUxF;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAOxH;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D"}
1
+ {"version":3,"file":"v2-usage.d.ts","sourceRoot":"","sources":["../../src/host/v2-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AA2B9C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;CACjB;AAYD,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUxF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAChD,KAAK,EAAE,gBAAgB,CAAA;CACxB,GAAG,IAAI,CAQP;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACzC,KAAK,EAAE,gBAAgB,CAAA;CACxB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;AAE9G,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAQxF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,kBAAkB,CAgErE"}
@@ -7,7 +7,8 @@
7
7
  * `readModelKey` pulls the providerID+modelID that produced it, `lastUsageOf` walks a
8
8
  * transcript for the newest reading, and `percentOf` turns a numerator plus the
9
9
  * catalog's `limit.context` into the percent every threshold in this package compares
10
- * against.
10
+ * against. `cacheStatsOf` turns that same block's cache counters into a hit rate — and
11
+ * answers NULL, never 0%, when the provider reported no cache at all.
11
12
  *
12
13
  * Until 1.7.0 these lived in `v2-compaction.ts`, whose layer submitted
13
14
  * `ctx.session.compact({sessionID})` on its own once a session crossed 75% of the
@@ -30,10 +31,11 @@
30
31
  */
31
32
  const num = (v) => (typeof v === "number" && Number.isFinite(v) ? v : 0);
32
33
  /**
33
- * The host's usage block, summed the way the host sums it. Returns null when the object
34
- * carries no numbers at all — "we did not find them" is not "usage is zero".
34
+ * The usage block itself — the same candidate list, in the same order, that
35
+ * `readUsedTokens` sums. One walker, so a token reading and a cache reading can
36
+ * never be taken from two different blocks of the same message.
35
37
  */
36
- export function readUsedTokens(message) {
38
+ function usageBlockOf(message) {
37
39
  const m = message;
38
40
  if (!m || typeof m !== "object")
39
41
  return null;
@@ -44,10 +46,31 @@ export function readUsedTokens(message) {
44
46
  const cache = t.cache && typeof t.cache === "object" ? t.cache : {};
45
47
  const sum = num(t.input) + num(t.output) + num(t.reasoning) + num(cache.read) + num(cache.write);
46
48
  if (sum > 0)
47
- return sum;
49
+ return t;
48
50
  }
49
51
  return null;
50
52
  }
53
+ function usedOf(t) {
54
+ const cache = t.cache && typeof t.cache === "object" ? t.cache : {};
55
+ return num(t.input) + num(t.output) + num(t.reasoning) + num(cache.read) + num(cache.write);
56
+ }
57
+ /**
58
+ * The host's usage block, summed the way the host sums it. Returns null when the object
59
+ * carries no numbers at all — "we did not find them" is not "usage is zero".
60
+ */
61
+ export function readUsedTokens(message) {
62
+ const t = usageBlockOf(message);
63
+ return t ? usedOf(t) : null;
64
+ }
65
+ function cacheCountsOf(t) {
66
+ const cache = t.cache && typeof t.cache === "object" ? t.cache : null;
67
+ return {
68
+ read: cache ? num(cache.read) : 0,
69
+ write: cache ? num(cache.write) : 0,
70
+ input: num(t.input),
71
+ present: cache !== null,
72
+ };
73
+ }
51
74
  /** The model that produced that usage — the key we need to find its context limit. */
52
75
  export function readModelKey(message) {
53
76
  const m = message;
@@ -63,14 +86,19 @@ export function readModelKey(message) {
63
86
  }
64
87
  return null;
65
88
  }
66
- /** Newest message that carries usage wins — that is what the host's meter calls `usage.last`. */
89
+ /**
90
+ * Newest message that carries usage wins — that is what the host's meter calls
91
+ * `usage.last`. `cache` rides along from the SAME block as `used`, so the hit rate
92
+ * can never be computed against a different request than the token total.
93
+ */
67
94
  export function lastUsageOf(messages) {
68
95
  if (!Array.isArray(messages))
69
96
  return null;
70
97
  for (let i = messages.length - 1; i >= 0; i--) {
71
- const used = readUsedTokens(messages[i]);
72
- if (used !== null)
73
- return { used, model: readModelKey(messages[i]) };
98
+ const t = usageBlockOf(messages[i]);
99
+ if (!t)
100
+ continue;
101
+ return { used: usedOf(t), model: readModelKey(messages[i]), cache: cacheCountsOf(t) };
74
102
  }
75
103
  return null;
76
104
  }
@@ -79,4 +107,109 @@ export function percentOf(used, limit) {
79
107
  return 0;
80
108
  return Math.round((used / limit) * 100);
81
109
  }
110
+ /**
111
+ * Cache hit rate from one usage reading.
112
+ *
113
+ * NULL, never 0, in two cases — and the distinction is the whole point:
114
+ * - the block carried no `cache` object: that provider does not report caching,
115
+ * so "0% hit" would be a number we invented from a missing field;
116
+ * - all three values are 0: the denominator is 0, and dividing is guessing.
117
+ * A provider that really reported `cache: { read: 0, write: 0 }` with a non-zero
118
+ * input IS a 0% rate and comes back as `0`.
119
+ *
120
+ * `read / (read + write + input)`: the denominator counts every input token once,
121
+ * because a cache read and a cache write are both a way an input token was billed.
122
+ */
123
+ export function cacheStatsOf(reading) {
124
+ const cache = reading?.cache;
125
+ if (!cache)
126
+ return { read: 0, write: 0, input: 0, hitRate: null };
127
+ const denominator = cache.read + cache.write + cache.input;
128
+ if (!cache.present || denominator <= 0) {
129
+ return { read: cache.read, write: cache.write, input: cache.input, hitRate: null };
130
+ }
131
+ return { read: cache.read, write: cache.write, input: cache.input, hitRate: cache.read / denominator };
132
+ }
133
+ /**
134
+ * Resolve "how full is this window" from the request plus the catalog — the same
135
+ * denominator the desktop's usage meter reads (`ctx.model.list()` → `limit.context`),
136
+ * which is what makes the percent we render mean the same percent.
137
+ *
138
+ * The catalog is read LAZILY and cached for the process (a refresh happens once per
139
+ * unknown model key, not once per request), because `model.list` is an async host call
140
+ * on the request path. Every uncertain branch returns NULL rather than a number:
141
+ * no usage, no model key, no catalog entry → "we could not read it", which the caller
142
+ * must render as "no entry", never as "0%".
143
+ */
144
+ export function createUsagePercent(ctx) {
145
+ let limits = null;
146
+ const refreshed = new Set();
147
+ const modelBySession = new Map();
148
+ async function loadLimits(force = false) {
149
+ if (!limits || force) {
150
+ const next = new Map();
151
+ try {
152
+ const res = (await ctx.model?.list?.({}));
153
+ const data = Array.isArray(res?.data) ? res.data : [];
154
+ for (const m of data) {
155
+ const any = m;
156
+ const providerID = typeof any?.providerID === "string" ? any.providerID : typeof any?.id === "string" ? any.id : "";
157
+ const id = typeof any?.id === "string" ? any.id : typeof any?.modelID === "string" ? any.modelID : "";
158
+ const limit = any?.limit?.context;
159
+ if (providerID && id && typeof limit === "number" && limit > 0)
160
+ next.set(`${providerID}/${id}`, limit);
161
+ }
162
+ }
163
+ catch {
164
+ /* no catalog is "we cannot read it", never a fabricated window */
165
+ }
166
+ limits = next;
167
+ }
168
+ return limits;
169
+ }
170
+ function modelFromMessages(messages) {
171
+ for (let i = messages.length - 1; i >= 0; i--) {
172
+ const found = readModelKey(messages[i]);
173
+ if (found)
174
+ return found;
175
+ }
176
+ return null;
177
+ }
178
+ async function sessionModel(sessionID) {
179
+ if (!sessionID)
180
+ return null;
181
+ const known = modelBySession.get(sessionID);
182
+ if (known)
183
+ return known;
184
+ try {
185
+ const get = ctx.session?.get;
186
+ const rec = get ? (await get.call(ctx.session, { sessionID })) : undefined;
187
+ const found = readModelKey(rec);
188
+ if (found)
189
+ modelBySession.set(sessionID, found);
190
+ return found;
191
+ }
192
+ catch {
193
+ return null;
194
+ }
195
+ }
196
+ return async (sessionID, messages) => {
197
+ const list = Array.isArray(messages) ? messages : [];
198
+ const usage = lastUsageOf(list);
199
+ if (!usage)
200
+ return null;
201
+ const model = usage.model ?? modelFromMessages(list) ?? (await sessionModel(sessionID));
202
+ if (!model)
203
+ return null;
204
+ const key = `${model.providerID}/${model.id}`;
205
+ let limit = (await loadLimits()).get(key);
206
+ if (!limit && !refreshed.has(key)) {
207
+ refreshed.add(key);
208
+ limit = (await loadLimits(true)).get(key);
209
+ }
210
+ if (!limit || !Number.isFinite(limit) || limit <= 0)
211
+ return null;
212
+ return { used: usage.used, limit, percent: percentOf(usage.used, limit), model, cache: usage.cache };
213
+ };
214
+ }
82
215
  //# sourceMappingURL=v2-usage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"v2-usage.js","sourceRoot":"","sources":["../../src/host/v2-usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v2-usage.js","sourceRoot":"","sources":["../../src/host/v2-usage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"v2.d.ts","sourceRoot":"","sources":["../../src/host/v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AA+BH,OAAO,KAAK,EAA0B,QAAQ,EAA8B,MAAM,eAAe,CAAA;AAEjG;;;;;kEAKkE;AAClE,eAAO,MAAM,iBAAiB,QAGmB,CAAA;AASjD,eAAO,MAAM,aAAa,EAAE,QAurC3B,CAAA"}
1
+ {"version":3,"file":"v2.d.ts","sourceRoot":"","sources":["../../src/host/v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAoCH,OAAO,KAAK,EAA0B,QAAQ,EAA8B,MAAM,eAAe,CAAA;AAEjG;;;;;kEAKkE;AAClE,eAAO,MAAM,iBAAiB,QAGmB,CAAA;AASjD,eAAO,MAAM,aAAa,EAAE,QAq2C3B,CAAA"}