context-mode 1.0.168 → 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 (395) 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/cache-heal.d.ts +0 -48
  163. package/build/cache-heal.js +0 -150
  164. package/build/cli.d.ts +0 -34
  165. package/build/cli.js +0 -1827
  166. package/build/concurrency/runPool.d.ts +0 -36
  167. package/build/concurrency/runPool.js +0 -51
  168. package/build/db-base.d.ts +0 -179
  169. package/build/db-base.js +0 -569
  170. package/build/executor.d.ts +0 -72
  171. package/build/executor.js +0 -678
  172. package/build/exit-classify.d.ts +0 -19
  173. package/build/exit-classify.js +0 -12
  174. package/build/fetch-cache.d.ts +0 -13
  175. package/build/fetch-cache.js +0 -15
  176. package/build/lifecycle.d.ts +0 -124
  177. package/build/lifecycle.js +0 -278
  178. package/build/openclaw/mcp-tools.d.ts +0 -54
  179. package/build/openclaw/mcp-tools.js +0 -198
  180. package/build/openclaw/workspace-router.d.ts +0 -29
  181. package/build/openclaw/workspace-router.js +0 -64
  182. package/build/openclaw-plugin.d.ts +0 -130
  183. package/build/openclaw-plugin.js +0 -626
  184. package/build/opencode-plugin.d.ts +0 -122
  185. package/build/opencode-plugin.js +0 -375
  186. package/build/pi-extension.d.ts +0 -14
  187. package/build/pi-extension.js +0 -451
  188. package/build/routing-block.d.ts +0 -8
  189. package/build/routing-block.js +0 -86
  190. package/build/runPool.d.ts +0 -36
  191. package/build/runPool.js +0 -51
  192. package/build/runtime.d.ts +0 -71
  193. package/build/runtime.js +0 -659
  194. package/build/search/auto-memory.d.ts +0 -47
  195. package/build/search/auto-memory.js +0 -170
  196. package/build/search/ctx-search-schema.d.ts +0 -90
  197. package/build/search/ctx-search-schema.js +0 -135
  198. package/build/search/flood-guard.d.ts +0 -57
  199. package/build/search/flood-guard.js +0 -80
  200. package/build/search/unified.d.ts +0 -56
  201. package/build/search/unified.js +0 -104
  202. package/build/security.d.ts +0 -206
  203. package/build/security.js +0 -780
  204. package/build/server.d.ts +0 -184
  205. package/build/server.js +0 -4542
  206. package/build/session/analytics.d.ts +0 -745
  207. package/build/session/analytics.js +0 -2369
  208. package/build/session/db.d.ts +0 -468
  209. package/build/session/db.js +0 -1308
  210. package/build/session/error-classifier.d.ts +0 -87
  211. package/build/session/error-classifier.js +0 -303
  212. package/build/session/event-emit.d.ts +0 -48
  213. package/build/session/event-emit.js +0 -101
  214. package/build/session/extract.d.ts +0 -333
  215. package/build/session/extract.js +0 -2688
  216. package/build/session/model-prices.json +0 -429
  217. package/build/session/persist-tool-calls.d.ts +0 -54
  218. package/build/session/persist-tool-calls.js +0 -105
  219. package/build/session/pricing.d.ts +0 -64
  220. package/build/session/pricing.js +0 -151
  221. package/build/session/project-attribution.d.ts +0 -73
  222. package/build/session/project-attribution.js +0 -245
  223. package/build/session/purge.d.ts +0 -138
  224. package/build/session/purge.js +0 -240
  225. package/build/session/snapshot.d.ts +0 -46
  226. package/build/session/snapshot.js +0 -532
  227. package/build/store-directory.d.ts +0 -56
  228. package/build/store-directory.js +0 -254
  229. package/build/store.d.ts +0 -147
  230. package/build/store.js +0 -1714
  231. package/build/tool-naming.d.ts +0 -4
  232. package/build/tool-naming.js +0 -24
  233. package/build/truncate.d.ts +0 -57
  234. package/build/truncate.js +0 -142
  235. package/build/types.d.ts +0 -117
  236. package/build/types.js +0 -20
  237. package/build/util/claude-config.d.ts +0 -32
  238. package/build/util/claude-config.js +0 -84
  239. package/build/util/hook-config.d.ts +0 -27
  240. package/build/util/hook-config.js +0 -76
  241. package/build/util/jsonc.d.ts +0 -14
  242. package/build/util/jsonc.js +0 -104
  243. package/build/util/plugin-cache-integrity.d.ts +0 -51
  244. package/build/util/plugin-cache-integrity.js +0 -146
  245. package/build/util/project-dir.d.ts +0 -149
  246. package/build/util/project-dir.js +0 -340
  247. package/build/util/sibling-mcp.d.ts +0 -79
  248. package/build/util/sibling-mcp.js +0 -181
  249. package/cli.bundle.mjs +0 -1235
  250. package/configs/antigravity/GEMINI.md +0 -68
  251. package/configs/antigravity/mcp_config.json +0 -7
  252. package/configs/antigravity-cli/hooks/hooks.json +0 -37
  253. package/configs/antigravity-cli/hooks.json +0 -37
  254. package/configs/antigravity-cli/mcp_config.json +0 -10
  255. package/configs/antigravity-cli/plugin.json +0 -14
  256. package/configs/antigravity-cli/rules/context-mode.md +0 -77
  257. package/configs/antigravity-cli/skills/context-mode/SKILL.md +0 -77
  258. package/configs/claude-code/CLAUDE.md +0 -91
  259. package/configs/codex/AGENTS.md +0 -99
  260. package/configs/codex/config.toml +0 -8
  261. package/configs/codex/hooks.json +0 -47
  262. package/configs/copilot-cli/.github/plugin/plugin.json +0 -23
  263. package/configs/copilot-cli/.mcp.json +0 -12
  264. package/configs/copilot-cli/README.md +0 -47
  265. package/configs/copilot-cli/hooks.json +0 -41
  266. package/configs/copilot-cli/skills/context-mode/SKILL.md +0 -38
  267. package/configs/cursor/context-mode.mdc +0 -76
  268. package/configs/cursor/hooks.json +0 -21
  269. package/configs/cursor/mcp.json +0 -7
  270. package/configs/gemini-cli/GEMINI.md +0 -88
  271. package/configs/gemini-cli/mcp.json +0 -7
  272. package/configs/gemini-cli/settings.json +0 -60
  273. package/configs/jetbrains-copilot/copilot-instructions.md +0 -80
  274. package/configs/jetbrains-copilot/hooks.json +0 -16
  275. package/configs/jetbrains-copilot/mcp.json +0 -7
  276. package/configs/kilo/AGENTS.md +0 -84
  277. package/configs/kilo/kilo.json +0 -6
  278. package/configs/kimi/hooks.json +0 -54
  279. package/configs/kiro/KIRO.md +0 -84
  280. package/configs/kiro/agent.json +0 -18
  281. package/configs/kiro/mcp.json +0 -7
  282. package/configs/omp/SYSTEM.md +0 -85
  283. package/configs/omp/mcp.json +0 -7
  284. package/configs/openclaw/AGENTS.md +0 -87
  285. package/configs/openclaw/openclaw.json +0 -13
  286. package/configs/opencode/AGENTS.md +0 -84
  287. package/configs/opencode/opencode.json +0 -6
  288. package/configs/pi/AGENTS.md +0 -3
  289. package/configs/qwen-code/QWEN.md +0 -91
  290. package/configs/vscode-copilot/copilot-instructions.md +0 -80
  291. package/configs/vscode-copilot/hooks.json +0 -16
  292. package/configs/vscode-copilot/mcp.json +0 -7
  293. package/configs/zed/AGENTS.md +0 -68
  294. package/hooks/antigravity-cli/payload.mjs +0 -98
  295. package/hooks/antigravity-cli/posttooluse.mjs +0 -138
  296. package/hooks/antigravity-cli/pretooluse.mjs +0 -78
  297. package/hooks/antigravity-cli/stop.mjs +0 -58
  298. package/hooks/auto-injection.mjs +0 -102
  299. package/hooks/cache-heal-utils.mjs +0 -379
  300. package/hooks/codex/platform.mjs +0 -1
  301. package/hooks/codex/posttooluse.mjs +0 -66
  302. package/hooks/codex/precompact.mjs +0 -70
  303. package/hooks/codex/pretooluse.mjs +0 -42
  304. package/hooks/codex/sessionstart.mjs +0 -121
  305. package/hooks/codex/stop.mjs +0 -138
  306. package/hooks/codex/userpromptsubmit.mjs +0 -75
  307. package/hooks/copilot-cli/posttooluse.mjs +0 -79
  308. package/hooks/copilot-cli/precompact.mjs +0 -66
  309. package/hooks/copilot-cli/pretooluse.mjs +0 -41
  310. package/hooks/copilot-cli/sessionstart.mjs +0 -121
  311. package/hooks/copilot-cli/stop.mjs +0 -59
  312. package/hooks/copilot-cli/userpromptsubmit.mjs +0 -77
  313. package/hooks/core/codex-caps.mjs +0 -112
  314. package/hooks/core/formatters.mjs +0 -356
  315. package/hooks/core/mcp-ready.mjs +0 -109
  316. package/hooks/core/platform-detect.mjs +0 -49
  317. package/hooks/core/routing.mjs +0 -1017
  318. package/hooks/core/stdin.mjs +0 -90
  319. package/hooks/core/tool-naming.mjs +0 -57
  320. package/hooks/cursor/afteragentresponse.mjs +0 -74
  321. package/hooks/cursor/hooks.json +0 -31
  322. package/hooks/cursor/posttooluse.mjs +0 -72
  323. package/hooks/cursor/pretooluse.mjs +0 -26
  324. package/hooks/cursor/sessionstart.mjs +0 -97
  325. package/hooks/cursor/stop.mjs +0 -48
  326. package/hooks/ensure-deps.mjs +0 -254
  327. package/hooks/formatters/claude-code.mjs +0 -113
  328. package/hooks/formatters/cursor.mjs +0 -37
  329. package/hooks/formatters/gemini-cli.mjs +0 -55
  330. package/hooks/formatters/vscode-copilot.mjs +0 -55
  331. package/hooks/gemini-cli/aftermodel.mjs +0 -70
  332. package/hooks/gemini-cli/aftertool.mjs +0 -61
  333. package/hooks/gemini-cli/beforeagent.mjs +0 -99
  334. package/hooks/gemini-cli/beforetool.mjs +0 -27
  335. package/hooks/gemini-cli/precompress.mjs +0 -55
  336. package/hooks/gemini-cli/sessionstart.mjs +0 -137
  337. package/hooks/heal-partial-install.mjs +0 -712
  338. package/hooks/jetbrains-copilot/posttooluse.mjs +0 -61
  339. package/hooks/jetbrains-copilot/precompact.mjs +0 -55
  340. package/hooks/jetbrains-copilot/pretooluse.mjs +0 -27
  341. package/hooks/jetbrains-copilot/sessionstart.mjs +0 -124
  342. package/hooks/kimi/platform.mjs +0 -1
  343. package/hooks/kimi/posttooluse.mjs +0 -72
  344. package/hooks/kimi/precompact.mjs +0 -80
  345. package/hooks/kimi/pretooluse.mjs +0 -42
  346. package/hooks/kimi/sessionend.mjs +0 -61
  347. package/hooks/kimi/sessionstart.mjs +0 -113
  348. package/hooks/kimi/stop.mjs +0 -132
  349. package/hooks/kimi/userpromptsubmit.mjs +0 -90
  350. package/hooks/kiro/agentspawn.mjs +0 -97
  351. package/hooks/kiro/posttooluse.mjs +0 -51
  352. package/hooks/kiro/pretooluse.mjs +0 -64
  353. package/hooks/kiro/userpromptsubmit.mjs +0 -88
  354. package/hooks/normalize-hooks.mjs +0 -323
  355. package/hooks/platform-bridge.mjs +0 -340
  356. package/hooks/posttooluse.mjs +0 -187
  357. package/hooks/precompact.mjs +0 -100
  358. package/hooks/pretooluse.mjs +0 -227
  359. package/hooks/qwen-code/platform.mjs +0 -1
  360. package/hooks/qwen-code/stop.mjs +0 -168
  361. package/hooks/routing-block.mjs +0 -105
  362. package/hooks/run-hook.mjs +0 -95
  363. package/hooks/security.bundle.mjs +0 -2
  364. package/hooks/session-attribution.bundle.mjs +0 -1
  365. package/hooks/session-db.bundle.mjs +0 -144
  366. package/hooks/session-directive.mjs +0 -520
  367. package/hooks/session-extract.bundle.mjs +0 -3
  368. package/hooks/session-helpers.mjs +0 -428
  369. package/hooks/session-loaders.mjs +0 -448
  370. package/hooks/session-snapshot.bundle.mjs +0 -32
  371. package/hooks/sessionstart.mjs +0 -464
  372. package/hooks/stop.mjs +0 -82
  373. package/hooks/suppress-stderr.mjs +0 -25
  374. package/hooks/userpromptsubmit.mjs +0 -108
  375. package/hooks/vscode-copilot/posttooluse.mjs +0 -61
  376. package/hooks/vscode-copilot/precompact.mjs +0 -55
  377. package/hooks/vscode-copilot/pretooluse.mjs +0 -27
  378. package/hooks/vscode-copilot/sessionstart.mjs +0 -129
  379. package/openclaw.plugin.json +0 -38
  380. package/scripts/heal-better-sqlite3.mjs +0 -430
  381. package/scripts/heal-installed-plugins.mjs +0 -598
  382. package/scripts/plugin-cache-integrity.mjs +0 -248
  383. package/scripts/postinstall.mjs +0 -384
  384. package/server.bundle.mjs +0 -1161
  385. package/skills/.ignore +0 -7
  386. package/skills/context-mode/SKILL.md +0 -300
  387. package/skills/context-mode/references/anti-patterns.md +0 -283
  388. package/skills/context-mode/references/patterns-javascript.md +0 -298
  389. package/skills/context-mode/references/patterns-python.md +0 -304
  390. package/skills/context-mode/references/patterns-shell.md +0 -277
  391. package/skills/ctx-index/SKILL.md +0 -46
  392. package/skills/ctx-insight/SKILL.md +0 -24
  393. package/skills/ctx-purge/SKILL.md +0 -49
  394. package/skills/ctx-search/SKILL.md +0 -35
  395. 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;