context-mode 1.0.169 → 2.0.0-next.5

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 (379) hide show
  1. package/.claude-plugin/marketplace.json +4 -22
  2. package/.claude-plugin/plugin.json +9 -24
  3. package/SHA256SUMS +31 -0
  4. package/claude-code/skills/ctx-doctor/SKILL.md +6 -0
  5. package/claude-code/skills/ctx-stats/SKILL.md +6 -0
  6. package/claude-code/skills/ctx-upgrade/SKILL.md +6 -0
  7. package/cli.mjs +6744 -0
  8. package/copilot/plugin.json +14 -0
  9. package/fixtures/hook-roundtrip.json +22 -0
  10. package/gemini-extension.json +14 -0
  11. package/hook.mjs +202 -0
  12. package/hooks/claude-code.json +50 -0
  13. package/hooks/codex.json +50 -0
  14. package/hooks/copilot-cli.json +33 -0
  15. package/hooks/hooks.json +16 -111
  16. package/hooks/kiro.json +69 -0
  17. package/hooks/qwen.json +50 -0
  18. package/hooks/vscode.json +40 -0
  19. package/hooks/zcode.json +53 -0
  20. package/opencode/plugin.js +22456 -0
  21. package/package.json +29 -114
  22. package/pi/index.js +50841 -0
  23. package/pi/skills/ctx-doctor/SKILL.md +6 -0
  24. package/pi/skills/ctx-stats/SKILL.md +6 -0
  25. package/pi/skills/ctx-upgrade/SKILL.md +6 -0
  26. package/qwen-extension.json +15 -0
  27. package/run.mjs +5633 -0
  28. package/search.mjs +5633 -0
  29. package/server.mjs +48198 -0
  30. package/skills/ctx-doctor/SKILL.md +3 -19
  31. package/skills/ctx-stats/SKILL.md +3 -23
  32. package/skills/ctx-upgrade/SKILL.md +3 -28
  33. package/.codex-plugin/hooks.json +0 -65
  34. package/.codex-plugin/mcp.json +0 -13
  35. package/.codex-plugin/plugin.json +0 -31
  36. package/.openclaw-plugin/index.ts +0 -12
  37. package/.openclaw-plugin/openclaw.plugin.json +0 -38
  38. package/.openclaw-plugin/package.json +0 -28
  39. package/LICENSE +0 -94
  40. package/README.md +0 -1619
  41. package/bin/statusline.mjs +0 -378
  42. package/build/adapters/antigravity/index.d.ts +0 -51
  43. package/build/adapters/antigravity/index.js +0 -169
  44. package/build/adapters/antigravity-cli/index.d.ts +0 -51
  45. package/build/adapters/antigravity-cli/index.js +0 -342
  46. package/build/adapters/base.d.ts +0 -92
  47. package/build/adapters/base.js +0 -135
  48. package/build/adapters/claude-code/config.d.ts +0 -8
  49. package/build/adapters/claude-code/config.js +0 -8
  50. package/build/adapters/claude-code/hooks.d.ts +0 -106
  51. package/build/adapters/claude-code/hooks.js +0 -183
  52. package/build/adapters/claude-code/index.d.ts +0 -80
  53. package/build/adapters/claude-code/index.js +0 -569
  54. package/build/adapters/claude-code-base.d.ts +0 -49
  55. package/build/adapters/claude-code-base.js +0 -113
  56. package/build/adapters/client-map.d.ts +0 -10
  57. package/build/adapters/client-map.js +0 -42
  58. package/build/adapters/codex/config.d.ts +0 -8
  59. package/build/adapters/codex/config.js +0 -8
  60. package/build/adapters/codex/hooks.d.ts +0 -55
  61. package/build/adapters/codex/hooks.js +0 -64
  62. package/build/adapters/codex/index.d.ts +0 -87
  63. package/build/adapters/codex/index.js +0 -992
  64. package/build/adapters/codex/paths.d.ts +0 -1
  65. package/build/adapters/codex/paths.js +0 -12
  66. package/build/adapters/codex/usage.d.ts +0 -107
  67. package/build/adapters/codex/usage.js +0 -227
  68. package/build/adapters/copilot-base.d.ts +0 -94
  69. package/build/adapters/copilot-base.js +0 -297
  70. package/build/adapters/copilot-cli/hooks.d.ts +0 -33
  71. package/build/adapters/copilot-cli/hooks.js +0 -64
  72. package/build/adapters/copilot-cli/index.d.ts +0 -48
  73. package/build/adapters/copilot-cli/index.js +0 -341
  74. package/build/adapters/cursor/config.d.ts +0 -4
  75. package/build/adapters/cursor/config.js +0 -4
  76. package/build/adapters/cursor/hooks.d.ts +0 -55
  77. package/build/adapters/cursor/hooks.js +0 -82
  78. package/build/adapters/cursor/index.d.ts +0 -64
  79. package/build/adapters/cursor/index.js +0 -517
  80. package/build/adapters/detect.d.ts +0 -136
  81. package/build/adapters/detect.js +0 -623
  82. package/build/adapters/gemini-cli/config.d.ts +0 -8
  83. package/build/adapters/gemini-cli/config.js +0 -8
  84. package/build/adapters/gemini-cli/hooks.d.ts +0 -83
  85. package/build/adapters/gemini-cli/hooks.js +0 -115
  86. package/build/adapters/gemini-cli/index.d.ts +0 -80
  87. package/build/adapters/gemini-cli/index.js +0 -483
  88. package/build/adapters/jetbrains-copilot/config.d.ts +0 -8
  89. package/build/adapters/jetbrains-copilot/config.js +0 -8
  90. package/build/adapters/jetbrains-copilot/hooks.d.ts +0 -59
  91. package/build/adapters/jetbrains-copilot/hooks.js +0 -87
  92. package/build/adapters/jetbrains-copilot/index.d.ts +0 -31
  93. package/build/adapters/jetbrains-copilot/index.js +0 -131
  94. package/build/adapters/kimi/config.d.ts +0 -8
  95. package/build/adapters/kimi/config.js +0 -8
  96. package/build/adapters/kimi/hooks.d.ts +0 -28
  97. package/build/adapters/kimi/hooks.js +0 -34
  98. package/build/adapters/kimi/index.d.ts +0 -66
  99. package/build/adapters/kimi/index.js +0 -537
  100. package/build/adapters/kimi/paths.d.ts +0 -21
  101. package/build/adapters/kimi/paths.js +0 -52
  102. package/build/adapters/kimi/usage.d.ts +0 -82
  103. package/build/adapters/kimi/usage.js +0 -217
  104. package/build/adapters/kiro/hooks.d.ts +0 -61
  105. package/build/adapters/kiro/hooks.js +0 -94
  106. package/build/adapters/kiro/index.d.ts +0 -61
  107. package/build/adapters/kiro/index.js +0 -301
  108. package/build/adapters/omp/index.d.ts +0 -65
  109. package/build/adapters/omp/index.js +0 -182
  110. package/build/adapters/omp/plugin.d.ts +0 -81
  111. package/build/adapters/omp/plugin.js +0 -331
  112. package/build/adapters/omp/usage.d.ts +0 -49
  113. package/build/adapters/omp/usage.js +0 -110
  114. package/build/adapters/openclaw/config.d.ts +0 -8
  115. package/build/adapters/openclaw/config.js +0 -8
  116. package/build/adapters/openclaw/hooks.d.ts +0 -50
  117. package/build/adapters/openclaw/hooks.js +0 -61
  118. package/build/adapters/openclaw/index.d.ts +0 -74
  119. package/build/adapters/openclaw/index.js +0 -439
  120. package/build/adapters/openclaw/mcp-tools.d.ts +0 -54
  121. package/build/adapters/openclaw/mcp-tools.js +0 -207
  122. package/build/adapters/openclaw/plugin.d.ts +0 -141
  123. package/build/adapters/openclaw/plugin.js +0 -818
  124. package/build/adapters/openclaw/session-db.d.ts +0 -55
  125. package/build/adapters/openclaw/session-db.js +0 -88
  126. package/build/adapters/openclaw/usage.d.ts +0 -34
  127. package/build/adapters/openclaw/usage.js +0 -52
  128. package/build/adapters/openclaw/workspace-router.d.ts +0 -29
  129. package/build/adapters/openclaw/workspace-router.js +0 -64
  130. package/build/adapters/opencode/config.d.ts +0 -8
  131. package/build/adapters/opencode/config.js +0 -8
  132. package/build/adapters/opencode/hooks.d.ts +0 -38
  133. package/build/adapters/opencode/hooks.js +0 -50
  134. package/build/adapters/opencode/index.d.ts +0 -67
  135. package/build/adapters/opencode/index.js +0 -463
  136. package/build/adapters/opencode/plugin.d.ts +0 -184
  137. package/build/adapters/opencode/plugin.js +0 -558
  138. package/build/adapters/opencode/zod3tov4.d.ts +0 -1
  139. package/build/adapters/opencode/zod3tov4.js +0 -132
  140. package/build/adapters/pi/extension.d.ts +0 -81
  141. package/build/adapters/pi/extension.js +0 -861
  142. package/build/adapters/pi/index.d.ts +0 -57
  143. package/build/adapters/pi/index.js +0 -173
  144. package/build/adapters/pi/mcp-bridge.d.ts +0 -268
  145. package/build/adapters/pi/mcp-bridge.js +0 -894
  146. package/build/adapters/qwen-code/hooks.d.ts +0 -26
  147. package/build/adapters/qwen-code/hooks.js +0 -29
  148. package/build/adapters/qwen-code/index.d.ts +0 -40
  149. package/build/adapters/qwen-code/index.js +0 -361
  150. package/build/adapters/qwen-code/usage.d.ts +0 -90
  151. package/build/adapters/qwen-code/usage.js +0 -222
  152. package/build/adapters/types.d.ts +0 -360
  153. package/build/adapters/types.js +0 -118
  154. package/build/adapters/vscode-copilot/config.d.ts +0 -8
  155. package/build/adapters/vscode-copilot/config.js +0 -8
  156. package/build/adapters/vscode-copilot/hooks.d.ts +0 -71
  157. package/build/adapters/vscode-copilot/hooks.js +0 -98
  158. package/build/adapters/vscode-copilot/index.d.ts +0 -32
  159. package/build/adapters/vscode-copilot/index.js +0 -222
  160. package/build/adapters/zed/index.d.ts +0 -40
  161. package/build/adapters/zed/index.js +0 -163
  162. package/build/cli.d.ts +0 -34
  163. package/build/cli.js +0 -1827
  164. package/build/db-base.d.ts +0 -179
  165. package/build/db-base.js +0 -569
  166. package/build/executor.d.ts +0 -72
  167. package/build/executor.js +0 -678
  168. package/build/exit-classify.d.ts +0 -19
  169. package/build/exit-classify.js +0 -12
  170. package/build/fetch-cache.d.ts +0 -13
  171. package/build/fetch-cache.js +0 -15
  172. package/build/lifecycle.d.ts +0 -124
  173. package/build/lifecycle.js +0 -278
  174. package/build/runPool.d.ts +0 -36
  175. package/build/runPool.js +0 -51
  176. package/build/runtime.d.ts +0 -71
  177. package/build/runtime.js +0 -659
  178. package/build/search/auto-memory.d.ts +0 -47
  179. package/build/search/auto-memory.js +0 -170
  180. package/build/search/ctx-search-schema.d.ts +0 -90
  181. package/build/search/ctx-search-schema.js +0 -135
  182. package/build/search/flood-guard.d.ts +0 -57
  183. package/build/search/flood-guard.js +0 -80
  184. package/build/search/unified.d.ts +0 -56
  185. package/build/search/unified.js +0 -104
  186. package/build/security.d.ts +0 -206
  187. package/build/security.js +0 -780
  188. package/build/server.d.ts +0 -184
  189. package/build/server.js +0 -4563
  190. package/build/session/analytics.d.ts +0 -773
  191. package/build/session/analytics.js +0 -2420
  192. package/build/session/db.d.ts +0 -468
  193. package/build/session/db.js +0 -1308
  194. package/build/session/error-classifier.d.ts +0 -87
  195. package/build/session/error-classifier.js +0 -303
  196. package/build/session/event-emit.d.ts +0 -48
  197. package/build/session/event-emit.js +0 -101
  198. package/build/session/extract.d.ts +0 -333
  199. package/build/session/extract.js +0 -2688
  200. package/build/session/model-prices.json +0 -429
  201. package/build/session/persist-tool-calls.d.ts +0 -54
  202. package/build/session/persist-tool-calls.js +0 -105
  203. package/build/session/pricing.d.ts +0 -64
  204. package/build/session/pricing.js +0 -151
  205. package/build/session/project-attribution.d.ts +0 -73
  206. package/build/session/project-attribution.js +0 -245
  207. package/build/session/purge.d.ts +0 -138
  208. package/build/session/purge.js +0 -240
  209. package/build/session/retrieval-marker.d.ts +0 -39
  210. package/build/session/retrieval-marker.js +0 -65
  211. package/build/session/snapshot.d.ts +0 -46
  212. package/build/session/snapshot.js +0 -532
  213. package/build/store-directory.d.ts +0 -56
  214. package/build/store-directory.js +0 -254
  215. package/build/store.d.ts +0 -147
  216. package/build/store.js +0 -1714
  217. package/build/truncate.d.ts +0 -57
  218. package/build/truncate.js +0 -142
  219. package/build/types.d.ts +0 -117
  220. package/build/types.js +0 -20
  221. package/build/util/claude-config.d.ts +0 -32
  222. package/build/util/claude-config.js +0 -84
  223. package/build/util/hook-config.d.ts +0 -27
  224. package/build/util/hook-config.js +0 -76
  225. package/build/util/jsonc.d.ts +0 -14
  226. package/build/util/jsonc.js +0 -104
  227. package/build/util/plugin-cache-integrity.d.ts +0 -51
  228. package/build/util/plugin-cache-integrity.js +0 -146
  229. package/build/util/project-dir.d.ts +0 -149
  230. package/build/util/project-dir.js +0 -340
  231. package/build/util/sibling-mcp.d.ts +0 -79
  232. package/build/util/sibling-mcp.js +0 -181
  233. package/cli.bundle.mjs +0 -1236
  234. package/configs/antigravity/GEMINI.md +0 -68
  235. package/configs/antigravity/mcp_config.json +0 -7
  236. package/configs/antigravity-cli/hooks/hooks.json +0 -37
  237. package/configs/antigravity-cli/hooks.json +0 -37
  238. package/configs/antigravity-cli/mcp_config.json +0 -10
  239. package/configs/antigravity-cli/plugin.json +0 -14
  240. package/configs/antigravity-cli/rules/context-mode.md +0 -77
  241. package/configs/antigravity-cli/skills/context-mode/SKILL.md +0 -77
  242. package/configs/claude-code/CLAUDE.md +0 -91
  243. package/configs/codex/AGENTS.md +0 -99
  244. package/configs/codex/config.toml +0 -8
  245. package/configs/codex/hooks.json +0 -47
  246. package/configs/copilot-cli/.github/plugin/plugin.json +0 -23
  247. package/configs/copilot-cli/.mcp.json +0 -12
  248. package/configs/copilot-cli/README.md +0 -47
  249. package/configs/copilot-cli/hooks.json +0 -41
  250. package/configs/copilot-cli/skills/context-mode/SKILL.md +0 -38
  251. package/configs/cursor/context-mode.mdc +0 -76
  252. package/configs/cursor/hooks.json +0 -21
  253. package/configs/cursor/mcp.json +0 -7
  254. package/configs/gemini-cli/GEMINI.md +0 -88
  255. package/configs/gemini-cli/mcp.json +0 -7
  256. package/configs/gemini-cli/settings.json +0 -60
  257. package/configs/jetbrains-copilot/copilot-instructions.md +0 -80
  258. package/configs/jetbrains-copilot/hooks.json +0 -16
  259. package/configs/jetbrains-copilot/mcp.json +0 -7
  260. package/configs/kilo/AGENTS.md +0 -84
  261. package/configs/kilo/kilo.json +0 -6
  262. package/configs/kimi/hooks.json +0 -54
  263. package/configs/kiro/KIRO.md +0 -84
  264. package/configs/kiro/agent.json +0 -18
  265. package/configs/kiro/mcp.json +0 -7
  266. package/configs/omp/SYSTEM.md +0 -85
  267. package/configs/omp/mcp.json +0 -7
  268. package/configs/openclaw/AGENTS.md +0 -87
  269. package/configs/openclaw/openclaw.json +0 -13
  270. package/configs/opencode/AGENTS.md +0 -84
  271. package/configs/opencode/opencode.json +0 -6
  272. package/configs/pi/AGENTS.md +0 -3
  273. package/configs/qwen-code/QWEN.md +0 -91
  274. package/configs/vscode-copilot/copilot-instructions.md +0 -80
  275. package/configs/vscode-copilot/hooks.json +0 -16
  276. package/configs/vscode-copilot/mcp.json +0 -7
  277. package/configs/zed/AGENTS.md +0 -68
  278. package/hooks/antigravity-cli/payload.mjs +0 -98
  279. package/hooks/antigravity-cli/posttooluse.mjs +0 -138
  280. package/hooks/antigravity-cli/pretooluse.mjs +0 -78
  281. package/hooks/antigravity-cli/stop.mjs +0 -58
  282. package/hooks/auto-injection.mjs +0 -102
  283. package/hooks/cache-heal-utils.mjs +0 -379
  284. package/hooks/codex/platform.mjs +0 -1
  285. package/hooks/codex/posttooluse.mjs +0 -66
  286. package/hooks/codex/precompact.mjs +0 -70
  287. package/hooks/codex/pretooluse.mjs +0 -42
  288. package/hooks/codex/sessionstart.mjs +0 -121
  289. package/hooks/codex/stop.mjs +0 -138
  290. package/hooks/codex/userpromptsubmit.mjs +0 -75
  291. package/hooks/copilot-cli/posttooluse.mjs +0 -79
  292. package/hooks/copilot-cli/precompact.mjs +0 -66
  293. package/hooks/copilot-cli/pretooluse.mjs +0 -41
  294. package/hooks/copilot-cli/sessionstart.mjs +0 -121
  295. package/hooks/copilot-cli/stop.mjs +0 -59
  296. package/hooks/copilot-cli/userpromptsubmit.mjs +0 -77
  297. package/hooks/core/codex-caps.mjs +0 -112
  298. package/hooks/core/formatters.mjs +0 -356
  299. package/hooks/core/mcp-ready.mjs +0 -109
  300. package/hooks/core/platform-detect.mjs +0 -49
  301. package/hooks/core/routing.mjs +0 -1017
  302. package/hooks/core/stdin.mjs +0 -90
  303. package/hooks/core/tool-naming.mjs +0 -57
  304. package/hooks/cursor/afteragentresponse.mjs +0 -74
  305. package/hooks/cursor/hooks.json +0 -31
  306. package/hooks/cursor/posttooluse.mjs +0 -72
  307. package/hooks/cursor/pretooluse.mjs +0 -26
  308. package/hooks/cursor/sessionstart.mjs +0 -97
  309. package/hooks/cursor/stop.mjs +0 -48
  310. package/hooks/ensure-deps.mjs +0 -254
  311. package/hooks/formatters/claude-code.mjs +0 -113
  312. package/hooks/formatters/cursor.mjs +0 -37
  313. package/hooks/formatters/gemini-cli.mjs +0 -55
  314. package/hooks/formatters/vscode-copilot.mjs +0 -55
  315. package/hooks/gemini-cli/aftermodel.mjs +0 -70
  316. package/hooks/gemini-cli/aftertool.mjs +0 -61
  317. package/hooks/gemini-cli/beforeagent.mjs +0 -99
  318. package/hooks/gemini-cli/beforetool.mjs +0 -27
  319. package/hooks/gemini-cli/precompress.mjs +0 -55
  320. package/hooks/gemini-cli/sessionstart.mjs +0 -137
  321. package/hooks/heal-partial-install.mjs +0 -712
  322. package/hooks/jetbrains-copilot/posttooluse.mjs +0 -61
  323. package/hooks/jetbrains-copilot/precompact.mjs +0 -55
  324. package/hooks/jetbrains-copilot/pretooluse.mjs +0 -27
  325. package/hooks/jetbrains-copilot/sessionstart.mjs +0 -124
  326. package/hooks/kimi/platform.mjs +0 -1
  327. package/hooks/kimi/posttooluse.mjs +0 -72
  328. package/hooks/kimi/precompact.mjs +0 -80
  329. package/hooks/kimi/pretooluse.mjs +0 -42
  330. package/hooks/kimi/sessionend.mjs +0 -61
  331. package/hooks/kimi/sessionstart.mjs +0 -113
  332. package/hooks/kimi/stop.mjs +0 -132
  333. package/hooks/kimi/userpromptsubmit.mjs +0 -90
  334. package/hooks/kiro/agentspawn.mjs +0 -97
  335. package/hooks/kiro/posttooluse.mjs +0 -51
  336. package/hooks/kiro/pretooluse.mjs +0 -64
  337. package/hooks/kiro/userpromptsubmit.mjs +0 -88
  338. package/hooks/normalize-hooks.mjs +0 -323
  339. package/hooks/platform-bridge.mjs +0 -340
  340. package/hooks/posttooluse.mjs +0 -225
  341. package/hooks/precompact.mjs +0 -100
  342. package/hooks/pretooluse.mjs +0 -227
  343. package/hooks/qwen-code/platform.mjs +0 -1
  344. package/hooks/qwen-code/stop.mjs +0 -168
  345. package/hooks/routing-block.mjs +0 -105
  346. package/hooks/run-hook.mjs +0 -95
  347. package/hooks/security.bundle.mjs +0 -2
  348. package/hooks/session-attribution.bundle.mjs +0 -1
  349. package/hooks/session-db.bundle.mjs +0 -144
  350. package/hooks/session-directive.mjs +0 -520
  351. package/hooks/session-extract.bundle.mjs +0 -3
  352. package/hooks/session-helpers.mjs +0 -428
  353. package/hooks/session-loaders.mjs +0 -448
  354. package/hooks/session-snapshot.bundle.mjs +0 -32
  355. package/hooks/sessionstart.mjs +0 -464
  356. package/hooks/stop.mjs +0 -82
  357. package/hooks/suppress-stderr.mjs +0 -25
  358. package/hooks/userpromptsubmit.mjs +0 -108
  359. package/hooks/vscode-copilot/posttooluse.mjs +0 -61
  360. package/hooks/vscode-copilot/precompact.mjs +0 -55
  361. package/hooks/vscode-copilot/pretooluse.mjs +0 -27
  362. package/hooks/vscode-copilot/sessionstart.mjs +0 -129
  363. package/openclaw.plugin.json +0 -38
  364. package/scripts/heal-better-sqlite3.mjs +0 -430
  365. package/scripts/heal-installed-plugins.mjs +0 -598
  366. package/scripts/plugin-cache-integrity.mjs +0 -248
  367. package/scripts/postinstall.mjs +0 -384
  368. package/server.bundle.mjs +0 -1162
  369. package/skills/.ignore +0 -7
  370. package/skills/context-mode/SKILL.md +0 -300
  371. package/skills/context-mode/references/anti-patterns.md +0 -283
  372. package/skills/context-mode/references/patterns-javascript.md +0 -298
  373. package/skills/context-mode/references/patterns-python.md +0 -304
  374. package/skills/context-mode/references/patterns-shell.md +0 -277
  375. package/skills/ctx-index/SKILL.md +0 -46
  376. package/skills/ctx-insight/SKILL.md +0 -24
  377. package/skills/ctx-purge/SKILL.md +0 -49
  378. package/skills/ctx-search/SKILL.md +0 -35
  379. package/start.mjs +0 -616
