@codemieai/code 0.15.2 → 0.15.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 (302) hide show
  1. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  2. package/dist/agents/core/AgentCLI.js +9 -0
  3. package/dist/agents/core/AgentCLI.js.map +1 -1
  4. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  5. package/dist/agents/core/BaseAgentAdapter.js +34 -9
  6. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  7. package/dist/agents/plugins/claude/claude.models.d.ts +58 -0
  8. package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
  9. package/dist/agents/plugins/claude/claude.models.js +196 -10
  10. package/dist/agents/plugins/claude/claude.models.js.map +1 -1
  11. package/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
  12. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  13. package/dist/agents/plugins/claude/claude.plugin.js +149 -47
  14. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  15. package/dist/agents/plugins/claude/claude.session.d.ts +17 -1
  16. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude/claude.session.js +4 -0
  18. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  19. package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +729 -0
  20. package/dist/agents/plugins/claude/statusline-installer.d.ts +1 -1
  21. package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
  22. package/dist/agents/plugins/claude/statusline-installer.js +41 -3
  23. package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
  24. package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
  25. package/dist/agents/plugins/codex/codex-models.js +109 -8
  26. package/dist/agents/plugins/codex/codex-models.js.map +1 -1
  27. package/dist/agents/plugins/codex/codex.correlation.d.ts +39 -0
  28. package/dist/agents/plugins/codex/codex.correlation.d.ts.map +1 -0
  29. package/dist/agents/plugins/codex/codex.correlation.js +150 -0
  30. package/dist/agents/plugins/codex/codex.correlation.js.map +1 -0
  31. package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
  32. package/dist/agents/plugins/codex/codex.plugin.js +8 -40
  33. package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
  34. package/dist/agents/plugins/kimi/kimi.env-model.d.ts +27 -0
  35. package/dist/agents/plugins/kimi/kimi.env-model.d.ts.map +1 -0
  36. package/dist/agents/plugins/kimi/kimi.env-model.js +52 -0
  37. package/dist/agents/plugins/kimi/kimi.env-model.js.map +1 -0
  38. package/dist/agents/plugins/kimi/kimi.session.d.ts +6 -0
  39. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -1
  40. package/dist/agents/plugins/kimi/kimi.session.js +24 -2
  41. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -1
  42. package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
  43. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +4 -5
  44. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  45. package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -1
  46. package/dist/agents/plugins/pi/pi.models.js +3 -3
  47. package/dist/agents/plugins/pi/pi.models.js.map +1 -1
  48. package/dist/bin/proxy-daemon.js +8 -1
  49. package/dist/bin/proxy-daemon.js.map +1 -1
  50. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +19 -2
  51. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  52. package/dist/cli/commands/analytics/cost/cost-enricher.js +171 -14
  53. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  54. package/dist/cli/commands/analytics/cost/local-models.d.ts +15 -0
  55. package/dist/cli/commands/analytics/cost/local-models.d.ts.map +1 -0
  56. package/dist/cli/commands/analytics/cost/local-models.js +21 -0
  57. package/dist/cli/commands/analytics/cost/local-models.js.map +1 -0
  58. package/dist/cli/commands/analytics/cost/types.d.ts +60 -0
  59. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  60. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  61. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +25 -2
  62. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  63. package/dist/cli/commands/analytics/cost/usage-readers.js +61 -3
  64. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  65. package/dist/cli/commands/analytics/formatter.d.ts +11 -0
  66. package/dist/cli/commands/analytics/formatter.d.ts.map +1 -1
  67. package/dist/cli/commands/analytics/formatter.js +28 -0
  68. package/dist/cli/commands/analytics/formatter.js.map +1 -1
  69. package/dist/cli/commands/analytics/index.d.ts.map +1 -1
  70. package/dist/cli/commands/analytics/index.js +70 -73
  71. package/dist/cli/commands/analytics/index.js.map +1 -1
  72. package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
  73. package/dist/cli/commands/analytics/otel-loader.js +60 -14
  74. package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
  75. package/dist/cli/commands/analytics/otel-pricing.d.ts +38 -0
  76. package/dist/cli/commands/analytics/otel-pricing.d.ts.map +1 -0
  77. package/dist/cli/commands/analytics/otel-pricing.js +33 -0
  78. package/dist/cli/commands/analytics/otel-pricing.js.map +1 -0
  79. package/dist/cli/commands/analytics/report/client/app.js +279 -18
  80. package/dist/cli/commands/analytics/report/output-target.d.ts +22 -0
  81. package/dist/cli/commands/analytics/report/output-target.d.ts.map +1 -0
  82. package/dist/cli/commands/analytics/report/output-target.js +56 -0
  83. package/dist/cli/commands/analytics/report/output-target.js.map +1 -0
  84. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  85. package/dist/cli/commands/analytics/report/payload-builder.js +6 -0
  86. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  87. package/dist/cli/commands/analytics/report/report-generator.d.ts +1 -1
  88. package/dist/cli/commands/analytics/report/report-generator.js +1 -1
  89. package/dist/cli/commands/analytics/report/session-report.d.ts +1 -3
  90. package/dist/cli/commands/analytics/report/session-report.d.ts.map +1 -1
  91. package/dist/cli/commands/analytics/report/session-report.js +1 -3
  92. package/dist/cli/commands/analytics/report/session-report.js.map +1 -1
  93. package/dist/cli/commands/analytics/report/template.html +6 -6
  94. package/dist/cli/commands/analytics/report/types.d.ts +17 -1
  95. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  96. package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -1
  97. package/dist/cli/commands/analytics/sources/sessions-source.js +9 -11
  98. package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -1
  99. package/dist/cli/commands/analytics/sources/types.d.ts +0 -2
  100. package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -1
  101. package/dist/cli/commands/analytics/types.d.ts +8 -8
  102. package/dist/cli/commands/analytics/types.d.ts.map +1 -1
  103. package/dist/cli/commands/assistants/constants.d.ts +4 -0
  104. package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
  105. package/dist/cli/commands/assistants/constants.js +4 -0
  106. package/dist/cli/commands/assistants/constants.js.map +1 -1
  107. package/dist/cli/commands/assistants/setup/data.d.ts +1 -0
  108. package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -1
  109. package/dist/cli/commands/assistants/setup/data.js +55 -10
  110. package/dist/cli/commands/assistants/setup/data.js.map +1 -1
  111. package/dist/cli/commands/assistants/setup/helpers.d.ts +1 -1
  112. package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
  113. package/dist/cli/commands/assistants/setup/helpers.js +2 -5
  114. package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
  115. package/dist/cli/commands/assistants/setup/index.d.ts +12 -0
  116. package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
  117. package/dist/cli/commands/assistants/setup/index.js +148 -20
  118. package/dist/cli/commands/assistants/setup/index.js.map +1 -1
  119. package/dist/cli/commands/models.d.ts.map +1 -1
  120. package/dist/cli/commands/models.js +16 -3
  121. package/dist/cli/commands/models.js.map +1 -1
  122. package/dist/cli/commands/profile/display.d.ts +5 -1
  123. package/dist/cli/commands/profile/display.d.ts.map +1 -1
  124. package/dist/cli/commands/profile/display.js +5 -1
  125. package/dist/cli/commands/profile/display.js.map +1 -1
  126. package/dist/cli/commands/profile/index.d.ts.map +1 -1
  127. package/dist/cli/commands/profile/index.js +7 -4
  128. package/dist/cli/commands/profile/index.js.map +1 -1
  129. package/dist/cli/commands/proxy/connect-orchestrator.d.ts.map +1 -1
  130. package/dist/cli/commands/proxy/connect-orchestrator.js +3 -4
  131. package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
  132. package/dist/cli/commands/proxy/connectors/desktop.d.ts +2 -3
  133. package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
  134. package/dist/cli/commands/proxy/connectors/desktop.js +9 -25
  135. package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
  136. package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts +19 -0
  137. package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts.map +1 -0
  138. package/dist/cli/commands/proxy/connectors/model-name-resolver.js +126 -0
  139. package/dist/cli/commands/proxy/connectors/model-name-resolver.js.map +1 -0
  140. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +23 -0
  141. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -0
  142. package/dist/cli/commands/proxy/connectors/tenant-catalog.js +136 -0
  143. package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -0
  144. package/dist/cli/commands/proxy/connectors/vscode-claude-code.d.ts.map +1 -1
  145. package/dist/cli/commands/proxy/connectors/vscode-claude-code.js +49 -19
  146. package/dist/cli/commands/proxy/connectors/vscode-claude-code.js.map +1 -1
  147. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +21 -3
  148. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
  149. package/dist/cli/commands/proxy/connectors/vscode-models.js +86 -28
  150. package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
  151. package/dist/cli/commands/proxy/connectors/vscode.d.ts +3 -2
  152. package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
  153. package/dist/cli/commands/proxy/connectors/vscode.js +67 -39
  154. package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
  155. package/dist/cli/commands/shared/headless.d.ts +69 -0
  156. package/dist/cli/commands/shared/headless.d.ts.map +1 -0
  157. package/dist/cli/commands/shared/headless.js +83 -0
  158. package/dist/cli/commands/shared/headless.js.map +1 -0
  159. package/dist/cli/commands/shared/helpers.d.ts +21 -0
  160. package/dist/cli/commands/shared/helpers.d.ts.map +1 -1
  161. package/dist/cli/commands/shared/helpers.js +73 -1
  162. package/dist/cli/commands/shared/helpers.js.map +1 -1
  163. package/dist/cli/commands/shared/identifier-resolution.d.ts +23 -0
  164. package/dist/cli/commands/shared/identifier-resolution.d.ts.map +1 -0
  165. package/dist/cli/commands/shared/identifier-resolution.js +55 -0
  166. package/dist/cli/commands/shared/identifier-resolution.js.map +1 -0
  167. package/dist/cli/commands/skills/setup/data.d.ts +3 -2
  168. package/dist/cli/commands/skills/setup/data.d.ts.map +1 -1
  169. package/dist/cli/commands/skills/setup/data.js +75 -13
  170. package/dist/cli/commands/skills/setup/data.js.map +1 -1
  171. package/dist/cli/commands/skills/setup/helpers.d.ts +1 -1
  172. package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
  173. package/dist/cli/commands/skills/setup/helpers.js +2 -5
  174. package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
  175. package/dist/cli/commands/skills/setup/index.d.ts +17 -1
  176. package/dist/cli/commands/skills/setup/index.d.ts.map +1 -1
  177. package/dist/cli/commands/skills/setup/index.js +190 -19
  178. package/dist/cli/commands/skills/setup/index.js.map +1 -1
  179. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
  180. package/dist/providers/core/codemie-auth-helpers.js +6 -1
  181. package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
  182. package/dist/providers/core/default-agent-hooks.d.ts.map +1 -1
  183. package/dist/providers/core/default-agent-hooks.js +9 -0
  184. package/dist/providers/core/default-agent-hooks.js.map +1 -1
  185. package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
  186. package/dist/providers/plugins/bedrock/bedrock.template.js +5 -31
  187. package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
  188. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts +44 -0
  189. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts.map +1 -0
  190. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js +106 -0
  191. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js.map +1 -0
  192. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts +41 -0
  193. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts.map +1 -0
  194. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js +115 -0
  195. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js.map +1 -0
  196. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
  197. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +101 -7
  198. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
  199. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts +4 -0
  200. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts.map +1 -1
  201. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +28 -3
  202. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
  203. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +3 -1
  204. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  205. package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
  206. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  207. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts +67 -0
  208. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts.map +1 -0
  209. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js +203 -0
  210. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js.map +1 -0
  211. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +5 -0
  212. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
  213. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  214. package/dist/providers/plugins/sso/proxy/sso.proxy.js +1 -0
  215. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  216. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -1
  217. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +11 -2
  218. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
  219. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
  220. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +2 -1
  221. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
  222. package/dist/providers/plugins/sso/sso.http-client.d.ts +95 -0
  223. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  224. package/dist/providers/plugins/sso/sso.http-client.js +79 -0
  225. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  226. package/dist/providers/plugins/sso/sso.models.d.ts +7 -0
  227. package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -1
  228. package/dist/providers/plugins/sso/sso.models.js +22 -14
  229. package/dist/providers/plugins/sso/sso.models.js.map +1 -1
  230. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +1 -0
  231. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
  232. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +30 -6
  233. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
  234. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
  235. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +33 -3
  236. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
  237. package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts +58 -0
  238. package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts.map +1 -0
  239. package/dist/telemetry/runtime/DesktopRepositoryResolver.js +370 -0
  240. package/dist/telemetry/runtime/DesktopRepositoryResolver.js.map +1 -0
  241. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +1 -0
  242. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -1
  243. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +89 -6
  244. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -1
  245. package/dist/telemetry/runtime/types.d.ts +2 -0
  246. package/dist/telemetry/runtime/types.d.ts.map +1 -1
  247. package/dist/utils/auth.d.ts +13 -2
  248. package/dist/utils/auth.d.ts.map +1 -1
  249. package/dist/utils/auth.js +7 -3
  250. package/dist/utils/auth.js.map +1 -1
  251. package/dist/utils/bedrock-pricing.mjs +111 -0
  252. package/dist/utils/cli-updater.d.ts.map +1 -1
  253. package/dist/utils/cli-updater.js +32 -7
  254. package/dist/utils/cli-updater.js.map +1 -1
  255. package/dist/utils/config.d.ts +21 -0
  256. package/dist/utils/config.d.ts.map +1 -1
  257. package/dist/utils/config.js +69 -7
  258. package/dist/utils/config.js.map +1 -1
  259. package/dist/utils/credential-crypto.d.ts +51 -0
  260. package/dist/utils/credential-crypto.d.ts.map +1 -0
  261. package/dist/utils/credential-crypto.js +96 -0
  262. package/dist/utils/credential-crypto.js.map +1 -0
  263. package/dist/utils/errors.d.ts +14 -0
  264. package/dist/utils/errors.d.ts.map +1 -1
  265. package/dist/utils/errors.js +25 -0
  266. package/dist/utils/errors.js.map +1 -1
  267. package/dist/utils/model-normalizer.d.ts +6 -0
  268. package/dist/utils/model-normalizer.d.ts.map +1 -1
  269. package/dist/utils/model-normalizer.js +37 -19
  270. package/dist/utils/model-normalizer.js.map +1 -1
  271. package/dist/utils/paths.d.ts +2 -2
  272. package/dist/utils/paths.d.ts.map +1 -1
  273. package/dist/utils/paths.js +11 -9
  274. package/dist/utils/paths.js.map +1 -1
  275. package/dist/utils/price-resolution.d.ts +42 -0
  276. package/dist/utils/price-resolution.d.ts.map +1 -0
  277. package/dist/utils/price-resolution.js +112 -0
  278. package/dist/utils/price-resolution.js.map +1 -0
  279. package/dist/utils/pricing.d.ts +65 -6
  280. package/dist/utils/pricing.d.ts.map +1 -1
  281. package/dist/utils/pricing.js +91 -117
  282. package/dist/utils/pricing.js.map +1 -1
  283. package/dist/utils/pricing.json +201 -20
  284. package/dist/utils/processes.d.ts +12 -0
  285. package/dist/utils/processes.d.ts.map +1 -1
  286. package/dist/utils/processes.js +15 -0
  287. package/dist/utils/processes.js.map +1 -1
  288. package/dist/utils/routing-headers.mjs +104 -0
  289. package/dist/utils/security.d.ts +0 -32
  290. package/dist/utils/security.d.ts.map +1 -1
  291. package/dist/utils/security.js +20 -102
  292. package/dist/utils/security.js.map +1 -1
  293. package/package.json +5 -2
  294. package/scripts/bundle-statusline.mjs +37 -0
  295. package/scripts/copy-plugins.js +19 -2
  296. package/src/utils/tips.json +9 -9
  297. package/dist/agents/plugins/claude/plugin/__tests__/statusline.test.ts +0 -323
  298. package/dist/agents/plugins/claude/plugin/statusline.mjs +0 -282
  299. package/dist/cli/commands/analytics/exporter.d.ts +0 -20
  300. package/dist/cli/commands/analytics/exporter.d.ts.map +0 -1
  301. package/dist/cli/commands/analytics/exporter.js +0 -91
  302. package/dist/cli/commands/analytics/exporter.js.map +0 -1
