@codemieai/code 0.15.3 → 0.15.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 (208) 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.map +1 -1
  12. package/dist/agents/plugins/claude/claude.plugin.js +147 -45
  13. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  14. package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +729 -0
  15. package/dist/agents/plugins/claude/statusline-installer.d.ts +1 -1
  16. package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude/statusline-installer.js +41 -3
  18. package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
  19. package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
  20. package/dist/agents/plugins/codex/codex-models.js +109 -8
  21. package/dist/agents/plugins/codex/codex-models.js.map +1 -1
  22. package/dist/agents/plugins/codex/codex.correlation.d.ts +39 -0
  23. package/dist/agents/plugins/codex/codex.correlation.d.ts.map +1 -0
  24. package/dist/agents/plugins/codex/codex.correlation.js +150 -0
  25. package/dist/agents/plugins/codex/codex.correlation.js.map +1 -0
  26. package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
  27. package/dist/agents/plugins/codex/codex.plugin.js +8 -40
  28. package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
  29. package/dist/agents/plugins/kimi/kimi.env-model.d.ts +27 -0
  30. package/dist/agents/plugins/kimi/kimi.env-model.d.ts.map +1 -0
  31. package/dist/agents/plugins/kimi/kimi.env-model.js +52 -0
  32. package/dist/agents/plugins/kimi/kimi.env-model.js.map +1 -0
  33. package/dist/agents/plugins/kimi/kimi.session.d.ts +6 -0
  34. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -1
  35. package/dist/agents/plugins/kimi/kimi.session.js +24 -2
  36. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -1
  37. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +1 -1
  38. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  39. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +19 -2
  40. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  41. package/dist/cli/commands/analytics/cost/cost-enricher.js +171 -14
  42. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  43. package/dist/cli/commands/analytics/cost/local-models.d.ts +15 -0
  44. package/dist/cli/commands/analytics/cost/local-models.d.ts.map +1 -0
  45. package/dist/cli/commands/analytics/cost/local-models.js +21 -0
  46. package/dist/cli/commands/analytics/cost/local-models.js.map +1 -0
  47. package/dist/cli/commands/analytics/cost/types.d.ts +60 -0
  48. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  49. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  50. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +25 -2
  51. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  52. package/dist/cli/commands/analytics/cost/usage-readers.js +61 -3
  53. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  54. package/dist/cli/commands/analytics/formatter.d.ts +11 -0
  55. package/dist/cli/commands/analytics/formatter.d.ts.map +1 -1
  56. package/dist/cli/commands/analytics/formatter.js +28 -0
  57. package/dist/cli/commands/analytics/formatter.js.map +1 -1
  58. package/dist/cli/commands/analytics/index.d.ts.map +1 -1
  59. package/dist/cli/commands/analytics/index.js +113 -72
  60. package/dist/cli/commands/analytics/index.js.map +1 -1
  61. package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
  62. package/dist/cli/commands/analytics/otel-loader.js +60 -14
  63. package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
  64. package/dist/cli/commands/analytics/otel-pricing.d.ts +38 -0
  65. package/dist/cli/commands/analytics/otel-pricing.d.ts.map +1 -0
  66. package/dist/cli/commands/analytics/otel-pricing.js +33 -0
  67. package/dist/cli/commands/analytics/otel-pricing.js.map +1 -0
  68. package/dist/cli/commands/analytics/report/client/app.js +279 -18
  69. package/dist/cli/commands/analytics/report/output-target.d.ts +22 -0
  70. package/dist/cli/commands/analytics/report/output-target.d.ts.map +1 -0
  71. package/dist/cli/commands/analytics/report/output-target.js +56 -0
  72. package/dist/cli/commands/analytics/report/output-target.js.map +1 -0
  73. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  74. package/dist/cli/commands/analytics/report/payload-builder.js +6 -0
  75. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  76. package/dist/cli/commands/analytics/report/report-generator.d.ts +1 -1
  77. package/dist/cli/commands/analytics/report/report-generator.js +1 -1
  78. package/dist/cli/commands/analytics/report/session-report.d.ts +1 -3
  79. package/dist/cli/commands/analytics/report/session-report.d.ts.map +1 -1
  80. package/dist/cli/commands/analytics/report/session-report.js +1 -3
  81. package/dist/cli/commands/analytics/report/session-report.js.map +1 -1
  82. package/dist/cli/commands/analytics/report/template.html +6 -6
  83. package/dist/cli/commands/analytics/report/types.d.ts +17 -1
  84. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  85. package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -1
  86. package/dist/cli/commands/analytics/sources/sessions-source.js +9 -11
  87. package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -1
  88. package/dist/cli/commands/analytics/sources/types.d.ts +0 -2
  89. package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -1
  90. package/dist/cli/commands/analytics/types.d.ts +13 -7
  91. package/dist/cli/commands/analytics/types.d.ts.map +1 -1
  92. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.d.ts +9 -0
  93. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.d.ts.map +1 -0
  94. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.js +42 -0
  95. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.js.map +1 -0
  96. package/dist/cli/commands/doctor/checks/index.d.ts +1 -0
  97. package/dist/cli/commands/doctor/checks/index.d.ts.map +1 -1
  98. package/dist/cli/commands/doctor/checks/index.js +1 -0
  99. package/dist/cli/commands/doctor/checks/index.js.map +1 -1
  100. package/dist/cli/commands/doctor/index.d.ts.map +1 -1
  101. package/dist/cli/commands/doctor/index.js +2 -1
  102. package/dist/cli/commands/doctor/index.js.map +1 -1
  103. package/dist/cli/commands/models.d.ts.map +1 -1
  104. package/dist/cli/commands/models.js +16 -3
  105. package/dist/cli/commands/models.js.map +1 -1
  106. package/dist/cli/commands/proxy/connect-orchestrator.js +1 -1
  107. package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
  108. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +16 -4
  109. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -1
  110. package/dist/cli/commands/proxy/connectors/tenant-catalog.js +42 -14
  111. package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -1
  112. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +18 -0
  113. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
  114. package/dist/cli/commands/proxy/connectors/vscode-models.js +58 -0
  115. package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
  116. package/dist/cli/commands/proxy/connectors/vscode.d.ts +2 -2
  117. package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
  118. package/dist/cli/commands/proxy/connectors/vscode.js +27 -38
  119. package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
  120. package/dist/cli/commands/update.d.ts.map +1 -1
  121. package/dist/cli/commands/update.js +4 -3
  122. package/dist/cli/commands/update.js.map +1 -1
  123. package/dist/frameworks/plugins/codegraph.plugin.js +2 -2
  124. package/dist/frameworks/plugins/codegraph.plugin.js.map +1 -1
  125. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
  126. package/dist/providers/core/codemie-auth-helpers.js +6 -1
  127. package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
  128. package/dist/providers/core/default-agent-hooks.d.ts.map +1 -1
  129. package/dist/providers/core/default-agent-hooks.js +9 -0
  130. package/dist/providers/core/default-agent-hooks.js.map +1 -1
  131. package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
  132. package/dist/providers/plugins/bedrock/bedrock.template.js +5 -31
  133. package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
  134. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts +44 -0
  135. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts.map +1 -0
  136. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js +106 -0
  137. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js.map +1 -0
  138. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +3 -1
  139. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  140. package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
  141. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  142. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts +67 -0
  143. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts.map +1 -0
  144. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js +203 -0
  145. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js.map +1 -0
  146. package/dist/providers/plugins/sso/sso.http-client.d.ts +95 -0
  147. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  148. package/dist/providers/plugins/sso/sso.http-client.js +79 -0
  149. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  150. package/dist/providers/plugins/sso/sso.models.d.ts +7 -0
  151. package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -1
  152. package/dist/providers/plugins/sso/sso.models.js +22 -14
  153. package/dist/providers/plugins/sso/sso.models.js.map +1 -1
  154. package/dist/utils/bedrock-pricing.mjs +111 -0
  155. package/dist/utils/cli-bin.d.ts.map +1 -1
  156. package/dist/utils/cli-bin.js +3 -4
  157. package/dist/utils/cli-bin.js.map +1 -1
  158. package/dist/utils/cli-updater.d.ts +1 -0
  159. package/dist/utils/cli-updater.d.ts.map +1 -1
  160. package/dist/utils/cli-updater.js +37 -9
  161. package/dist/utils/cli-updater.js.map +1 -1
  162. package/dist/utils/credential-crypto.d.ts +51 -0
  163. package/dist/utils/credential-crypto.d.ts.map +1 -0
  164. package/dist/utils/credential-crypto.js +96 -0
  165. package/dist/utils/credential-crypto.js.map +1 -0
  166. package/dist/utils/model-normalizer.d.ts +6 -0
  167. package/dist/utils/model-normalizer.d.ts.map +1 -1
  168. package/dist/utils/model-normalizer.js +37 -19
  169. package/dist/utils/model-normalizer.js.map +1 -1
  170. package/dist/utils/npm-prefix.d.ts +48 -0
  171. package/dist/utils/npm-prefix.d.ts.map +1 -0
  172. package/dist/utils/npm-prefix.js +142 -0
  173. package/dist/utils/npm-prefix.js.map +1 -0
  174. package/dist/utils/paths.d.ts +7 -0
  175. package/dist/utils/paths.d.ts.map +1 -1
  176. package/dist/utils/paths.js +10 -0
  177. package/dist/utils/paths.js.map +1 -1
  178. package/dist/utils/platform.d.ts +10 -0
  179. package/dist/utils/platform.d.ts.map +1 -0
  180. package/dist/utils/platform.js +14 -0
  181. package/dist/utils/platform.js.map +1 -0
  182. package/dist/utils/price-resolution.d.ts +42 -0
  183. package/dist/utils/price-resolution.d.ts.map +1 -0
  184. package/dist/utils/price-resolution.js +112 -0
  185. package/dist/utils/price-resolution.js.map +1 -0
  186. package/dist/utils/pricing.d.ts +65 -6
  187. package/dist/utils/pricing.d.ts.map +1 -1
  188. package/dist/utils/pricing.js +91 -117
  189. package/dist/utils/pricing.js.map +1 -1
  190. package/dist/utils/pricing.json +201 -20
  191. package/dist/utils/processes.d.ts.map +1 -1
  192. package/dist/utils/processes.js +6 -3
  193. package/dist/utils/processes.js.map +1 -1
  194. package/dist/utils/routing-headers.mjs +104 -0
  195. package/dist/utils/security.d.ts +0 -32
  196. package/dist/utils/security.d.ts.map +1 -1
  197. package/dist/utils/security.js +20 -102
  198. package/dist/utils/security.js.map +1 -1
  199. package/package.json +4 -2
  200. package/scripts/bundle-statusline.mjs +37 -0
  201. package/scripts/copy-plugins.js +19 -2
  202. package/src/utils/tips.json +9 -9
  203. package/dist/agents/plugins/claude/plugin/__tests__/statusline.test.ts +0 -323
  204. package/dist/agents/plugins/claude/plugin/statusline.mjs +0 -282
  205. package/dist/cli/commands/analytics/exporter.d.ts +0 -20
  206. package/dist/cli/commands/analytics/exporter.d.ts.map +0 -1
  207. package/dist/cli/commands/analytics/exporter.js +0 -91
  208. package/dist/cli/commands/analytics/exporter.js.map +0 -1
