@miradorlabs/web-grpc 2.58.0 → 2.60.0

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.
@@ -1,6 +1,6 @@
1
1
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
2
2
  // versions:
3
- // protoc-gen-ts_proto v2.12.3
3
+ // protoc-gen-ts_proto v2.12.4
4
4
  // protoc v3.21.12
5
5
  // source: proto/gateway/web/v1/ai_gateway.proto
6
6
 
@@ -432,6 +432,63 @@ export function aITokenActivityDimensionToJSON(object: AITokenActivityDimension)
432
432
  }
433
433
  }
434
434
 
435
+ export enum AIResourceDimension {
436
+ AI_RESOURCE_DIMENSION_UNSPECIFIED = 0,
437
+ AI_RESOURCE_DIMENSION_SKILL = 1,
438
+ AI_RESOURCE_DIMENSION_TOOL = 2,
439
+ AI_RESOURCE_DIMENSION_FILE = 3,
440
+ AI_RESOURCE_DIMENSION_URL = 4,
441
+ AI_RESOURCE_DIMENSION_COMMAND = 5,
442
+ UNRECOGNIZED = -1,
443
+ }
444
+
445
+ export function aIResourceDimensionFromJSON(object: any): AIResourceDimension {
446
+ switch (object) {
447
+ case 0:
448
+ case "AI_RESOURCE_DIMENSION_UNSPECIFIED":
449
+ return AIResourceDimension.AI_RESOURCE_DIMENSION_UNSPECIFIED;
450
+ case 1:
451
+ case "AI_RESOURCE_DIMENSION_SKILL":
452
+ return AIResourceDimension.AI_RESOURCE_DIMENSION_SKILL;
453
+ case 2:
454
+ case "AI_RESOURCE_DIMENSION_TOOL":
455
+ return AIResourceDimension.AI_RESOURCE_DIMENSION_TOOL;
456
+ case 3:
457
+ case "AI_RESOURCE_DIMENSION_FILE":
458
+ return AIResourceDimension.AI_RESOURCE_DIMENSION_FILE;
459
+ case 4:
460
+ case "AI_RESOURCE_DIMENSION_URL":
461
+ return AIResourceDimension.AI_RESOURCE_DIMENSION_URL;
462
+ case 5:
463
+ case "AI_RESOURCE_DIMENSION_COMMAND":
464
+ return AIResourceDimension.AI_RESOURCE_DIMENSION_COMMAND;
465
+ case -1:
466
+ case "UNRECOGNIZED":
467
+ default:
468
+ return AIResourceDimension.UNRECOGNIZED;
469
+ }
470
+ }
471
+
472
+ export function aIResourceDimensionToJSON(object: AIResourceDimension): string {
473
+ switch (object) {
474
+ case AIResourceDimension.AI_RESOURCE_DIMENSION_UNSPECIFIED:
475
+ return "AI_RESOURCE_DIMENSION_UNSPECIFIED";
476
+ case AIResourceDimension.AI_RESOURCE_DIMENSION_SKILL:
477
+ return "AI_RESOURCE_DIMENSION_SKILL";
478
+ case AIResourceDimension.AI_RESOURCE_DIMENSION_TOOL:
479
+ return "AI_RESOURCE_DIMENSION_TOOL";
480
+ case AIResourceDimension.AI_RESOURCE_DIMENSION_FILE:
481
+ return "AI_RESOURCE_DIMENSION_FILE";
482
+ case AIResourceDimension.AI_RESOURCE_DIMENSION_URL:
483
+ return "AI_RESOURCE_DIMENSION_URL";
484
+ case AIResourceDimension.AI_RESOURCE_DIMENSION_COMMAND:
485
+ return "AI_RESOURCE_DIMENSION_COMMAND";
486
+ case AIResourceDimension.UNRECOGNIZED:
487
+ default:
488
+ return "UNRECOGNIZED";
489
+ }
490
+ }
491
+
435
492
  export enum AIFileLifecycle {
436
493
  AI_FILE_LIFECYCLE_UNSPECIFIED = 0,
437
494
  AI_FILE_LIFECYCLE_UNLANDED = 1,
@@ -1151,6 +1208,48 @@ export interface TokenActivityMeasures {
1151
1208
  modelCalls: number;
1152
1209
  }
1153
1210
 
1211
+ export interface BurnRateRequest {
1212
+ organizationId: string;
1213
+ projectId: string;
1214
+ /** model / provider / source_system / user_id / api_key_id narrow current + sparkline; active_after ignored. */
1215
+ filter:
1216
+ | AISessionFilter
1217
+ | undefined;
1218
+ /** Slices current_groups only (sparkline is always the filtered total). UNSPECIFIED = no breakdown. */
1219
+ groupBy: AITokenActivityDimension;
1220
+ }
1221
+
1222
+ /**
1223
+ * BurnRate mirrors telemetry.api.v1.BurnRate: the trailing-60s rate + a 60-point one-minute sparkline,
1224
+ * replaced wholesale each tick (streams carry no ResponseStatus).
1225
+ */
1226
+ export interface BurnRate {
1227
+ asOf: Date | undefined;
1228
+ current: BurnRateMeasures | undefined;
1229
+ currentGroups: BurnRateGroup[];
1230
+ sparkline: BurnRateSparkPoint[];
1231
+ groupBy: AITokenActivityDimension;
1232
+ }
1233
+
1234
+ export interface BurnRateGroup {
1235
+ key: string;
1236
+ rate: BurnRateMeasures | undefined;
1237
+ }
1238
+
1239
+ export interface BurnRateSparkPoint {
1240
+ bucketStart: Date | undefined;
1241
+ rate: BurnRateMeasures | undefined;
1242
+ }
1243
+
1244
+ /** BurnRateMeasures — usd_per_hour = bucket cost x 60; tokens_per_min = cache-inclusive input + output. */
1245
+ export interface BurnRateMeasures {
1246
+ usdPerHour: number;
1247
+ tokensPerMin: number;
1248
+ modelCalls: number;
1249
+ costUnavailableCount: number;
1250
+ usageUnavailableCount: number;
1251
+ }
1252
+
1154
1253
  export interface DailyActivityRequest {
1155
1254
  organizationId: string;
1156
1255
  projectId: string;
@@ -1289,6 +1388,31 @@ export interface ProjectSessionRef {
1289
1388
  lastActivityAt: Date | undefined;
1290
1389
  }
1291
1390
 
1391
+ export interface ResourceRankingsRequest {
1392
+ organizationId: string;
1393
+ projectId: string;
1394
+ filter: AISessionFilter | undefined;
1395
+ dimension: AIResourceDimension;
1396
+ timeWindow: AnalyticsTimeWindow;
1397
+ topN: number;
1398
+ }
1399
+
1400
+ export interface ResourceRankingsResponse {
1401
+ status: ResponseStatus | undefined;
1402
+ rankings: ResourceRanking[];
1403
+ dimension: AIResourceDimension;
1404
+ windowStart: Date | undefined;
1405
+ windowEnd: Date | undefined;
1406
+ asOf: Date | undefined;
1407
+ }
1408
+
1409
+ export interface ResourceRanking {
1410
+ key: string;
1411
+ count: number;
1412
+ priorCount: number;
1413
+ sessionCount: number;
1414
+ }
1415
+
1292
1416
  export interface AIFileFilter {
1293
1417
  repositoryKey: string[];
1294
1418
  ref: string[];
@@ -8813,28 +8937,28 @@ export const TokenActivityMeasures: MessageFns<TokenActivityMeasures> = {
8813
8937
  },
8814
8938
  };
8815
8939
 
8816
- function createBaseDailyActivityRequest(): DailyActivityRequest {
8817
- return { organizationId: "", projectId: "", startDate: "", endDate: "" };
8940
+ function createBaseBurnRateRequest(): BurnRateRequest {
8941
+ return { organizationId: "", projectId: "", filter: undefined, groupBy: 0 };
8818
8942
  }
8819
8943
 
8820
- export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8821
- encode(message: DailyActivityRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8944
+ export const BurnRateRequest: MessageFns<BurnRateRequest> = {
8945
+ encode(message: BurnRateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8822
8946
  if (message.organizationId !== "") {
8823
8947
  writer.uint32(10).string(message.organizationId);
8824
8948
  }
8825
8949
  if (message.projectId !== "") {
8826
8950
  writer.uint32(18).string(message.projectId);
8827
8951
  }
8828
- if (message.startDate !== "") {
8829
- writer.uint32(26).string(message.startDate);
8952
+ if (message.filter !== undefined) {
8953
+ AISessionFilter.encode(message.filter, writer.uint32(26).fork()).join();
8830
8954
  }
8831
- if (message.endDate !== "") {
8832
- writer.uint32(34).string(message.endDate);
8955
+ if (message.groupBy !== 0) {
8956
+ writer.uint32(32).int32(message.groupBy);
8833
8957
  }
8834
8958
  return writer;
8835
8959
  },
8836
8960
 
8837
- decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityRequest {
8961
+ decode(input: BinaryReader | Uint8Array, length?: number): BurnRateRequest {
8838
8962
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
8839
8963
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
8840
8964
  if (previousRecursionDepth >= 100) {
@@ -8843,7 +8967,7 @@ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8843
8967
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
8844
8968
  try {
8845
8969
  const end = length === undefined ? reader.len : reader.pos + length;
8846
- const message = createBaseDailyActivityRequest();
8970
+ const message = createBaseBurnRateRequest();
8847
8971
  while (reader.pos < end) {
8848
8972
  const tag = reader.uint32();
8849
8973
  switch (tag >>> 3) {
@@ -8868,15 +8992,15 @@ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8868
8992
  break;
8869
8993
  }
8870
8994
 
8871
- message.startDate = reader.string();
8995
+ message.filter = AISessionFilter.decode(reader, reader.uint32());
8872
8996
  continue;
8873
8997
  }
8874
8998
  case 4: {
8875
- if (tag !== 34) {
8999
+ if (tag !== 32) {
8876
9000
  break;
8877
9001
  }
8878
9002
 
8879
- message.endDate = reader.string();
9003
+ message.groupBy = reader.int32() as any;
8880
9004
  continue;
8881
9005
  }
8882
9006
  }
@@ -8891,7 +9015,7 @@ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8891
9015
  }
8892
9016
  },
8893
9017
 
8894
- fromJSON(object: any): DailyActivityRequest {
9018
+ fromJSON(object: any): BurnRateRequest {
8895
9019
  return {
8896
9020
  organizationId: isSet(object.organizationId)
8897
9021
  ? globalThis.String(object.organizationId)
@@ -8903,20 +9027,16 @@ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8903
9027
  : isSet(object.project_id)
8904
9028
  ? globalThis.String(object.project_id)
8905
9029
  : "",
8906
- startDate: isSet(object.startDate)
8907
- ? globalThis.String(object.startDate)
8908
- : isSet(object.start_date)
8909
- ? globalThis.String(object.start_date)
8910
- : "",
8911
- endDate: isSet(object.endDate)
8912
- ? globalThis.String(object.endDate)
8913
- : isSet(object.end_date)
8914
- ? globalThis.String(object.end_date)
8915
- : "",
9030
+ filter: isSet(object.filter) ? AISessionFilter.fromJSON(object.filter) : undefined,
9031
+ groupBy: isSet(object.groupBy)
9032
+ ? aITokenActivityDimensionFromJSON(object.groupBy)
9033
+ : isSet(object.group_by)
9034
+ ? aITokenActivityDimensionFromJSON(object.group_by)
9035
+ : 0,
8916
9036
  };
8917
9037
  },
8918
9038
 
8919
- toJSON(message: DailyActivityRequest): unknown {
9039
+ toJSON(message: BurnRateRequest): unknown {
8920
9040
  const obj: any = {};
8921
9041
  if (message.organizationId !== "") {
8922
9042
  obj.organizationId = message.organizationId;
@@ -8924,56 +9044,55 @@ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8924
9044
  if (message.projectId !== "") {
8925
9045
  obj.projectId = message.projectId;
8926
9046
  }
8927
- if (message.startDate !== "") {
8928
- obj.startDate = message.startDate;
9047
+ if (message.filter !== undefined) {
9048
+ obj.filter = AISessionFilter.toJSON(message.filter);
8929
9049
  }
8930
- if (message.endDate !== "") {
8931
- obj.endDate = message.endDate;
9050
+ if (message.groupBy !== 0) {
9051
+ obj.groupBy = aITokenActivityDimensionToJSON(message.groupBy);
8932
9052
  }
8933
9053
  return obj;
8934
9054
  },
8935
9055
 
8936
- create<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(base?: I): DailyActivityRequest {
8937
- return DailyActivityRequest.fromPartial(base ?? ({} as any));
9056
+ create<I extends Exact<DeepPartial<BurnRateRequest>, I>>(base?: I): BurnRateRequest {
9057
+ return BurnRateRequest.fromPartial(base ?? ({} as any));
8938
9058
  },
8939
- fromPartial<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(object: I): DailyActivityRequest {
8940
- const message = createBaseDailyActivityRequest();
9059
+ fromPartial<I extends Exact<DeepPartial<BurnRateRequest>, I>>(object: I): BurnRateRequest {
9060
+ const message = createBaseBurnRateRequest();
8941
9061
  message.organizationId = object.organizationId ?? "";
8942
9062
  message.projectId = object.projectId ?? "";
8943
- message.startDate = object.startDate ?? "";
8944
- message.endDate = object.endDate ?? "";
9063
+ message.filter = (object.filter !== undefined && object.filter !== null)
9064
+ ? AISessionFilter.fromPartial(object.filter)
9065
+ : undefined;
9066
+ message.groupBy = object.groupBy ?? 0;
8945
9067
  return message;
8946
9068
  },
8947
9069
  };
8948
9070
 
8949
- function createBaseDailyActivity(): DailyActivity {
8950
- return { days: [], startDate: "", endDate: "", coverageStart: "", today: "", asOf: undefined };
9071
+ function createBaseBurnRate(): BurnRate {
9072
+ return { asOf: undefined, current: undefined, currentGroups: [], sparkline: [], groupBy: 0 };
8951
9073
  }
8952
9074
 
8953
- export const DailyActivity: MessageFns<DailyActivity> = {
8954
- encode(message: DailyActivity, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8955
- for (const v of message.days) {
8956
- DailyActivityDay.encode(v!, writer.uint32(10).fork()).join();
8957
- }
8958
- if (message.startDate !== "") {
8959
- writer.uint32(18).string(message.startDate);
9075
+ export const BurnRate: MessageFns<BurnRate> = {
9076
+ encode(message: BurnRate, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9077
+ if (message.asOf !== undefined) {
9078
+ Timestamp.encode(toTimestamp(message.asOf), writer.uint32(10).fork()).join();
8960
9079
  }
8961
- if (message.endDate !== "") {
8962
- writer.uint32(26).string(message.endDate);
9080
+ if (message.current !== undefined) {
9081
+ BurnRateMeasures.encode(message.current, writer.uint32(18).fork()).join();
8963
9082
  }
8964
- if (message.coverageStart !== "") {
8965
- writer.uint32(34).string(message.coverageStart);
9083
+ for (const v of message.currentGroups) {
9084
+ BurnRateGroup.encode(v!, writer.uint32(26).fork()).join();
8966
9085
  }
8967
- if (message.today !== "") {
8968
- writer.uint32(42).string(message.today);
9086
+ for (const v of message.sparkline) {
9087
+ BurnRateSparkPoint.encode(v!, writer.uint32(34).fork()).join();
8969
9088
  }
8970
- if (message.asOf !== undefined) {
8971
- Timestamp.encode(toTimestamp(message.asOf), writer.uint32(50).fork()).join();
9089
+ if (message.groupBy !== 0) {
9090
+ writer.uint32(40).int32(message.groupBy);
8972
9091
  }
8973
9092
  return writer;
8974
9093
  },
8975
9094
 
8976
- decode(input: BinaryReader | Uint8Array, length?: number): DailyActivity {
9095
+ decode(input: BinaryReader | Uint8Array, length?: number): BurnRate {
8977
9096
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
8978
9097
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
8979
9098
  if (previousRecursionDepth >= 100) {
@@ -8982,7 +9101,7 @@ export const DailyActivity: MessageFns<DailyActivity> = {
8982
9101
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
8983
9102
  try {
8984
9103
  const end = length === undefined ? reader.len : reader.pos + length;
8985
- const message = createBaseDailyActivity();
9104
+ const message = createBaseBurnRate();
8986
9105
  while (reader.pos < end) {
8987
9106
  const tag = reader.uint32();
8988
9107
  switch (tag >>> 3) {
@@ -8991,7 +9110,7 @@ export const DailyActivity: MessageFns<DailyActivity> = {
8991
9110
  break;
8992
9111
  }
8993
9112
 
8994
- message.days.push(DailyActivityDay.decode(reader, reader.uint32()));
9113
+ message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
8995
9114
  continue;
8996
9115
  }
8997
9116
  case 2: {
@@ -8999,7 +9118,7 @@ export const DailyActivity: MessageFns<DailyActivity> = {
8999
9118
  break;
9000
9119
  }
9001
9120
 
9002
- message.startDate = reader.string();
9121
+ message.current = BurnRateMeasures.decode(reader, reader.uint32());
9003
9122
  continue;
9004
9123
  }
9005
9124
  case 3: {
@@ -9007,7 +9126,7 @@ export const DailyActivity: MessageFns<DailyActivity> = {
9007
9126
  break;
9008
9127
  }
9009
9128
 
9010
- message.endDate = reader.string();
9129
+ message.currentGroups.push(BurnRateGroup.decode(reader, reader.uint32()));
9011
9130
  continue;
9012
9131
  }
9013
9132
  case 4: {
@@ -9015,23 +9134,15 @@ export const DailyActivity: MessageFns<DailyActivity> = {
9015
9134
  break;
9016
9135
  }
9017
9136
 
9018
- message.coverageStart = reader.string();
9137
+ message.sparkline.push(BurnRateSparkPoint.decode(reader, reader.uint32()));
9019
9138
  continue;
9020
9139
  }
9021
9140
  case 5: {
9022
- if (tag !== 42) {
9023
- break;
9024
- }
9025
-
9026
- message.today = reader.string();
9027
- continue;
9028
- }
9029
- case 6: {
9030
- if (tag !== 50) {
9141
+ if (tag !== 40) {
9031
9142
  break;
9032
9143
  }
9033
9144
 
9034
- message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9145
+ message.groupBy = reader.int32() as any;
9035
9146
  continue;
9036
9147
  }
9037
9148
  }
@@ -9046,90 +9157,82 @@ export const DailyActivity: MessageFns<DailyActivity> = {
9046
9157
  }
9047
9158
  },
9048
9159
 
9049
- fromJSON(object: any): DailyActivity {
9160
+ fromJSON(object: any): BurnRate {
9050
9161
  return {
9051
- days: globalThis.Array.isArray(object?.days) ? object.days.map((e: any) => DailyActivityDay.fromJSON(e)) : [],
9052
- startDate: isSet(object.startDate)
9053
- ? globalThis.String(object.startDate)
9054
- : isSet(object.start_date)
9055
- ? globalThis.String(object.start_date)
9056
- : "",
9057
- endDate: isSet(object.endDate)
9058
- ? globalThis.String(object.endDate)
9059
- : isSet(object.end_date)
9060
- ? globalThis.String(object.end_date)
9061
- : "",
9062
- coverageStart: isSet(object.coverageStart)
9063
- ? globalThis.String(object.coverageStart)
9064
- : isSet(object.coverage_start)
9065
- ? globalThis.String(object.coverage_start)
9066
- : "",
9067
- today: isSet(object.today) ? globalThis.String(object.today) : "",
9068
9162
  asOf: isSet(object.asOf)
9069
9163
  ? fromJsonTimestamp(object.asOf)
9070
9164
  : isSet(object.as_of)
9071
9165
  ? fromJsonTimestamp(object.as_of)
9072
9166
  : undefined,
9167
+ current: isSet(object.current) ? BurnRateMeasures.fromJSON(object.current) : undefined,
9168
+ currentGroups: globalThis.Array.isArray(object?.currentGroups)
9169
+ ? object.currentGroups.map((e: any) => BurnRateGroup.fromJSON(e))
9170
+ : globalThis.Array.isArray(object?.current_groups)
9171
+ ? object.current_groups.map((e: any) => BurnRateGroup.fromJSON(e))
9172
+ : [],
9173
+ sparkline: globalThis.Array.isArray(object?.sparkline)
9174
+ ? object.sparkline.map((e: any) => BurnRateSparkPoint.fromJSON(e))
9175
+ : [],
9176
+ groupBy: isSet(object.groupBy)
9177
+ ? aITokenActivityDimensionFromJSON(object.groupBy)
9178
+ : isSet(object.group_by)
9179
+ ? aITokenActivityDimensionFromJSON(object.group_by)
9180
+ : 0,
9073
9181
  };
9074
9182
  },
9075
9183
 
9076
- toJSON(message: DailyActivity): unknown {
9184
+ toJSON(message: BurnRate): unknown {
9077
9185
  const obj: any = {};
9078
- if (message.days?.length) {
9079
- obj.days = message.days.map((e) => DailyActivityDay.toJSON(e));
9080
- }
9081
- if (message.startDate !== "") {
9082
- obj.startDate = message.startDate;
9186
+ if (message.asOf !== undefined) {
9187
+ obj.asOf = message.asOf.toISOString();
9083
9188
  }
9084
- if (message.endDate !== "") {
9085
- obj.endDate = message.endDate;
9189
+ if (message.current !== undefined) {
9190
+ obj.current = BurnRateMeasures.toJSON(message.current);
9086
9191
  }
9087
- if (message.coverageStart !== "") {
9088
- obj.coverageStart = message.coverageStart;
9192
+ if (message.currentGroups?.length) {
9193
+ obj.currentGroups = message.currentGroups.map((e) => BurnRateGroup.toJSON(e));
9089
9194
  }
9090
- if (message.today !== "") {
9091
- obj.today = message.today;
9195
+ if (message.sparkline?.length) {
9196
+ obj.sparkline = message.sparkline.map((e) => BurnRateSparkPoint.toJSON(e));
9092
9197
  }
9093
- if (message.asOf !== undefined) {
9094
- obj.asOf = message.asOf.toISOString();
9198
+ if (message.groupBy !== 0) {
9199
+ obj.groupBy = aITokenActivityDimensionToJSON(message.groupBy);
9095
9200
  }
9096
9201
  return obj;
9097
9202
  },
9098
9203
 
9099
- create<I extends Exact<DeepPartial<DailyActivity>, I>>(base?: I): DailyActivity {
9100
- return DailyActivity.fromPartial(base ?? ({} as any));
9204
+ create<I extends Exact<DeepPartial<BurnRate>, I>>(base?: I): BurnRate {
9205
+ return BurnRate.fromPartial(base ?? ({} as any));
9101
9206
  },
9102
- fromPartial<I extends Exact<DeepPartial<DailyActivity>, I>>(object: I): DailyActivity {
9103
- const message = createBaseDailyActivity();
9104
- message.days = object.days?.map((e) => DailyActivityDay.fromPartial(e)) || [];
9105
- message.startDate = object.startDate ?? "";
9106
- message.endDate = object.endDate ?? "";
9107
- message.coverageStart = object.coverageStart ?? "";
9108
- message.today = object.today ?? "";
9207
+ fromPartial<I extends Exact<DeepPartial<BurnRate>, I>>(object: I): BurnRate {
9208
+ const message = createBaseBurnRate();
9109
9209
  message.asOf = object.asOf ?? undefined;
9210
+ message.current = (object.current !== undefined && object.current !== null)
9211
+ ? BurnRateMeasures.fromPartial(object.current)
9212
+ : undefined;
9213
+ message.currentGroups = object.currentGroups?.map((e) => BurnRateGroup.fromPartial(e)) || [];
9214
+ message.sparkline = object.sparkline?.map((e) => BurnRateSparkPoint.fromPartial(e)) || [];
9215
+ message.groupBy = object.groupBy ?? 0;
9110
9216
  return message;
9111
9217
  },
9112
9218
  };
9113
9219
 
9114
- function createBaseDailyActivityDay(): DailyActivityDay {
9115
- return { day: "", measures: undefined, provisional: false };
9220
+ function createBaseBurnRateGroup(): BurnRateGroup {
9221
+ return { key: "", rate: undefined };
9116
9222
  }
9117
9223
 
9118
- export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9119
- encode(message: DailyActivityDay, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9120
- if (message.day !== "") {
9121
- writer.uint32(10).string(message.day);
9122
- }
9123
- if (message.measures !== undefined) {
9124
- DailyActivityMeasures.encode(message.measures, writer.uint32(18).fork()).join();
9224
+ export const BurnRateGroup: MessageFns<BurnRateGroup> = {
9225
+ encode(message: BurnRateGroup, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9226
+ if (message.key !== "") {
9227
+ writer.uint32(10).string(message.key);
9125
9228
  }
9126
- if (message.provisional !== false) {
9127
- writer.uint32(24).bool(message.provisional);
9229
+ if (message.rate !== undefined) {
9230
+ BurnRateMeasures.encode(message.rate, writer.uint32(18).fork()).join();
9128
9231
  }
9129
9232
  return writer;
9130
9233
  },
9131
9234
 
9132
- decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityDay {
9235
+ decode(input: BinaryReader | Uint8Array, length?: number): BurnRateGroup {
9133
9236
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9134
9237
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9135
9238
  if (previousRecursionDepth >= 100) {
@@ -9138,7 +9241,7 @@ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9138
9241
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9139
9242
  try {
9140
9243
  const end = length === undefined ? reader.len : reader.pos + length;
9141
- const message = createBaseDailyActivityDay();
9244
+ const message = createBaseBurnRateGroup();
9142
9245
  while (reader.pos < end) {
9143
9246
  const tag = reader.uint32();
9144
9247
  switch (tag >>> 3) {
@@ -9147,7 +9250,7 @@ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9147
9250
  break;
9148
9251
  }
9149
9252
 
9150
- message.day = reader.string();
9253
+ message.key = reader.string();
9151
9254
  continue;
9152
9255
  }
9153
9256
  case 2: {
@@ -9155,15 +9258,7 @@ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9155
9258
  break;
9156
9259
  }
9157
9260
 
9158
- message.measures = DailyActivityMeasures.decode(reader, reader.uint32());
9159
- continue;
9160
- }
9161
- case 3: {
9162
- if (tag !== 24) {
9163
- break;
9164
- }
9165
-
9166
- message.provisional = reader.bool();
9261
+ message.rate = BurnRateMeasures.decode(reader, reader.uint32());
9167
9262
  continue;
9168
9263
  }
9169
9264
  }
@@ -9178,109 +9273,53 @@ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9178
9273
  }
9179
9274
  },
9180
9275
 
9181
- fromJSON(object: any): DailyActivityDay {
9276
+ fromJSON(object: any): BurnRateGroup {
9182
9277
  return {
9183
- day: isSet(object.day) ? globalThis.String(object.day) : "",
9184
- measures: isSet(object.measures) ? DailyActivityMeasures.fromJSON(object.measures) : undefined,
9185
- provisional: isSet(object.provisional) ? globalThis.Boolean(object.provisional) : false,
9278
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
9279
+ rate: isSet(object.rate) ? BurnRateMeasures.fromJSON(object.rate) : undefined,
9186
9280
  };
9187
9281
  },
9188
9282
 
9189
- toJSON(message: DailyActivityDay): unknown {
9283
+ toJSON(message: BurnRateGroup): unknown {
9190
9284
  const obj: any = {};
9191
- if (message.day !== "") {
9192
- obj.day = message.day;
9193
- }
9194
- if (message.measures !== undefined) {
9195
- obj.measures = DailyActivityMeasures.toJSON(message.measures);
9285
+ if (message.key !== "") {
9286
+ obj.key = message.key;
9196
9287
  }
9197
- if (message.provisional !== false) {
9198
- obj.provisional = message.provisional;
9288
+ if (message.rate !== undefined) {
9289
+ obj.rate = BurnRateMeasures.toJSON(message.rate);
9199
9290
  }
9200
9291
  return obj;
9201
9292
  },
9202
9293
 
9203
- create<I extends Exact<DeepPartial<DailyActivityDay>, I>>(base?: I): DailyActivityDay {
9204
- return DailyActivityDay.fromPartial(base ?? ({} as any));
9294
+ create<I extends Exact<DeepPartial<BurnRateGroup>, I>>(base?: I): BurnRateGroup {
9295
+ return BurnRateGroup.fromPartial(base ?? ({} as any));
9205
9296
  },
9206
- fromPartial<I extends Exact<DeepPartial<DailyActivityDay>, I>>(object: I): DailyActivityDay {
9207
- const message = createBaseDailyActivityDay();
9208
- message.day = object.day ?? "";
9209
- message.measures = (object.measures !== undefined && object.measures !== null)
9210
- ? DailyActivityMeasures.fromPartial(object.measures)
9297
+ fromPartial<I extends Exact<DeepPartial<BurnRateGroup>, I>>(object: I): BurnRateGroup {
9298
+ const message = createBaseBurnRateGroup();
9299
+ message.key = object.key ?? "";
9300
+ message.rate = (object.rate !== undefined && object.rate !== null)
9301
+ ? BurnRateMeasures.fromPartial(object.rate)
9211
9302
  : undefined;
9212
- message.provisional = object.provisional ?? false;
9213
9303
  return message;
9214
9304
  },
9215
9305
  };
9216
9306
 
9217
- function createBaseDailyActivityMeasures(): DailyActivityMeasures {
9218
- return {
9219
- inputTokens: 0,
9220
- outputTokens: 0,
9221
- cacheReadTokens: 0,
9222
- cacheWriteTokens: 0,
9223
- costUsd: 0,
9224
- modelCalls: 0,
9225
- toolCalls: 0,
9226
- userMessages: 0,
9227
- filesTouched: 0,
9228
- commits: 0,
9229
- gitPushes: 0,
9230
- pullRequestsCreated: 0,
9231
- pullRequestsMerged: 0,
9232
- branchesCreated: 0,
9233
- };
9307
+ function createBaseBurnRateSparkPoint(): BurnRateSparkPoint {
9308
+ return { bucketStart: undefined, rate: undefined };
9234
9309
  }
9235
9310
 
9236
- export const DailyActivityMeasures: MessageFns<DailyActivityMeasures> = {
9237
- encode(message: DailyActivityMeasures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9238
- if (message.inputTokens !== 0) {
9239
- writer.uint32(8).uint64(message.inputTokens);
9240
- }
9241
- if (message.outputTokens !== 0) {
9242
- writer.uint32(16).uint64(message.outputTokens);
9243
- }
9244
- if (message.cacheReadTokens !== 0) {
9245
- writer.uint32(24).uint64(message.cacheReadTokens);
9246
- }
9247
- if (message.cacheWriteTokens !== 0) {
9248
- writer.uint32(32).uint64(message.cacheWriteTokens);
9249
- }
9250
- if (message.costUsd !== 0) {
9251
- writer.uint32(41).double(message.costUsd);
9252
- }
9253
- if (message.modelCalls !== 0) {
9254
- writer.uint32(48).uint64(message.modelCalls);
9255
- }
9256
- if (message.toolCalls !== 0) {
9257
- writer.uint32(56).uint64(message.toolCalls);
9258
- }
9259
- if (message.userMessages !== 0) {
9260
- writer.uint32(64).uint64(message.userMessages);
9261
- }
9262
- if (message.filesTouched !== 0) {
9263
- writer.uint32(72).uint64(message.filesTouched);
9264
- }
9265
- if (message.commits !== 0) {
9266
- writer.uint32(80).uint64(message.commits);
9267
- }
9268
- if (message.gitPushes !== 0) {
9269
- writer.uint32(88).uint64(message.gitPushes);
9270
- }
9271
- if (message.pullRequestsCreated !== 0) {
9272
- writer.uint32(96).uint64(message.pullRequestsCreated);
9273
- }
9274
- if (message.pullRequestsMerged !== 0) {
9275
- writer.uint32(104).uint64(message.pullRequestsMerged);
9311
+ export const BurnRateSparkPoint: MessageFns<BurnRateSparkPoint> = {
9312
+ encode(message: BurnRateSparkPoint, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9313
+ if (message.bucketStart !== undefined) {
9314
+ Timestamp.encode(toTimestamp(message.bucketStart), writer.uint32(10).fork()).join();
9276
9315
  }
9277
- if (message.branchesCreated !== 0) {
9278
- writer.uint32(112).uint64(message.branchesCreated);
9316
+ if (message.rate !== undefined) {
9317
+ BurnRateMeasures.encode(message.rate, writer.uint32(18).fork()).join();
9279
9318
  }
9280
9319
  return writer;
9281
9320
  },
9282
9321
 
9283
- decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityMeasures {
9322
+ decode(input: BinaryReader | Uint8Array, length?: number): BurnRateSparkPoint {
9284
9323
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9285
9324
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9286
9325
  if (previousRecursionDepth >= 100) {
@@ -9289,120 +9328,148 @@ export const DailyActivityMeasures: MessageFns<DailyActivityMeasures> = {
9289
9328
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9290
9329
  try {
9291
9330
  const end = length === undefined ? reader.len : reader.pos + length;
9292
- const message = createBaseDailyActivityMeasures();
9331
+ const message = createBaseBurnRateSparkPoint();
9293
9332
  while (reader.pos < end) {
9294
9333
  const tag = reader.uint32();
9295
9334
  switch (tag >>> 3) {
9296
9335
  case 1: {
9297
- if (tag !== 8) {
9336
+ if (tag !== 10) {
9298
9337
  break;
9299
9338
  }
9300
9339
 
9301
- message.inputTokens = longToNumber(reader.uint64());
9340
+ message.bucketStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9302
9341
  continue;
9303
9342
  }
9304
9343
  case 2: {
9305
- if (tag !== 16) {
9306
- break;
9307
- }
9308
-
9309
- message.outputTokens = longToNumber(reader.uint64());
9310
- continue;
9311
- }
9312
- case 3: {
9313
- if (tag !== 24) {
9344
+ if (tag !== 18) {
9314
9345
  break;
9315
9346
  }
9316
9347
 
9317
- message.cacheReadTokens = longToNumber(reader.uint64());
9348
+ message.rate = BurnRateMeasures.decode(reader, reader.uint32());
9318
9349
  continue;
9319
9350
  }
9320
- case 4: {
9321
- if (tag !== 32) {
9322
- break;
9323
- }
9351
+ }
9352
+ if ((tag & 7) === 4 || tag === 0) {
9353
+ break;
9354
+ }
9355
+ reader.skip(tag & 7);
9356
+ }
9357
+ return message;
9358
+ } finally {
9359
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9360
+ }
9361
+ },
9324
9362
 
9325
- message.cacheWriteTokens = longToNumber(reader.uint64());
9326
- continue;
9327
- }
9328
- case 5: {
9329
- if (tag !== 41) {
9330
- break;
9331
- }
9363
+ fromJSON(object: any): BurnRateSparkPoint {
9364
+ return {
9365
+ bucketStart: isSet(object.bucketStart)
9366
+ ? fromJsonTimestamp(object.bucketStart)
9367
+ : isSet(object.bucket_start)
9368
+ ? fromJsonTimestamp(object.bucket_start)
9369
+ : undefined,
9370
+ rate: isSet(object.rate) ? BurnRateMeasures.fromJSON(object.rate) : undefined,
9371
+ };
9372
+ },
9332
9373
 
9333
- message.costUsd = reader.double();
9334
- continue;
9335
- }
9336
- case 6: {
9337
- if (tag !== 48) {
9338
- break;
9339
- }
9374
+ toJSON(message: BurnRateSparkPoint): unknown {
9375
+ const obj: any = {};
9376
+ if (message.bucketStart !== undefined) {
9377
+ obj.bucketStart = message.bucketStart.toISOString();
9378
+ }
9379
+ if (message.rate !== undefined) {
9380
+ obj.rate = BurnRateMeasures.toJSON(message.rate);
9381
+ }
9382
+ return obj;
9383
+ },
9340
9384
 
9341
- message.modelCalls = longToNumber(reader.uint64());
9342
- continue;
9343
- }
9344
- case 7: {
9345
- if (tag !== 56) {
9346
- break;
9347
- }
9385
+ create<I extends Exact<DeepPartial<BurnRateSparkPoint>, I>>(base?: I): BurnRateSparkPoint {
9386
+ return BurnRateSparkPoint.fromPartial(base ?? ({} as any));
9387
+ },
9388
+ fromPartial<I extends Exact<DeepPartial<BurnRateSparkPoint>, I>>(object: I): BurnRateSparkPoint {
9389
+ const message = createBaseBurnRateSparkPoint();
9390
+ message.bucketStart = object.bucketStart ?? undefined;
9391
+ message.rate = (object.rate !== undefined && object.rate !== null)
9392
+ ? BurnRateMeasures.fromPartial(object.rate)
9393
+ : undefined;
9394
+ return message;
9395
+ },
9396
+ };
9348
9397
 
9349
- message.toolCalls = longToNumber(reader.uint64());
9350
- continue;
9351
- }
9352
- case 8: {
9353
- if (tag !== 64) {
9354
- break;
9355
- }
9398
+ function createBaseBurnRateMeasures(): BurnRateMeasures {
9399
+ return { usdPerHour: 0, tokensPerMin: 0, modelCalls: 0, costUnavailableCount: 0, usageUnavailableCount: 0 };
9400
+ }
9356
9401
 
9357
- message.userMessages = longToNumber(reader.uint64());
9358
- continue;
9359
- }
9360
- case 9: {
9361
- if (tag !== 72) {
9362
- break;
9363
- }
9402
+ export const BurnRateMeasures: MessageFns<BurnRateMeasures> = {
9403
+ encode(message: BurnRateMeasures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9404
+ if (message.usdPerHour !== 0) {
9405
+ writer.uint32(9).double(message.usdPerHour);
9406
+ }
9407
+ if (message.tokensPerMin !== 0) {
9408
+ writer.uint32(17).double(message.tokensPerMin);
9409
+ }
9410
+ if (message.modelCalls !== 0) {
9411
+ writer.uint32(24).uint64(message.modelCalls);
9412
+ }
9413
+ if (message.costUnavailableCount !== 0) {
9414
+ writer.uint32(32).uint64(message.costUnavailableCount);
9415
+ }
9416
+ if (message.usageUnavailableCount !== 0) {
9417
+ writer.uint32(40).uint64(message.usageUnavailableCount);
9418
+ }
9419
+ return writer;
9420
+ },
9364
9421
 
9365
- message.filesTouched = longToNumber(reader.uint64());
9366
- continue;
9367
- }
9368
- case 10: {
9369
- if (tag !== 80) {
9422
+ decode(input: BinaryReader | Uint8Array, length?: number): BurnRateMeasures {
9423
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9424
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9425
+ if (previousRecursionDepth >= 100) {
9426
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9427
+ }
9428
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9429
+ try {
9430
+ const end = length === undefined ? reader.len : reader.pos + length;
9431
+ const message = createBaseBurnRateMeasures();
9432
+ while (reader.pos < end) {
9433
+ const tag = reader.uint32();
9434
+ switch (tag >>> 3) {
9435
+ case 1: {
9436
+ if (tag !== 9) {
9370
9437
  break;
9371
9438
  }
9372
9439
 
9373
- message.commits = longToNumber(reader.uint64());
9440
+ message.usdPerHour = reader.double();
9374
9441
  continue;
9375
9442
  }
9376
- case 11: {
9377
- if (tag !== 88) {
9443
+ case 2: {
9444
+ if (tag !== 17) {
9378
9445
  break;
9379
9446
  }
9380
9447
 
9381
- message.gitPushes = longToNumber(reader.uint64());
9448
+ message.tokensPerMin = reader.double();
9382
9449
  continue;
9383
9450
  }
9384
- case 12: {
9385
- if (tag !== 96) {
9451
+ case 3: {
9452
+ if (tag !== 24) {
9386
9453
  break;
9387
9454
  }
9388
9455
 
9389
- message.pullRequestsCreated = longToNumber(reader.uint64());
9456
+ message.modelCalls = longToNumber(reader.uint64());
9390
9457
  continue;
9391
9458
  }
9392
- case 13: {
9393
- if (tag !== 104) {
9459
+ case 4: {
9460
+ if (tag !== 32) {
9394
9461
  break;
9395
9462
  }
9396
9463
 
9397
- message.pullRequestsMerged = longToNumber(reader.uint64());
9464
+ message.costUnavailableCount = longToNumber(reader.uint64());
9398
9465
  continue;
9399
9466
  }
9400
- case 14: {
9401
- if (tag !== 112) {
9467
+ case 5: {
9468
+ if (tag !== 40) {
9402
9469
  break;
9403
9470
  }
9404
9471
 
9405
- message.branchesCreated = longToNumber(reader.uint64());
9472
+ message.usageUnavailableCount = longToNumber(reader.uint64());
9406
9473
  continue;
9407
9474
  }
9408
9475
  }
@@ -9417,169 +9484,92 @@ export const DailyActivityMeasures: MessageFns<DailyActivityMeasures> = {
9417
9484
  }
9418
9485
  },
9419
9486
 
9420
- fromJSON(object: any): DailyActivityMeasures {
9487
+ fromJSON(object: any): BurnRateMeasures {
9421
9488
  return {
9422
- inputTokens: isSet(object.inputTokens)
9423
- ? globalThis.Number(object.inputTokens)
9424
- : isSet(object.input_tokens)
9425
- ? globalThis.Number(object.input_tokens)
9426
- : 0,
9427
- outputTokens: isSet(object.outputTokens)
9428
- ? globalThis.Number(object.outputTokens)
9429
- : isSet(object.output_tokens)
9430
- ? globalThis.Number(object.output_tokens)
9431
- : 0,
9432
- cacheReadTokens: isSet(object.cacheReadTokens)
9433
- ? globalThis.Number(object.cacheReadTokens)
9434
- : isSet(object.cache_read_tokens)
9435
- ? globalThis.Number(object.cache_read_tokens)
9436
- : 0,
9437
- cacheWriteTokens: isSet(object.cacheWriteTokens)
9438
- ? globalThis.Number(object.cacheWriteTokens)
9439
- : isSet(object.cache_write_tokens)
9440
- ? globalThis.Number(object.cache_write_tokens)
9489
+ usdPerHour: isSet(object.usdPerHour)
9490
+ ? globalThis.Number(object.usdPerHour)
9491
+ : isSet(object.usd_per_hour)
9492
+ ? globalThis.Number(object.usd_per_hour)
9441
9493
  : 0,
9442
- costUsd: isSet(object.costUsd)
9443
- ? globalThis.Number(object.costUsd)
9444
- : isSet(object.cost_usd)
9445
- ? globalThis.Number(object.cost_usd)
9494
+ tokensPerMin: isSet(object.tokensPerMin)
9495
+ ? globalThis.Number(object.tokensPerMin)
9496
+ : isSet(object.tokens_per_min)
9497
+ ? globalThis.Number(object.tokens_per_min)
9446
9498
  : 0,
9447
9499
  modelCalls: isSet(object.modelCalls)
9448
9500
  ? globalThis.Number(object.modelCalls)
9449
9501
  : isSet(object.model_calls)
9450
9502
  ? globalThis.Number(object.model_calls)
9451
9503
  : 0,
9452
- toolCalls: isSet(object.toolCalls)
9453
- ? globalThis.Number(object.toolCalls)
9454
- : isSet(object.tool_calls)
9455
- ? globalThis.Number(object.tool_calls)
9456
- : 0,
9457
- userMessages: isSet(object.userMessages)
9458
- ? globalThis.Number(object.userMessages)
9459
- : isSet(object.user_messages)
9460
- ? globalThis.Number(object.user_messages)
9461
- : 0,
9462
- filesTouched: isSet(object.filesTouched)
9463
- ? globalThis.Number(object.filesTouched)
9464
- : isSet(object.files_touched)
9465
- ? globalThis.Number(object.files_touched)
9504
+ costUnavailableCount: isSet(object.costUnavailableCount)
9505
+ ? globalThis.Number(object.costUnavailableCount)
9506
+ : isSet(object.cost_unavailable_count)
9507
+ ? globalThis.Number(object.cost_unavailable_count)
9466
9508
  : 0,
9467
- commits: isSet(object.commits) ? globalThis.Number(object.commits) : 0,
9468
- gitPushes: isSet(object.gitPushes)
9469
- ? globalThis.Number(object.gitPushes)
9470
- : isSet(object.git_pushes)
9471
- ? globalThis.Number(object.git_pushes)
9472
- : 0,
9473
- pullRequestsCreated: isSet(object.pullRequestsCreated)
9474
- ? globalThis.Number(object.pullRequestsCreated)
9475
- : isSet(object.pull_requests_created)
9476
- ? globalThis.Number(object.pull_requests_created)
9477
- : 0,
9478
- pullRequestsMerged: isSet(object.pullRequestsMerged)
9479
- ? globalThis.Number(object.pullRequestsMerged)
9480
- : isSet(object.pull_requests_merged)
9481
- ? globalThis.Number(object.pull_requests_merged)
9482
- : 0,
9483
- branchesCreated: isSet(object.branchesCreated)
9484
- ? globalThis.Number(object.branchesCreated)
9485
- : isSet(object.branches_created)
9486
- ? globalThis.Number(object.branches_created)
9509
+ usageUnavailableCount: isSet(object.usageUnavailableCount)
9510
+ ? globalThis.Number(object.usageUnavailableCount)
9511
+ : isSet(object.usage_unavailable_count)
9512
+ ? globalThis.Number(object.usage_unavailable_count)
9487
9513
  : 0,
9488
9514
  };
9489
9515
  },
9490
9516
 
9491
- toJSON(message: DailyActivityMeasures): unknown {
9517
+ toJSON(message: BurnRateMeasures): unknown {
9492
9518
  const obj: any = {};
9493
- if (message.inputTokens !== 0) {
9494
- obj.inputTokens = Math.round(message.inputTokens);
9495
- }
9496
- if (message.outputTokens !== 0) {
9497
- obj.outputTokens = Math.round(message.outputTokens);
9498
- }
9499
- if (message.cacheReadTokens !== 0) {
9500
- obj.cacheReadTokens = Math.round(message.cacheReadTokens);
9519
+ if (message.usdPerHour !== 0) {
9520
+ obj.usdPerHour = message.usdPerHour;
9501
9521
  }
9502
- if (message.cacheWriteTokens !== 0) {
9503
- obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
9504
- }
9505
- if (message.costUsd !== 0) {
9506
- obj.costUsd = message.costUsd;
9522
+ if (message.tokensPerMin !== 0) {
9523
+ obj.tokensPerMin = message.tokensPerMin;
9507
9524
  }
9508
9525
  if (message.modelCalls !== 0) {
9509
9526
  obj.modelCalls = Math.round(message.modelCalls);
9510
9527
  }
9511
- if (message.toolCalls !== 0) {
9512
- obj.toolCalls = Math.round(message.toolCalls);
9513
- }
9514
- if (message.userMessages !== 0) {
9515
- obj.userMessages = Math.round(message.userMessages);
9516
- }
9517
- if (message.filesTouched !== 0) {
9518
- obj.filesTouched = Math.round(message.filesTouched);
9519
- }
9520
- if (message.commits !== 0) {
9521
- obj.commits = Math.round(message.commits);
9522
- }
9523
- if (message.gitPushes !== 0) {
9524
- obj.gitPushes = Math.round(message.gitPushes);
9525
- }
9526
- if (message.pullRequestsCreated !== 0) {
9527
- obj.pullRequestsCreated = Math.round(message.pullRequestsCreated);
9528
- }
9529
- if (message.pullRequestsMerged !== 0) {
9530
- obj.pullRequestsMerged = Math.round(message.pullRequestsMerged);
9528
+ if (message.costUnavailableCount !== 0) {
9529
+ obj.costUnavailableCount = Math.round(message.costUnavailableCount);
9531
9530
  }
9532
- if (message.branchesCreated !== 0) {
9533
- obj.branchesCreated = Math.round(message.branchesCreated);
9531
+ if (message.usageUnavailableCount !== 0) {
9532
+ obj.usageUnavailableCount = Math.round(message.usageUnavailableCount);
9534
9533
  }
9535
9534
  return obj;
9536
9535
  },
9537
9536
 
9538
- create<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(base?: I): DailyActivityMeasures {
9539
- return DailyActivityMeasures.fromPartial(base ?? ({} as any));
9537
+ create<I extends Exact<DeepPartial<BurnRateMeasures>, I>>(base?: I): BurnRateMeasures {
9538
+ return BurnRateMeasures.fromPartial(base ?? ({} as any));
9540
9539
  },
9541
- fromPartial<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(object: I): DailyActivityMeasures {
9542
- const message = createBaseDailyActivityMeasures();
9543
- message.inputTokens = object.inputTokens ?? 0;
9544
- message.outputTokens = object.outputTokens ?? 0;
9545
- message.cacheReadTokens = object.cacheReadTokens ?? 0;
9546
- message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
9547
- message.costUsd = object.costUsd ?? 0;
9540
+ fromPartial<I extends Exact<DeepPartial<BurnRateMeasures>, I>>(object: I): BurnRateMeasures {
9541
+ const message = createBaseBurnRateMeasures();
9542
+ message.usdPerHour = object.usdPerHour ?? 0;
9543
+ message.tokensPerMin = object.tokensPerMin ?? 0;
9548
9544
  message.modelCalls = object.modelCalls ?? 0;
9549
- message.toolCalls = object.toolCalls ?? 0;
9550
- message.userMessages = object.userMessages ?? 0;
9551
- message.filesTouched = object.filesTouched ?? 0;
9552
- message.commits = object.commits ?? 0;
9553
- message.gitPushes = object.gitPushes ?? 0;
9554
- message.pullRequestsCreated = object.pullRequestsCreated ?? 0;
9555
- message.pullRequestsMerged = object.pullRequestsMerged ?? 0;
9556
- message.branchesCreated = object.branchesCreated ?? 0;
9545
+ message.costUnavailableCount = object.costUnavailableCount ?? 0;
9546
+ message.usageUnavailableCount = object.usageUnavailableCount ?? 0;
9557
9547
  return message;
9558
9548
  },
9559
9549
  };
9560
9550
 
9561
- function createBaseActivityRhythmRequest(): ActivityRhythmRequest {
9562
- return { organizationId: "", projectId: "", timeWindow: 0, timeZone: "" };
9551
+ function createBaseDailyActivityRequest(): DailyActivityRequest {
9552
+ return { organizationId: "", projectId: "", startDate: "", endDate: "" };
9563
9553
  }
9564
9554
 
9565
- export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9566
- encode(message: ActivityRhythmRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9555
+ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
9556
+ encode(message: DailyActivityRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9567
9557
  if (message.organizationId !== "") {
9568
9558
  writer.uint32(10).string(message.organizationId);
9569
9559
  }
9570
9560
  if (message.projectId !== "") {
9571
9561
  writer.uint32(18).string(message.projectId);
9572
9562
  }
9573
- if (message.timeWindow !== 0) {
9574
- writer.uint32(24).int32(message.timeWindow);
9563
+ if (message.startDate !== "") {
9564
+ writer.uint32(26).string(message.startDate);
9575
9565
  }
9576
- if (message.timeZone !== "") {
9577
- writer.uint32(34).string(message.timeZone);
9566
+ if (message.endDate !== "") {
9567
+ writer.uint32(34).string(message.endDate);
9578
9568
  }
9579
9569
  return writer;
9580
9570
  },
9581
9571
 
9582
- decode(input: BinaryReader | Uint8Array, length?: number): ActivityRhythmRequest {
9572
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityRequest {
9583
9573
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9584
9574
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9585
9575
  if (previousRecursionDepth >= 100) {
@@ -9588,7 +9578,7 @@ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9588
9578
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9589
9579
  try {
9590
9580
  const end = length === undefined ? reader.len : reader.pos + length;
9591
- const message = createBaseActivityRhythmRequest();
9581
+ const message = createBaseDailyActivityRequest();
9592
9582
  while (reader.pos < end) {
9593
9583
  const tag = reader.uint32();
9594
9584
  switch (tag >>> 3) {
@@ -9609,11 +9599,11 @@ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9609
9599
  continue;
9610
9600
  }
9611
9601
  case 3: {
9612
- if (tag !== 24) {
9602
+ if (tag !== 26) {
9613
9603
  break;
9614
9604
  }
9615
9605
 
9616
- message.timeWindow = reader.int32() as any;
9606
+ message.startDate = reader.string();
9617
9607
  continue;
9618
9608
  }
9619
9609
  case 4: {
@@ -9621,7 +9611,7 @@ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9621
9611
  break;
9622
9612
  }
9623
9613
 
9624
- message.timeZone = reader.string();
9614
+ message.endDate = reader.string();
9625
9615
  continue;
9626
9616
  }
9627
9617
  }
@@ -9636,7 +9626,7 @@ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9636
9626
  }
9637
9627
  },
9638
9628
 
9639
- fromJSON(object: any): ActivityRhythmRequest {
9629
+ fromJSON(object: any): DailyActivityRequest {
9640
9630
  return {
9641
9631
  organizationId: isSet(object.organizationId)
9642
9632
  ? globalThis.String(object.organizationId)
@@ -9648,20 +9638,20 @@ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9648
9638
  : isSet(object.project_id)
9649
9639
  ? globalThis.String(object.project_id)
9650
9640
  : "",
9651
- timeWindow: isSet(object.timeWindow)
9652
- ? analyticsTimeWindowFromJSON(object.timeWindow)
9653
- : isSet(object.time_window)
9654
- ? analyticsTimeWindowFromJSON(object.time_window)
9655
- : 0,
9656
- timeZone: isSet(object.timeZone)
9657
- ? globalThis.String(object.timeZone)
9658
- : isSet(object.time_zone)
9659
- ? globalThis.String(object.time_zone)
9641
+ startDate: isSet(object.startDate)
9642
+ ? globalThis.String(object.startDate)
9643
+ : isSet(object.start_date)
9644
+ ? globalThis.String(object.start_date)
9645
+ : "",
9646
+ endDate: isSet(object.endDate)
9647
+ ? globalThis.String(object.endDate)
9648
+ : isSet(object.end_date)
9649
+ ? globalThis.String(object.end_date)
9660
9650
  : "",
9661
9651
  };
9662
9652
  },
9663
9653
 
9664
- toJSON(message: ActivityRhythmRequest): unknown {
9654
+ toJSON(message: DailyActivityRequest): unknown {
9665
9655
  const obj: any = {};
9666
9656
  if (message.organizationId !== "") {
9667
9657
  obj.organizationId = message.organizationId;
@@ -9669,53 +9659,56 @@ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
9669
9659
  if (message.projectId !== "") {
9670
9660
  obj.projectId = message.projectId;
9671
9661
  }
9672
- if (message.timeWindow !== 0) {
9673
- obj.timeWindow = analyticsTimeWindowToJSON(message.timeWindow);
9662
+ if (message.startDate !== "") {
9663
+ obj.startDate = message.startDate;
9674
9664
  }
9675
- if (message.timeZone !== "") {
9676
- obj.timeZone = message.timeZone;
9665
+ if (message.endDate !== "") {
9666
+ obj.endDate = message.endDate;
9677
9667
  }
9678
9668
  return obj;
9679
9669
  },
9680
9670
 
9681
- create<I extends Exact<DeepPartial<ActivityRhythmRequest>, I>>(base?: I): ActivityRhythmRequest {
9682
- return ActivityRhythmRequest.fromPartial(base ?? ({} as any));
9671
+ create<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(base?: I): DailyActivityRequest {
9672
+ return DailyActivityRequest.fromPartial(base ?? ({} as any));
9683
9673
  },
9684
- fromPartial<I extends Exact<DeepPartial<ActivityRhythmRequest>, I>>(object: I): ActivityRhythmRequest {
9685
- const message = createBaseActivityRhythmRequest();
9674
+ fromPartial<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(object: I): DailyActivityRequest {
9675
+ const message = createBaseDailyActivityRequest();
9686
9676
  message.organizationId = object.organizationId ?? "";
9687
9677
  message.projectId = object.projectId ?? "";
9688
- message.timeWindow = object.timeWindow ?? 0;
9689
- message.timeZone = object.timeZone ?? "";
9678
+ message.startDate = object.startDate ?? "";
9679
+ message.endDate = object.endDate ?? "";
9690
9680
  return message;
9691
9681
  },
9692
9682
  };
9693
9683
 
9694
- function createBaseActivityRhythm(): ActivityRhythm {
9695
- return { buckets: [], windowStart: undefined, windowEnd: undefined, asOf: undefined, timeZone: "" };
9684
+ function createBaseDailyActivity(): DailyActivity {
9685
+ return { days: [], startDate: "", endDate: "", coverageStart: "", today: "", asOf: undefined };
9696
9686
  }
9697
9687
 
9698
- export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9699
- encode(message: ActivityRhythm, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9700
- for (const v of message.buckets) {
9701
- ActivityRhythmBucket.encode(v!, writer.uint32(10).fork()).join();
9688
+ export const DailyActivity: MessageFns<DailyActivity> = {
9689
+ encode(message: DailyActivity, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9690
+ for (const v of message.days) {
9691
+ DailyActivityDay.encode(v!, writer.uint32(10).fork()).join();
9702
9692
  }
9703
- if (message.windowStart !== undefined) {
9704
- Timestamp.encode(toTimestamp(message.windowStart), writer.uint32(18).fork()).join();
9693
+ if (message.startDate !== "") {
9694
+ writer.uint32(18).string(message.startDate);
9705
9695
  }
9706
- if (message.windowEnd !== undefined) {
9707
- Timestamp.encode(toTimestamp(message.windowEnd), writer.uint32(26).fork()).join();
9696
+ if (message.endDate !== "") {
9697
+ writer.uint32(26).string(message.endDate);
9708
9698
  }
9709
- if (message.asOf !== undefined) {
9710
- Timestamp.encode(toTimestamp(message.asOf), writer.uint32(34).fork()).join();
9699
+ if (message.coverageStart !== "") {
9700
+ writer.uint32(34).string(message.coverageStart);
9711
9701
  }
9712
- if (message.timeZone !== "") {
9713
- writer.uint32(42).string(message.timeZone);
9702
+ if (message.today !== "") {
9703
+ writer.uint32(42).string(message.today);
9704
+ }
9705
+ if (message.asOf !== undefined) {
9706
+ Timestamp.encode(toTimestamp(message.asOf), writer.uint32(50).fork()).join();
9714
9707
  }
9715
9708
  return writer;
9716
9709
  },
9717
9710
 
9718
- decode(input: BinaryReader | Uint8Array, length?: number): ActivityRhythm {
9711
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivity {
9719
9712
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9720
9713
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9721
9714
  if (previousRecursionDepth >= 100) {
@@ -9724,7 +9717,7 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9724
9717
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9725
9718
  try {
9726
9719
  const end = length === undefined ? reader.len : reader.pos + length;
9727
- const message = createBaseActivityRhythm();
9720
+ const message = createBaseDailyActivity();
9728
9721
  while (reader.pos < end) {
9729
9722
  const tag = reader.uint32();
9730
9723
  switch (tag >>> 3) {
@@ -9733,7 +9726,7 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9733
9726
  break;
9734
9727
  }
9735
9728
 
9736
- message.buckets.push(ActivityRhythmBucket.decode(reader, reader.uint32()));
9729
+ message.days.push(DailyActivityDay.decode(reader, reader.uint32()));
9737
9730
  continue;
9738
9731
  }
9739
9732
  case 2: {
@@ -9741,7 +9734,7 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9741
9734
  break;
9742
9735
  }
9743
9736
 
9744
- message.windowStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9737
+ message.startDate = reader.string();
9745
9738
  continue;
9746
9739
  }
9747
9740
  case 3: {
@@ -9749,7 +9742,7 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9749
9742
  break;
9750
9743
  }
9751
9744
 
9752
- message.windowEnd = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9745
+ message.endDate = reader.string();
9753
9746
  continue;
9754
9747
  }
9755
9748
  case 4: {
@@ -9757,7 +9750,7 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9757
9750
  break;
9758
9751
  }
9759
9752
 
9760
- message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9753
+ message.coverageStart = reader.string();
9761
9754
  continue;
9762
9755
  }
9763
9756
  case 5: {
@@ -9765,7 +9758,15 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9765
9758
  break;
9766
9759
  }
9767
9760
 
9768
- message.timeZone = reader.string();
9761
+ message.today = reader.string();
9762
+ continue;
9763
+ }
9764
+ case 6: {
9765
+ if (tag !== 50) {
9766
+ break;
9767
+ }
9768
+
9769
+ message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9769
9770
  continue;
9770
9771
  }
9771
9772
  }
@@ -9780,103 +9781,212 @@ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
9780
9781
  }
9781
9782
  },
9782
9783
 
9783
- fromJSON(object: any): ActivityRhythm {
9784
+ fromJSON(object: any): DailyActivity {
9784
9785
  return {
9785
- buckets: globalThis.Array.isArray(object?.buckets)
9786
- ? object.buckets.map((e: any) => ActivityRhythmBucket.fromJSON(e))
9787
- : [],
9788
- windowStart: isSet(object.windowStart)
9789
- ? fromJsonTimestamp(object.windowStart)
9790
- : isSet(object.window_start)
9791
- ? fromJsonTimestamp(object.window_start)
9792
- : undefined,
9793
- windowEnd: isSet(object.windowEnd)
9794
- ? fromJsonTimestamp(object.windowEnd)
9795
- : isSet(object.window_end)
9796
- ? fromJsonTimestamp(object.window_end)
9797
- : undefined,
9786
+ days: globalThis.Array.isArray(object?.days) ? object.days.map((e: any) => DailyActivityDay.fromJSON(e)) : [],
9787
+ startDate: isSet(object.startDate)
9788
+ ? globalThis.String(object.startDate)
9789
+ : isSet(object.start_date)
9790
+ ? globalThis.String(object.start_date)
9791
+ : "",
9792
+ endDate: isSet(object.endDate)
9793
+ ? globalThis.String(object.endDate)
9794
+ : isSet(object.end_date)
9795
+ ? globalThis.String(object.end_date)
9796
+ : "",
9797
+ coverageStart: isSet(object.coverageStart)
9798
+ ? globalThis.String(object.coverageStart)
9799
+ : isSet(object.coverage_start)
9800
+ ? globalThis.String(object.coverage_start)
9801
+ : "",
9802
+ today: isSet(object.today) ? globalThis.String(object.today) : "",
9798
9803
  asOf: isSet(object.asOf)
9799
9804
  ? fromJsonTimestamp(object.asOf)
9800
9805
  : isSet(object.as_of)
9801
9806
  ? fromJsonTimestamp(object.as_of)
9802
9807
  : undefined,
9803
- timeZone: isSet(object.timeZone)
9804
- ? globalThis.String(object.timeZone)
9805
- : isSet(object.time_zone)
9806
- ? globalThis.String(object.time_zone)
9807
- : "",
9808
9808
  };
9809
9809
  },
9810
9810
 
9811
- toJSON(message: ActivityRhythm): unknown {
9811
+ toJSON(message: DailyActivity): unknown {
9812
9812
  const obj: any = {};
9813
- if (message.buckets?.length) {
9814
- obj.buckets = message.buckets.map((e) => ActivityRhythmBucket.toJSON(e));
9813
+ if (message.days?.length) {
9814
+ obj.days = message.days.map((e) => DailyActivityDay.toJSON(e));
9815
9815
  }
9816
- if (message.windowStart !== undefined) {
9817
- obj.windowStart = message.windowStart.toISOString();
9816
+ if (message.startDate !== "") {
9817
+ obj.startDate = message.startDate;
9818
9818
  }
9819
- if (message.windowEnd !== undefined) {
9820
- obj.windowEnd = message.windowEnd.toISOString();
9819
+ if (message.endDate !== "") {
9820
+ obj.endDate = message.endDate;
9821
+ }
9822
+ if (message.coverageStart !== "") {
9823
+ obj.coverageStart = message.coverageStart;
9824
+ }
9825
+ if (message.today !== "") {
9826
+ obj.today = message.today;
9821
9827
  }
9822
9828
  if (message.asOf !== undefined) {
9823
9829
  obj.asOf = message.asOf.toISOString();
9824
9830
  }
9825
- if (message.timeZone !== "") {
9826
- obj.timeZone = message.timeZone;
9827
- }
9828
9831
  return obj;
9829
9832
  },
9830
9833
 
9831
- create<I extends Exact<DeepPartial<ActivityRhythm>, I>>(base?: I): ActivityRhythm {
9832
- return ActivityRhythm.fromPartial(base ?? ({} as any));
9834
+ create<I extends Exact<DeepPartial<DailyActivity>, I>>(base?: I): DailyActivity {
9835
+ return DailyActivity.fromPartial(base ?? ({} as any));
9833
9836
  },
9834
- fromPartial<I extends Exact<DeepPartial<ActivityRhythm>, I>>(object: I): ActivityRhythm {
9835
- const message = createBaseActivityRhythm();
9836
- message.buckets = object.buckets?.map((e) => ActivityRhythmBucket.fromPartial(e)) || [];
9837
- message.windowStart = object.windowStart ?? undefined;
9838
- message.windowEnd = object.windowEnd ?? undefined;
9837
+ fromPartial<I extends Exact<DeepPartial<DailyActivity>, I>>(object: I): DailyActivity {
9838
+ const message = createBaseDailyActivity();
9839
+ message.days = object.days?.map((e) => DailyActivityDay.fromPartial(e)) || [];
9840
+ message.startDate = object.startDate ?? "";
9841
+ message.endDate = object.endDate ?? "";
9842
+ message.coverageStart = object.coverageStart ?? "";
9843
+ message.today = object.today ?? "";
9839
9844
  message.asOf = object.asOf ?? undefined;
9840
- message.timeZone = object.timeZone ?? "";
9841
9845
  return message;
9842
9846
  },
9843
9847
  };
9844
9848
 
9845
- function createBaseActivityRhythmBucket(): ActivityRhythmBucket {
9849
+ function createBaseDailyActivityDay(): DailyActivityDay {
9850
+ return { day: "", measures: undefined, provisional: false };
9851
+ }
9852
+
9853
+ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9854
+ encode(message: DailyActivityDay, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9855
+ if (message.day !== "") {
9856
+ writer.uint32(10).string(message.day);
9857
+ }
9858
+ if (message.measures !== undefined) {
9859
+ DailyActivityMeasures.encode(message.measures, writer.uint32(18).fork()).join();
9860
+ }
9861
+ if (message.provisional !== false) {
9862
+ writer.uint32(24).bool(message.provisional);
9863
+ }
9864
+ return writer;
9865
+ },
9866
+
9867
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityDay {
9868
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9869
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9870
+ if (previousRecursionDepth >= 100) {
9871
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9872
+ }
9873
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9874
+ try {
9875
+ const end = length === undefined ? reader.len : reader.pos + length;
9876
+ const message = createBaseDailyActivityDay();
9877
+ while (reader.pos < end) {
9878
+ const tag = reader.uint32();
9879
+ switch (tag >>> 3) {
9880
+ case 1: {
9881
+ if (tag !== 10) {
9882
+ break;
9883
+ }
9884
+
9885
+ message.day = reader.string();
9886
+ continue;
9887
+ }
9888
+ case 2: {
9889
+ if (tag !== 18) {
9890
+ break;
9891
+ }
9892
+
9893
+ message.measures = DailyActivityMeasures.decode(reader, reader.uint32());
9894
+ continue;
9895
+ }
9896
+ case 3: {
9897
+ if (tag !== 24) {
9898
+ break;
9899
+ }
9900
+
9901
+ message.provisional = reader.bool();
9902
+ continue;
9903
+ }
9904
+ }
9905
+ if ((tag & 7) === 4 || tag === 0) {
9906
+ break;
9907
+ }
9908
+ reader.skip(tag & 7);
9909
+ }
9910
+ return message;
9911
+ } finally {
9912
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9913
+ }
9914
+ },
9915
+
9916
+ fromJSON(object: any): DailyActivityDay {
9917
+ return {
9918
+ day: isSet(object.day) ? globalThis.String(object.day) : "",
9919
+ measures: isSet(object.measures) ? DailyActivityMeasures.fromJSON(object.measures) : undefined,
9920
+ provisional: isSet(object.provisional) ? globalThis.Boolean(object.provisional) : false,
9921
+ };
9922
+ },
9923
+
9924
+ toJSON(message: DailyActivityDay): unknown {
9925
+ const obj: any = {};
9926
+ if (message.day !== "") {
9927
+ obj.day = message.day;
9928
+ }
9929
+ if (message.measures !== undefined) {
9930
+ obj.measures = DailyActivityMeasures.toJSON(message.measures);
9931
+ }
9932
+ if (message.provisional !== false) {
9933
+ obj.provisional = message.provisional;
9934
+ }
9935
+ return obj;
9936
+ },
9937
+
9938
+ create<I extends Exact<DeepPartial<DailyActivityDay>, I>>(base?: I): DailyActivityDay {
9939
+ return DailyActivityDay.fromPartial(base ?? ({} as any));
9940
+ },
9941
+ fromPartial<I extends Exact<DeepPartial<DailyActivityDay>, I>>(object: I): DailyActivityDay {
9942
+ const message = createBaseDailyActivityDay();
9943
+ message.day = object.day ?? "";
9944
+ message.measures = (object.measures !== undefined && object.measures !== null)
9945
+ ? DailyActivityMeasures.fromPartial(object.measures)
9946
+ : undefined;
9947
+ message.provisional = object.provisional ?? false;
9948
+ return message;
9949
+ },
9950
+ };
9951
+
9952
+ function createBaseDailyActivityMeasures(): DailyActivityMeasures {
9846
9953
  return {
9847
- dayOfWeek: 0,
9848
- hourOfDay: 0,
9849
- eventCount: 0,
9850
- modelUsage: undefined,
9851
- usageUnavailableCount: 0,
9852
- costUnavailableCount: 0,
9954
+ inputTokens: 0,
9955
+ outputTokens: 0,
9956
+ cacheReadTokens: 0,
9957
+ cacheWriteTokens: 0,
9958
+ costUsd: 0,
9959
+ modelCalls: 0,
9853
9960
  toolCalls: 0,
9854
9961
  userMessages: 0,
9855
- sessions: 0,
9856
- activeUsers: 0,
9857
- topTool: "",
9962
+ filesTouched: 0,
9963
+ commits: 0,
9964
+ gitPushes: 0,
9965
+ pullRequestsCreated: 0,
9966
+ pullRequestsMerged: 0,
9967
+ branchesCreated: 0,
9858
9968
  };
9859
9969
  }
9860
9970
 
9861
- export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9862
- encode(message: ActivityRhythmBucket, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9863
- if (message.dayOfWeek !== 0) {
9864
- writer.uint32(8).uint32(message.dayOfWeek);
9971
+ export const DailyActivityMeasures: MessageFns<DailyActivityMeasures> = {
9972
+ encode(message: DailyActivityMeasures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9973
+ if (message.inputTokens !== 0) {
9974
+ writer.uint32(8).uint64(message.inputTokens);
9865
9975
  }
9866
- if (message.hourOfDay !== 0) {
9867
- writer.uint32(16).uint32(message.hourOfDay);
9976
+ if (message.outputTokens !== 0) {
9977
+ writer.uint32(16).uint64(message.outputTokens);
9868
9978
  }
9869
- if (message.eventCount !== 0) {
9870
- writer.uint32(24).uint64(message.eventCount);
9979
+ if (message.cacheReadTokens !== 0) {
9980
+ writer.uint32(24).uint64(message.cacheReadTokens);
9871
9981
  }
9872
- if (message.modelUsage !== undefined) {
9873
- TokenActivityMeasures.encode(message.modelUsage, writer.uint32(34).fork()).join();
9982
+ if (message.cacheWriteTokens !== 0) {
9983
+ writer.uint32(32).uint64(message.cacheWriteTokens);
9874
9984
  }
9875
- if (message.usageUnavailableCount !== 0) {
9876
- writer.uint32(40).uint64(message.usageUnavailableCount);
9985
+ if (message.costUsd !== 0) {
9986
+ writer.uint32(41).double(message.costUsd);
9877
9987
  }
9878
- if (message.costUnavailableCount !== 0) {
9879
- writer.uint32(48).uint64(message.costUnavailableCount);
9988
+ if (message.modelCalls !== 0) {
9989
+ writer.uint32(48).uint64(message.modelCalls);
9880
9990
  }
9881
9991
  if (message.toolCalls !== 0) {
9882
9992
  writer.uint32(56).uint64(message.toolCalls);
@@ -9884,19 +9994,28 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9884
9994
  if (message.userMessages !== 0) {
9885
9995
  writer.uint32(64).uint64(message.userMessages);
9886
9996
  }
9887
- if (message.sessions !== 0) {
9888
- writer.uint32(72).uint64(message.sessions);
9997
+ if (message.filesTouched !== 0) {
9998
+ writer.uint32(72).uint64(message.filesTouched);
9889
9999
  }
9890
- if (message.activeUsers !== 0) {
9891
- writer.uint32(80).uint64(message.activeUsers);
10000
+ if (message.commits !== 0) {
10001
+ writer.uint32(80).uint64(message.commits);
9892
10002
  }
9893
- if (message.topTool !== "") {
9894
- writer.uint32(90).string(message.topTool);
10003
+ if (message.gitPushes !== 0) {
10004
+ writer.uint32(88).uint64(message.gitPushes);
10005
+ }
10006
+ if (message.pullRequestsCreated !== 0) {
10007
+ writer.uint32(96).uint64(message.pullRequestsCreated);
10008
+ }
10009
+ if (message.pullRequestsMerged !== 0) {
10010
+ writer.uint32(104).uint64(message.pullRequestsMerged);
10011
+ }
10012
+ if (message.branchesCreated !== 0) {
10013
+ writer.uint32(112).uint64(message.branchesCreated);
9895
10014
  }
9896
10015
  return writer;
9897
10016
  },
9898
10017
 
9899
- decode(input: BinaryReader | Uint8Array, length?: number): ActivityRhythmBucket {
10018
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityMeasures {
9900
10019
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9901
10020
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9902
10021
  if (previousRecursionDepth >= 100) {
@@ -9905,7 +10024,7 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9905
10024
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9906
10025
  try {
9907
10026
  const end = length === undefined ? reader.len : reader.pos + length;
9908
- const message = createBaseActivityRhythmBucket();
10027
+ const message = createBaseDailyActivityMeasures();
9909
10028
  while (reader.pos < end) {
9910
10029
  const tag = reader.uint32();
9911
10030
  switch (tag >>> 3) {
@@ -9914,7 +10033,7 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9914
10033
  break;
9915
10034
  }
9916
10035
 
9917
- message.dayOfWeek = reader.uint32();
10036
+ message.inputTokens = longToNumber(reader.uint64());
9918
10037
  continue;
9919
10038
  }
9920
10039
  case 2: {
@@ -9922,7 +10041,7 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9922
10041
  break;
9923
10042
  }
9924
10043
 
9925
- message.hourOfDay = reader.uint32();
10044
+ message.outputTokens = longToNumber(reader.uint64());
9926
10045
  continue;
9927
10046
  }
9928
10047
  case 3: {
@@ -9930,23 +10049,23 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9930
10049
  break;
9931
10050
  }
9932
10051
 
9933
- message.eventCount = longToNumber(reader.uint64());
10052
+ message.cacheReadTokens = longToNumber(reader.uint64());
9934
10053
  continue;
9935
10054
  }
9936
10055
  case 4: {
9937
- if (tag !== 34) {
10056
+ if (tag !== 32) {
9938
10057
  break;
9939
10058
  }
9940
10059
 
9941
- message.modelUsage = TokenActivityMeasures.decode(reader, reader.uint32());
10060
+ message.cacheWriteTokens = longToNumber(reader.uint64());
9942
10061
  continue;
9943
10062
  }
9944
10063
  case 5: {
9945
- if (tag !== 40) {
10064
+ if (tag !== 41) {
9946
10065
  break;
9947
10066
  }
9948
10067
 
9949
- message.usageUnavailableCount = longToNumber(reader.uint64());
10068
+ message.costUsd = reader.double();
9950
10069
  continue;
9951
10070
  }
9952
10071
  case 6: {
@@ -9954,7 +10073,7 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9954
10073
  break;
9955
10074
  }
9956
10075
 
9957
- message.costUnavailableCount = longToNumber(reader.uint64());
10076
+ message.modelCalls = longToNumber(reader.uint64());
9958
10077
  continue;
9959
10078
  }
9960
10079
  case 7: {
@@ -9978,7 +10097,7 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9978
10097
  break;
9979
10098
  }
9980
10099
 
9981
- message.sessions = longToNumber(reader.uint64());
10100
+ message.filesTouched = longToNumber(reader.uint64());
9982
10101
  continue;
9983
10102
  }
9984
10103
  case 10: {
@@ -9986,15 +10105,39 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
9986
10105
  break;
9987
10106
  }
9988
10107
 
9989
- message.activeUsers = longToNumber(reader.uint64());
10108
+ message.commits = longToNumber(reader.uint64());
9990
10109
  continue;
9991
10110
  }
9992
10111
  case 11: {
9993
- if (tag !== 90) {
10112
+ if (tag !== 88) {
9994
10113
  break;
9995
10114
  }
9996
10115
 
9997
- message.topTool = reader.string();
10116
+ message.gitPushes = longToNumber(reader.uint64());
10117
+ continue;
10118
+ }
10119
+ case 12: {
10120
+ if (tag !== 96) {
10121
+ break;
10122
+ }
10123
+
10124
+ message.pullRequestsCreated = longToNumber(reader.uint64());
10125
+ continue;
10126
+ }
10127
+ case 13: {
10128
+ if (tag !== 104) {
10129
+ break;
10130
+ }
10131
+
10132
+ message.pullRequestsMerged = longToNumber(reader.uint64());
10133
+ continue;
10134
+ }
10135
+ case 14: {
10136
+ if (tag !== 112) {
10137
+ break;
10138
+ }
10139
+
10140
+ message.branchesCreated = longToNumber(reader.uint64());
9998
10141
  continue;
9999
10142
  }
10000
10143
  }
@@ -10009,37 +10152,37 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
10009
10152
  }
10010
10153
  },
10011
10154
 
10012
- fromJSON(object: any): ActivityRhythmBucket {
10155
+ fromJSON(object: any): DailyActivityMeasures {
10013
10156
  return {
10014
- dayOfWeek: isSet(object.dayOfWeek)
10015
- ? globalThis.Number(object.dayOfWeek)
10016
- : isSet(object.day_of_week)
10017
- ? globalThis.Number(object.day_of_week)
10157
+ inputTokens: isSet(object.inputTokens)
10158
+ ? globalThis.Number(object.inputTokens)
10159
+ : isSet(object.input_tokens)
10160
+ ? globalThis.Number(object.input_tokens)
10018
10161
  : 0,
10019
- hourOfDay: isSet(object.hourOfDay)
10020
- ? globalThis.Number(object.hourOfDay)
10021
- : isSet(object.hour_of_day)
10022
- ? globalThis.Number(object.hour_of_day)
10162
+ outputTokens: isSet(object.outputTokens)
10163
+ ? globalThis.Number(object.outputTokens)
10164
+ : isSet(object.output_tokens)
10165
+ ? globalThis.Number(object.output_tokens)
10023
10166
  : 0,
10024
- eventCount: isSet(object.eventCount)
10025
- ? globalThis.Number(object.eventCount)
10026
- : isSet(object.event_count)
10027
- ? globalThis.Number(object.event_count)
10167
+ cacheReadTokens: isSet(object.cacheReadTokens)
10168
+ ? globalThis.Number(object.cacheReadTokens)
10169
+ : isSet(object.cache_read_tokens)
10170
+ ? globalThis.Number(object.cache_read_tokens)
10028
10171
  : 0,
10029
- modelUsage: isSet(object.modelUsage)
10030
- ? TokenActivityMeasures.fromJSON(object.modelUsage)
10031
- : isSet(object.model_usage)
10032
- ? TokenActivityMeasures.fromJSON(object.model_usage)
10033
- : undefined,
10034
- usageUnavailableCount: isSet(object.usageUnavailableCount)
10035
- ? globalThis.Number(object.usageUnavailableCount)
10036
- : isSet(object.usage_unavailable_count)
10037
- ? globalThis.Number(object.usage_unavailable_count)
10172
+ cacheWriteTokens: isSet(object.cacheWriteTokens)
10173
+ ? globalThis.Number(object.cacheWriteTokens)
10174
+ : isSet(object.cache_write_tokens)
10175
+ ? globalThis.Number(object.cache_write_tokens)
10038
10176
  : 0,
10039
- costUnavailableCount: isSet(object.costUnavailableCount)
10040
- ? globalThis.Number(object.costUnavailableCount)
10041
- : isSet(object.cost_unavailable_count)
10042
- ? globalThis.Number(object.cost_unavailable_count)
10177
+ costUsd: isSet(object.costUsd)
10178
+ ? globalThis.Number(object.costUsd)
10179
+ : isSet(object.cost_usd)
10180
+ ? globalThis.Number(object.cost_usd)
10181
+ : 0,
10182
+ modelCalls: isSet(object.modelCalls)
10183
+ ? globalThis.Number(object.modelCalls)
10184
+ : isSet(object.model_calls)
10185
+ ? globalThis.Number(object.model_calls)
10043
10186
  : 0,
10044
10187
  toolCalls: isSet(object.toolCalls)
10045
10188
  ? globalThis.Number(object.toolCalls)
@@ -10051,39 +10194,54 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
10051
10194
  : isSet(object.user_messages)
10052
10195
  ? globalThis.Number(object.user_messages)
10053
10196
  : 0,
10054
- sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
10055
- activeUsers: isSet(object.activeUsers)
10056
- ? globalThis.Number(object.activeUsers)
10057
- : isSet(object.active_users)
10058
- ? globalThis.Number(object.active_users)
10197
+ filesTouched: isSet(object.filesTouched)
10198
+ ? globalThis.Number(object.filesTouched)
10199
+ : isSet(object.files_touched)
10200
+ ? globalThis.Number(object.files_touched)
10201
+ : 0,
10202
+ commits: isSet(object.commits) ? globalThis.Number(object.commits) : 0,
10203
+ gitPushes: isSet(object.gitPushes)
10204
+ ? globalThis.Number(object.gitPushes)
10205
+ : isSet(object.git_pushes)
10206
+ ? globalThis.Number(object.git_pushes)
10207
+ : 0,
10208
+ pullRequestsCreated: isSet(object.pullRequestsCreated)
10209
+ ? globalThis.Number(object.pullRequestsCreated)
10210
+ : isSet(object.pull_requests_created)
10211
+ ? globalThis.Number(object.pull_requests_created)
10212
+ : 0,
10213
+ pullRequestsMerged: isSet(object.pullRequestsMerged)
10214
+ ? globalThis.Number(object.pullRequestsMerged)
10215
+ : isSet(object.pull_requests_merged)
10216
+ ? globalThis.Number(object.pull_requests_merged)
10217
+ : 0,
10218
+ branchesCreated: isSet(object.branchesCreated)
10219
+ ? globalThis.Number(object.branchesCreated)
10220
+ : isSet(object.branches_created)
10221
+ ? globalThis.Number(object.branches_created)
10059
10222
  : 0,
10060
- topTool: isSet(object.topTool)
10061
- ? globalThis.String(object.topTool)
10062
- : isSet(object.top_tool)
10063
- ? globalThis.String(object.top_tool)
10064
- : "",
10065
10223
  };
10066
10224
  },
10067
10225
 
10068
- toJSON(message: ActivityRhythmBucket): unknown {
10226
+ toJSON(message: DailyActivityMeasures): unknown {
10069
10227
  const obj: any = {};
10070
- if (message.dayOfWeek !== 0) {
10071
- obj.dayOfWeek = Math.round(message.dayOfWeek);
10228
+ if (message.inputTokens !== 0) {
10229
+ obj.inputTokens = Math.round(message.inputTokens);
10072
10230
  }
10073
- if (message.hourOfDay !== 0) {
10074
- obj.hourOfDay = Math.round(message.hourOfDay);
10231
+ if (message.outputTokens !== 0) {
10232
+ obj.outputTokens = Math.round(message.outputTokens);
10075
10233
  }
10076
- if (message.eventCount !== 0) {
10077
- obj.eventCount = Math.round(message.eventCount);
10234
+ if (message.cacheReadTokens !== 0) {
10235
+ obj.cacheReadTokens = Math.round(message.cacheReadTokens);
10078
10236
  }
10079
- if (message.modelUsage !== undefined) {
10080
- obj.modelUsage = TokenActivityMeasures.toJSON(message.modelUsage);
10237
+ if (message.cacheWriteTokens !== 0) {
10238
+ obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
10081
10239
  }
10082
- if (message.usageUnavailableCount !== 0) {
10083
- obj.usageUnavailableCount = Math.round(message.usageUnavailableCount);
10240
+ if (message.costUsd !== 0) {
10241
+ obj.costUsd = message.costUsd;
10084
10242
  }
10085
- if (message.costUnavailableCount !== 0) {
10086
- obj.costUnavailableCount = Math.round(message.costUnavailableCount);
10243
+ if (message.modelCalls !== 0) {
10244
+ obj.modelCalls = Math.round(message.modelCalls);
10087
10245
  }
10088
10246
  if (message.toolCalls !== 0) {
10089
10247
  obj.toolCalls = Math.round(message.toolCalls);
@@ -10091,62 +10249,72 @@ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
10091
10249
  if (message.userMessages !== 0) {
10092
10250
  obj.userMessages = Math.round(message.userMessages);
10093
10251
  }
10094
- if (message.sessions !== 0) {
10095
- obj.sessions = Math.round(message.sessions);
10252
+ if (message.filesTouched !== 0) {
10253
+ obj.filesTouched = Math.round(message.filesTouched);
10096
10254
  }
10097
- if (message.activeUsers !== 0) {
10098
- obj.activeUsers = Math.round(message.activeUsers);
10255
+ if (message.commits !== 0) {
10256
+ obj.commits = Math.round(message.commits);
10099
10257
  }
10100
- if (message.topTool !== "") {
10101
- obj.topTool = message.topTool;
10258
+ if (message.gitPushes !== 0) {
10259
+ obj.gitPushes = Math.round(message.gitPushes);
10260
+ }
10261
+ if (message.pullRequestsCreated !== 0) {
10262
+ obj.pullRequestsCreated = Math.round(message.pullRequestsCreated);
10263
+ }
10264
+ if (message.pullRequestsMerged !== 0) {
10265
+ obj.pullRequestsMerged = Math.round(message.pullRequestsMerged);
10266
+ }
10267
+ if (message.branchesCreated !== 0) {
10268
+ obj.branchesCreated = Math.round(message.branchesCreated);
10102
10269
  }
10103
10270
  return obj;
10104
10271
  },
10105
10272
 
10106
- create<I extends Exact<DeepPartial<ActivityRhythmBucket>, I>>(base?: I): ActivityRhythmBucket {
10107
- return ActivityRhythmBucket.fromPartial(base ?? ({} as any));
10273
+ create<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(base?: I): DailyActivityMeasures {
10274
+ return DailyActivityMeasures.fromPartial(base ?? ({} as any));
10108
10275
  },
10109
- fromPartial<I extends Exact<DeepPartial<ActivityRhythmBucket>, I>>(object: I): ActivityRhythmBucket {
10110
- const message = createBaseActivityRhythmBucket();
10111
- message.dayOfWeek = object.dayOfWeek ?? 0;
10112
- message.hourOfDay = object.hourOfDay ?? 0;
10113
- message.eventCount = object.eventCount ?? 0;
10114
- message.modelUsage = (object.modelUsage !== undefined && object.modelUsage !== null)
10115
- ? TokenActivityMeasures.fromPartial(object.modelUsage)
10116
- : undefined;
10117
- message.usageUnavailableCount = object.usageUnavailableCount ?? 0;
10118
- message.costUnavailableCount = object.costUnavailableCount ?? 0;
10276
+ fromPartial<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(object: I): DailyActivityMeasures {
10277
+ const message = createBaseDailyActivityMeasures();
10278
+ message.inputTokens = object.inputTokens ?? 0;
10279
+ message.outputTokens = object.outputTokens ?? 0;
10280
+ message.cacheReadTokens = object.cacheReadTokens ?? 0;
10281
+ message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
10282
+ message.costUsd = object.costUsd ?? 0;
10283
+ message.modelCalls = object.modelCalls ?? 0;
10119
10284
  message.toolCalls = object.toolCalls ?? 0;
10120
10285
  message.userMessages = object.userMessages ?? 0;
10121
- message.sessions = object.sessions ?? 0;
10122
- message.activeUsers = object.activeUsers ?? 0;
10123
- message.topTool = object.topTool ?? "";
10286
+ message.filesTouched = object.filesTouched ?? 0;
10287
+ message.commits = object.commits ?? 0;
10288
+ message.gitPushes = object.gitPushes ?? 0;
10289
+ message.pullRequestsCreated = object.pullRequestsCreated ?? 0;
10290
+ message.pullRequestsMerged = object.pullRequestsMerged ?? 0;
10291
+ message.branchesCreated = object.branchesCreated ?? 0;
10124
10292
  return message;
10125
10293
  },
10126
10294
  };
10127
10295
 
10128
- function createBaseProjectOverviewRequest(): ProjectOverviewRequest {
10129
- return { organizationId: "", projectId: "", activeAfter: undefined, topSessions: 0 };
10296
+ function createBaseActivityRhythmRequest(): ActivityRhythmRequest {
10297
+ return { organizationId: "", projectId: "", timeWindow: 0, timeZone: "" };
10130
10298
  }
10131
10299
 
10132
- export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10133
- encode(message: ProjectOverviewRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10300
+ export const ActivityRhythmRequest: MessageFns<ActivityRhythmRequest> = {
10301
+ encode(message: ActivityRhythmRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10134
10302
  if (message.organizationId !== "") {
10135
10303
  writer.uint32(10).string(message.organizationId);
10136
10304
  }
10137
10305
  if (message.projectId !== "") {
10138
10306
  writer.uint32(18).string(message.projectId);
10139
10307
  }
10140
- if (message.activeAfter !== undefined) {
10141
- Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(26).fork()).join();
10308
+ if (message.timeWindow !== 0) {
10309
+ writer.uint32(24).int32(message.timeWindow);
10142
10310
  }
10143
- if (message.topSessions !== 0) {
10144
- writer.uint32(32).int32(message.topSessions);
10311
+ if (message.timeZone !== "") {
10312
+ writer.uint32(34).string(message.timeZone);
10145
10313
  }
10146
10314
  return writer;
10147
10315
  },
10148
10316
 
10149
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewRequest {
10317
+ decode(input: BinaryReader | Uint8Array, length?: number): ActivityRhythmRequest {
10150
10318
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
10151
10319
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
10152
10320
  if (previousRecursionDepth >= 100) {
@@ -10155,7 +10323,7 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10155
10323
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
10156
10324
  try {
10157
10325
  const end = length === undefined ? reader.len : reader.pos + length;
10158
- const message = createBaseProjectOverviewRequest();
10326
+ const message = createBaseActivityRhythmRequest();
10159
10327
  while (reader.pos < end) {
10160
10328
  const tag = reader.uint32();
10161
10329
  switch (tag >>> 3) {
@@ -10176,19 +10344,19 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10176
10344
  continue;
10177
10345
  }
10178
10346
  case 3: {
10179
- if (tag !== 26) {
10347
+ if (tag !== 24) {
10180
10348
  break;
10181
10349
  }
10182
10350
 
10183
- message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10351
+ message.timeWindow = reader.int32() as any;
10184
10352
  continue;
10185
10353
  }
10186
10354
  case 4: {
10187
- if (tag !== 32) {
10355
+ if (tag !== 34) {
10188
10356
  break;
10189
10357
  }
10190
10358
 
10191
- message.topSessions = reader.int32();
10359
+ message.timeZone = reader.string();
10192
10360
  continue;
10193
10361
  }
10194
10362
  }
@@ -10203,7 +10371,7 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10203
10371
  }
10204
10372
  },
10205
10373
 
10206
- fromJSON(object: any): ProjectOverviewRequest {
10374
+ fromJSON(object: any): ActivityRhythmRequest {
10207
10375
  return {
10208
10376
  organizationId: isSet(object.organizationId)
10209
10377
  ? globalThis.String(object.organizationId)
@@ -10215,20 +10383,20 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10215
10383
  : isSet(object.project_id)
10216
10384
  ? globalThis.String(object.project_id)
10217
10385
  : "",
10218
- activeAfter: isSet(object.activeAfter)
10219
- ? fromJsonTimestamp(object.activeAfter)
10220
- : isSet(object.active_after)
10221
- ? fromJsonTimestamp(object.active_after)
10222
- : undefined,
10223
- topSessions: isSet(object.topSessions)
10224
- ? globalThis.Number(object.topSessions)
10225
- : isSet(object.top_sessions)
10226
- ? globalThis.Number(object.top_sessions)
10386
+ timeWindow: isSet(object.timeWindow)
10387
+ ? analyticsTimeWindowFromJSON(object.timeWindow)
10388
+ : isSet(object.time_window)
10389
+ ? analyticsTimeWindowFromJSON(object.time_window)
10227
10390
  : 0,
10391
+ timeZone: isSet(object.timeZone)
10392
+ ? globalThis.String(object.timeZone)
10393
+ : isSet(object.time_zone)
10394
+ ? globalThis.String(object.time_zone)
10395
+ : "",
10228
10396
  };
10229
10397
  },
10230
10398
 
10231
- toJSON(message: ProjectOverviewRequest): unknown {
10399
+ toJSON(message: ActivityRhythmRequest): unknown {
10232
10400
  const obj: any = {};
10233
10401
  if (message.organizationId !== "") {
10234
10402
  obj.organizationId = message.organizationId;
@@ -10236,53 +10404,53 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10236
10404
  if (message.projectId !== "") {
10237
10405
  obj.projectId = message.projectId;
10238
10406
  }
10239
- if (message.activeAfter !== undefined) {
10240
- obj.activeAfter = message.activeAfter.toISOString();
10407
+ if (message.timeWindow !== 0) {
10408
+ obj.timeWindow = analyticsTimeWindowToJSON(message.timeWindow);
10241
10409
  }
10242
- if (message.topSessions !== 0) {
10243
- obj.topSessions = Math.round(message.topSessions);
10410
+ if (message.timeZone !== "") {
10411
+ obj.timeZone = message.timeZone;
10244
10412
  }
10245
10413
  return obj;
10246
10414
  },
10247
10415
 
10248
- create<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(base?: I): ProjectOverviewRequest {
10249
- return ProjectOverviewRequest.fromPartial(base ?? ({} as any));
10416
+ create<I extends Exact<DeepPartial<ActivityRhythmRequest>, I>>(base?: I): ActivityRhythmRequest {
10417
+ return ActivityRhythmRequest.fromPartial(base ?? ({} as any));
10250
10418
  },
10251
- fromPartial<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(object: I): ProjectOverviewRequest {
10252
- const message = createBaseProjectOverviewRequest();
10419
+ fromPartial<I extends Exact<DeepPartial<ActivityRhythmRequest>, I>>(object: I): ActivityRhythmRequest {
10420
+ const message = createBaseActivityRhythmRequest();
10253
10421
  message.organizationId = object.organizationId ?? "";
10254
10422
  message.projectId = object.projectId ?? "";
10255
- message.activeAfter = object.activeAfter ?? undefined;
10256
- message.topSessions = object.topSessions ?? 0;
10423
+ message.timeWindow = object.timeWindow ?? 0;
10424
+ message.timeZone = object.timeZone ?? "";
10257
10425
  return message;
10258
10426
  },
10259
10427
  };
10260
10428
 
10261
- function createBaseProjectOverview(): ProjectOverview {
10262
- return { totals: undefined, byModel: [], byProvider: [], bySource: [], topSessions: [] };
10429
+ function createBaseActivityRhythm(): ActivityRhythm {
10430
+ return { buckets: [], windowStart: undefined, windowEnd: undefined, asOf: undefined, timeZone: "" };
10263
10431
  }
10264
10432
 
10265
- export const ProjectOverview: MessageFns<ProjectOverview> = {
10266
- encode(message: ProjectOverview, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10267
- if (message.totals !== undefined) {
10268
- ProjectOverviewTotals.encode(message.totals, writer.uint32(10).fork()).join();
10433
+ export const ActivityRhythm: MessageFns<ActivityRhythm> = {
10434
+ encode(message: ActivityRhythm, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10435
+ for (const v of message.buckets) {
10436
+ ActivityRhythmBucket.encode(v!, writer.uint32(10).fork()).join();
10269
10437
  }
10270
- for (const v of message.byModel) {
10271
- ProjectOverviewSlice.encode(v!, writer.uint32(18).fork()).join();
10438
+ if (message.windowStart !== undefined) {
10439
+ Timestamp.encode(toTimestamp(message.windowStart), writer.uint32(18).fork()).join();
10272
10440
  }
10273
- for (const v of message.byProvider) {
10274
- ProjectOverviewSlice.encode(v!, writer.uint32(26).fork()).join();
10441
+ if (message.windowEnd !== undefined) {
10442
+ Timestamp.encode(toTimestamp(message.windowEnd), writer.uint32(26).fork()).join();
10275
10443
  }
10276
- for (const v of message.bySource) {
10277
- ProjectOverviewSlice.encode(v!, writer.uint32(34).fork()).join();
10444
+ if (message.asOf !== undefined) {
10445
+ Timestamp.encode(toTimestamp(message.asOf), writer.uint32(34).fork()).join();
10278
10446
  }
10279
- for (const v of message.topSessions) {
10280
- ProjectSessionRef.encode(v!, writer.uint32(42).fork()).join();
10447
+ if (message.timeZone !== "") {
10448
+ writer.uint32(42).string(message.timeZone);
10281
10449
  }
10282
10450
  return writer;
10283
10451
  },
10284
10452
 
10285
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverview {
10453
+ decode(input: BinaryReader | Uint8Array, length?: number): ActivityRhythm {
10286
10454
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
10287
10455
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
10288
10456
  if (previousRecursionDepth >= 100) {
@@ -10291,7 +10459,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10291
10459
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
10292
10460
  try {
10293
10461
  const end = length === undefined ? reader.len : reader.pos + length;
10294
- const message = createBaseProjectOverview();
10462
+ const message = createBaseActivityRhythm();
10295
10463
  while (reader.pos < end) {
10296
10464
  const tag = reader.uint32();
10297
10465
  switch (tag >>> 3) {
@@ -10300,7 +10468,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10300
10468
  break;
10301
10469
  }
10302
10470
 
10303
- message.totals = ProjectOverviewTotals.decode(reader, reader.uint32());
10471
+ message.buckets.push(ActivityRhythmBucket.decode(reader, reader.uint32()));
10304
10472
  continue;
10305
10473
  }
10306
10474
  case 2: {
@@ -10308,7 +10476,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10308
10476
  break;
10309
10477
  }
10310
10478
 
10311
- message.byModel.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
10479
+ message.windowStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10312
10480
  continue;
10313
10481
  }
10314
10482
  case 3: {
@@ -10316,7 +10484,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10316
10484
  break;
10317
10485
  }
10318
10486
 
10319
- message.byProvider.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
10487
+ message.windowEnd = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10320
10488
  continue;
10321
10489
  }
10322
10490
  case 4: {
@@ -10324,7 +10492,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10324
10492
  break;
10325
10493
  }
10326
10494
 
10327
- message.bySource.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
10495
+ message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10328
10496
  continue;
10329
10497
  }
10330
10498
  case 5: {
@@ -10332,7 +10500,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10332
10500
  break;
10333
10501
  }
10334
10502
 
10335
- message.topSessions.push(ProjectSessionRef.decode(reader, reader.uint32()));
10503
+ message.timeZone = reader.string();
10336
10504
  continue;
10337
10505
  }
10338
10506
  }
@@ -10347,135 +10515,123 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
10347
10515
  }
10348
10516
  },
10349
10517
 
10350
- fromJSON(object: any): ProjectOverview {
10518
+ fromJSON(object: any): ActivityRhythm {
10351
10519
  return {
10352
- totals: isSet(object.totals) ? ProjectOverviewTotals.fromJSON(object.totals) : undefined,
10353
- byModel: globalThis.Array.isArray(object?.byModel)
10354
- ? object.byModel.map((e: any) => ProjectOverviewSlice.fromJSON(e))
10355
- : globalThis.Array.isArray(object?.by_model)
10356
- ? object.by_model.map((e: any) => ProjectOverviewSlice.fromJSON(e))
10357
- : [],
10358
- byProvider: globalThis.Array.isArray(object?.byProvider)
10359
- ? object.byProvider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
10360
- : globalThis.Array.isArray(object?.by_provider)
10361
- ? object.by_provider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
10362
- : [],
10363
- bySource: globalThis.Array.isArray(object?.bySource)
10364
- ? object.bySource.map((e: any) => ProjectOverviewSlice.fromJSON(e))
10365
- : globalThis.Array.isArray(object?.by_source)
10366
- ? object.by_source.map((e: any) => ProjectOverviewSlice.fromJSON(e))
10367
- : [],
10368
- topSessions: globalThis.Array.isArray(object?.topSessions)
10369
- ? object.topSessions.map((e: any) => ProjectSessionRef.fromJSON(e))
10370
- : globalThis.Array.isArray(object?.top_sessions)
10371
- ? object.top_sessions.map((e: any) => ProjectSessionRef.fromJSON(e))
10520
+ buckets: globalThis.Array.isArray(object?.buckets)
10521
+ ? object.buckets.map((e: any) => ActivityRhythmBucket.fromJSON(e))
10372
10522
  : [],
10523
+ windowStart: isSet(object.windowStart)
10524
+ ? fromJsonTimestamp(object.windowStart)
10525
+ : isSet(object.window_start)
10526
+ ? fromJsonTimestamp(object.window_start)
10527
+ : undefined,
10528
+ windowEnd: isSet(object.windowEnd)
10529
+ ? fromJsonTimestamp(object.windowEnd)
10530
+ : isSet(object.window_end)
10531
+ ? fromJsonTimestamp(object.window_end)
10532
+ : undefined,
10533
+ asOf: isSet(object.asOf)
10534
+ ? fromJsonTimestamp(object.asOf)
10535
+ : isSet(object.as_of)
10536
+ ? fromJsonTimestamp(object.as_of)
10537
+ : undefined,
10538
+ timeZone: isSet(object.timeZone)
10539
+ ? globalThis.String(object.timeZone)
10540
+ : isSet(object.time_zone)
10541
+ ? globalThis.String(object.time_zone)
10542
+ : "",
10373
10543
  };
10374
10544
  },
10375
10545
 
10376
- toJSON(message: ProjectOverview): unknown {
10546
+ toJSON(message: ActivityRhythm): unknown {
10377
10547
  const obj: any = {};
10378
- if (message.totals !== undefined) {
10379
- obj.totals = ProjectOverviewTotals.toJSON(message.totals);
10548
+ if (message.buckets?.length) {
10549
+ obj.buckets = message.buckets.map((e) => ActivityRhythmBucket.toJSON(e));
10380
10550
  }
10381
- if (message.byModel?.length) {
10382
- obj.byModel = message.byModel.map((e) => ProjectOverviewSlice.toJSON(e));
10551
+ if (message.windowStart !== undefined) {
10552
+ obj.windowStart = message.windowStart.toISOString();
10383
10553
  }
10384
- if (message.byProvider?.length) {
10385
- obj.byProvider = message.byProvider.map((e) => ProjectOverviewSlice.toJSON(e));
10554
+ if (message.windowEnd !== undefined) {
10555
+ obj.windowEnd = message.windowEnd.toISOString();
10386
10556
  }
10387
- if (message.bySource?.length) {
10388
- obj.bySource = message.bySource.map((e) => ProjectOverviewSlice.toJSON(e));
10557
+ if (message.asOf !== undefined) {
10558
+ obj.asOf = message.asOf.toISOString();
10389
10559
  }
10390
- if (message.topSessions?.length) {
10391
- obj.topSessions = message.topSessions.map((e) => ProjectSessionRef.toJSON(e));
10560
+ if (message.timeZone !== "") {
10561
+ obj.timeZone = message.timeZone;
10392
10562
  }
10393
10563
  return obj;
10394
10564
  },
10395
10565
 
10396
- create<I extends Exact<DeepPartial<ProjectOverview>, I>>(base?: I): ProjectOverview {
10397
- return ProjectOverview.fromPartial(base ?? ({} as any));
10566
+ create<I extends Exact<DeepPartial<ActivityRhythm>, I>>(base?: I): ActivityRhythm {
10567
+ return ActivityRhythm.fromPartial(base ?? ({} as any));
10398
10568
  },
10399
- fromPartial<I extends Exact<DeepPartial<ProjectOverview>, I>>(object: I): ProjectOverview {
10400
- const message = createBaseProjectOverview();
10401
- message.totals = (object.totals !== undefined && object.totals !== null)
10402
- ? ProjectOverviewTotals.fromPartial(object.totals)
10403
- : undefined;
10404
- message.byModel = object.byModel?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
10405
- message.byProvider = object.byProvider?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
10406
- message.bySource = object.bySource?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
10407
- message.topSessions = object.topSessions?.map((e) => ProjectSessionRef.fromPartial(e)) || [];
10569
+ fromPartial<I extends Exact<DeepPartial<ActivityRhythm>, I>>(object: I): ActivityRhythm {
10570
+ const message = createBaseActivityRhythm();
10571
+ message.buckets = object.buckets?.map((e) => ActivityRhythmBucket.fromPartial(e)) || [];
10572
+ message.windowStart = object.windowStart ?? undefined;
10573
+ message.windowEnd = object.windowEnd ?? undefined;
10574
+ message.asOf = object.asOf ?? undefined;
10575
+ message.timeZone = object.timeZone ?? "";
10408
10576
  return message;
10409
10577
  },
10410
10578
  };
10411
10579
 
10412
- function createBaseProjectOverviewTotals(): ProjectOverviewTotals {
10580
+ function createBaseActivityRhythmBucket(): ActivityRhythmBucket {
10413
10581
  return {
10414
- sessions: 0,
10415
- modelCalls: 0,
10582
+ dayOfWeek: 0,
10583
+ hourOfDay: 0,
10584
+ eventCount: 0,
10585
+ modelUsage: undefined,
10586
+ usageUnavailableCount: 0,
10587
+ costUnavailableCount: 0,
10416
10588
  toolCalls: 0,
10417
10589
  userMessages: 0,
10418
- inputTokens: 0,
10419
- outputTokens: 0,
10420
- cacheReadTokens: 0,
10421
- cacheWriteTokens: 0,
10422
- costUsd: 0,
10423
- distinctUsers: 0,
10424
- commits: 0,
10425
- pushes: 0,
10426
- filesTouched: 0,
10427
- lastActivityAt: undefined,
10590
+ sessions: 0,
10591
+ activeUsers: 0,
10592
+ topTool: "",
10428
10593
  };
10429
10594
  }
10430
10595
 
10431
- export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10432
- encode(message: ProjectOverviewTotals, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10433
- if (message.sessions !== 0) {
10434
- writer.uint32(8).uint64(message.sessions);
10435
- }
10436
- if (message.modelCalls !== 0) {
10437
- writer.uint32(16).uint64(message.modelCalls);
10438
- }
10439
- if (message.toolCalls !== 0) {
10440
- writer.uint32(24).uint64(message.toolCalls);
10441
- }
10442
- if (message.userMessages !== 0) {
10443
- writer.uint32(32).uint64(message.userMessages);
10596
+ export const ActivityRhythmBucket: MessageFns<ActivityRhythmBucket> = {
10597
+ encode(message: ActivityRhythmBucket, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10598
+ if (message.dayOfWeek !== 0) {
10599
+ writer.uint32(8).uint32(message.dayOfWeek);
10444
10600
  }
10445
- if (message.inputTokens !== 0) {
10446
- writer.uint32(40).uint64(message.inputTokens);
10601
+ if (message.hourOfDay !== 0) {
10602
+ writer.uint32(16).uint32(message.hourOfDay);
10447
10603
  }
10448
- if (message.outputTokens !== 0) {
10449
- writer.uint32(48).uint64(message.outputTokens);
10604
+ if (message.eventCount !== 0) {
10605
+ writer.uint32(24).uint64(message.eventCount);
10450
10606
  }
10451
- if (message.cacheReadTokens !== 0) {
10452
- writer.uint32(56).uint64(message.cacheReadTokens);
10607
+ if (message.modelUsage !== undefined) {
10608
+ TokenActivityMeasures.encode(message.modelUsage, writer.uint32(34).fork()).join();
10453
10609
  }
10454
- if (message.cacheWriteTokens !== 0) {
10455
- writer.uint32(64).uint64(message.cacheWriteTokens);
10610
+ if (message.usageUnavailableCount !== 0) {
10611
+ writer.uint32(40).uint64(message.usageUnavailableCount);
10456
10612
  }
10457
- if (message.costUsd !== 0) {
10458
- writer.uint32(73).double(message.costUsd);
10613
+ if (message.costUnavailableCount !== 0) {
10614
+ writer.uint32(48).uint64(message.costUnavailableCount);
10459
10615
  }
10460
- if (message.distinctUsers !== 0) {
10461
- writer.uint32(80).uint64(message.distinctUsers);
10616
+ if (message.toolCalls !== 0) {
10617
+ writer.uint32(56).uint64(message.toolCalls);
10462
10618
  }
10463
- if (message.commits !== 0) {
10464
- writer.uint32(88).uint64(message.commits);
10619
+ if (message.userMessages !== 0) {
10620
+ writer.uint32(64).uint64(message.userMessages);
10465
10621
  }
10466
- if (message.pushes !== 0) {
10467
- writer.uint32(96).uint64(message.pushes);
10622
+ if (message.sessions !== 0) {
10623
+ writer.uint32(72).uint64(message.sessions);
10468
10624
  }
10469
- if (message.filesTouched !== 0) {
10470
- writer.uint32(104).uint64(message.filesTouched);
10625
+ if (message.activeUsers !== 0) {
10626
+ writer.uint32(80).uint64(message.activeUsers);
10471
10627
  }
10472
- if (message.lastActivityAt !== undefined) {
10473
- Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(114).fork()).join();
10628
+ if (message.topTool !== "") {
10629
+ writer.uint32(90).string(message.topTool);
10474
10630
  }
10475
10631
  return writer;
10476
10632
  },
10477
10633
 
10478
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewTotals {
10634
+ decode(input: BinaryReader | Uint8Array, length?: number): ActivityRhythmBucket {
10479
10635
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
10480
10636
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
10481
10637
  if (previousRecursionDepth >= 100) {
@@ -10484,7 +10640,7 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10484
10640
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
10485
10641
  try {
10486
10642
  const end = length === undefined ? reader.len : reader.pos + length;
10487
- const message = createBaseProjectOverviewTotals();
10643
+ const message = createBaseActivityRhythmBucket();
10488
10644
  while (reader.pos < end) {
10489
10645
  const tag = reader.uint32();
10490
10646
  switch (tag >>> 3) {
@@ -10493,7 +10649,7 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10493
10649
  break;
10494
10650
  }
10495
10651
 
10496
- message.sessions = longToNumber(reader.uint64());
10652
+ message.dayOfWeek = reader.uint32();
10497
10653
  continue;
10498
10654
  }
10499
10655
  case 2: {
@@ -10501,7 +10657,7 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10501
10657
  break;
10502
10658
  }
10503
10659
 
10504
- message.modelCalls = longToNumber(reader.uint64());
10660
+ message.hourOfDay = reader.uint32();
10505
10661
  continue;
10506
10662
  }
10507
10663
  case 3: {
@@ -10509,15 +10665,15 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10509
10665
  break;
10510
10666
  }
10511
10667
 
10512
- message.toolCalls = longToNumber(reader.uint64());
10668
+ message.eventCount = longToNumber(reader.uint64());
10513
10669
  continue;
10514
10670
  }
10515
10671
  case 4: {
10516
- if (tag !== 32) {
10672
+ if (tag !== 34) {
10517
10673
  break;
10518
10674
  }
10519
10675
 
10520
- message.userMessages = longToNumber(reader.uint64());
10676
+ message.modelUsage = TokenActivityMeasures.decode(reader, reader.uint32());
10521
10677
  continue;
10522
10678
  }
10523
10679
  case 5: {
@@ -10525,7 +10681,7 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10525
10681
  break;
10526
10682
  }
10527
10683
 
10528
- message.inputTokens = longToNumber(reader.uint64());
10684
+ message.usageUnavailableCount = longToNumber(reader.uint64());
10529
10685
  continue;
10530
10686
  }
10531
10687
  case 6: {
@@ -10533,7 +10689,7 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10533
10689
  break;
10534
10690
  }
10535
10691
 
10536
- message.outputTokens = longToNumber(reader.uint64());
10692
+ message.costUnavailableCount = longToNumber(reader.uint64());
10537
10693
  continue;
10538
10694
  }
10539
10695
  case 7: {
@@ -10541,7 +10697,7 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10541
10697
  break;
10542
10698
  }
10543
10699
 
10544
- message.cacheReadTokens = longToNumber(reader.uint64());
10700
+ message.toolCalls = longToNumber(reader.uint64());
10545
10701
  continue;
10546
10702
  }
10547
10703
  case 8: {
@@ -10549,15 +10705,15 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10549
10705
  break;
10550
10706
  }
10551
10707
 
10552
- message.cacheWriteTokens = longToNumber(reader.uint64());
10708
+ message.userMessages = longToNumber(reader.uint64());
10553
10709
  continue;
10554
10710
  }
10555
10711
  case 9: {
10556
- if (tag !== 73) {
10712
+ if (tag !== 72) {
10557
10713
  break;
10558
10714
  }
10559
10715
 
10560
- message.costUsd = reader.double();
10716
+ message.sessions = longToNumber(reader.uint64());
10561
10717
  continue;
10562
10718
  }
10563
10719
  case 10: {
@@ -10565,39 +10721,15 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10565
10721
  break;
10566
10722
  }
10567
10723
 
10568
- message.distinctUsers = longToNumber(reader.uint64());
10724
+ message.activeUsers = longToNumber(reader.uint64());
10569
10725
  continue;
10570
10726
  }
10571
10727
  case 11: {
10572
- if (tag !== 88) {
10573
- break;
10574
- }
10575
-
10576
- message.commits = longToNumber(reader.uint64());
10577
- continue;
10578
- }
10579
- case 12: {
10580
- if (tag !== 96) {
10581
- break;
10582
- }
10583
-
10584
- message.pushes = longToNumber(reader.uint64());
10585
- continue;
10586
- }
10587
- case 13: {
10588
- if (tag !== 104) {
10589
- break;
10590
- }
10591
-
10592
- message.filesTouched = longToNumber(reader.uint64());
10593
- continue;
10594
- }
10595
- case 14: {
10596
- if (tag !== 114) {
10728
+ if (tag !== 90) {
10597
10729
  break;
10598
10730
  }
10599
10731
 
10600
- message.lastActivityAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10732
+ message.topTool = reader.string();
10601
10733
  continue;
10602
10734
  }
10603
10735
  }
@@ -10612,26 +10744,629 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10612
10744
  }
10613
10745
  },
10614
10746
 
10615
- fromJSON(object: any): ProjectOverviewTotals {
10747
+ fromJSON(object: any): ActivityRhythmBucket {
10616
10748
  return {
10617
- sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
10618
- modelCalls: isSet(object.modelCalls)
10619
- ? globalThis.Number(object.modelCalls)
10620
- : isSet(object.model_calls)
10621
- ? globalThis.Number(object.model_calls)
10622
- : 0,
10623
- toolCalls: isSet(object.toolCalls)
10624
- ? globalThis.Number(object.toolCalls)
10625
- : isSet(object.tool_calls)
10626
- ? globalThis.Number(object.tool_calls)
10749
+ dayOfWeek: isSet(object.dayOfWeek)
10750
+ ? globalThis.Number(object.dayOfWeek)
10751
+ : isSet(object.day_of_week)
10752
+ ? globalThis.Number(object.day_of_week)
10627
10753
  : 0,
10628
- userMessages: isSet(object.userMessages)
10629
- ? globalThis.Number(object.userMessages)
10630
- : isSet(object.user_messages)
10631
- ? globalThis.Number(object.user_messages)
10754
+ hourOfDay: isSet(object.hourOfDay)
10755
+ ? globalThis.Number(object.hourOfDay)
10756
+ : isSet(object.hour_of_day)
10757
+ ? globalThis.Number(object.hour_of_day)
10632
10758
  : 0,
10633
- inputTokens: isSet(object.inputTokens)
10634
- ? globalThis.Number(object.inputTokens)
10759
+ eventCount: isSet(object.eventCount)
10760
+ ? globalThis.Number(object.eventCount)
10761
+ : isSet(object.event_count)
10762
+ ? globalThis.Number(object.event_count)
10763
+ : 0,
10764
+ modelUsage: isSet(object.modelUsage)
10765
+ ? TokenActivityMeasures.fromJSON(object.modelUsage)
10766
+ : isSet(object.model_usage)
10767
+ ? TokenActivityMeasures.fromJSON(object.model_usage)
10768
+ : undefined,
10769
+ usageUnavailableCount: isSet(object.usageUnavailableCount)
10770
+ ? globalThis.Number(object.usageUnavailableCount)
10771
+ : isSet(object.usage_unavailable_count)
10772
+ ? globalThis.Number(object.usage_unavailable_count)
10773
+ : 0,
10774
+ costUnavailableCount: isSet(object.costUnavailableCount)
10775
+ ? globalThis.Number(object.costUnavailableCount)
10776
+ : isSet(object.cost_unavailable_count)
10777
+ ? globalThis.Number(object.cost_unavailable_count)
10778
+ : 0,
10779
+ toolCalls: isSet(object.toolCalls)
10780
+ ? globalThis.Number(object.toolCalls)
10781
+ : isSet(object.tool_calls)
10782
+ ? globalThis.Number(object.tool_calls)
10783
+ : 0,
10784
+ userMessages: isSet(object.userMessages)
10785
+ ? globalThis.Number(object.userMessages)
10786
+ : isSet(object.user_messages)
10787
+ ? globalThis.Number(object.user_messages)
10788
+ : 0,
10789
+ sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
10790
+ activeUsers: isSet(object.activeUsers)
10791
+ ? globalThis.Number(object.activeUsers)
10792
+ : isSet(object.active_users)
10793
+ ? globalThis.Number(object.active_users)
10794
+ : 0,
10795
+ topTool: isSet(object.topTool)
10796
+ ? globalThis.String(object.topTool)
10797
+ : isSet(object.top_tool)
10798
+ ? globalThis.String(object.top_tool)
10799
+ : "",
10800
+ };
10801
+ },
10802
+
10803
+ toJSON(message: ActivityRhythmBucket): unknown {
10804
+ const obj: any = {};
10805
+ if (message.dayOfWeek !== 0) {
10806
+ obj.dayOfWeek = Math.round(message.dayOfWeek);
10807
+ }
10808
+ if (message.hourOfDay !== 0) {
10809
+ obj.hourOfDay = Math.round(message.hourOfDay);
10810
+ }
10811
+ if (message.eventCount !== 0) {
10812
+ obj.eventCount = Math.round(message.eventCount);
10813
+ }
10814
+ if (message.modelUsage !== undefined) {
10815
+ obj.modelUsage = TokenActivityMeasures.toJSON(message.modelUsage);
10816
+ }
10817
+ if (message.usageUnavailableCount !== 0) {
10818
+ obj.usageUnavailableCount = Math.round(message.usageUnavailableCount);
10819
+ }
10820
+ if (message.costUnavailableCount !== 0) {
10821
+ obj.costUnavailableCount = Math.round(message.costUnavailableCount);
10822
+ }
10823
+ if (message.toolCalls !== 0) {
10824
+ obj.toolCalls = Math.round(message.toolCalls);
10825
+ }
10826
+ if (message.userMessages !== 0) {
10827
+ obj.userMessages = Math.round(message.userMessages);
10828
+ }
10829
+ if (message.sessions !== 0) {
10830
+ obj.sessions = Math.round(message.sessions);
10831
+ }
10832
+ if (message.activeUsers !== 0) {
10833
+ obj.activeUsers = Math.round(message.activeUsers);
10834
+ }
10835
+ if (message.topTool !== "") {
10836
+ obj.topTool = message.topTool;
10837
+ }
10838
+ return obj;
10839
+ },
10840
+
10841
+ create<I extends Exact<DeepPartial<ActivityRhythmBucket>, I>>(base?: I): ActivityRhythmBucket {
10842
+ return ActivityRhythmBucket.fromPartial(base ?? ({} as any));
10843
+ },
10844
+ fromPartial<I extends Exact<DeepPartial<ActivityRhythmBucket>, I>>(object: I): ActivityRhythmBucket {
10845
+ const message = createBaseActivityRhythmBucket();
10846
+ message.dayOfWeek = object.dayOfWeek ?? 0;
10847
+ message.hourOfDay = object.hourOfDay ?? 0;
10848
+ message.eventCount = object.eventCount ?? 0;
10849
+ message.modelUsage = (object.modelUsage !== undefined && object.modelUsage !== null)
10850
+ ? TokenActivityMeasures.fromPartial(object.modelUsage)
10851
+ : undefined;
10852
+ message.usageUnavailableCount = object.usageUnavailableCount ?? 0;
10853
+ message.costUnavailableCount = object.costUnavailableCount ?? 0;
10854
+ message.toolCalls = object.toolCalls ?? 0;
10855
+ message.userMessages = object.userMessages ?? 0;
10856
+ message.sessions = object.sessions ?? 0;
10857
+ message.activeUsers = object.activeUsers ?? 0;
10858
+ message.topTool = object.topTool ?? "";
10859
+ return message;
10860
+ },
10861
+ };
10862
+
10863
+ function createBaseProjectOverviewRequest(): ProjectOverviewRequest {
10864
+ return { organizationId: "", projectId: "", activeAfter: undefined, topSessions: 0 };
10865
+ }
10866
+
10867
+ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
10868
+ encode(message: ProjectOverviewRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10869
+ if (message.organizationId !== "") {
10870
+ writer.uint32(10).string(message.organizationId);
10871
+ }
10872
+ if (message.projectId !== "") {
10873
+ writer.uint32(18).string(message.projectId);
10874
+ }
10875
+ if (message.activeAfter !== undefined) {
10876
+ Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(26).fork()).join();
10877
+ }
10878
+ if (message.topSessions !== 0) {
10879
+ writer.uint32(32).int32(message.topSessions);
10880
+ }
10881
+ return writer;
10882
+ },
10883
+
10884
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewRequest {
10885
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
10886
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
10887
+ if (previousRecursionDepth >= 100) {
10888
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
10889
+ }
10890
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
10891
+ try {
10892
+ const end = length === undefined ? reader.len : reader.pos + length;
10893
+ const message = createBaseProjectOverviewRequest();
10894
+ while (reader.pos < end) {
10895
+ const tag = reader.uint32();
10896
+ switch (tag >>> 3) {
10897
+ case 1: {
10898
+ if (tag !== 10) {
10899
+ break;
10900
+ }
10901
+
10902
+ message.organizationId = reader.string();
10903
+ continue;
10904
+ }
10905
+ case 2: {
10906
+ if (tag !== 18) {
10907
+ break;
10908
+ }
10909
+
10910
+ message.projectId = reader.string();
10911
+ continue;
10912
+ }
10913
+ case 3: {
10914
+ if (tag !== 26) {
10915
+ break;
10916
+ }
10917
+
10918
+ message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10919
+ continue;
10920
+ }
10921
+ case 4: {
10922
+ if (tag !== 32) {
10923
+ break;
10924
+ }
10925
+
10926
+ message.topSessions = reader.int32();
10927
+ continue;
10928
+ }
10929
+ }
10930
+ if ((tag & 7) === 4 || tag === 0) {
10931
+ break;
10932
+ }
10933
+ reader.skip(tag & 7);
10934
+ }
10935
+ return message;
10936
+ } finally {
10937
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
10938
+ }
10939
+ },
10940
+
10941
+ fromJSON(object: any): ProjectOverviewRequest {
10942
+ return {
10943
+ organizationId: isSet(object.organizationId)
10944
+ ? globalThis.String(object.organizationId)
10945
+ : isSet(object.organization_id)
10946
+ ? globalThis.String(object.organization_id)
10947
+ : "",
10948
+ projectId: isSet(object.projectId)
10949
+ ? globalThis.String(object.projectId)
10950
+ : isSet(object.project_id)
10951
+ ? globalThis.String(object.project_id)
10952
+ : "",
10953
+ activeAfter: isSet(object.activeAfter)
10954
+ ? fromJsonTimestamp(object.activeAfter)
10955
+ : isSet(object.active_after)
10956
+ ? fromJsonTimestamp(object.active_after)
10957
+ : undefined,
10958
+ topSessions: isSet(object.topSessions)
10959
+ ? globalThis.Number(object.topSessions)
10960
+ : isSet(object.top_sessions)
10961
+ ? globalThis.Number(object.top_sessions)
10962
+ : 0,
10963
+ };
10964
+ },
10965
+
10966
+ toJSON(message: ProjectOverviewRequest): unknown {
10967
+ const obj: any = {};
10968
+ if (message.organizationId !== "") {
10969
+ obj.organizationId = message.organizationId;
10970
+ }
10971
+ if (message.projectId !== "") {
10972
+ obj.projectId = message.projectId;
10973
+ }
10974
+ if (message.activeAfter !== undefined) {
10975
+ obj.activeAfter = message.activeAfter.toISOString();
10976
+ }
10977
+ if (message.topSessions !== 0) {
10978
+ obj.topSessions = Math.round(message.topSessions);
10979
+ }
10980
+ return obj;
10981
+ },
10982
+
10983
+ create<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(base?: I): ProjectOverviewRequest {
10984
+ return ProjectOverviewRequest.fromPartial(base ?? ({} as any));
10985
+ },
10986
+ fromPartial<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(object: I): ProjectOverviewRequest {
10987
+ const message = createBaseProjectOverviewRequest();
10988
+ message.organizationId = object.organizationId ?? "";
10989
+ message.projectId = object.projectId ?? "";
10990
+ message.activeAfter = object.activeAfter ?? undefined;
10991
+ message.topSessions = object.topSessions ?? 0;
10992
+ return message;
10993
+ },
10994
+ };
10995
+
10996
+ function createBaseProjectOverview(): ProjectOverview {
10997
+ return { totals: undefined, byModel: [], byProvider: [], bySource: [], topSessions: [] };
10998
+ }
10999
+
11000
+ export const ProjectOverview: MessageFns<ProjectOverview> = {
11001
+ encode(message: ProjectOverview, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
11002
+ if (message.totals !== undefined) {
11003
+ ProjectOverviewTotals.encode(message.totals, writer.uint32(10).fork()).join();
11004
+ }
11005
+ for (const v of message.byModel) {
11006
+ ProjectOverviewSlice.encode(v!, writer.uint32(18).fork()).join();
11007
+ }
11008
+ for (const v of message.byProvider) {
11009
+ ProjectOverviewSlice.encode(v!, writer.uint32(26).fork()).join();
11010
+ }
11011
+ for (const v of message.bySource) {
11012
+ ProjectOverviewSlice.encode(v!, writer.uint32(34).fork()).join();
11013
+ }
11014
+ for (const v of message.topSessions) {
11015
+ ProjectSessionRef.encode(v!, writer.uint32(42).fork()).join();
11016
+ }
11017
+ return writer;
11018
+ },
11019
+
11020
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverview {
11021
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
11022
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
11023
+ if (previousRecursionDepth >= 100) {
11024
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
11025
+ }
11026
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
11027
+ try {
11028
+ const end = length === undefined ? reader.len : reader.pos + length;
11029
+ const message = createBaseProjectOverview();
11030
+ while (reader.pos < end) {
11031
+ const tag = reader.uint32();
11032
+ switch (tag >>> 3) {
11033
+ case 1: {
11034
+ if (tag !== 10) {
11035
+ break;
11036
+ }
11037
+
11038
+ message.totals = ProjectOverviewTotals.decode(reader, reader.uint32());
11039
+ continue;
11040
+ }
11041
+ case 2: {
11042
+ if (tag !== 18) {
11043
+ break;
11044
+ }
11045
+
11046
+ message.byModel.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
11047
+ continue;
11048
+ }
11049
+ case 3: {
11050
+ if (tag !== 26) {
11051
+ break;
11052
+ }
11053
+
11054
+ message.byProvider.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
11055
+ continue;
11056
+ }
11057
+ case 4: {
11058
+ if (tag !== 34) {
11059
+ break;
11060
+ }
11061
+
11062
+ message.bySource.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
11063
+ continue;
11064
+ }
11065
+ case 5: {
11066
+ if (tag !== 42) {
11067
+ break;
11068
+ }
11069
+
11070
+ message.topSessions.push(ProjectSessionRef.decode(reader, reader.uint32()));
11071
+ continue;
11072
+ }
11073
+ }
11074
+ if ((tag & 7) === 4 || tag === 0) {
11075
+ break;
11076
+ }
11077
+ reader.skip(tag & 7);
11078
+ }
11079
+ return message;
11080
+ } finally {
11081
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
11082
+ }
11083
+ },
11084
+
11085
+ fromJSON(object: any): ProjectOverview {
11086
+ return {
11087
+ totals: isSet(object.totals) ? ProjectOverviewTotals.fromJSON(object.totals) : undefined,
11088
+ byModel: globalThis.Array.isArray(object?.byModel)
11089
+ ? object.byModel.map((e: any) => ProjectOverviewSlice.fromJSON(e))
11090
+ : globalThis.Array.isArray(object?.by_model)
11091
+ ? object.by_model.map((e: any) => ProjectOverviewSlice.fromJSON(e))
11092
+ : [],
11093
+ byProvider: globalThis.Array.isArray(object?.byProvider)
11094
+ ? object.byProvider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
11095
+ : globalThis.Array.isArray(object?.by_provider)
11096
+ ? object.by_provider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
11097
+ : [],
11098
+ bySource: globalThis.Array.isArray(object?.bySource)
11099
+ ? object.bySource.map((e: any) => ProjectOverviewSlice.fromJSON(e))
11100
+ : globalThis.Array.isArray(object?.by_source)
11101
+ ? object.by_source.map((e: any) => ProjectOverviewSlice.fromJSON(e))
11102
+ : [],
11103
+ topSessions: globalThis.Array.isArray(object?.topSessions)
11104
+ ? object.topSessions.map((e: any) => ProjectSessionRef.fromJSON(e))
11105
+ : globalThis.Array.isArray(object?.top_sessions)
11106
+ ? object.top_sessions.map((e: any) => ProjectSessionRef.fromJSON(e))
11107
+ : [],
11108
+ };
11109
+ },
11110
+
11111
+ toJSON(message: ProjectOverview): unknown {
11112
+ const obj: any = {};
11113
+ if (message.totals !== undefined) {
11114
+ obj.totals = ProjectOverviewTotals.toJSON(message.totals);
11115
+ }
11116
+ if (message.byModel?.length) {
11117
+ obj.byModel = message.byModel.map((e) => ProjectOverviewSlice.toJSON(e));
11118
+ }
11119
+ if (message.byProvider?.length) {
11120
+ obj.byProvider = message.byProvider.map((e) => ProjectOverviewSlice.toJSON(e));
11121
+ }
11122
+ if (message.bySource?.length) {
11123
+ obj.bySource = message.bySource.map((e) => ProjectOverviewSlice.toJSON(e));
11124
+ }
11125
+ if (message.topSessions?.length) {
11126
+ obj.topSessions = message.topSessions.map((e) => ProjectSessionRef.toJSON(e));
11127
+ }
11128
+ return obj;
11129
+ },
11130
+
11131
+ create<I extends Exact<DeepPartial<ProjectOverview>, I>>(base?: I): ProjectOverview {
11132
+ return ProjectOverview.fromPartial(base ?? ({} as any));
11133
+ },
11134
+ fromPartial<I extends Exact<DeepPartial<ProjectOverview>, I>>(object: I): ProjectOverview {
11135
+ const message = createBaseProjectOverview();
11136
+ message.totals = (object.totals !== undefined && object.totals !== null)
11137
+ ? ProjectOverviewTotals.fromPartial(object.totals)
11138
+ : undefined;
11139
+ message.byModel = object.byModel?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
11140
+ message.byProvider = object.byProvider?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
11141
+ message.bySource = object.bySource?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
11142
+ message.topSessions = object.topSessions?.map((e) => ProjectSessionRef.fromPartial(e)) || [];
11143
+ return message;
11144
+ },
11145
+ };
11146
+
11147
+ function createBaseProjectOverviewTotals(): ProjectOverviewTotals {
11148
+ return {
11149
+ sessions: 0,
11150
+ modelCalls: 0,
11151
+ toolCalls: 0,
11152
+ userMessages: 0,
11153
+ inputTokens: 0,
11154
+ outputTokens: 0,
11155
+ cacheReadTokens: 0,
11156
+ cacheWriteTokens: 0,
11157
+ costUsd: 0,
11158
+ distinctUsers: 0,
11159
+ commits: 0,
11160
+ pushes: 0,
11161
+ filesTouched: 0,
11162
+ lastActivityAt: undefined,
11163
+ };
11164
+ }
11165
+
11166
+ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
11167
+ encode(message: ProjectOverviewTotals, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
11168
+ if (message.sessions !== 0) {
11169
+ writer.uint32(8).uint64(message.sessions);
11170
+ }
11171
+ if (message.modelCalls !== 0) {
11172
+ writer.uint32(16).uint64(message.modelCalls);
11173
+ }
11174
+ if (message.toolCalls !== 0) {
11175
+ writer.uint32(24).uint64(message.toolCalls);
11176
+ }
11177
+ if (message.userMessages !== 0) {
11178
+ writer.uint32(32).uint64(message.userMessages);
11179
+ }
11180
+ if (message.inputTokens !== 0) {
11181
+ writer.uint32(40).uint64(message.inputTokens);
11182
+ }
11183
+ if (message.outputTokens !== 0) {
11184
+ writer.uint32(48).uint64(message.outputTokens);
11185
+ }
11186
+ if (message.cacheReadTokens !== 0) {
11187
+ writer.uint32(56).uint64(message.cacheReadTokens);
11188
+ }
11189
+ if (message.cacheWriteTokens !== 0) {
11190
+ writer.uint32(64).uint64(message.cacheWriteTokens);
11191
+ }
11192
+ if (message.costUsd !== 0) {
11193
+ writer.uint32(73).double(message.costUsd);
11194
+ }
11195
+ if (message.distinctUsers !== 0) {
11196
+ writer.uint32(80).uint64(message.distinctUsers);
11197
+ }
11198
+ if (message.commits !== 0) {
11199
+ writer.uint32(88).uint64(message.commits);
11200
+ }
11201
+ if (message.pushes !== 0) {
11202
+ writer.uint32(96).uint64(message.pushes);
11203
+ }
11204
+ if (message.filesTouched !== 0) {
11205
+ writer.uint32(104).uint64(message.filesTouched);
11206
+ }
11207
+ if (message.lastActivityAt !== undefined) {
11208
+ Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(114).fork()).join();
11209
+ }
11210
+ return writer;
11211
+ },
11212
+
11213
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewTotals {
11214
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
11215
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
11216
+ if (previousRecursionDepth >= 100) {
11217
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
11218
+ }
11219
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
11220
+ try {
11221
+ const end = length === undefined ? reader.len : reader.pos + length;
11222
+ const message = createBaseProjectOverviewTotals();
11223
+ while (reader.pos < end) {
11224
+ const tag = reader.uint32();
11225
+ switch (tag >>> 3) {
11226
+ case 1: {
11227
+ if (tag !== 8) {
11228
+ break;
11229
+ }
11230
+
11231
+ message.sessions = longToNumber(reader.uint64());
11232
+ continue;
11233
+ }
11234
+ case 2: {
11235
+ if (tag !== 16) {
11236
+ break;
11237
+ }
11238
+
11239
+ message.modelCalls = longToNumber(reader.uint64());
11240
+ continue;
11241
+ }
11242
+ case 3: {
11243
+ if (tag !== 24) {
11244
+ break;
11245
+ }
11246
+
11247
+ message.toolCalls = longToNumber(reader.uint64());
11248
+ continue;
11249
+ }
11250
+ case 4: {
11251
+ if (tag !== 32) {
11252
+ break;
11253
+ }
11254
+
11255
+ message.userMessages = longToNumber(reader.uint64());
11256
+ continue;
11257
+ }
11258
+ case 5: {
11259
+ if (tag !== 40) {
11260
+ break;
11261
+ }
11262
+
11263
+ message.inputTokens = longToNumber(reader.uint64());
11264
+ continue;
11265
+ }
11266
+ case 6: {
11267
+ if (tag !== 48) {
11268
+ break;
11269
+ }
11270
+
11271
+ message.outputTokens = longToNumber(reader.uint64());
11272
+ continue;
11273
+ }
11274
+ case 7: {
11275
+ if (tag !== 56) {
11276
+ break;
11277
+ }
11278
+
11279
+ message.cacheReadTokens = longToNumber(reader.uint64());
11280
+ continue;
11281
+ }
11282
+ case 8: {
11283
+ if (tag !== 64) {
11284
+ break;
11285
+ }
11286
+
11287
+ message.cacheWriteTokens = longToNumber(reader.uint64());
11288
+ continue;
11289
+ }
11290
+ case 9: {
11291
+ if (tag !== 73) {
11292
+ break;
11293
+ }
11294
+
11295
+ message.costUsd = reader.double();
11296
+ continue;
11297
+ }
11298
+ case 10: {
11299
+ if (tag !== 80) {
11300
+ break;
11301
+ }
11302
+
11303
+ message.distinctUsers = longToNumber(reader.uint64());
11304
+ continue;
11305
+ }
11306
+ case 11: {
11307
+ if (tag !== 88) {
11308
+ break;
11309
+ }
11310
+
11311
+ message.commits = longToNumber(reader.uint64());
11312
+ continue;
11313
+ }
11314
+ case 12: {
11315
+ if (tag !== 96) {
11316
+ break;
11317
+ }
11318
+
11319
+ message.pushes = longToNumber(reader.uint64());
11320
+ continue;
11321
+ }
11322
+ case 13: {
11323
+ if (tag !== 104) {
11324
+ break;
11325
+ }
11326
+
11327
+ message.filesTouched = longToNumber(reader.uint64());
11328
+ continue;
11329
+ }
11330
+ case 14: {
11331
+ if (tag !== 114) {
11332
+ break;
11333
+ }
11334
+
11335
+ message.lastActivityAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
11336
+ continue;
11337
+ }
11338
+ }
11339
+ if ((tag & 7) === 4 || tag === 0) {
11340
+ break;
11341
+ }
11342
+ reader.skip(tag & 7);
11343
+ }
11344
+ return message;
11345
+ } finally {
11346
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
11347
+ }
11348
+ },
11349
+
11350
+ fromJSON(object: any): ProjectOverviewTotals {
11351
+ return {
11352
+ sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
11353
+ modelCalls: isSet(object.modelCalls)
11354
+ ? globalThis.Number(object.modelCalls)
11355
+ : isSet(object.model_calls)
11356
+ ? globalThis.Number(object.model_calls)
11357
+ : 0,
11358
+ toolCalls: isSet(object.toolCalls)
11359
+ ? globalThis.Number(object.toolCalls)
11360
+ : isSet(object.tool_calls)
11361
+ ? globalThis.Number(object.tool_calls)
11362
+ : 0,
11363
+ userMessages: isSet(object.userMessages)
11364
+ ? globalThis.Number(object.userMessages)
11365
+ : isSet(object.user_messages)
11366
+ ? globalThis.Number(object.user_messages)
11367
+ : 0,
11368
+ inputTokens: isSet(object.inputTokens)
11369
+ ? globalThis.Number(object.inputTokens)
10635
11370
  : isSet(object.input_tokens)
10636
11371
  ? globalThis.Number(object.input_tokens)
10637
11372
  : 0,
@@ -10655,17 +11390,355 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10655
11390
  : isSet(object.cost_usd)
10656
11391
  ? globalThis.Number(object.cost_usd)
10657
11392
  : 0,
10658
- distinctUsers: isSet(object.distinctUsers)
10659
- ? globalThis.Number(object.distinctUsers)
10660
- : isSet(object.distinct_users)
10661
- ? globalThis.Number(object.distinct_users)
10662
- : 0,
10663
- commits: isSet(object.commits) ? globalThis.Number(object.commits) : 0,
10664
- pushes: isSet(object.pushes) ? globalThis.Number(object.pushes) : 0,
10665
- filesTouched: isSet(object.filesTouched)
10666
- ? globalThis.Number(object.filesTouched)
10667
- : isSet(object.files_touched)
10668
- ? globalThis.Number(object.files_touched)
11393
+ distinctUsers: isSet(object.distinctUsers)
11394
+ ? globalThis.Number(object.distinctUsers)
11395
+ : isSet(object.distinct_users)
11396
+ ? globalThis.Number(object.distinct_users)
11397
+ : 0,
11398
+ commits: isSet(object.commits) ? globalThis.Number(object.commits) : 0,
11399
+ pushes: isSet(object.pushes) ? globalThis.Number(object.pushes) : 0,
11400
+ filesTouched: isSet(object.filesTouched)
11401
+ ? globalThis.Number(object.filesTouched)
11402
+ : isSet(object.files_touched)
11403
+ ? globalThis.Number(object.files_touched)
11404
+ : 0,
11405
+ lastActivityAt: isSet(object.lastActivityAt)
11406
+ ? fromJsonTimestamp(object.lastActivityAt)
11407
+ : isSet(object.last_activity_at)
11408
+ ? fromJsonTimestamp(object.last_activity_at)
11409
+ : undefined,
11410
+ };
11411
+ },
11412
+
11413
+ toJSON(message: ProjectOverviewTotals): unknown {
11414
+ const obj: any = {};
11415
+ if (message.sessions !== 0) {
11416
+ obj.sessions = Math.round(message.sessions);
11417
+ }
11418
+ if (message.modelCalls !== 0) {
11419
+ obj.modelCalls = Math.round(message.modelCalls);
11420
+ }
11421
+ if (message.toolCalls !== 0) {
11422
+ obj.toolCalls = Math.round(message.toolCalls);
11423
+ }
11424
+ if (message.userMessages !== 0) {
11425
+ obj.userMessages = Math.round(message.userMessages);
11426
+ }
11427
+ if (message.inputTokens !== 0) {
11428
+ obj.inputTokens = Math.round(message.inputTokens);
11429
+ }
11430
+ if (message.outputTokens !== 0) {
11431
+ obj.outputTokens = Math.round(message.outputTokens);
11432
+ }
11433
+ if (message.cacheReadTokens !== 0) {
11434
+ obj.cacheReadTokens = Math.round(message.cacheReadTokens);
11435
+ }
11436
+ if (message.cacheWriteTokens !== 0) {
11437
+ obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
11438
+ }
11439
+ if (message.costUsd !== 0) {
11440
+ obj.costUsd = message.costUsd;
11441
+ }
11442
+ if (message.distinctUsers !== 0) {
11443
+ obj.distinctUsers = Math.round(message.distinctUsers);
11444
+ }
11445
+ if (message.commits !== 0) {
11446
+ obj.commits = Math.round(message.commits);
11447
+ }
11448
+ if (message.pushes !== 0) {
11449
+ obj.pushes = Math.round(message.pushes);
11450
+ }
11451
+ if (message.filesTouched !== 0) {
11452
+ obj.filesTouched = Math.round(message.filesTouched);
11453
+ }
11454
+ if (message.lastActivityAt !== undefined) {
11455
+ obj.lastActivityAt = message.lastActivityAt.toISOString();
11456
+ }
11457
+ return obj;
11458
+ },
11459
+
11460
+ create<I extends Exact<DeepPartial<ProjectOverviewTotals>, I>>(base?: I): ProjectOverviewTotals {
11461
+ return ProjectOverviewTotals.fromPartial(base ?? ({} as any));
11462
+ },
11463
+ fromPartial<I extends Exact<DeepPartial<ProjectOverviewTotals>, I>>(object: I): ProjectOverviewTotals {
11464
+ const message = createBaseProjectOverviewTotals();
11465
+ message.sessions = object.sessions ?? 0;
11466
+ message.modelCalls = object.modelCalls ?? 0;
11467
+ message.toolCalls = object.toolCalls ?? 0;
11468
+ message.userMessages = object.userMessages ?? 0;
11469
+ message.inputTokens = object.inputTokens ?? 0;
11470
+ message.outputTokens = object.outputTokens ?? 0;
11471
+ message.cacheReadTokens = object.cacheReadTokens ?? 0;
11472
+ message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
11473
+ message.costUsd = object.costUsd ?? 0;
11474
+ message.distinctUsers = object.distinctUsers ?? 0;
11475
+ message.commits = object.commits ?? 0;
11476
+ message.pushes = object.pushes ?? 0;
11477
+ message.filesTouched = object.filesTouched ?? 0;
11478
+ message.lastActivityAt = object.lastActivityAt ?? undefined;
11479
+ return message;
11480
+ },
11481
+ };
11482
+
11483
+ function createBaseProjectOverviewSlice(): ProjectOverviewSlice {
11484
+ return { key: "", modelCalls: 0, inputTokens: 0, outputTokens: 0, costUsd: 0 };
11485
+ }
11486
+
11487
+ export const ProjectOverviewSlice: MessageFns<ProjectOverviewSlice> = {
11488
+ encode(message: ProjectOverviewSlice, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
11489
+ if (message.key !== "") {
11490
+ writer.uint32(10).string(message.key);
11491
+ }
11492
+ if (message.modelCalls !== 0) {
11493
+ writer.uint32(16).uint64(message.modelCalls);
11494
+ }
11495
+ if (message.inputTokens !== 0) {
11496
+ writer.uint32(24).uint64(message.inputTokens);
11497
+ }
11498
+ if (message.outputTokens !== 0) {
11499
+ writer.uint32(32).uint64(message.outputTokens);
11500
+ }
11501
+ if (message.costUsd !== 0) {
11502
+ writer.uint32(41).double(message.costUsd);
11503
+ }
11504
+ return writer;
11505
+ },
11506
+
11507
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewSlice {
11508
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
11509
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
11510
+ if (previousRecursionDepth >= 100) {
11511
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
11512
+ }
11513
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
11514
+ try {
11515
+ const end = length === undefined ? reader.len : reader.pos + length;
11516
+ const message = createBaseProjectOverviewSlice();
11517
+ while (reader.pos < end) {
11518
+ const tag = reader.uint32();
11519
+ switch (tag >>> 3) {
11520
+ case 1: {
11521
+ if (tag !== 10) {
11522
+ break;
11523
+ }
11524
+
11525
+ message.key = reader.string();
11526
+ continue;
11527
+ }
11528
+ case 2: {
11529
+ if (tag !== 16) {
11530
+ break;
11531
+ }
11532
+
11533
+ message.modelCalls = longToNumber(reader.uint64());
11534
+ continue;
11535
+ }
11536
+ case 3: {
11537
+ if (tag !== 24) {
11538
+ break;
11539
+ }
11540
+
11541
+ message.inputTokens = longToNumber(reader.uint64());
11542
+ continue;
11543
+ }
11544
+ case 4: {
11545
+ if (tag !== 32) {
11546
+ break;
11547
+ }
11548
+
11549
+ message.outputTokens = longToNumber(reader.uint64());
11550
+ continue;
11551
+ }
11552
+ case 5: {
11553
+ if (tag !== 41) {
11554
+ break;
11555
+ }
11556
+
11557
+ message.costUsd = reader.double();
11558
+ continue;
11559
+ }
11560
+ }
11561
+ if ((tag & 7) === 4 || tag === 0) {
11562
+ break;
11563
+ }
11564
+ reader.skip(tag & 7);
11565
+ }
11566
+ return message;
11567
+ } finally {
11568
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
11569
+ }
11570
+ },
11571
+
11572
+ fromJSON(object: any): ProjectOverviewSlice {
11573
+ return {
11574
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
11575
+ modelCalls: isSet(object.modelCalls)
11576
+ ? globalThis.Number(object.modelCalls)
11577
+ : isSet(object.model_calls)
11578
+ ? globalThis.Number(object.model_calls)
11579
+ : 0,
11580
+ inputTokens: isSet(object.inputTokens)
11581
+ ? globalThis.Number(object.inputTokens)
11582
+ : isSet(object.input_tokens)
11583
+ ? globalThis.Number(object.input_tokens)
11584
+ : 0,
11585
+ outputTokens: isSet(object.outputTokens)
11586
+ ? globalThis.Number(object.outputTokens)
11587
+ : isSet(object.output_tokens)
11588
+ ? globalThis.Number(object.output_tokens)
11589
+ : 0,
11590
+ costUsd: isSet(object.costUsd)
11591
+ ? globalThis.Number(object.costUsd)
11592
+ : isSet(object.cost_usd)
11593
+ ? globalThis.Number(object.cost_usd)
11594
+ : 0,
11595
+ };
11596
+ },
11597
+
11598
+ toJSON(message: ProjectOverviewSlice): unknown {
11599
+ const obj: any = {};
11600
+ if (message.key !== "") {
11601
+ obj.key = message.key;
11602
+ }
11603
+ if (message.modelCalls !== 0) {
11604
+ obj.modelCalls = Math.round(message.modelCalls);
11605
+ }
11606
+ if (message.inputTokens !== 0) {
11607
+ obj.inputTokens = Math.round(message.inputTokens);
11608
+ }
11609
+ if (message.outputTokens !== 0) {
11610
+ obj.outputTokens = Math.round(message.outputTokens);
11611
+ }
11612
+ if (message.costUsd !== 0) {
11613
+ obj.costUsd = message.costUsd;
11614
+ }
11615
+ return obj;
11616
+ },
11617
+
11618
+ create<I extends Exact<DeepPartial<ProjectOverviewSlice>, I>>(base?: I): ProjectOverviewSlice {
11619
+ return ProjectOverviewSlice.fromPartial(base ?? ({} as any));
11620
+ },
11621
+ fromPartial<I extends Exact<DeepPartial<ProjectOverviewSlice>, I>>(object: I): ProjectOverviewSlice {
11622
+ const message = createBaseProjectOverviewSlice();
11623
+ message.key = object.key ?? "";
11624
+ message.modelCalls = object.modelCalls ?? 0;
11625
+ message.inputTokens = object.inputTokens ?? 0;
11626
+ message.outputTokens = object.outputTokens ?? 0;
11627
+ message.costUsd = object.costUsd ?? 0;
11628
+ return message;
11629
+ },
11630
+ };
11631
+
11632
+ function createBaseProjectSessionRef(): ProjectSessionRef {
11633
+ return { sessionId: "", sourceSystem: "", costUsd: 0, modelCalls: 0, lastActivityAt: undefined };
11634
+ }
11635
+
11636
+ export const ProjectSessionRef: MessageFns<ProjectSessionRef> = {
11637
+ encode(message: ProjectSessionRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
11638
+ if (message.sessionId !== "") {
11639
+ writer.uint32(10).string(message.sessionId);
11640
+ }
11641
+ if (message.sourceSystem !== "") {
11642
+ writer.uint32(18).string(message.sourceSystem);
11643
+ }
11644
+ if (message.costUsd !== 0) {
11645
+ writer.uint32(25).double(message.costUsd);
11646
+ }
11647
+ if (message.modelCalls !== 0) {
11648
+ writer.uint32(32).uint64(message.modelCalls);
11649
+ }
11650
+ if (message.lastActivityAt !== undefined) {
11651
+ Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(42).fork()).join();
11652
+ }
11653
+ return writer;
11654
+ },
11655
+
11656
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectSessionRef {
11657
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
11658
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
11659
+ if (previousRecursionDepth >= 100) {
11660
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
11661
+ }
11662
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
11663
+ try {
11664
+ const end = length === undefined ? reader.len : reader.pos + length;
11665
+ const message = createBaseProjectSessionRef();
11666
+ while (reader.pos < end) {
11667
+ const tag = reader.uint32();
11668
+ switch (tag >>> 3) {
11669
+ case 1: {
11670
+ if (tag !== 10) {
11671
+ break;
11672
+ }
11673
+
11674
+ message.sessionId = reader.string();
11675
+ continue;
11676
+ }
11677
+ case 2: {
11678
+ if (tag !== 18) {
11679
+ break;
11680
+ }
11681
+
11682
+ message.sourceSystem = reader.string();
11683
+ continue;
11684
+ }
11685
+ case 3: {
11686
+ if (tag !== 25) {
11687
+ break;
11688
+ }
11689
+
11690
+ message.costUsd = reader.double();
11691
+ continue;
11692
+ }
11693
+ case 4: {
11694
+ if (tag !== 32) {
11695
+ break;
11696
+ }
11697
+
11698
+ message.modelCalls = longToNumber(reader.uint64());
11699
+ continue;
11700
+ }
11701
+ case 5: {
11702
+ if (tag !== 42) {
11703
+ break;
11704
+ }
11705
+
11706
+ message.lastActivityAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
11707
+ continue;
11708
+ }
11709
+ }
11710
+ if ((tag & 7) === 4 || tag === 0) {
11711
+ break;
11712
+ }
11713
+ reader.skip(tag & 7);
11714
+ }
11715
+ return message;
11716
+ } finally {
11717
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
11718
+ }
11719
+ },
11720
+
11721
+ fromJSON(object: any): ProjectSessionRef {
11722
+ return {
11723
+ sessionId: isSet(object.sessionId)
11724
+ ? globalThis.String(object.sessionId)
11725
+ : isSet(object.session_id)
11726
+ ? globalThis.String(object.session_id)
11727
+ : "",
11728
+ sourceSystem: isSet(object.sourceSystem)
11729
+ ? globalThis.String(object.sourceSystem)
11730
+ : isSet(object.source_system)
11731
+ ? globalThis.String(object.source_system)
11732
+ : "",
11733
+ costUsd: isSet(object.costUsd)
11734
+ ? globalThis.Number(object.costUsd)
11735
+ : isSet(object.cost_usd)
11736
+ ? globalThis.Number(object.cost_usd)
11737
+ : 0,
11738
+ modelCalls: isSet(object.modelCalls)
11739
+ ? globalThis.Number(object.modelCalls)
11740
+ : isSet(object.model_calls)
11741
+ ? globalThis.Number(object.model_calls)
10669
11742
  : 0,
10670
11743
  lastActivityAt: isSet(object.lastActivityAt)
10671
11744
  ? fromJsonTimestamp(object.lastActivityAt)
@@ -10675,101 +11748,242 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
10675
11748
  };
10676
11749
  },
10677
11750
 
10678
- toJSON(message: ProjectOverviewTotals): unknown {
11751
+ toJSON(message: ProjectSessionRef): unknown {
10679
11752
  const obj: any = {};
10680
- if (message.sessions !== 0) {
10681
- obj.sessions = Math.round(message.sessions);
11753
+ if (message.sessionId !== "") {
11754
+ obj.sessionId = message.sessionId;
11755
+ }
11756
+ if (message.sourceSystem !== "") {
11757
+ obj.sourceSystem = message.sourceSystem;
11758
+ }
11759
+ if (message.costUsd !== 0) {
11760
+ obj.costUsd = message.costUsd;
10682
11761
  }
10683
11762
  if (message.modelCalls !== 0) {
10684
11763
  obj.modelCalls = Math.round(message.modelCalls);
10685
11764
  }
10686
- if (message.toolCalls !== 0) {
10687
- obj.toolCalls = Math.round(message.toolCalls);
11765
+ if (message.lastActivityAt !== undefined) {
11766
+ obj.lastActivityAt = message.lastActivityAt.toISOString();
10688
11767
  }
10689
- if (message.userMessages !== 0) {
10690
- obj.userMessages = Math.round(message.userMessages);
11768
+ return obj;
11769
+ },
11770
+
11771
+ create<I extends Exact<DeepPartial<ProjectSessionRef>, I>>(base?: I): ProjectSessionRef {
11772
+ return ProjectSessionRef.fromPartial(base ?? ({} as any));
11773
+ },
11774
+ fromPartial<I extends Exact<DeepPartial<ProjectSessionRef>, I>>(object: I): ProjectSessionRef {
11775
+ const message = createBaseProjectSessionRef();
11776
+ message.sessionId = object.sessionId ?? "";
11777
+ message.sourceSystem = object.sourceSystem ?? "";
11778
+ message.costUsd = object.costUsd ?? 0;
11779
+ message.modelCalls = object.modelCalls ?? 0;
11780
+ message.lastActivityAt = object.lastActivityAt ?? undefined;
11781
+ return message;
11782
+ },
11783
+ };
11784
+
11785
+ function createBaseResourceRankingsRequest(): ResourceRankingsRequest {
11786
+ return { organizationId: "", projectId: "", filter: undefined, dimension: 0, timeWindow: 0, topN: 0 };
11787
+ }
11788
+
11789
+ export const ResourceRankingsRequest: MessageFns<ResourceRankingsRequest> = {
11790
+ encode(message: ResourceRankingsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
11791
+ if (message.organizationId !== "") {
11792
+ writer.uint32(10).string(message.organizationId);
10691
11793
  }
10692
- if (message.inputTokens !== 0) {
10693
- obj.inputTokens = Math.round(message.inputTokens);
11794
+ if (message.projectId !== "") {
11795
+ writer.uint32(18).string(message.projectId);
10694
11796
  }
10695
- if (message.outputTokens !== 0) {
10696
- obj.outputTokens = Math.round(message.outputTokens);
11797
+ if (message.filter !== undefined) {
11798
+ AISessionFilter.encode(message.filter, writer.uint32(26).fork()).join();
10697
11799
  }
10698
- if (message.cacheReadTokens !== 0) {
10699
- obj.cacheReadTokens = Math.round(message.cacheReadTokens);
11800
+ if (message.dimension !== 0) {
11801
+ writer.uint32(32).int32(message.dimension);
10700
11802
  }
10701
- if (message.cacheWriteTokens !== 0) {
10702
- obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
11803
+ if (message.timeWindow !== 0) {
11804
+ writer.uint32(40).int32(message.timeWindow);
10703
11805
  }
10704
- if (message.costUsd !== 0) {
10705
- obj.costUsd = message.costUsd;
11806
+ if (message.topN !== 0) {
11807
+ writer.uint32(48).int32(message.topN);
11808
+ }
11809
+ return writer;
11810
+ },
11811
+
11812
+ decode(input: BinaryReader | Uint8Array, length?: number): ResourceRankingsRequest {
11813
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
11814
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
11815
+ if (previousRecursionDepth >= 100) {
11816
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
11817
+ }
11818
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
11819
+ try {
11820
+ const end = length === undefined ? reader.len : reader.pos + length;
11821
+ const message = createBaseResourceRankingsRequest();
11822
+ while (reader.pos < end) {
11823
+ const tag = reader.uint32();
11824
+ switch (tag >>> 3) {
11825
+ case 1: {
11826
+ if (tag !== 10) {
11827
+ break;
11828
+ }
11829
+
11830
+ message.organizationId = reader.string();
11831
+ continue;
11832
+ }
11833
+ case 2: {
11834
+ if (tag !== 18) {
11835
+ break;
11836
+ }
11837
+
11838
+ message.projectId = reader.string();
11839
+ continue;
11840
+ }
11841
+ case 3: {
11842
+ if (tag !== 26) {
11843
+ break;
11844
+ }
11845
+
11846
+ message.filter = AISessionFilter.decode(reader, reader.uint32());
11847
+ continue;
11848
+ }
11849
+ case 4: {
11850
+ if (tag !== 32) {
11851
+ break;
11852
+ }
11853
+
11854
+ message.dimension = reader.int32() as any;
11855
+ continue;
11856
+ }
11857
+ case 5: {
11858
+ if (tag !== 40) {
11859
+ break;
11860
+ }
11861
+
11862
+ message.timeWindow = reader.int32() as any;
11863
+ continue;
11864
+ }
11865
+ case 6: {
11866
+ if (tag !== 48) {
11867
+ break;
11868
+ }
11869
+
11870
+ message.topN = reader.int32();
11871
+ continue;
11872
+ }
11873
+ }
11874
+ if ((tag & 7) === 4 || tag === 0) {
11875
+ break;
11876
+ }
11877
+ reader.skip(tag & 7);
11878
+ }
11879
+ return message;
11880
+ } finally {
11881
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
11882
+ }
11883
+ },
11884
+
11885
+ fromJSON(object: any): ResourceRankingsRequest {
11886
+ return {
11887
+ organizationId: isSet(object.organizationId)
11888
+ ? globalThis.String(object.organizationId)
11889
+ : isSet(object.organization_id)
11890
+ ? globalThis.String(object.organization_id)
11891
+ : "",
11892
+ projectId: isSet(object.projectId)
11893
+ ? globalThis.String(object.projectId)
11894
+ : isSet(object.project_id)
11895
+ ? globalThis.String(object.project_id)
11896
+ : "",
11897
+ filter: isSet(object.filter) ? AISessionFilter.fromJSON(object.filter) : undefined,
11898
+ dimension: isSet(object.dimension) ? aIResourceDimensionFromJSON(object.dimension) : 0,
11899
+ timeWindow: isSet(object.timeWindow)
11900
+ ? analyticsTimeWindowFromJSON(object.timeWindow)
11901
+ : isSet(object.time_window)
11902
+ ? analyticsTimeWindowFromJSON(object.time_window)
11903
+ : 0,
11904
+ topN: isSet(object.topN)
11905
+ ? globalThis.Number(object.topN)
11906
+ : isSet(object.top_n)
11907
+ ? globalThis.Number(object.top_n)
11908
+ : 0,
11909
+ };
11910
+ },
11911
+
11912
+ toJSON(message: ResourceRankingsRequest): unknown {
11913
+ const obj: any = {};
11914
+ if (message.organizationId !== "") {
11915
+ obj.organizationId = message.organizationId;
10706
11916
  }
10707
- if (message.distinctUsers !== 0) {
10708
- obj.distinctUsers = Math.round(message.distinctUsers);
11917
+ if (message.projectId !== "") {
11918
+ obj.projectId = message.projectId;
10709
11919
  }
10710
- if (message.commits !== 0) {
10711
- obj.commits = Math.round(message.commits);
11920
+ if (message.filter !== undefined) {
11921
+ obj.filter = AISessionFilter.toJSON(message.filter);
10712
11922
  }
10713
- if (message.pushes !== 0) {
10714
- obj.pushes = Math.round(message.pushes);
11923
+ if (message.dimension !== 0) {
11924
+ obj.dimension = aIResourceDimensionToJSON(message.dimension);
10715
11925
  }
10716
- if (message.filesTouched !== 0) {
10717
- obj.filesTouched = Math.round(message.filesTouched);
11926
+ if (message.timeWindow !== 0) {
11927
+ obj.timeWindow = analyticsTimeWindowToJSON(message.timeWindow);
10718
11928
  }
10719
- if (message.lastActivityAt !== undefined) {
10720
- obj.lastActivityAt = message.lastActivityAt.toISOString();
11929
+ if (message.topN !== 0) {
11930
+ obj.topN = Math.round(message.topN);
10721
11931
  }
10722
11932
  return obj;
10723
11933
  },
10724
11934
 
10725
- create<I extends Exact<DeepPartial<ProjectOverviewTotals>, I>>(base?: I): ProjectOverviewTotals {
10726
- return ProjectOverviewTotals.fromPartial(base ?? ({} as any));
11935
+ create<I extends Exact<DeepPartial<ResourceRankingsRequest>, I>>(base?: I): ResourceRankingsRequest {
11936
+ return ResourceRankingsRequest.fromPartial(base ?? ({} as any));
10727
11937
  },
10728
- fromPartial<I extends Exact<DeepPartial<ProjectOverviewTotals>, I>>(object: I): ProjectOverviewTotals {
10729
- const message = createBaseProjectOverviewTotals();
10730
- message.sessions = object.sessions ?? 0;
10731
- message.modelCalls = object.modelCalls ?? 0;
10732
- message.toolCalls = object.toolCalls ?? 0;
10733
- message.userMessages = object.userMessages ?? 0;
10734
- message.inputTokens = object.inputTokens ?? 0;
10735
- message.outputTokens = object.outputTokens ?? 0;
10736
- message.cacheReadTokens = object.cacheReadTokens ?? 0;
10737
- message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
10738
- message.costUsd = object.costUsd ?? 0;
10739
- message.distinctUsers = object.distinctUsers ?? 0;
10740
- message.commits = object.commits ?? 0;
10741
- message.pushes = object.pushes ?? 0;
10742
- message.filesTouched = object.filesTouched ?? 0;
10743
- message.lastActivityAt = object.lastActivityAt ?? undefined;
11938
+ fromPartial<I extends Exact<DeepPartial<ResourceRankingsRequest>, I>>(object: I): ResourceRankingsRequest {
11939
+ const message = createBaseResourceRankingsRequest();
11940
+ message.organizationId = object.organizationId ?? "";
11941
+ message.projectId = object.projectId ?? "";
11942
+ message.filter = (object.filter !== undefined && object.filter !== null)
11943
+ ? AISessionFilter.fromPartial(object.filter)
11944
+ : undefined;
11945
+ message.dimension = object.dimension ?? 0;
11946
+ message.timeWindow = object.timeWindow ?? 0;
11947
+ message.topN = object.topN ?? 0;
10744
11948
  return message;
10745
11949
  },
10746
11950
  };
10747
11951
 
10748
- function createBaseProjectOverviewSlice(): ProjectOverviewSlice {
10749
- return { key: "", modelCalls: 0, inputTokens: 0, outputTokens: 0, costUsd: 0 };
11952
+ function createBaseResourceRankingsResponse(): ResourceRankingsResponse {
11953
+ return {
11954
+ status: undefined,
11955
+ rankings: [],
11956
+ dimension: 0,
11957
+ windowStart: undefined,
11958
+ windowEnd: undefined,
11959
+ asOf: undefined,
11960
+ };
10750
11961
  }
10751
11962
 
10752
- export const ProjectOverviewSlice: MessageFns<ProjectOverviewSlice> = {
10753
- encode(message: ProjectOverviewSlice, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10754
- if (message.key !== "") {
10755
- writer.uint32(10).string(message.key);
11963
+ export const ResourceRankingsResponse: MessageFns<ResourceRankingsResponse> = {
11964
+ encode(message: ResourceRankingsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
11965
+ if (message.status !== undefined) {
11966
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
10756
11967
  }
10757
- if (message.modelCalls !== 0) {
10758
- writer.uint32(16).uint64(message.modelCalls);
11968
+ for (const v of message.rankings) {
11969
+ ResourceRanking.encode(v!, writer.uint32(18).fork()).join();
10759
11970
  }
10760
- if (message.inputTokens !== 0) {
10761
- writer.uint32(24).uint64(message.inputTokens);
11971
+ if (message.dimension !== 0) {
11972
+ writer.uint32(24).int32(message.dimension);
10762
11973
  }
10763
- if (message.outputTokens !== 0) {
10764
- writer.uint32(32).uint64(message.outputTokens);
11974
+ if (message.windowStart !== undefined) {
11975
+ Timestamp.encode(toTimestamp(message.windowStart), writer.uint32(34).fork()).join();
10765
11976
  }
10766
- if (message.costUsd !== 0) {
10767
- writer.uint32(41).double(message.costUsd);
11977
+ if (message.windowEnd !== undefined) {
11978
+ Timestamp.encode(toTimestamp(message.windowEnd), writer.uint32(42).fork()).join();
11979
+ }
11980
+ if (message.asOf !== undefined) {
11981
+ Timestamp.encode(toTimestamp(message.asOf), writer.uint32(50).fork()).join();
10768
11982
  }
10769
11983
  return writer;
10770
11984
  },
10771
11985
 
10772
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewSlice {
11986
+ decode(input: BinaryReader | Uint8Array, length?: number): ResourceRankingsResponse {
10773
11987
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
10774
11988
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
10775
11989
  if (previousRecursionDepth >= 100) {
@@ -10778,7 +11992,7 @@ export const ProjectOverviewSlice: MessageFns<ProjectOverviewSlice> = {
10778
11992
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
10779
11993
  try {
10780
11994
  const end = length === undefined ? reader.len : reader.pos + length;
10781
- const message = createBaseProjectOverviewSlice();
11995
+ const message = createBaseResourceRankingsResponse();
10782
11996
  while (reader.pos < end) {
10783
11997
  const tag = reader.uint32();
10784
11998
  switch (tag >>> 3) {
@@ -10787,15 +12001,15 @@ export const ProjectOverviewSlice: MessageFns<ProjectOverviewSlice> = {
10787
12001
  break;
10788
12002
  }
10789
12003
 
10790
- message.key = reader.string();
12004
+ message.status = ResponseStatus.decode(reader, reader.uint32());
10791
12005
  continue;
10792
12006
  }
10793
12007
  case 2: {
10794
- if (tag !== 16) {
12008
+ if (tag !== 18) {
10795
12009
  break;
10796
12010
  }
10797
12011
 
10798
- message.modelCalls = longToNumber(reader.uint64());
12012
+ message.rankings.push(ResourceRanking.decode(reader, reader.uint32()));
10799
12013
  continue;
10800
12014
  }
10801
12015
  case 3: {
@@ -10803,23 +12017,31 @@ export const ProjectOverviewSlice: MessageFns<ProjectOverviewSlice> = {
10803
12017
  break;
10804
12018
  }
10805
12019
 
10806
- message.inputTokens = longToNumber(reader.uint64());
12020
+ message.dimension = reader.int32() as any;
10807
12021
  continue;
10808
12022
  }
10809
12023
  case 4: {
10810
- if (tag !== 32) {
12024
+ if (tag !== 34) {
10811
12025
  break;
10812
12026
  }
10813
12027
 
10814
- message.outputTokens = longToNumber(reader.uint64());
12028
+ message.windowStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10815
12029
  continue;
10816
12030
  }
10817
12031
  case 5: {
10818
- if (tag !== 41) {
12032
+ if (tag !== 42) {
10819
12033
  break;
10820
12034
  }
10821
12035
 
10822
- message.costUsd = reader.double();
12036
+ message.windowEnd = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12037
+ continue;
12038
+ }
12039
+ case 6: {
12040
+ if (tag !== 50) {
12041
+ break;
12042
+ }
12043
+
12044
+ message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
10823
12045
  continue;
10824
12046
  }
10825
12047
  }
@@ -10834,91 +12056,93 @@ export const ProjectOverviewSlice: MessageFns<ProjectOverviewSlice> = {
10834
12056
  }
10835
12057
  },
10836
12058
 
10837
- fromJSON(object: any): ProjectOverviewSlice {
12059
+ fromJSON(object: any): ResourceRankingsResponse {
10838
12060
  return {
10839
- key: isSet(object.key) ? globalThis.String(object.key) : "",
10840
- modelCalls: isSet(object.modelCalls)
10841
- ? globalThis.Number(object.modelCalls)
10842
- : isSet(object.model_calls)
10843
- ? globalThis.Number(object.model_calls)
10844
- : 0,
10845
- inputTokens: isSet(object.inputTokens)
10846
- ? globalThis.Number(object.inputTokens)
10847
- : isSet(object.input_tokens)
10848
- ? globalThis.Number(object.input_tokens)
10849
- : 0,
10850
- outputTokens: isSet(object.outputTokens)
10851
- ? globalThis.Number(object.outputTokens)
10852
- : isSet(object.output_tokens)
10853
- ? globalThis.Number(object.output_tokens)
10854
- : 0,
10855
- costUsd: isSet(object.costUsd)
10856
- ? globalThis.Number(object.costUsd)
10857
- : isSet(object.cost_usd)
10858
- ? globalThis.Number(object.cost_usd)
10859
- : 0,
12061
+ status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
12062
+ rankings: globalThis.Array.isArray(object?.rankings)
12063
+ ? object.rankings.map((e: any) => ResourceRanking.fromJSON(e))
12064
+ : [],
12065
+ dimension: isSet(object.dimension) ? aIResourceDimensionFromJSON(object.dimension) : 0,
12066
+ windowStart: isSet(object.windowStart)
12067
+ ? fromJsonTimestamp(object.windowStart)
12068
+ : isSet(object.window_start)
12069
+ ? fromJsonTimestamp(object.window_start)
12070
+ : undefined,
12071
+ windowEnd: isSet(object.windowEnd)
12072
+ ? fromJsonTimestamp(object.windowEnd)
12073
+ : isSet(object.window_end)
12074
+ ? fromJsonTimestamp(object.window_end)
12075
+ : undefined,
12076
+ asOf: isSet(object.asOf)
12077
+ ? fromJsonTimestamp(object.asOf)
12078
+ : isSet(object.as_of)
12079
+ ? fromJsonTimestamp(object.as_of)
12080
+ : undefined,
10860
12081
  };
10861
12082
  },
10862
12083
 
10863
- toJSON(message: ProjectOverviewSlice): unknown {
12084
+ toJSON(message: ResourceRankingsResponse): unknown {
10864
12085
  const obj: any = {};
10865
- if (message.key !== "") {
10866
- obj.key = message.key;
12086
+ if (message.status !== undefined) {
12087
+ obj.status = ResponseStatus.toJSON(message.status);
10867
12088
  }
10868
- if (message.modelCalls !== 0) {
10869
- obj.modelCalls = Math.round(message.modelCalls);
12089
+ if (message.rankings?.length) {
12090
+ obj.rankings = message.rankings.map((e) => ResourceRanking.toJSON(e));
10870
12091
  }
10871
- if (message.inputTokens !== 0) {
10872
- obj.inputTokens = Math.round(message.inputTokens);
12092
+ if (message.dimension !== 0) {
12093
+ obj.dimension = aIResourceDimensionToJSON(message.dimension);
10873
12094
  }
10874
- if (message.outputTokens !== 0) {
10875
- obj.outputTokens = Math.round(message.outputTokens);
12095
+ if (message.windowStart !== undefined) {
12096
+ obj.windowStart = message.windowStart.toISOString();
10876
12097
  }
10877
- if (message.costUsd !== 0) {
10878
- obj.costUsd = message.costUsd;
12098
+ if (message.windowEnd !== undefined) {
12099
+ obj.windowEnd = message.windowEnd.toISOString();
12100
+ }
12101
+ if (message.asOf !== undefined) {
12102
+ obj.asOf = message.asOf.toISOString();
10879
12103
  }
10880
12104
  return obj;
10881
12105
  },
10882
12106
 
10883
- create<I extends Exact<DeepPartial<ProjectOverviewSlice>, I>>(base?: I): ProjectOverviewSlice {
10884
- return ProjectOverviewSlice.fromPartial(base ?? ({} as any));
12107
+ create<I extends Exact<DeepPartial<ResourceRankingsResponse>, I>>(base?: I): ResourceRankingsResponse {
12108
+ return ResourceRankingsResponse.fromPartial(base ?? ({} as any));
10885
12109
  },
10886
- fromPartial<I extends Exact<DeepPartial<ProjectOverviewSlice>, I>>(object: I): ProjectOverviewSlice {
10887
- const message = createBaseProjectOverviewSlice();
10888
- message.key = object.key ?? "";
10889
- message.modelCalls = object.modelCalls ?? 0;
10890
- message.inputTokens = object.inputTokens ?? 0;
10891
- message.outputTokens = object.outputTokens ?? 0;
10892
- message.costUsd = object.costUsd ?? 0;
12110
+ fromPartial<I extends Exact<DeepPartial<ResourceRankingsResponse>, I>>(object: I): ResourceRankingsResponse {
12111
+ const message = createBaseResourceRankingsResponse();
12112
+ message.status = (object.status !== undefined && object.status !== null)
12113
+ ? ResponseStatus.fromPartial(object.status)
12114
+ : undefined;
12115
+ message.rankings = object.rankings?.map((e) => ResourceRanking.fromPartial(e)) || [];
12116
+ message.dimension = object.dimension ?? 0;
12117
+ message.windowStart = object.windowStart ?? undefined;
12118
+ message.windowEnd = object.windowEnd ?? undefined;
12119
+ message.asOf = object.asOf ?? undefined;
10893
12120
  return message;
10894
12121
  },
10895
12122
  };
10896
12123
 
10897
- function createBaseProjectSessionRef(): ProjectSessionRef {
10898
- return { sessionId: "", sourceSystem: "", costUsd: 0, modelCalls: 0, lastActivityAt: undefined };
12124
+ function createBaseResourceRanking(): ResourceRanking {
12125
+ return { key: "", count: 0, priorCount: 0, sessionCount: 0 };
10899
12126
  }
10900
12127
 
10901
- export const ProjectSessionRef: MessageFns<ProjectSessionRef> = {
10902
- encode(message: ProjectSessionRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
10903
- if (message.sessionId !== "") {
10904
- writer.uint32(10).string(message.sessionId);
10905
- }
10906
- if (message.sourceSystem !== "") {
10907
- writer.uint32(18).string(message.sourceSystem);
12128
+ export const ResourceRanking: MessageFns<ResourceRanking> = {
12129
+ encode(message: ResourceRanking, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
12130
+ if (message.key !== "") {
12131
+ writer.uint32(10).string(message.key);
10908
12132
  }
10909
- if (message.costUsd !== 0) {
10910
- writer.uint32(25).double(message.costUsd);
12133
+ if (message.count !== 0) {
12134
+ writer.uint32(16).uint64(message.count);
10911
12135
  }
10912
- if (message.modelCalls !== 0) {
10913
- writer.uint32(32).uint64(message.modelCalls);
12136
+ if (message.priorCount !== 0) {
12137
+ writer.uint32(24).uint64(message.priorCount);
10914
12138
  }
10915
- if (message.lastActivityAt !== undefined) {
10916
- Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(42).fork()).join();
12139
+ if (message.sessionCount !== 0) {
12140
+ writer.uint32(32).uint64(message.sessionCount);
10917
12141
  }
10918
12142
  return writer;
10919
12143
  },
10920
12144
 
10921
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectSessionRef {
12145
+ decode(input: BinaryReader | Uint8Array, length?: number): ResourceRanking {
10922
12146
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
10923
12147
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
10924
12148
  if (previousRecursionDepth >= 100) {
@@ -10927,7 +12151,7 @@ export const ProjectSessionRef: MessageFns<ProjectSessionRef> = {
10927
12151
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
10928
12152
  try {
10929
12153
  const end = length === undefined ? reader.len : reader.pos + length;
10930
- const message = createBaseProjectSessionRef();
12154
+ const message = createBaseResourceRanking();
10931
12155
  while (reader.pos < end) {
10932
12156
  const tag = reader.uint32();
10933
12157
  switch (tag >>> 3) {
@@ -10936,23 +12160,23 @@ export const ProjectSessionRef: MessageFns<ProjectSessionRef> = {
10936
12160
  break;
10937
12161
  }
10938
12162
 
10939
- message.sessionId = reader.string();
12163
+ message.key = reader.string();
10940
12164
  continue;
10941
12165
  }
10942
12166
  case 2: {
10943
- if (tag !== 18) {
12167
+ if (tag !== 16) {
10944
12168
  break;
10945
12169
  }
10946
12170
 
10947
- message.sourceSystem = reader.string();
12171
+ message.count = longToNumber(reader.uint64());
10948
12172
  continue;
10949
12173
  }
10950
12174
  case 3: {
10951
- if (tag !== 25) {
12175
+ if (tag !== 24) {
10952
12176
  break;
10953
12177
  }
10954
12178
 
10955
- message.costUsd = reader.double();
12179
+ message.priorCount = longToNumber(reader.uint64());
10956
12180
  continue;
10957
12181
  }
10958
12182
  case 4: {
@@ -10960,15 +12184,7 @@ export const ProjectSessionRef: MessageFns<ProjectSessionRef> = {
10960
12184
  break;
10961
12185
  }
10962
12186
 
10963
- message.modelCalls = longToNumber(reader.uint64());
10964
- continue;
10965
- }
10966
- case 5: {
10967
- if (tag !== 42) {
10968
- break;
10969
- }
10970
-
10971
- message.lastActivityAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12187
+ message.sessionCount = longToNumber(reader.uint64());
10972
12188
  continue;
10973
12189
  }
10974
12190
  }
@@ -10983,66 +12199,49 @@ export const ProjectSessionRef: MessageFns<ProjectSessionRef> = {
10983
12199
  }
10984
12200
  },
10985
12201
 
10986
- fromJSON(object: any): ProjectSessionRef {
12202
+ fromJSON(object: any): ResourceRanking {
10987
12203
  return {
10988
- sessionId: isSet(object.sessionId)
10989
- ? globalThis.String(object.sessionId)
10990
- : isSet(object.session_id)
10991
- ? globalThis.String(object.session_id)
10992
- : "",
10993
- sourceSystem: isSet(object.sourceSystem)
10994
- ? globalThis.String(object.sourceSystem)
10995
- : isSet(object.source_system)
10996
- ? globalThis.String(object.source_system)
10997
- : "",
10998
- costUsd: isSet(object.costUsd)
10999
- ? globalThis.Number(object.costUsd)
11000
- : isSet(object.cost_usd)
11001
- ? globalThis.Number(object.cost_usd)
12204
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
12205
+ count: isSet(object.count) ? globalThis.Number(object.count) : 0,
12206
+ priorCount: isSet(object.priorCount)
12207
+ ? globalThis.Number(object.priorCount)
12208
+ : isSet(object.prior_count)
12209
+ ? globalThis.Number(object.prior_count)
11002
12210
  : 0,
11003
- modelCalls: isSet(object.modelCalls)
11004
- ? globalThis.Number(object.modelCalls)
11005
- : isSet(object.model_calls)
11006
- ? globalThis.Number(object.model_calls)
12211
+ sessionCount: isSet(object.sessionCount)
12212
+ ? globalThis.Number(object.sessionCount)
12213
+ : isSet(object.session_count)
12214
+ ? globalThis.Number(object.session_count)
11007
12215
  : 0,
11008
- lastActivityAt: isSet(object.lastActivityAt)
11009
- ? fromJsonTimestamp(object.lastActivityAt)
11010
- : isSet(object.last_activity_at)
11011
- ? fromJsonTimestamp(object.last_activity_at)
11012
- : undefined,
11013
12216
  };
11014
12217
  },
11015
12218
 
11016
- toJSON(message: ProjectSessionRef): unknown {
12219
+ toJSON(message: ResourceRanking): unknown {
11017
12220
  const obj: any = {};
11018
- if (message.sessionId !== "") {
11019
- obj.sessionId = message.sessionId;
11020
- }
11021
- if (message.sourceSystem !== "") {
11022
- obj.sourceSystem = message.sourceSystem;
12221
+ if (message.key !== "") {
12222
+ obj.key = message.key;
11023
12223
  }
11024
- if (message.costUsd !== 0) {
11025
- obj.costUsd = message.costUsd;
12224
+ if (message.count !== 0) {
12225
+ obj.count = Math.round(message.count);
11026
12226
  }
11027
- if (message.modelCalls !== 0) {
11028
- obj.modelCalls = Math.round(message.modelCalls);
12227
+ if (message.priorCount !== 0) {
12228
+ obj.priorCount = Math.round(message.priorCount);
11029
12229
  }
11030
- if (message.lastActivityAt !== undefined) {
11031
- obj.lastActivityAt = message.lastActivityAt.toISOString();
12230
+ if (message.sessionCount !== 0) {
12231
+ obj.sessionCount = Math.round(message.sessionCount);
11032
12232
  }
11033
12233
  return obj;
11034
12234
  },
11035
12235
 
11036
- create<I extends Exact<DeepPartial<ProjectSessionRef>, I>>(base?: I): ProjectSessionRef {
11037
- return ProjectSessionRef.fromPartial(base ?? ({} as any));
12236
+ create<I extends Exact<DeepPartial<ResourceRanking>, I>>(base?: I): ResourceRanking {
12237
+ return ResourceRanking.fromPartial(base ?? ({} as any));
11038
12238
  },
11039
- fromPartial<I extends Exact<DeepPartial<ProjectSessionRef>, I>>(object: I): ProjectSessionRef {
11040
- const message = createBaseProjectSessionRef();
11041
- message.sessionId = object.sessionId ?? "";
11042
- message.sourceSystem = object.sourceSystem ?? "";
11043
- message.costUsd = object.costUsd ?? 0;
11044
- message.modelCalls = object.modelCalls ?? 0;
11045
- message.lastActivityAt = object.lastActivityAt ?? undefined;
12239
+ fromPartial<I extends Exact<DeepPartial<ResourceRanking>, I>>(object: I): ResourceRanking {
12240
+ const message = createBaseResourceRanking();
12241
+ message.key = object.key ?? "";
12242
+ message.count = object.count ?? 0;
12243
+ message.priorCount = object.priorCount ?? 0;
12244
+ message.sessionCount = object.sessionCount ?? 0;
11046
12245
  return message;
11047
12246
  },
11048
12247
  };
@@ -13800,6 +14999,12 @@ export interface AIGatewayService {
13800
14999
  request: TokenActivitySummaryRequest,
13801
15000
  metadata?: Metadata,
13802
15001
  ): Observable<TokenActivitySummary>;
15002
+ /**
15003
+ * Live "burn rate now" gauge: the trailing-60s cost/hr + tokens/min (total plus a per-dimension
15004
+ * breakdown) and a fixed 60-minute one-minute rolling sparkline of that rate. Fixed horizon, fast
15005
+ * refresh; first frame is a full snapshot.
15006
+ */
15007
+ StreamBurnRate(request: BurnRateRequest, metadata?: Metadata): Observable<BurnRate>;
13803
15008
  /**
13804
15009
  * Live token-burn calendar over an inclusive UTC [start_date, end_date] range: one complete row per
13805
15010
  * covered day off the precomputed daily rollup. Covered empty days are zero; uncomputed history is
@@ -13833,6 +15038,12 @@ export interface AIGatewayService {
13833
15038
  request: ListModelPriceHistoryRequest,
13834
15039
  metadata?: Metadata,
13835
15040
  ): Promise<ListModelPriceHistoryResponse>;
15041
+ /**
15042
+ * Top-N most-used resources of one kind (skills / tools / files / URLs / bash commands) over a
15043
+ * sliding window, each with the prior equal-length window's count for a trend delta and distinct
15044
+ * sessions. Mirrors telemetry.api.v1.
15045
+ */
15046
+ ListResourceRankings(request: ResourceRankingsRequest, metadata?: Metadata): Promise<ResourceRankingsResponse>;
13836
15047
  }
13837
15048
 
13838
15049
  export const AIGatewayServiceServiceName = "gateway.web.v1.AIGatewayService";
@@ -13855,6 +15066,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
13855
15066
  this.StreamGitActivities = this.StreamGitActivities.bind(this);
13856
15067
  this.StreamGitActivitySummary = this.StreamGitActivitySummary.bind(this);
13857
15068
  this.StreamTokenActivitySummary = this.StreamTokenActivitySummary.bind(this);
15069
+ this.StreamBurnRate = this.StreamBurnRate.bind(this);
13858
15070
  this.StreamDailyActivity = this.StreamDailyActivity.bind(this);
13859
15071
  this.StreamActivityRhythm = this.StreamActivityRhythm.bind(this);
13860
15072
  this.StreamProjectOverview = this.StreamProjectOverview.bind(this);
@@ -13862,6 +15074,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
13862
15074
  this.StreamFilesSummary = this.StreamFilesSummary.bind(this);
13863
15075
  this.ListModelPrices = this.ListModelPrices.bind(this);
13864
15076
  this.ListModelPriceHistory = this.ListModelPriceHistory.bind(this);
15077
+ this.ListResourceRankings = this.ListResourceRankings.bind(this);
13865
15078
  }
13866
15079
  ListSessions(request: ListSessionsRequest, metadata?: Metadata): Promise<ListSessionsResponse> {
13867
15080
  const data = ListSessionsRequest.encode(request).finish();
@@ -13947,6 +15160,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
13947
15160
  return result.pipe(map((data) => TokenActivitySummary.decode(new BinaryReader(data))));
13948
15161
  }
13949
15162
 
15163
+ StreamBurnRate(request: BurnRateRequest, metadata?: Metadata): Observable<BurnRate> {
15164
+ const data = BurnRateRequest.encode(request).finish();
15165
+ const result = this.rpc.serverStreamingRequest(this.service, "StreamBurnRate", data, metadata);
15166
+ return result.pipe(map((data) => BurnRate.decode(new BinaryReader(data))));
15167
+ }
15168
+
13950
15169
  StreamDailyActivity(request: DailyActivityRequest, metadata?: Metadata): Observable<DailyActivity> {
13951
15170
  const data = DailyActivityRequest.encode(request).finish();
13952
15171
  const result = this.rpc.serverStreamingRequest(this.service, "StreamDailyActivity", data, metadata);
@@ -13991,6 +15210,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
13991
15210
  const promise = this.rpc.request(this.service, "ListModelPriceHistory", data, metadata);
13992
15211
  return promise.then((data) => ListModelPriceHistoryResponse.decode(new BinaryReader(data)));
13993
15212
  }
15213
+
15214
+ ListResourceRankings(request: ResourceRankingsRequest, metadata?: Metadata): Promise<ResourceRankingsResponse> {
15215
+ const data = ResourceRankingsRequest.encode(request).finish();
15216
+ const promise = this.rpc.request(this.service, "ListResourceRankings", data, metadata);
15217
+ return promise.then((data) => ResourceRankingsResponse.decode(new BinaryReader(data)));
15218
+ }
13994
15219
  }
13995
15220
 
13996
15221
  interface Rpc {