@@ -2,12 +2,23 @@
2
2
  * Model name normalization utilities
3
3
  * Handles various provider formats (AWS Bedrock, standard names, etc.)
4
4
  */
5
+ /**
6
+ * Vendor path prefixes some proxies/wire logs prepend ahead of the bare model id — `openai.`
7
+ * (dot form) or `openai/` (slash form), the slash-only `azure/`, `vertex_ai/` and `anthropic/`,
8
+ * and the dot-only `moonshotai.` (e.g. `moonshotai.kimi-k2.5`) and `qwen.` (e.g.
9
+ * `qwen.qwen3-coder-480b-a35b-v1`). Matched case-insensitively and stripped in
10
+ * {@link normalizeModelName}, before {@link canonicalizeModelId}'s later dots-to-dashes pass runs
11
+ * — stripping here first is what keeps `moonshotai.kimi-k2.5` resolving to `kimi-k2-5` rather than
12
+ * `moonshotai-kimi-k2-5`.
13
+ */
14
+ const VENDOR_PREFIX_PATTERN = /^(?:openai[./]|azure\/|vertex_ai\/|anthropic\/|moonshotai\.|qwen\.)/i;
5
15
  /**
6
16
  * Normalize LLM model names from different provider formats
7
17
  *
8
18
  * Handles various model name formats:
9
19
  * - AWS Bedrock Converse: converse/region.provider.model-v1:0 -> model
10
20
  * - AWS Bedrock Direct: region.provider.model-v1:0 -> model
21
+ * - Switchyard Bedrock alias: bedrock/region.provider.model -> model (no version suffix)
11
22
  * - Kimi Code: kimi-code/kimi-for-coding -> kimi-for-coding
12
23
  * - Standard Claude: claude-sonnet-4-5-20250929 (unchanged)
13
24
  * - OpenAI: gpt-4-turbo (unchanged)
@@ -16,29 +27,29 @@
16
27
  * Examples:
17
28
  * converse/global.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
18
29
  * eu.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
30
+ * bedrock/us.anthropic.claude-sonnet-5 -> claude-sonnet-5
31
+ * bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
19
32
  * kimi-code/kimi-for-coding -> kimi-for-coding
33
+ * openai.gpt-4o -> gpt-4o
34
+ * azure/gpt-4o -> gpt-4o
35
+ * vertex_ai/gemini-3-pro -> gemini-3-pro
20
36
  * claude-sonnet-4-5-20250929 -> claude-sonnet-4-5-20250929
21
37
  */