@@ -10,9 +10,9 @@
10
10
  import { readFile } from 'node:fs/promises';
11
11
  import { INTERNAL_PARSED_FAMILY } from '../data-loader.js';
12
12
  import { MAX_SERIES_POINTS } from './types.js';
13
- import { emptyUsage, addUsage, costBreakdown } from './cost-calculator.js';
14
- import { lookupPrice } from '../../../../utils/pricing.js';
15
- import { gatherUsageDeduped, gatherDedupedUsageRecords, sumUsageRecords, readCodexSubagentUsage } from './usage-readers.js';
13
+ import { emptyUsage, addUsage, costBreakdown, costForUsage } from './cost-calculator.js';
14
+ import { lookupPrice, resolvePrice } from '../../../../utils/pricing.js';
15
+ import { gatherUsageDeduped, gatherDedupedUsageRecords, sumUsageRecords, readCodexSubagentUsage, extractModelIdentityTimeline } from './usage-readers.js';
16
16
  import { extractDispatchResult } from './dispatch-extractor.js';
17
17
  import { enrichClaudeDispatchCosts } from './claude-dispatch-allocation.js';
18
18
  import { enrichSkillDispatchCost } from './dispatch-allocation.js';
@@ -22,6 +22,7 @@ import { AgentRegistry } from '../../../../agents/registry.js';
22
22
  import { ClaudeSessionAdapter } from '../../../../agents/plugins/claude/claude.session.js';