@@ -1,429 +0,0 @@
1
- {
2
- "claude-opus-4-8": {
3
- "input_per_mtok": 5,
4
- "output_per_mtok": 25,
5
- "cache_read_per_mtok": 0.5,
6
- "cache_write_per_mtok": 6.25,
7
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
8
- },
9
- "claude-opus-4-7": {
10
- "input_per_mtok": 5,
11
- "output_per_mtok": 25,
12
- "cache_read_per_mtok": 0.5,
13
- "cache_write_per_mtok": 6.25,
14
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
15
- },
16
- "claude-opus-4-6": {
17
- "input_per_mtok": 5,
18
- "output_per_mtok": 25,
19
- "cache_read_per_mtok": 0.5,
20
- "cache_write_per_mtok": 6.25,
21
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
22
- },
23
- "claude-opus-4-5": {
24
- "input_per_mtok": 5,
25
- "output_per_mtok": 25,
26
- "cache_read_per_mtok": 0.5,
27
- "cache_write_per_mtok": 6.25,
28
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
29
- },
30
- "claude-sonnet-4-6": {
31
- "input_per_mtok": 3,
32
- "output_per_mtok": 15,
33
- "cache_read_per_mtok": 0.3,
34
- "cache_write_per_mtok": 3.75,
35
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
36
- },
37
- "claude-sonnet-4-5": {
38
- "input_per_mtok": 3,
39
- "output_per_mtok": 15,
40
- "cache_read_per_mtok": 0.3,
41
- "cache_write_per_mtok": 3.75,
42
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
43
- },
44
- "claude-haiku-4-5": {
45
- "input_per_mtok": 1,
46
- "output_per_mtok": 5,
47
- "cache_read_per_mtok": 0.1,
48
- "cache_write_per_mtok": 1.25,
49
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
50
- },
51
- "claude-3-7-sonnet": {
52
- "input_per_mtok": 3,
53
- "output_per_mtok": 15,
54
- "cache_read_per_mtok": 0.3,
55
- "cache_write_per_mtok": 3.75,
56
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
57
- },
58
- "claude-3-5-haiku": {
59
- "input_per_mtok": 0.8,
60
- "output_per_mtok": 4,
61
- "cache_read_per_mtok": 0.08,
62
- "cache_write_per_mtok": 1,
63
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
64
- },
65
- "claude-fable-5": {
66
- "input_per_mtok": 10,
67
- "output_per_mtok": 50,
68
- "cache_read_per_mtok": 1,
69
- "cache_write_per_mtok": 12.5,
70
- "source": "https://platform.claude.com/docs/en/about-claude/pricing"
71
- },
72
- "gpt-5": {
73
- "input_per_mtok": 1.25,
74
- "output_per_mtok": 10,
75
- "cache_read_per_mtok": 0.125,
76
- "cache_write_per_mtok": null,
77
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
78
- },
79
- "gpt-5-mini": {
80
- "input_per_mtok": 0.25,
81
- "output_per_mtok": 2,
82
- "cache_read_per_mtok": 0.025,
83
- "cache_write_per_mtok": null,
84
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
85
- },
86
- "gpt-5-nano": {
87
- "input_per_mtok": 0.05,
88
- "output_per_mtok": 0.4,
89
- "cache_read_per_mtok": 0.005,
90
- "cache_write_per_mtok": null,
91
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
92
- },
93
- "gpt-5-codex": {
94
- "input_per_mtok": 1.25,
95
- "output_per_mtok": 10,
96
- "cache_read_per_mtok": 0.125,
97
- "cache_write_per_mtok": null,
98
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
99
- },
100
- "gpt-4.1": {
101
- "input_per_mtok": 2,
102
- "output_per_mtok": 8,
103
- "cache_read_per_mtok": 0.5,
104
- "cache_write_per_mtok": null,
105
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
106
- },
107
- "gpt-4.1-mini": {
108
- "input_per_mtok": 0.4,
109
- "output_per_mtok": 1.6,
110
- "cache_read_per_mtok": 0.1,
111
- "cache_write_per_mtok": null,
112
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
113
- },
114
- "gpt-4.1-nano": {
115
- "input_per_mtok": 0.1,
116
- "output_per_mtok": 0.4,
117
- "cache_read_per_mtok": 0.025,
118
- "cache_write_per_mtok": null,
119
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
120
- },
121
- "gpt-4o": {
122
- "input_per_mtok": 2.5,
123
- "output_per_mtok": 10,
124
- "cache_read_per_mtok": 1.25,
125
- "cache_write_per_mtok": null,
126
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
127
- },
128
- "gpt-4o-mini": {
129
- "input_per_mtok": 0.15,
130
- "output_per_mtok": 0.6,
131
- "cache_read_per_mtok": 0.075,
132
- "cache_write_per_mtok": null,
133
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
134
- },
135
- "o3": {
136
- "input_per_mtok": 2,
137
- "output_per_mtok": 8,
138
- "cache_read_per_mtok": 0.5,
139
- "cache_write_per_mtok": null,
140
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
141
- },
142
- "o4-mini": {
143
- "input_per_mtok": 1.1,
144
- "output_per_mtok": 4.4,
145
- "cache_read_per_mtok": 0.275,
146
- "cache_write_per_mtok": null,
147
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
148
- },
149
- "o3-mini": {
150
- "input_per_mtok": 1.1,
151
- "output_per_mtok": 4.4,
152
- "cache_read_per_mtok": 0.55,
153
- "cache_write_per_mtok": null,
154
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
155
- },
156
- "codex-mini-latest": {
157
- "input_per_mtok": 1.5,
158
- "output_per_mtok": 6,
159
- "cache_read_per_mtok": 0.375,
160
- "cache_write_per_mtok": null,
161
- "source": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
162
- },
163
- "gemini-2.5-pro": {
164
- "input_per_mtok": 1.25,
165
- "output_per_mtok": 10,
166
- "cache_read_per_mtok": 0.125,
167
- "cache_write_per_mtok": null,
168
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
169
- },
170
- "gemini-2.5-flash": {
171
- "input_per_mtok": 0.3,
172
- "output_per_mtok": 2.5,
173
- "cache_read_per_mtok": 0.03,
174
- "cache_write_per_mtok": null,
175
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
176
- },
177
- "gemini-2.5-flash-lite": {
178
- "input_per_mtok": 0.1,
179
- "output_per_mtok": 0.4,
180
- "cache_read_per_mtok": 0.01,
181
- "cache_write_per_mtok": null,
182
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
183
- },
184
- "gemini-2.0-flash": {
185
- "input_per_mtok": 0.1,
186
- "output_per_mtok": 0.4,
187
- "cache_read_per_mtok": 0.025,
188
- "cache_write_per_mtok": null,
189
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
190
- },
191
- "gemini-2.0-flash-lite": {
192
- "input_per_mtok": 0.075,
193
- "output_per_mtok": 0.3,
194
- "cache_read_per_mtok": null,
195
- "cache_write_per_mtok": null,
196
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
197
- },
198
- "gemini-3-pro-preview": {
199
- "input_per_mtok": 2,
200
- "output_per_mtok": 12,
201
- "cache_read_per_mtok": 0.2,
202
- "cache_write_per_mtok": null,
203
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
204
- },
205
- "gemini-3-flash-preview": {
206
- "input_per_mtok": 0.5,
207
- "output_per_mtok": 3,
208
- "cache_read_per_mtok": 0.05,
209
- "cache_write_per_mtok": null,
210
- "source": "https://ai.google.dev/gemini-api/docs/pricing"
211
- },
212
- "qwen3-coder": {
213
- "input_per_mtok": 1,
214
- "output_per_mtok": 5,
215
- "cache_read_per_mtok": null,
216
- "cache_write_per_mtok": null,
217
- "source": "https://www.alibabacloud.com/help/en/model-studio/models"
218
- },
219
- "qwen-max": {
220
- "input_per_mtok": 1.6,
221
- "output_per_mtok": 6.4,
222
- "cache_read_per_mtok": null,
223
- "cache_write_per_mtok": null,
224
- "source": "https://www.alibabacloud.com/help/en/model-studio/models"
225
- },
226
- "qwen-plus": {
227
- "input_per_mtok": 0.4,
228
- "output_per_mtok": 1.2,
229
- "cache_read_per_mtok": null,
230
- "cache_write_per_mtok": null,
231
- "source": "https://www.alibabacloud.com/help/en/model-studio/models"
232
- },
233
- "qwen-turbo": {
234
- "input_per_mtok": 0.05,
235
- "output_per_mtok": 0.2,
236
- "cache_read_per_mtok": null,
237
- "cache_write_per_mtok": null,
238
- "source": "https://www.alibabacloud.com/help/en/model-studio/models"
239
- },
240
- "qwen3-max": {
241
- "input_per_mtok": 1.2,
242
- "output_per_mtok": 6,
243
- "cache_read_per_mtok": null,
244
- "cache_write_per_mtok": null,
245
- "source": "https://www.alibabacloud.com/help/en/model-studio/models"
246
- },
247
- "kimi-k2": {
248
- "input_per_mtok": 0.6,
249
- "output_per_mtok": 2.5,
250
- "cache_read_per_mtok": 0.15,
251
- "cache_write_per_mtok": null,
252
- "source": "https://platform.moonshot.ai/docs/pricing/chat"
253
- },
254
- "kimi-k2-turbo": {
255
- "input_per_mtok": 1.15,
256
- "output_per_mtok": 8,
257
- "cache_read_per_mtok": 0.15,
258
- "cache_write_per_mtok": null,
259
- "source": "https://platform.moonshot.ai/docs/pricing/chat"
260
- },
261
- "moonshot-v1-8k": {
262
- "input_per_mtok": 0.2,
263
- "output_per_mtok": 2,
264
- "cache_read_per_mtok": null,
265
- "cache_write_per_mtok": null,
266
- "source": "https://platform.moonshot.ai/docs/pricing"
267
- },
268
- "moonshot-v1-32k": {
269
- "input_per_mtok": 1,
270
- "output_per_mtok": 3,
271
- "cache_read_per_mtok": null,
272
- "cache_write_per_mtok": null,
273
- "source": "https://platform.moonshot.ai/docs/pricing"
274
- },
275
- "moonshot-v1-128k": {
276
- "input_per_mtok": 2,
277
- "output_per_mtok": 5,
278
- "cache_read_per_mtok": null,
279
- "cache_write_per_mtok": null,
280
- "source": "https://platform.moonshot.ai/docs/pricing"
281
- },
282
- "deepseek-v3": {
283
- "input_per_mtok": 0.27,
284
- "output_per_mtok": 1.1,
285
- "cache_read_per_mtok": 0.07,
286
- "cache_write_per_mtok": 0,
287
- "source": "https://api-docs.deepseek.com/quick_start/pricing"
288
- },
289
- "deepseek-r1": {
290
- "input_per_mtok": 0.55,
291
- "output_per_mtok": 2.19,
292
- "cache_read_per_mtok": null,
293
- "cache_write_per_mtok": null,
294
- "source": "https://api-docs.deepseek.com/quick_start/pricing"
295
- },
296
- "deepseek-chat": {
297
- "input_per_mtok": 0.14,
298
- "output_per_mtok": 0.28,
299
- "cache_read_per_mtok": 0.0028,
300
- "cache_write_per_mtok": null,
301
- "source": "https://api-docs.deepseek.com/quick_start/pricing"
302
- },
303
- "deepseek-reasoner": {
304
- "input_per_mtok": 0.14,
305
- "output_per_mtok": 0.28,
306
- "cache_read_per_mtok": 0.0028,
307
- "cache_write_per_mtok": null,
308
- "source": "https://api-docs.deepseek.com/quick_start/pricing"
309
- },
310
- "glm-4.6": {
311
- "input_per_mtok": 0.6,
312
- "output_per_mtok": 2.2,
313
- "cache_read_per_mtok": 0.11,
314
- "cache_write_per_mtok": null,
315
- "source": "https://docs.z.ai/guides/overview/pricing"
316
- },
317
- "glm-4-air": {
318
- "input_per_mtok": 0.2,
319
- "output_per_mtok": 1.1,
320
- "cache_read_per_mtok": 0.03,
321
- "cache_write_per_mtok": null,
322
- "source": "https://docs.z.ai/guides/overview/pricing"
323
- },
324
- "grok-4": {
325
- "input_per_mtok": 3,
326
- "output_per_mtok": 15,
327
- "cache_read_per_mtok": null,
328
- "cache_write_per_mtok": null,
329
- "source": "https://docs.x.ai/docs/pricing"
330
- },
331
- "grok-3": {
332
- "input_per_mtok": 3,
333
- "output_per_mtok": 15,
334
- "cache_read_per_mtok": 0.75,
335
- "cache_write_per_mtok": null,
336
- "source": "https://docs.x.ai/docs/pricing"
337
- },
338
- "grok-code-fast-1": {
339
- "input_per_mtok": 0.2,
340
- "output_per_mtok": 1.5,
341
- "cache_read_per_mtok": 0.02,
342
- "cache_write_per_mtok": null,
343
- "source": "https://docs.x.ai/docs/pricing"
344
- },
345
- "grok-2": {
346
- "input_per_mtok": 2,
347
- "output_per_mtok": 10,
348
- "cache_read_per_mtok": null,
349
- "cache_write_per_mtok": null,
350
- "source": "https://docs.x.ai/docs/pricing"
351
- },
352
- "mistral-large-latest": {
353
- "input_per_mtok": 0.5,
354
- "output_per_mtok": 1.5,
355
- "cache_read_per_mtok": null,
356
- "cache_write_per_mtok": null,
357
- "source": "https://mistral.ai/pricing"
358
- },
359
- "codestral-latest": {
360
- "input_per_mtok": 0.3,
361
- "output_per_mtok": 0.9,
362
- "cache_read_per_mtok": null,
363
- "cache_write_per_mtok": null,
364
- "source": "https://mistral.ai/pricing"
365
- },
366
- "devstral": {
367
- "input_per_mtok": 0.4,
368
- "output_per_mtok": 2,
369
- "cache_read_per_mtok": null,
370
- "cache_write_per_mtok": null,
371
- "source": "https://mistral.ai/pricing"
372
- },
373
- "mistral-medium": {
374
- "input_per_mtok": 0.4,
375
- "output_per_mtok": 2,
376
- "cache_read_per_mtok": null,
377
- "cache_write_per_mtok": null,
378
- "source": "https://mistral.ai/pricing"
379
- },
380
- "llama-4-maverick": {
381
- "input_per_mtok": 0.27,
382
- "output_per_mtok": 0.85,
383
- "cache_read_per_mtok": null,
384
- "cache_write_per_mtok": null,
385
- "source": "https://www.together.ai/pricing"
386
- },
387
- "llama-4-scout": {
388
- "input_per_mtok": 0.08,
389
- "output_per_mtok": 0.3,
390
- "cache_read_per_mtok": null,
391
- "cache_write_per_mtok": null,
392
- "source": "https://www.together.ai/pricing"
393
- },
394
- "llama-3.3-70b": {
395
- "input_per_mtok": 0.88,
396
- "output_per_mtok": 0.88,
397
- "cache_read_per_mtok": null,
398
- "cache_write_per_mtok": null,
399
- "source": "https://www.together.ai/pricing"
400
- },
401
- "command-a": {
402
- "input_per_mtok": 2.5,
403
- "output_per_mtok": 10,
404
- "cache_read_per_mtok": null,
405
- "cache_write_per_mtok": null,
406
- "source": "https://cohere.com/pricing"
407
- },
408
- "command-r-plus": {
409
- "input_per_mtok": 2.5,
410
- "output_per_mtok": 10,
411
- "cache_read_per_mtok": null,
412
- "cache_write_per_mtok": null,
413
- "source": "https://cohere.com/pricing"
414
- },
415
- "amazon-nova-pro": {
416
- "input_per_mtok": 0.8,
417
- "output_per_mtok": 3.2,
418
- "cache_read_per_mtok": null,
419
- "cache_write_per_mtok": null,
420
- "source": "https://aws.amazon.com/bedrock/pricing/"
421
- },
422
- "amazon-nova-lite": {
423
- "input_per_mtok": 0.06,
424
- "output_per_mtok": 0.24,
425
- "cache_read_per_mtok": null,
426
- "cache_write_per_mtok": null,
427
- "source": "https://aws.amazon.com/bedrock/pricing/"
428
- }
429
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * persist-tool-calls — runtime glue between MCP server's in-memory
3
- * `sessionStats` and the on-disk `tool_calls` SessionDB table.
4
- *
5
- * Why this module exists
6
- * ──────────────────────
7
- * Commit 4742160 (May 2 16:58) added the SessionDB write path so the
8
- * statusline counters survived `npm update -g context-mode` and
9
- * `claude --continue`. Commit b392c2f (May 2 21:43) — the concurrency
10
- * refactor — silently dropped that wiring as collateral. Same-session
11
- * `/ctx-upgrade` flips the statusline back to `0 calls / $0.00`
12
- * because the new PID starts with an empty `sessionStats` and never
13
- * looks at the table the old PID was writing to.
14
- *
15
- * This module re-introduces the write path AND adds the read-side
16
- * restore that 4742160 never shipped — both pure helpers so the
17
- * server.ts wiring is a one-liner and the unit tests don't need to
18
- * boot the MCP server.
19
- */
20
- /**
21
- * Shape returned by {@link restoreSessionStats}. Subset of the in-memory
22
- * `sessionStats` object the MCP server keeps — only the fields that can
23
- * be recovered from SessionDB.
24
- */
25
- export interface RestoredSessionStats {
26
- /** Per-tool call counts. */
27
- calls: Record<string, number>;
28
- /** Per-tool returned bytes. */
29
- bytesReturned: Record<string, number>;
30
- /**
31
- * Epoch-ms for `session_meta.started_at` of the latest session, so the
32
- * statusline `uptime_ms` reflects the original session start instead of
33
- * resetting to `Date.now()` on every PID change.
34
- */
35
- sessionStart: number;
36
- }
37
- /**
38
- * Increment the persistent tool-call counter for `toolName` under whatever
39
- * session_id `session_meta` currently treats as the most recent. This is
40
- * called from {@link trackResponse} on every tool response and must be
41
- * cheap, non-throwing, and best-effort — a stats failure must never break
42
- * the MCP tool call.
43
- */
44
- export declare function persistToolCallCounter(sessionDbPath: string, toolName: string, bytes: number): void;
45
- /**
46
- * Read the latest session's tool-call totals back out of SessionDB so the
47
- * MCP server can hydrate its in-memory `sessionStats` on startup. Returns
48
- * `null` when the DB is missing or empty so the caller can keep the
49
- * default zero-state without branching twice.
50
- *
51
- * Used during MCP server boot (BEFORE the heartbeat fires) so the
52
- * statusline doesn't briefly flash `0 calls / $0.00` after upgrade.
53
- */
54
- export declare function restoreSessionStats(sessionDbPath: string): RestoredSessionStats | null;
@@ -1,105 +0,0 @@
1
- /**
2
- * persist-tool-calls — runtime glue between MCP server's in-memory
3
- * `sessionStats` and the on-disk `tool_calls` SessionDB table.
4
- *
5
- * Why this module exists
6
- * ──────────────────────
7
- * Commit 4742160 (May 2 16:58) added the SessionDB write path so the
8
- * statusline counters survived `npm update -g context-mode` and
9
- * `claude --continue`. Commit b392c2f (May 2 21:43) — the concurrency
10
- * refactor — silently dropped that wiring as collateral. Same-session
11
- * `/ctx-upgrade` flips the statusline back to `0 calls / $0.00`
12
- * because the new PID starts with an empty `sessionStats` and never
13
- * looks at the table the old PID was writing to.
14
- *
15
- * This module re-introduces the write path AND adds the read-side
16
- * restore that 4742160 never shipped — both pure helpers so the
17
- * server.ts wiring is a one-liner and the unit tests don't need to
18
- * boot the MCP server.
19
- */
20
- import { existsSync } from "node:fs";
21
- import { SessionDB } from "./db.js";
22
- /**
23
- * Increment the persistent tool-call counter for `toolName` under whatever
24
- * session_id `session_meta` currently treats as the most recent. This is
25
- * called from {@link trackResponse} on every tool response and must be
26
- * cheap, non-throwing, and best-effort — a stats failure must never break
27
- * the MCP tool call.
28
- */
29
- export function persistToolCallCounter(sessionDbPath, toolName, bytes) {
30
- try {
31
- if (!existsSync(sessionDbPath))
32
- return;
33
- const sdb = new SessionDB({ dbPath: sessionDbPath });
34
- try {
35
- const sid = sdb.getLatestSessionId();
36
- if (!sid)
37
- return;
38
- sdb.incrementToolCall(sid, toolName, bytes);
39
- }
40
- finally {
41
- sdb.close();
42
- }
43
- }
44
- catch {
45
- // Best-effort: counter must never throw and break the parent tool call.
46
- }
47
- }
48
- /**
49
- * Read the latest session's tool-call totals back out of SessionDB so the
50
- * MCP server can hydrate its in-memory `sessionStats` on startup. Returns
51
- * `null` when the DB is missing or empty so the caller can keep the
52
- * default zero-state without branching twice.
53
- *
54
- * Used during MCP server boot (BEFORE the heartbeat fires) so the
55
- * statusline doesn't briefly flash `0 calls / $0.00` after upgrade.
56
- */
57
- export function restoreSessionStats(sessionDbPath) {
58
- try {
59
- if (!existsSync(sessionDbPath))
60
- return null;
61
- const sdb = new SessionDB({ dbPath: sessionDbPath });
62
- try {
63
- const sid = sdb.getLatestSessionId();
64
- if (!sid)
65
- return null;
66
- const stats = sdb.getToolCallStats(sid);
67
- const calls = {};
68
- const bytesReturned = {};
69
- for (const [tool, row] of Object.entries(stats.byTool)) {
70
- calls[tool] = row.calls;
71
- bytesReturned[tool] = row.bytesReturned;
72
- }
73
- // started_at is "YYYY-MM-DD HH:MM:SS" in UTC (SQLite datetime() default);
74
- // append "Z" so Date.parse interprets it as UTC, matching how the
75
- // session was actually persisted.
76
- let sessionStart = Date.now();
77
- try {
78
- const meta = sdb.getSessionStats(sid);
79
- if (meta?.started_at) {
80
- const parsed = Date.parse(`${meta.started_at}Z`);
81
- if (Number.isFinite(parsed) && parsed > 0)
82
- sessionStart = parsed;
83
- }
84
- }
85
- catch {
86
- // best-effort — keep `Date.now()` fallback
87
- }
88
- // Skip empty restores so callers can `if (restored)` and not stomp
89
- // their already-zero default with another zero.
90
- if (Object.keys(calls).length === 0 &&
91
- Object.keys(bytesReturned).length === 0) {
92
- // Still useful to return sessionStart so uptime_ms doesn't reset
93
- // even when no tool calls were made — but only if we found a session.
94
- return { calls, bytesReturned, sessionStart };
95
- }
96
- return { calls, bytesReturned, sessionStart };
97
- }
98
- finally {
99
- sdb.close();
100
- }
101
- }
102
- catch {
103
- return null;
104
- }
105
- }
@@ -1,64 +0,0 @@
1
- /**
2
- * Pricing catalog — single source of truth for per-model USD cost.
3
- *
4
- * Deep module, tiny interface. At load it reads one curated multi-vendor JSON
5
- * (src/session/model-prices.json) into a Map<modelId, Price> in per-Mtok units,
6
- * then exposes three pure-ish functions:
7
- *
8
- * lookupPrice(modelId) → Price | null
9
- * computeCostUsd(modelId, tokens) → number | null
10
- * nativeOrComputed(id, t, native) → number | null
11
- *
12
- * WHY THIS EXISTS — the bug it kills:
13
- * The old table in src/session/extract.ts hardcoded ~5 Claude rows plus a
14
- * `default` row, and any unmatched id (every OpenAI / Gemini / Qwen / DeepSeek
15
- * / Grok model) silently inherited Claude-Sonnet pricing. Non-Claude turns were
16
- * therefore mispriced. Here each model is priced from ITS OWN curated row, and
17
- * an unknown id resolves to `null` (no price) instead of a wrong Claude rate.
18
- *
19
- * The large litellm catalog (~1.5MB, ~2900 models) is NOT bundled — it lives at
20
- * tools/pricing/litellm-catalog.json as the dev-only refresh base for this
21
- * curated JSON.
22
- *
23
- * The curated JSON is small (~13KB, 61 models) and esbuild inlines it into the
24
- * hook/server bundles at build time (no runtime fs read, no external file).
25
- */
26
- /** Per-Mtok price for one model. Any of the four rates may be null ("unknown"). */
27
- export interface Price {
28
- input_per_mtok: number | null;
29
- output_per_mtok: number | null;
30
- cache_read_per_mtok: number | null;
31
- cache_write_per_mtok: number | null;
32
- }
33
- /** Token counts for one turn. All fields optional; absent ⇒ treated as 0. */
34
- export interface TokenCounts {
35
- input_tokens?: number;
36
- output_tokens?: number;
37
- cache_read_tokens?: number;
38
- cache_creation_tokens?: number;
39
- }
40
- /**
41
- * Resolve a model id to its curated Price, or null on miss.
42
- * Strategy: exact, then normalized (trim+lowercase), then provider-stripped
43
- * normalized. Misses return null so the caller can decide (warn / fall back).
44
- */
45
- export declare function lookupPrice(modelId: string): Price | null;
46
- /**
47
- * Σ tokens × per-Mtok price / 1e6 over the four buckets. Returns null when no
48
- * price is found OR every token count is zero/absent (so dashboards never show
49
- * a misleading "$0.00 for nothing" row). On a price miss, warns exactly once
50
- * with the unmatched id so the curated catalog can be extended.
51
- *
52
- * Bucket → price mapping:
53
- * input_tokens → input_per_mtok
54
- * output_tokens → output_per_mtok (null ⇒ input rate)
55
- * cache_read_tokens → cache_read_per_mtok (null ⇒ input rate)
56
- * cache_creation_tokens → cache_write_per_mtok (null ⇒ input rate)
57
- */
58
- export declare function computeCostUsd(modelId: string, t: TokenCounts): number | null;
59
- /**
60
- * Prefer a provider-supplied native cost when present, else compute from the
61
- * catalog. A native cost of exactly 0 is a real value (free tier) and passes
62
- * through — only null/undefined defers to computeCostUsd.
63
- */
64
- export declare function nativeOrComputed(modelId: string, t: TokenCounts, nativeCostUsd?: number | null): number | null;