22
38
  export function normalizeModelName(modelName) {
23
- // Extract model from AWS Bedrock converse format
24
- // Format: converse/region.provider.model-v1:0
25
- // Example: converse/global.anthropic.claude-haiku-4-5-20251001-v1:0
26
- if (modelName.startsWith('converse/')) {
27
- const match = modelName.match(/anthropic\.(claude-[a-z0-9-]+)-v\d+:/);
28
- if (match) {
29
- return match[1]; // Returns: claude-haiku-4-5-20251001
30
- }
31
- }
32
- // Extract model from AWS Bedrock direct format (without converse/ prefix)
33
- // Format: region.provider.model-v1:0
34
- // Examples:
35
- // - eu.anthropic.claude-haiku-4-5-20251001-v1:0
36
- // - us-east-1.anthropic.claude-opus-4-20250514-v1:0
37
- if (modelName.includes('.anthropic.')) {
38
- const match = modelName.match(/anthropic\.(claude-[a-z0-9-]+)-v\d+:/);
39
- if (match) {
40
- return match[1];
41
- }
39
+ // Extract model from an AWS Bedrock id, with or without a `converse/`/`bedrock/` path
40
+ // prefix — including both stacked together as `bedrock/converse/` (observed on real usage
41
+ // data) — and with or without AWS's own `-v1:0` inference-profile version suffix. The
42
+ // suffix is optional because Switchyard's own Bedrock aliases (e.g.
43
+ // `bedrock/us.anthropic.claude-sonnet-5`, seen on a "capable"-tier routed turn) carry no
44
+ // version at all, unlike a native AWS SDK Bedrock id.
45
+ // Formats:
46
+ // - converse/region.provider.model-v1:0
47
+ // - region.provider.model-v1:0
48
+ // - bedrock/region.provider.model
49
+ // - bedrock/converse/region.provider.model-v1:0
50
+ const bedrockMatch = modelName.match(/^(?:bedrock\/)?(?:converse\/)?[a-z0-9-]+\.anthropic\.(claude-[a-z0-9-]+?)(?:-v\d+:\d+)?$/);
51
+ if (bedrockMatch) {
52
+ return bedrockMatch[1]; // Returns: claude-haiku-4-5-20251001
42
53
  }
43
54
  // Strip Kimi Code vendor prefix so wire-log model aliases resolve to the pricing table.
44
55
  // Kimi emits aliases like "kimi-code/kimi-for-coding"; the canonical pricing key is
@@ -46,6 +57,13 @@ export function normalizeModelName(modelName) {
46
57
  if (modelName.startsWith('kimi-code/')) {
47
58
  return modelName.slice('kimi-code/'.length);
48
59
  }
60
+ // Strip vendor path/proxy prefixes some gateways prepend ahead of the bare model id, so
61
+ // e.g. "openai.gpt-4o" and "azure/gpt-4o" both resolve to the same pricing-table key as a
62
+ // direct "gpt-4o" id.
63
+ const vendorPrefixMatch = modelName.match(VENDOR_PREFIX_PATTERN);
64
+ if (vendorPrefixMatch) {
65
+ return modelName.slice(vendorPrefixMatch[0].length);
66
+ }
49
67
  // Return unchanged for standard formats
50
68
  return modelName;
51
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-normalizer.js","sourceRoot":"","sources":["../../src/utils/model-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,iDAAiD;IACjD,8CAA8C;IAC9C,oEAAoE;IACpE,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACxD,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,qCAAqC;IACrC,YAAY;IACZ,gDAAgD;IAChD,oDAAoD;IACpD,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,wFAAwF;IACxF,oFAAoF;IACpF,qBAAqB;IACrB,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,wCAAwC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"model-normalizer.js","sourceRoot":"","sources":["../../src/utils/model-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG,sEAAsE,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,sFAAsF;IACtF,0FAA0F;IAC1F,sFAAsF;IACtF,oEAAoE;IACpE,yFAAyF;IACzF,sDAAsD;IACtD,WAAW;IACX,wCAAwC;IACxC,+BAA+B;IAC/B,kCAAkC;IAClC,gDAAgD;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;IACjI,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,qCAAqC;IAC/D,CAAC;IAED,wFAAwF;IACxF,oFAAoF;IACpF,qBAAqB;IACrB,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,wFAAwF;IACxF,0FAA0F;IAC1F,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,wCAAwC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -248,7 +248,7 @@ export declare function getCodemieHome(): string;
248
248
  export declare function getCodemiePath(...paths: string[]): string;
249
249
  /**
250
250
  * Extract parent/repo format from a working directory path.
251
- * Returns 'Claude Desktop' for sandbox paths used by Claude Desktop sessions.
251
+ * Returns 'Cowork' for sandbox paths used by Claude Desktop sessions (Cowork tab / new task without a folder).
252
252
  *
253
253
  * @example
254
254
  * extractRepository('/Users/john/projects/codemie-code')
@@ -256,7 +256,7 @@ export declare function getCodemiePath(...paths: string[]): string;
256
256
  *
257
257
  * @example
258
258
  * extractRepository('/Users/john/Library/Application Support/Claude-3p/local-agent-mode-sessions/<s>/<u>/local_2d5f3a0f-6a50-4778-ac55-9ffbca0446da/outputs')
259
- * // Returns: 'Claude Desktop'
259
+ * // Returns: 'Cowork'
260
260
  */
261
261
  export declare function extractRepository(workingDirectory: string): string;
262
262
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAGpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,GAAE,MAAmB,GAAG,MAAM,CAGjF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAiBT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAUT;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAIvF;AAaD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAMhF;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE3D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAalE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAExD"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAGpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,GAAE,MAAmB,GAAG,MAAM,CAGjF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAiBT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAUT;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAIvF;AAaD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAMhF;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE3D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAalE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -339,15 +339,17 @@ export function getCodemieHome() {
339
339
  export function getCodemiePath(...paths) {
340
340
  return path.join(getCodemieHome(), ...paths);
341
341
  }
342
- // Matches Claude Desktop sandbox session directories.
343
- // Real path format observed in logs:
344
- // .../local-agent-mode-sessions/<session-uuid>/<uuid>/local_<full-uuid>/outputs
345
- // The local_ segment always contains a full UUID (8-4-4-4-12 hex groups with dashes).
346
- // Matching the full UUID format avoids false positives on user directories named local_<8hex>.
347
- const CLAUDE_DESKTOP_SANDBOX_RE = /\/local_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?:\/|$)/i;
342
+ // Matches Claude Desktop sandbox session directories, which carry no user project.
343
+ // Two shapes are recognised:
344
+ // 1. Anything under the sandbox root `local-agent-mode-sessions/`. Desktop has renamed the
345
+ // per-session directory inside it (`local_<full-uuid>/` -> `<short-id>/`), so anchoring on
346
+ // the root keeps this stable across further renames.
347
+ // 2. A legacy `local_<full-uuid>` directory anywhere, for paths recorded without that root.
348
+ // The full UUID shape avoids false positives on user directories named `local_<8hex>`.
349
+ const CLAUDE_DESKTOP_SANDBOX_RE = /\/local-agent-mode-sessions\/|\/local_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?:\/|$)/i;
348
350
  /**
349
351
  * Extract parent/repo format from a working directory path.
350
- * Returns 'Claude Desktop' for sandbox paths used by Claude Desktop sessions.
352
+ * Returns 'Cowork' for sandbox paths used by Claude Desktop sessions (Cowork tab / new task without a folder).
351
353
  *
352
354
  * @example
353
355
  * extractRepository('/Users/john/projects/codemie-code')
@@ -355,11 +357,11 @@ const CLAUDE_DESKTOP_SANDBOX_RE = /\/local_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[
355
357
  *
356
358
  * @example
357
359
  * extractRepository('/Users/john/Library/Application Support/Claude-3p/local-agent-mode-sessions/<s>/<u>/local_2d5f3a0f-6a50-4778-ac55-9ffbca0446da/outputs')
358
- * // Returns: 'Claude Desktop'
360
+ * // Returns: 'Cowork'
359
361
  */
360
362
  export function extractRepository(workingDirectory) {
361
363
  if (CLAUDE_DESKTOP_SANDBOX_RE.test(normalizePathSeparators(workingDirectory))) {
362
- return 'Claude Desktop';
364
+ return 'Cowork';
363
365
  }
364
366
  const parts = splitPath(workingDirectory);
365
367
  const filtered = parts.filter(p => p.length > 0);
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Model-id → pricing-table-key resolution, shared by every consumer that prices a model id:
3
+ * src/utils/pricing.ts (the analytics report's resolvePrice()) and the standalone Claude
4
+ * statusline (src/agents/plugins/claude/plugin/statusline.ts, bundled into one self-contained file
5
+ * by scripts/bundle-statusline.mjs). Keeping one copy is what stops the live statusline cost and
6
+ * the analytics report from disagreeing on the same transcript.
7
+ *
8
+ * Deliberately free of I/O and of any import beyond model-normalizer.ts (itself dependency-free),
9
+ * so the statusline bundle stays small and never drags in fs/config/keytar-bearing modules. It
10
+ * knows nothing about the shape of a price row — callers pass a key lookup over their own table.
11
+ */
12
+ /** How an observed model id was matched to a table key. */
13
+ export type PriceMatch = 'exact' | 'snapshot' | 'reordered';
14
+ /** A table key an observed id resolved to, the value found under it, and how it matched. */
15
+ export interface PriceKeyHit<T> {
16
+ key: string;
17
+ match: PriceMatch;
18
+ value: T;
19
+ }
20
+ /**
21
+ * The table-key form of a raw pricing-data key: lowercased, dots turned to dashes, so `GLM-4.7`
22
+ * and `glm-4-7` land on the same entry. Both sides of a lookup must be folded the same way —
23
+ * observed ids go through {@link canonicalizeModelId}, which ends in this same folding.
24
+ */
25
+ export declare function priceTableKey(rawKey: string): string;
26
+ /**
27
+ * Canonicalizes an observed model id into the form used as a pricing-table key. Extends
28
+ * {@link normalizeModelName} (which strips Bedrock/Kimi/vendor-path prefixes) with:
29
+ * 1. Lowercasing, dots turned to dashes, and `@` turned to `-` (so Vertex's `claude-x@20260205`
30
+ * folds to the same shape as a dated id).
31
+ * 2. Stripping a trailing `-vertex` suffix.
32
+ * Used by the pricing resolver, the statusline and cost reconciliation, so every consumer treats
33
+ * the same observed id the same way.
34
+ */
35
+ export declare function canonicalizeModelId(model: string): string;
36
+ /**
37
+ * Resolves an observed model id against a pricing table through `lookup`, trying the keys of
38
+ * {@link priceKeyCandidates} in order and returning the first hit. Returns null when nothing
39
+ * matches — the model is unpriced, never a guessed price.
40
+ */
41
+ export declare function resolvePriceKey<T>(model: string, lookup: (key: string) => T | undefined): PriceKeyHit<T> | null;
42
+ //# sourceMappingURL=price-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-resolution.d.ts","sourceRoot":"","sources":["../../src/utils/price-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AAE5D,4FAA4F;AAC5F,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,CAAC,CAAC;CACV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD;AAoDD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ/G"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Model-id → pricing-table-key resolution, shared by every consumer that prices a model id:
3
+ * src/utils/pricing.ts (the analytics report's resolvePrice()) and the standalone Claude
4
+ * statusline (src/agents/plugins/claude/plugin/statusline.ts, bundled into one self-contained file
5
+ * by scripts/bundle-statusline.mjs). Keeping one copy is what stops the live statusline cost and
6
+ * the analytics report from disagreeing on the same transcript.
7
+ *
8
+ * Deliberately free of I/O and of any import beyond model-normalizer.ts (itself dependency-free),
9
+ * so the statusline bundle stays small and never drags in fs/config/keytar-bearing modules. It
10
+ * knows nothing about the shape of a price row — callers pass a key lookup over their own table.
11
+ */
12
+ import { normalizeModelName } from './model-normalizer.js';
13
+ /**
14
+ * A trailing snapshot/version suffix stripped once during lookup (never during canonicalization):
15
+ * an 8-digit date (`-20260205`), a dashed date (`-2026-02-05`), or the `-latest`/`-preview` tags.
16
+ * Applied at most once, so a key that is itself dated (`gpt-4o-2024-05-13`) is tried as an exact
17
+ * match first and never has a second suffix stripped from it.
18
+ */
19
+ const SNAPSHOT_SUFFIX_PATTERN = /-(?:\d{8}|\d{4}-\d{2}-\d{2}|latest|preview)$/;
20
+ /**
21
+ * Matches a Claude id given in version-first order — `claude-<ver>-<family>[<rest>]`, where `ver`
22
+ * is one or more dash-separated numeric segments and `family` is `opus`/`sonnet`/`haiku` — so it
23
+ * can be reordered to the family-first form (`claude-<family>-<ver>[<rest>]`) the pricing table
24
+ * keys newer Claude generations under (e.g. `claude-sonnet-4-5`, `claude-opus-4-8`; see
25
+ * pricing.json's own rows). Never applied to a key that is already family-first, since that
26
+ * doesn't match this pattern in the first place.
27
+ */
28
+ const CLAUDE_VERSION_FIRST_PATTERN = /^claude-(\d+(?:-\d+)*)-(opus|sonnet|haiku)(-.+)?$/;
29
+ /**
30
+ * The table-key form of a raw pricing-data key: lowercased, dots turned to dashes, so `GLM-4.7`
31
+ * and `glm-4-7` land on the same entry. Both sides of a lookup must be folded the same way —
32
+ * observed ids go through {@link canonicalizeModelId}, which ends in this same folding.
33
+ */
34
+ export function priceTableKey(rawKey) {
35
+ return rawKey.toLowerCase().replace(/\./g, '-');
36
+ }
37
+ /**
38
+ * Canonicalizes an observed model id into the form used as a pricing-table key. Extends
39
+ * {@link normalizeModelName} (which strips Bedrock/Kimi/vendor-path prefixes) with:
40
+ * 1. Lowercasing, dots turned to dashes, and `@` turned to `-` (so Vertex's `claude-x@20260205`
41
+ * folds to the same shape as a dated id).
42
+ * 2. Stripping a trailing `-vertex` suffix.
43
+ * Used by the pricing resolver, the statusline and cost reconciliation, so every consumer treats
44
+ * the same observed id the same way.
45
+ */
46
+ export function canonicalizeModelId(model) {
47
+ return priceTableKey(normalizeModelName(model))
48
+ .replace(/@/g, '-')
49
+ .replace(/-vertex$/, '');
50
+ }
51
+ /**
52
+ * Reorders a version-first Claude id (`claude-4-5-sonnet`) to the family-first form
53
+ * (`claude-sonnet-4-5`) the table keys such rows under, preserving any trailing suffix (a
54
+ * snapshot date, `-latest`, ...). Returns null when `id` isn't in that shape.
55
+ */
56
+ function reorderClaudeVersionFamily(id) {
57
+ const match = id.match(CLAUDE_VERSION_FIRST_PATTERN);
58
+ if (!match) {
59
+ return null;
60
+ }
61
+ const [, version, family, rest = ''] = match;
62
+ return `claude-${family}-${version}${rest}`;
63
+ }
64
+ /** `key` with one trailing snapshot suffix stripped, or null when it carries none. */
65
+ function withoutSnapshot(key) {
66
+ const stripped = key.replace(SNAPSHOT_SUFFIX_PATTERN, '');
67
+ return stripped === key ? null : stripped;
68
+ }
69
+ /**
70
+ * The ordered table keys tried for an observed id, against its {@link canonicalizeModelId} form:
71
+ * 1. Exact match — keeps distinct dated rows (e.g. `gpt-4o-2024-05-13`) authoritative.
72
+ * 2. Exact match after stripping one trailing snapshot suffix — e.g. `claude-opus-4-6-20260205`
73
+ * resolves to the `claude-opus-4-6` row.
74
+ * 3. A version-first Claude id (`claude-4-5-sonnet`) reordered to the table's family-first form
75
+ * (`claude-sonnet-4-5`), tried exact and then with a trailing snapshot suffix stripped — only
76
+ * once steps 1-2 have already failed on the as-is id. That ordering is what keeps every
77
+ * pre-existing version-first key (`claude-3-5-sonnet`, `claude-3-7-sonnet-20250219`, ...)
78
+ * resolving unchanged: those rows match as-is at step 1 and this fallback is never reached.
79
+ * There is no segment/family match and no same-tier fallback.
80
+ */
81
+ function priceKeyCandidates(model) {
82
+ const canonical = canonicalizeModelId(model);
83
+ const candidates = [{ key: canonical, match: 'exact' }];
84
+ const snapshot = withoutSnapshot(canonical);
85
+ if (snapshot) {
86
+ candidates.push({ key: snapshot, match: 'snapshot' });
87
+ }
88
+ const reordered = reorderClaudeVersionFamily(canonical);
89
+ if (reordered) {
90
+ candidates.push({ key: reordered, match: 'reordered' });
91
+ const reorderedSnapshot = withoutSnapshot(reordered);
92
+ if (reorderedSnapshot) {
93
+ candidates.push({ key: reorderedSnapshot, match: 'reordered' });
94
+ }
95
+ }
96
+ return candidates;
97
+ }
98
+ /**
99
+ * Resolves an observed model id against a pricing table through `lookup`, trying the keys of
100
+ * {@link priceKeyCandidates} in order and returning the first hit. Returns null when nothing
101
+ * matches — the model is unpriced, never a guessed price.
102
+ */
103
+ export function resolvePriceKey(model, lookup) {
104
+ for (const { key, match } of priceKeyCandidates(model)) {
105
+ const value = key ? lookup(key) : undefined;
106
+ if (value !== undefined) {
107
+ return { key, match, value };
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ //# sourceMappingURL=price-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-resolution.js","sourceRoot":"","sources":["../../src/utils/price-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,4BAA4B,GAAG,mDAAmD,CAAC;AAYzF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAC5C,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,EAAU;IAC5C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IAC7C,OAAO,UAAU,MAAM,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,sFAAsF;AACtF,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,UAAU,GAA8C,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,SAAS,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,SAAS,EAAE,CAAC;QACd,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACxD,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,iBAAiB,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAI,KAAa,EAAE,MAAsC;IACtF,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -5,6 +5,8 @@
5
5
  * re-copy that file. Prices are USD per 1,000,000 tokens. The source uses
6
6
  * `cacheWrite`; we expose it as `cacheCreation` to match Claude's terminology.
7
7
  */
8
+ import { type PriceMatch } from './price-resolution.js';
9
+ export { canonicalizeModelId } from './price-resolution.js';
8
10
  /** USD per 1,000,000 tokens. */
9
11
  export interface ModelPrice {
10
12
  input: number;
@@ -12,14 +14,71 @@ export interface ModelPrice {
12
14
  cacheRead: number;
13
15
  cacheCreation: number;
14
16
  cacheWrite1h?: number;
17
+ /**
18
+ * Amazon Bedrock's premium for a regional/multi-region endpoint over this model's global one
19
+ * — present only on rows where Anthropic documents the two-endpoint-type Bedrock pricing
20
+ * structure (Sonnet 4.5+, Haiku 4.5+, Opus 4.5+ and their dated snapshots). Absent (no premium)
21
+ * on every older row, since Anthropic does not document this structure applying there. See
22
+ * isBedrockRegionalPremium()'s own doc comment (bedrock-pricing.mjs) for the source.
23
+ */
24
+ bedrockRegionalMultiplier?: number;
25
+ /**
26
+ * True when this row is not a directly published rate but an estimate (e.g. a tier-price
27
+ * carried forward for a model generation with no confirmed pricing yet). Every row's
28
+ * provenance should be cited in `pricing.json`'s `_meta.sources`/`note`; this flag is what
29
+ * callers use to surface "estimated" alongside the resolved price rather than presenting it
30
+ * as authoritative.
31
+ */
32
+ estimated?: boolean;
15
33
  }
34
+ export interface RawPrice {
35
+ input?: number;
36
+ output?: number;
37
+ cacheRead?: number;
38
+ cacheWrite?: number;
39
+ cacheWrite1h?: number;
40
+ bedrockRegionalMultiplier?: number;
41
+ estimated?: boolean;
42
+ }
43
+ /**
44
+ * Builds the rate card from a bag of raw rows (a parsed `pricing.json`, an injected fixture for
45
+ * tests, or any merge of the two): every key is lowercased and dots are turned to dashes, so
46
+ * `GLM-4.7` and `glm-4-7` land on the same table entry. When two distinct raw keys normalize to
47
+ * the same table key, they must carry identical prices — that is the only way the pricing data
48
+ * itself can declare two spellings of the same model (e.g. `gemini-3.7-flash` / `gemini-3-7-flash`)
49
+ * — otherwise the table is ambiguous and this throws rather than silently picking one.
50
+ */
51
+ export declare function buildPriceTable(rows: Record<string, RawPrice>): Record<string, ModelPrice>;
52
+ /**
53
+ * The fully built rate card: the vendored table with {@link CODEMIE_PRICES} merged over it and every
54
+ * key lowercased. Exported so consumers that cannot import this module — the standalone Claude
55
+ * statusline, which runs as a detached `node <path>` process — can be handed the same rates rather
56
+ * than a copy of the raw `pricing.json`, which carries none of the CodeMie-only rows.
57
+ */
58
+ export declare function priceTable(): Record<string, ModelPrice>;
59
+ /** How {@link resolvePrice} matched an observed model id to a table row. */
60
+ export interface PriceResolution {
61
+ price: ModelPrice;
62
+ key: string;
63
+ match: PriceMatch;
64
+ estimated: boolean;
65
+ }
66
+ /**
67
+ * Resolves pricing for a model, reporting how it was matched. Returns null when no entry
68
+ * matches (the caller marks the model `unpriced` — never a silent $0, and never a guessed
69
+ * family/tier price). The lookup order (exact, then one snapshot suffix stripped, then a
70
+ * version-first Claude id reordered to family-first) lives in {@link resolvePriceKey}, shared
71
+ * with the Claude statusline so the two can never price the same id differently.
72
+ *
73
+ * `model` is also checked, in its original unnormalized form, for a Bedrock region qualifier
74
+ * (see {@link applyBedrockRegionalPremium}) — pass the raw backend id straight through rather
75
+ * than pre-normalizing it, or the premium this exists to detect is invisible by the time it gets
76
+ * here.
77
+ */
78
+ export declare function resolvePrice(model: string): PriceResolution | null;
16
79
  /**
17
- * Look up pricing for a model. Returns null when no entry matches (the caller marks the model
18
- * `unpriced` — never a silent $0). Resolution order:
19
- * 1. Exact (normalized) match — authoritative.
20
- * 2. Longest key aligned to a segment boundary — a deliberate family fallback, logged as inexact.
21
- * 3. Latest same-tier Claude price — for a model newer than every table entry, logged as inexact.
22
- * Dots are folded to dashes first because the table keys use dashes (e.g. `gpt-4-1`, not `gpt-4.1`).
80
+ * Look up pricing for a model. Returns null when no entry matches. Thin wrapper over
81
+ * {@link resolvePrice} for callers that only need the price, not its provenance.
23
82
  */
24
83
  export declare function lookupPrice(model: string): ModelPrice | null;
25
84
  //# sourceMappingURL=pricing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA0HD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA2B5D"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA4CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAiB1F;AAWD;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAEvD;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAYlE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE5D"}