23
23
  import { ClaudePluginMetadata } from '../../../../agents/plugins/claude/claude.plugin.js';
24
24
  import { isCodexFamilyAgent } from './codex-agent.js';
25
+ import { isLocalModel } from './local-models.js';
25
26
  import { logger } from '../../../../utils/logger.js';
26
27
  /**
27
28
  * Resolve the SessionAdapter for an agent. Most agents expose one via their registry plugin
@@ -84,27 +85,52 @@ async function parseOne(raw, deps) {
84
85
  ?? (filePath ? await deps.parseNative(agentName, filePath, raw.sessionId) : null);
85
86
  return {
86
87
  sessionId: raw.sessionId, agentName, hadLog, filePath, parsed, startTime: raw.startEvent?.data?.startTime ?? 0,
88
+ ...(raw.startEvent?.data?.provider && { provider: raw.startEvent.data.provider }),
87
89
  ...(capture && Number.isFinite(capture.capturedAt) && { capturedAt: capture.capturedAt }),
88
90
  ...(capture && Number.isFinite(raw.startEvent?.data?.startTime) && { observedStart: raw.startEvent.data.startTime }),
89
91
  ...(capture && Number.isFinite(raw.endEvent?.data?.endTime) && { observedEnd: raw.endEvent.data.endTime }),
90
92
  };
91
93
  }
92
- /** Phase 3: price an already-gathered (deduped) per-model usage map for one session. */
93
- function priceUsage(sessionId, hadLog, usageByModel) {
94
+ /**
95
+ * Phase 3: price an already-gathered (deduped) per-model usage map for one session.
96
+ * `provider` is the session's launch provider: a model it serves locally (see isLocalModel)
97
+ * is priced at $0 and reported as local instead of unpriced.
98
+ */
99
+ function priceUsage(sessionId, hadLog, usageByModel, provider) {
94
100
  const perModel = [];
95
101
  const unpriced = [];
102
+ const estimated = [];
103
+ const local = [];
96
104
  let sessionTokens = emptyUsage();
97
105
  let sessionCost = 0;
98
106
  let cacheReadCostUSD = 0;
99
107
  for (const [rawModel, usage] of usageByModel) {
100
108
  const model = normalizeModelName(rawModel);
101
- const price = lookupPrice(model);
102
- const breakdown = price ? costBreakdown(usage, price) : null;
109
+ if (isLocalModel(provider, rawModel)) {
110
+ local.push(model);
111
+ perModel.push({ model, tokens: usage, costUSD: 0, unpriced: false, local: true });
112
+ sessionTokens = addUsage(sessionTokens, usage);
113
+ continue;
114
+ }
115
+ // resolvePrice() takes the raw (region-qualified) id, not the display `model` above — it
116
+ // does its own normalizing internally, but also needs the raw form to detect Amazon
117
+ // Bedrock's regional-endpoint pricing premium before that qualifier is stripped.
118
+ const resolution = resolvePrice(rawModel);
119
+ const breakdown = resolution ? costBreakdown(usage, resolution.price) : null;
103
120
  const costUSD = breakdown ? breakdown.total : 0;
104
- if (!price) {
121
+ if (!resolution) {
105
122
  unpriced.push(model);
106
123
  }
107
- perModel.push({ model, tokens: usage, costUSD, unpriced: !price });
124
+ else if (resolution.estimated) {
125
+ estimated.push(model);
126
+ }
127
+ perModel.push({
128
+ model,
129
+ tokens: usage,
130
+ costUSD,
131
+ unpriced: !resolution,
132
+ ...(resolution?.estimated && { estimated: true }),
133
+ });
108
134
  sessionTokens = addUsage(sessionTokens, usage);
109
135
  sessionCost += costUSD;
110
136
  cacheReadCostUSD += breakdown ? breakdown.cacheRead : 0;
@@ -115,6 +141,8 @@ function priceUsage(sessionId, hadLog, usageByModel) {
115
141
  return {
116
142
  cost: { sessionId, tokens: sessionTokens, costUSD: sessionCost, cacheReadCostUSD, perModel, priced: perModel.length > 0, hadLog },
117
143
  unpriced,
144
+ estimated,
145
+ local,
118
146
  };
119
147
  }
120
148
  /** Evenly downsample a cumulative series to ≤ MAX_SERIES_POINTS, always keeping the first and last point. */
@@ -145,13 +173,108 @@ export function buildCostSeries(records) {
145
173
  let cumCost = 0;
146
174
  let cumTokens = 0;
147
175
  records.forEach((r, i) => {
148
- const price = lookupPrice(normalizeModelName(r.model));
176
+ // r.model is the raw (region-qualified, when Bedrock) id — lookupPrice() normalizes it
177
+ // internally, but also needs the raw form to detect a Bedrock regional-endpoint premium.
178
+ const price = lookupPrice(r.model);
149
179
  cumCost += price ? costBreakdown(r.usage, price).total : 0;
150
180
  cumTokens += r.usage.total;
151
181
  points.push({ t: useTs ? r.ts : i + 1, cost: cumCost, tokens: cumTokens });
152
182
  });
153
183
  return downsample(points);
154
184
  }
185
+ /**
186
+ * The literal model/router alias active at `ts`, per `timeline`'s own chronological entries —
187
+ * the last entry with `ts <= target`, since a later `/model` switch always wins from the
188
+ * moment it's recorded. `null`/no match (target before the first entry, or ts unavailable)
189
+ * yields `undefined` rather than guessing.
190
+ */
191
+ function resolveAliasAt(timeline, target) {
192
+ if (!timeline || target == null)
193
+ return undefined;
194
+ let result;
195
+ for (const entry of timeline) {
196
+ if (entry.ts > target)
197
+ break;
198
+ result = entry.modelId;
199
+ }
200
+ return result;
201
+ }
202
+ /**
203
+ * Build a per-turn model-usage timeline from ordered usage records.
204
+ * Each point captures the actual model, per-turn cost, and token count.
205
+ * Returns [] when there are no records.
206
+ */
207
+ export function buildModelTimeline(records, identityTimeline = null) {
208
+ if (!records.length)
209
+ return [];
210
+ const useTs = records.every((r) => r.ts != null);
211
+ return records.map((r, i) => {
212
+ const model = normalizeModelName(r.model);
213
+ // lookupPrice() takes the raw id (r.model) — see buildCostSeries()'s own comment above.
214
+ const price = lookupPrice(r.model);
215
+ const costUSD = price ? costBreakdown(r.usage, price).total : 0;
216
+ const point = {
217
+ t: useTs ? r.ts : i + 1,
218
+ model,
219
+ costUSD: Math.round(costUSD * 1e8) / 1e8,
220
+ tokens: r.usage.total,
221
+ };
222
+ if (r.requestedModel != null)
223
+ point.requestedModel = r.requestedModel;
224
+ if (r.routingFamily != null) {
225
+ point.routingFamily = r.routingFamily;
226
+ const alias = resolveAliasAt(identityTimeline, r.ts);
227
+ if (alias != null)
228
+ point.requestedAlias = alias;
229
+ }
230
+ if (r.routingTier != null)
231
+ point.routingTier = r.routingTier;
232
+ if (r.routingTierRaw != null)
233
+ point.routingTierRaw = r.routingTierRaw;
234
+ if (r.routedModel != null)
235
+ point.routedModel = r.routedModel;
236
+ if (r.classifierModel != null)
237
+ point.classifierModel = r.classifierModel;
238
+ if (r.routerType != null)
239
+ point.routerType = r.routerType;
240
+ if (r.routingSource != null)
241
+ point.routingSource = r.routingSource;
242
+ if (r.decisionSource != null)
243
+ point.decisionSource = r.decisionSource;
244
+ // Counterfactual cost: reprice this turn's actual usage at the backend-reported
245
+ // counterfactual model's rate (x-codemie-routing-counterfactual-model — see
246
+ // routing-headers.mjs) to estimate what this turn would have cost unrouted. Backend-computed
247
+ // and family-agnostic, unlike the old `requestedModel`-based estimate: on non-switchyard
248
+ // families `requestedModel` can be a router/tier ALIAS ('claude-smart-router') rather than a
249
+ // priceable model, so the backend now names the concrete model itself.
250
+ if (r.counterfactualModel != null) {
251
+ point.counterfactualModel = r.counterfactualModel;
252
+ const counterfactualPrice = lookupPrice(r.counterfactualModel);
253
+ if (counterfactualPrice) {
254
+ const estimatedMaxCostUSD = costForUsage(r.usage, counterfactualPrice);
255
+ point.estimatedMaxCostUSD = Math.round(estimatedMaxCostUSD * 1e8) / 1e8;
256
+ point.potentialSavingsUSD = Math.round(Math.max(0, estimatedMaxCostUSD - costUSD) * 1e8) / 1e8;
257
+ }
258
+ }
259
+ return point;
260
+ });
261
+ }
262
+ /**
263
+ * A turn counts as "routed" for the Routed % metric when the model that actually answered it
264
+ * differs from the backend's counterfactual — i.e. routing measurably changed which model was
265
+ * used, not merely that a routing decision was recorded. `routedModel` (the router's own
266
+ * decision) is preferred over `model` (the billed model) when both are present, since some
267
+ * routing families report `model` as a router/tier alias rather than the concrete model.
268
+ * Normalizes both sides before comparing so formatting differences (e.g. Bedrock region
269
+ * qualifiers) don't produce a false positive. A turn with no `counterfactualModel` reported
270
+ * cannot be classified as routed under this definition.
271
+ */
272
+ export function isRoutedTurn(point) {
273
+ if (point.counterfactualModel == null)
274
+ return false;
275
+ const actual = normalizeModelName(point.routedModel ?? point.model);
276
+ return actual !== normalizeModelName(point.counterfactualModel);
277
+ }
155
278
  /** Run async tasks with bounded concurrency (cap open file descriptors). */
156
279
  async function mapWithConcurrency(items, limit, fn) {
157
280
  const out = new Array(items.length);
@@ -199,8 +322,7 @@ function enrichDispatchCosts(dispatches, parsed, agentName, sessionRecords) {
199
322
  let totalTokens = emptyUsage();
200
323
  let priced = false;
201
324
  for (const [rawModel, usage] of usageByModel) {
202
- const model = normalizeModelName(rawModel);
203
- const price = lookupPrice(model);
325
+ const price = lookupPrice(rawModel);
204
326
  if (price) {
205
327
  totalCost += costBreakdown(usage, price).total;
206
328
  priced = true;
@@ -251,6 +373,8 @@ export async function enrichCosts(sessions, deps = realDeps) {
251
373
  const seen = new Set();
252
374
  const index = new Map();
253
375
  const unpriced = new Set();
376
+ const estimated = new Set();
377
+ const local = new Set();
254
378
  let totalCostUSD = 0;
255
379
  let pricedSessions = 0;
256
380
  for (const entry of ordered) {
@@ -289,7 +413,7 @@ export async function enrichCosts(sessions, deps = realDeps) {
289
413
  series = [];
290
414
  records = [];
291
415
  }
292
- const { cost, unpriced: u } = priceUsage(entry.sessionId, entry.hadLog, usageByModel);
416
+ const { cost, unpriced: u, estimated: est, local: loc } = priceUsage(entry.sessionId, entry.hadLog, usageByModel, entry.provider);
293
417
  if (entry.capturedAt !== undefined)
294
418
  cost.capturedAt = entry.capturedAt;
295
419
  if (entry.observedStart !== undefined)
@@ -308,6 +432,37 @@ export async function enrichCosts(sessions, deps = realDeps) {
308
432
  if (series.length) {
309
433
  cost.costSeries = series;
310
434
  }
435
+ if (records.length) {
436
+ const identityTimeline = entry.parsed ? extractModelIdentityTimeline(entry.parsed) : null;
437
+ const timeline = buildModelTimeline(records, identityTimeline);
438
+ if (timeline.length) {
439
+ cost.modelTimeline = timeline;
440
+ const routedCount = timeline.filter(isRoutedTurn).length;
441
+ cost.routedTurnsPct = Math.round((routedCount / timeline.length) * 100);
442
+ }
443
+ // Accumulate classifier (routing LLM) cost from per-turn metadata.
444
+ let classifierCostUSD = 0;
445
+ // A session is only "cost known" if every routed turn reported its classifier cost.
446
+ // One unreported turn makes the session total an understatement, not a measurement.
447
+ let routedTurns = 0;
448
+ let costKnownTurns = 0;
449
+ for (const r of records) {
450
+ classifierCostUSD += r.classifierCostUSD ?? 0;
451
+ if (r.routingFamily != null) {
452
+ routedTurns++;
453
+ if (r.routingCostKnown)
454
+ costKnownTurns++;
455
+ }
456
+ }
457
+ if (routedTurns > 0) {
458
+ cost.routingCostKnown = costKnownTurns === routedTurns;
459
+ }
460
+ if (classifierCostUSD > 0) {
461
+ cost.classifierCostUSD = Math.round(classifierCostUSD * 1e8) / 1e8;
462
+ // Include routing cost in the session total.
463
+ cost.costUSD = Math.round((cost.costUSD + classifierCostUSD) * 1e8) / 1e8;
464
+ }
465
+ }
311
466
  if (entry.parsed) {
312
467
  // Usage provenance from the adapter: lets the report distinguish "cost is genuinely
313
468
  // zero" from "cost is unmeasurable", and surface a provider's own billing unit.
@@ -341,6 +496,8 @@ export async function enrichCosts(sessions, deps = realDeps) {
341
496
  }
342
497
  index.set(cost.sessionId, cost);
343
498
  u.forEach((m) => unpriced.add(m));
499
+ est.forEach((m) => estimated.add(m));
500
+ loc.forEach((m) => local.add(m));
344
501
  if (cost.priced) {
345
502
  totalCostUSD += cost.costUSD;
346
503
  pricedSessions += 1;
@@ -348,7 +505,7 @@ export async function enrichCosts(sessions, deps = realDeps) {
348
505
  }
349
506
  return {
350
507
  index,
351
- summary: { totalCostUSD, pricedSessions, totalSessions: sessions.length, unpricedModels: [...unpriced] },
508
+ summary: { totalCostUSD, pricedSessions, totalSessions: sessions.length, unpricedModels: [...unpriced], estimatedModels: [...estimated], localModels: [...local] },
352
509
  };
353
510
  }
354
511
  //# sourceMappingURL=cost-enricher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost-enricher.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/cost-enricher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-enricher.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/cost-enricher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Local (self-hosted, free) model detection for report-time cost.
3
+ *
4
+ * A session launched against the `ollama` provider runs its model on the user's own
5
+ * hardware, so there is no per-token bill: the report prices it at $0 and lists it as
6
+ * local rather than unpriced. Ollama's hosted "cloud" models are the exception — they
7
+ * are tagged `<name>:<size>-cloud` or `<name>:cloud` and are billed by Ollama, so they
8
+ * stay unpriced. This `:tag` handling is deliberately kept out of the general price
9
+ * resolver (price-resolution.ts), which only ever sees provider-agnostic model ids.
10
+ */
11
+ /** True when `model` is an Ollama cloud-hosted tag (`…-cloud` or `…:cloud`). */
12
+ export declare function isOllamaCloudTag(model: string): boolean;
13
+ /** True when `model`, served by `provider`, runs locally and therefore costs $0. */
14
+ export declare function isLocalModel(provider: string | undefined, model: string): boolean;
15
+ //# sourceMappingURL=local-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-models.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Local (self-hosted, free) model detection for report-time cost.
3
+ *
4
+ * A session launched against the `ollama` provider runs its model on the user's own
5
+ * hardware, so there is no per-token bill: the report prices it at $0 and lists it as
6
+ * local rather than unpriced. Ollama's hosted "cloud" models are the exception — they
7
+ * are tagged `<name>:<size>-cloud` or `<name>:cloud` and are billed by Ollama, so they
8
+ * stay unpriced. This `:tag` handling is deliberately kept out of the general price
9
+ * resolver (price-resolution.ts), which only ever sees provider-agnostic model ids.
10
+ */
11
+ const OLLAMA_PROVIDER = 'ollama';
12
+ const OLLAMA_CLOUD_TAG_PATTERN = /(?:-cloud|:cloud)$/i;
13
+ /** True when `model` is an Ollama cloud-hosted tag (`…-cloud` or `…:cloud`). */
14
+ export function isOllamaCloudTag(model) {
15
+ return OLLAMA_CLOUD_TAG_PATTERN.test(model);
16
+ }
17
+ /** True when `model`, served by `provider`, runs locally and therefore costs $0. */
18
+ export function isLocalModel(provider, model) {
19
+ return provider?.toLowerCase() === OLLAMA_PROVIDER && !isOllamaCloudTag(model);
20
+ }
21
+ //# sourceMappingURL=local-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-models.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAEvD,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,QAA4B,EAAE,KAAa;IACtE,OAAO,QAAQ,EAAE,WAAW,EAAE,KAAK,eAAe,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC"}
@@ -19,6 +19,10 @@ export interface ModelCost {
19
19
  tokens: TokenUsage;
20
20
  costUSD: number;
21
21
  unpriced: boolean;
22
+ /** True when the matched pricing.json row is a tier estimate, not a confirmed published price. */
23
+ estimated?: boolean;
24
+ /** True when the model runs locally (e.g. a non-cloud Ollama model) — priced at $0, not unpriced. */
25
+ local?: boolean;
22
26
  }
23
27
  /** One cumulative point in a session's token & cost growth series. */
24
28
  export interface CostSeriesPoint {
@@ -26,6 +30,44 @@ export interface CostSeriesPoint {
26
30
  cost: number;
27
31
  tokens: number;
28
32
  }
33
+ /** One point in the per-turn model/tier/decision timeline shown in the session modal. */
34
+ export interface ModelTimelinePoint {
35
+ t: number;
36
+ model: string;
37
+ costUSD: number;
38
+ tokens: number;
39
+ requestedModel?: string;
40
+ /**
41
+ * The literal alias/id the `model` param actually held for this turn — from Claude Code's own
42
+ * `type: 'attachment'` model-identity markers (see usage-readers.ts's
43
+ * `extractModelIdentityTimeline`), resolved to whichever marker was most recent at this turn's
44
+ * timestamp. Unlike `requestedModel` (the header's capable-tier ceiling for Switchyard), this
45
+ * is exact even for a custom Switchyard variant name — and stays correct turn-by-turn across
46
+ * an in-session `/model` switch. Absent when this agent's log has no such marker.
47
+ */
48
+ requestedAlias?: string;
49
+ routingFamily?: string;
50
+ routingTier?: 'simple' | 'middle' | 'complex' | 'reasoning' | string;
51
+ routingTierRaw?: string;
52
+ routedModel?: string;
53
+ classifierModel?: string;
54
+ routerType?: string;
55
+ routingSource?: 'stage_router' | 'judge' | string;
56
+ decisionSource?: string;
57
+ /** Backend-reported model to reprice this turn's usage at for the savings estimate below
58
+ * (`x-codemie-routing-counterfactual-model`). Unlike `requestedModel`, which on some routing
59
+ * families is a router/tier alias (e.g. `claude-smart-router`), this is always a priceable
60
+ * model. Absent when the backend reported no counterfactual for this turn. */
61
+ counterfactualModel?: string;
62
+ /**
63
+ * What this turn would have cost had `counterfactualModel` answered it instead, repricing
64
+ * this turn's actual token usage at that model's rate — see cost-enricher.ts's
65
+ * `buildModelTimeline`. Absent when `counterfactualModel` is absent, or has no pricing entry.
66
+ */
67
+ estimatedMaxCostUSD?: number;
68
+ /** max(0, estimatedMaxCostUSD - costUSD). Absent under the same condition as estimatedMaxCostUSD. */
69
+ potentialSavingsUSD?: number;
70
+ }
29
71
  /** Max points kept per session series — downsample guard so the embedded payload stays small. */
30
72
  export declare const MAX_SERIES_POINTS = 40;
31
73
  /** One dispatched invocation (agent/skill/command) on a session's activity timeline. */
@@ -80,6 +122,7 @@ export interface SessionCost {
80
122
  costUSD: number;
81
123
  cacheReadCostUSD?: number;
82
124
  costSeries?: CostSeriesPoint[];
125
+ modelTimeline?: ModelTimelinePoint[];
83
126
  dispatches?: DispatchEvent[];
84
127
  /** True only when dispatch extraction retained the full invocation list. Legacy lists may be capped. */
85
128
  dispatchesComplete?: boolean;
@@ -108,6 +151,21 @@ export interface SessionCost {
108
151
  * to show" — those two must always agree.
109
152
  */
110
153
  agentSessionFile?: string;
154
+ classifierCostUSD?: number;
155
+ /**
156
+ * True when every routed turn in this session reported its classifier cost. False when any
157
+ * routed turn reported none, making `classifierCostUSD` an understatement rather than a
158
+ * measurement. Absent when the session had no routed turns at all.
159
+ */
160
+ routingCostKnown?: boolean;
161
+ /**
162
+ * Percentage (0-100, rounded) of this session's turns where routing measurably changed the
163
+ * outcome — the turn's actual model (`routedModel`, falling back to `model`) differs from its
164
+ * backend-reported `counterfactualModel` (see `ModelTimelinePoint`). A turn with no
165
+ * `counterfactualModel` reported does not count as routed under this definition. Absent when
166
+ * the session has no modelTimeline data at all.
167
+ */
168
+ routedTurnsPct?: number;
111
169
  /**
112
170
  * Billing units the provider itself charges in, when they differ from tokens.
113
171
  * Currently only GitHub Copilot CLI ("premium requests"), whose bill does not track
@@ -138,5 +196,7 @@ export interface CostSummary {
138
196
  pricedSessions: number;
139
197
  totalSessions: number;
140
198
  unpricedModels: string[];
199
+ estimatedModels: string[];
200
+ localModels: string[];
141
201
  }
142
202
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH,iGAAiG;AACjG,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAyCpC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyEH,iGAAiG;AACjG,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAyCpC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC"}
@@ -8,10 +8,16 @@
8
8
  */
9
9
  import type { ParsedSession } from '../../../../agents/core/session/BaseSessionAdapter.js';
10
10
  import type { TokenUsage } from './types.js';
11
+ import { type RoutingDecision } from '../../../../utils/routing-headers.mjs';
11
12
  /** model -> usage */
12
13
  type UsageMap = Map<string, TokenUsage>;
13
- /** One assistant API response's usage, plus a dedup key for cross-session de-duplication. */
14
- export interface UsageRecord {
14
+ /**
15
+ * One assistant API response's usage, plus a dedup key for cross-session de-duplication.
16
+ * Routing fields (see {@link RoutingDecision}) are parsed once by {@link parseRoutingHeaders}
17
+ * and merged in — this interface adds only the per-message concerns routing parsing knows
18
+ * nothing about.
19
+ */
20
+ export interface UsageRecord extends RoutingDecision {
15
21
  /** `${message.id}::${requestId}` — null when neither is present (cannot dedupe ⇒ always counted). */
16
22
  key: string | null;
17
23
  /** Message epoch ms (for per-turn series); null when absent/unparseable. */
@@ -32,6 +38,23 @@ export interface UsageRecord {
32
38
  * concatenation order (main transcript first, then sub-agent files in discovery order).
33
39
  */
34
40
  export declare function extractClaudeUsageRecords(parsed: ParsedSession): UsageRecord[];
41
+ /** One literal model/router alias becoming active at a point in time (see {@link extractModelIdentityTimeline}). */
42
+ export interface ModelIdentityEvent {
43
+ ts: number;
44
+ modelId: string;
45
+ }
46
+ /**
47
+ * Every model switch this session recorded, in chronological order: Claude Code stamps a
48
+ * `type: 'attachment'` line (`attachment.type === 'model'`) with the exact literal alias/id the
49
+ * `model` param held, once at session start and again on every in-session `/model` switch (see
50
+ * `attachment.identity.modelId`). This is the ONE signal that carries the literal alias — even a
51
+ * custom Switchyard variant name that never appears anywhere else — unlike RoutingDecision's own
52
+ * `requestedModel` (from `x-codemie-requested-model`), which for Switchyard reports only the
53
+ * capable-tier CEILING. Sorted ascending so a caller can resolve "which alias was active for a
54
+ * turn at time T" by taking the last entry with `ts <= T` (see cost-enricher.ts's
55
+ * `resolveAliasAt`). Returns null when the session has none (e.g. not this agent's log format).
56
+ */
57
+ export declare function extractModelIdentityTimeline(parsed: ParsedSession): ModelIdentityEvent[] | null;
35
58
  /**
36
59
  * Per-turn usage from Codex `token_count` events (`last_token_usage`), correlated with the
37
60
  * most recent `turn_context.model`. Sub-agent rollouts attached to `parsed.subagents` are
@@ -1 +1 @@
1
- {"version":3,"file":"usage-readers.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/usage-readers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAEjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,qBAAqB;AACrB,KAAK,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAmDxC,6FAA6F;AAC7F,MAAM,WAAW,WAAW;IAC1B,qGAAqG;IACrG,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAqED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CA8C9E;AAiND;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CAuB7E;AAmCD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAYtE;AAyCD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CAmB5E;AAqGD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CAiD1E;AAeD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,CAqBnF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAsCxG;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,CAmBpH;AAED,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,QAAQ,CAMhE"}
1
+ {"version":3,"file":"usage-readers.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/cost/usage-readers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAEjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,OAAO,EAAuB,KAAK,eAAe,EAA4B,MAAM,6BAA6B,CAAC;AAIlH,qBAAqB;AACrB,KAAK,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAmDxC;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,qGAAqG;IACrG,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAqED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CA6D9E;AAgBD,oHAAoH;AACpH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAiB/F;AAyMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CAuB7E;AAmCD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAYtE;AAoDD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CAoB5E;AAqGD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,CAiD1E;AAeD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,CAqBnF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAsCxG;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,CAmBpH;AAED,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,QAAQ,CAMhE"}