@miradorlabs/web-grpc 2.54.0 → 2.57.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.
@@ -940,6 +940,8 @@ export interface AIPrincipal {
940
940
  name: string;
941
941
  sourceSystem: string;
942
942
  alias: string;
943
+ /** Linked account user id (a seat) the frontend aggregates around; empty when unset. */
944
+ accountUserId: string;
943
945
  }
944
946
 
945
947
  export interface UpdatePrincipalRequest {
@@ -948,7 +950,15 @@ export interface UpdatePrincipalRequest {
948
950
  kind: AIPrincipalKind;
949
951
  id: string;
950
952
  sourceSystem: string;
951
- alias: string;
953
+ /**
954
+ * Presence semantics: a field set (even to empty) is written, empty clears it; a field
955
+ * left absent is untouched. At least one of alias / account_user_id must be present.
956
+ */
957
+ alias?:
958
+ | string
959
+ | undefined;
960
+ /** Linked account user id (a seat). Must be a UUID when non-empty; empty clears it. */
961
+ accountUserId?: string | undefined;
952
962
  }
953
963
 
954
964
  export interface UpdatePrincipalResponse {
@@ -1141,6 +1151,56 @@ export interface TokenActivityMeasures {
1141
1151
  modelCalls: number;
1142
1152
  }
1143
1153
 
1154
+ export interface DailyActivityRequest {
1155
+ organizationId: string;
1156
+ projectId: string;
1157
+ /** Inclusive UTC calendar-day bounds, YYYY-MM-DD. end_date >= start_date. */
1158
+ startDate: string;
1159
+ endDate: string;
1160
+ }
1161
+
1162
+ /**
1163
+ * DailyActivity mirrors telemetry.api.v1.DailyActivity: covered UTC days ascending, replaced wholesale
1164
+ * each tick (streams carry no ResponseStatus). Covered empty days are zero rows; days before
1165
+ * coverage_start are omitted; today is provisional.
1166
+ */
1167
+ export interface DailyActivity {
1168
+ days: DailyActivityDay[];
1169
+ startDate: string;
1170
+ endDate: string;
1171
+ coverageStart: string;
1172
+ today: string;
1173
+ asOf: Date | undefined;
1174
+ }
1175
+
1176
+ export interface DailyActivityDay {
1177
+ /** YYYY-MM-DD UTC */
1178
+ day: string;
1179
+ measures: DailyActivityMeasures | undefined;
1180
+ provisional: boolean;
1181
+ }
1182
+
1183
+ /**
1184
+ * DailyActivityMeasures — input_tokens is cache-inclusive; cache_read/cache_write are subsets. Git
1185
+ * counters are confirmed, non-failed folded activities.
1186
+ */
1187
+ export interface DailyActivityMeasures {
1188
+ inputTokens: number;
1189
+ outputTokens: number;
1190
+ cacheReadTokens: number;
1191
+ cacheWriteTokens: number;
1192
+ costUsd: number;
1193
+ modelCalls: number;
1194
+ toolCalls: number;
1195
+ userMessages: number;
1196
+ filesTouched: number;
1197
+ commits: number;
1198
+ gitPushes: number;
1199
+ pullRequestsCreated: number;
1200
+ pullRequestsMerged: number;
1201
+ branchesCreated: number;
1202
+ }
1203
+
1144
1204
  export interface ProjectOverviewRequest {
1145
1205
  organizationId: string;
1146
1206
  projectId: string;
@@ -5530,7 +5590,7 @@ export const ListPrincipalsResponse: MessageFns<ListPrincipalsResponse> = {
5530
5590
  };
5531
5591
 
5532
5592
  function createBaseAIPrincipal(): AIPrincipal {
5533
- return { kind: 0, id: "", name: "", sourceSystem: "", alias: "" };
5593
+ return { kind: 0, id: "", name: "", sourceSystem: "", alias: "", accountUserId: "" };
5534
5594
  }
5535
5595
 
5536
5596
  export const AIPrincipal: MessageFns<AIPrincipal> = {
@@ -5550,6 +5610,9 @@ export const AIPrincipal: MessageFns<AIPrincipal> = {
5550
5610
  if (message.alias !== "") {
5551
5611
  writer.uint32(42).string(message.alias);
5552
5612
  }
5613
+ if (message.accountUserId !== "") {
5614
+ writer.uint32(50).string(message.accountUserId);
5615
+ }
5553
5616
  return writer;
5554
5617
  },
5555
5618
 
@@ -5606,6 +5669,14 @@ export const AIPrincipal: MessageFns<AIPrincipal> = {
5606
5669
  message.alias = reader.string();
5607
5670
  continue;
5608
5671
  }
5672
+ case 6: {
5673
+ if (tag !== 50) {
5674
+ break;
5675
+ }
5676
+
5677
+ message.accountUserId = reader.string();
5678
+ continue;
5679
+ }
5609
5680
  }
5610
5681
  if ((tag & 7) === 4 || tag === 0) {
5611
5682
  break;
@@ -5629,6 +5700,11 @@ export const AIPrincipal: MessageFns<AIPrincipal> = {
5629
5700
  ? globalThis.String(object.source_system)
5630
5701
  : "",
5631
5702
  alias: isSet(object.alias) ? globalThis.String(object.alias) : "",
5703
+ accountUserId: isSet(object.accountUserId)
5704
+ ? globalThis.String(object.accountUserId)
5705
+ : isSet(object.account_user_id)
5706
+ ? globalThis.String(object.account_user_id)
5707
+ : "",
5632
5708
  };
5633
5709
  },
5634
5710
 
@@ -5649,6 +5725,9 @@ export const AIPrincipal: MessageFns<AIPrincipal> = {
5649
5725
  if (message.alias !== "") {
5650
5726
  obj.alias = message.alias;
5651
5727
  }
5728
+ if (message.accountUserId !== "") {
5729
+ obj.accountUserId = message.accountUserId;
5730
+ }
5652
5731
  return obj;
5653
5732
  },
5654
5733
 
@@ -5662,12 +5741,21 @@ export const AIPrincipal: MessageFns<AIPrincipal> = {
5662
5741
  message.name = object.name ?? "";
5663
5742
  message.sourceSystem = object.sourceSystem ?? "";
5664
5743
  message.alias = object.alias ?? "";
5744
+ message.accountUserId = object.accountUserId ?? "";
5665
5745
  return message;
5666
5746
  },
5667
5747
  };
5668
5748
 
5669
5749
  function createBaseUpdatePrincipalRequest(): UpdatePrincipalRequest {
5670
- return { organizationId: "", projectId: "", kind: 0, id: "", sourceSystem: "", alias: "" };
5750
+ return {
5751
+ organizationId: "",
5752
+ projectId: "",
5753
+ kind: 0,
5754
+ id: "",
5755
+ sourceSystem: "",
5756
+ alias: undefined,
5757
+ accountUserId: undefined,
5758
+ };
5671
5759
  }
5672
5760
 
5673
5761
  export const UpdatePrincipalRequest: MessageFns<UpdatePrincipalRequest> = {
@@ -5687,9 +5775,12 @@ export const UpdatePrincipalRequest: MessageFns<UpdatePrincipalRequest> = {
5687
5775
  if (message.sourceSystem !== "") {
5688
5776
  writer.uint32(42).string(message.sourceSystem);
5689
5777
  }
5690
- if (message.alias !== "") {
5778
+ if (message.alias !== undefined) {
5691
5779
  writer.uint32(50).string(message.alias);
5692
5780
  }
5781
+ if (message.accountUserId !== undefined) {
5782
+ writer.uint32(58).string(message.accountUserId);
5783
+ }
5693
5784
  return writer;
5694
5785
  },
5695
5786
 
@@ -5754,6 +5845,14 @@ export const UpdatePrincipalRequest: MessageFns<UpdatePrincipalRequest> = {
5754
5845
  message.alias = reader.string();
5755
5846
  continue;
5756
5847
  }
5848
+ case 7: {
5849
+ if (tag !== 58) {
5850
+ break;
5851
+ }
5852
+
5853
+ message.accountUserId = reader.string();
5854
+ continue;
5855
+ }
5757
5856
  }
5758
5857
  if ((tag & 7) === 4 || tag === 0) {
5759
5858
  break;
@@ -5785,7 +5884,12 @@ export const UpdatePrincipalRequest: MessageFns<UpdatePrincipalRequest> = {
5785
5884
  : isSet(object.source_system)
5786
5885
  ? globalThis.String(object.source_system)
5787
5886
  : "",
5788
- alias: isSet(object.alias) ? globalThis.String(object.alias) : "",
5887
+ alias: isSet(object.alias) ? globalThis.String(object.alias) : undefined,
5888
+ accountUserId: isSet(object.accountUserId)
5889
+ ? globalThis.String(object.accountUserId)
5890
+ : isSet(object.account_user_id)
5891
+ ? globalThis.String(object.account_user_id)
5892
+ : undefined,
5789
5893
  };
5790
5894
  },
5791
5895
 
@@ -5806,9 +5910,12 @@ export const UpdatePrincipalRequest: MessageFns<UpdatePrincipalRequest> = {
5806
5910
  if (message.sourceSystem !== "") {
5807
5911
  obj.sourceSystem = message.sourceSystem;
5808
5912
  }
5809
- if (message.alias !== "") {
5913
+ if (message.alias !== undefined) {
5810
5914
  obj.alias = message.alias;
5811
5915
  }
5916
+ if (message.accountUserId !== undefined) {
5917
+ obj.accountUserId = message.accountUserId;
5918
+ }
5812
5919
  return obj;
5813
5920
  },
5814
5921
 
@@ -5822,7 +5929,8 @@ export const UpdatePrincipalRequest: MessageFns<UpdatePrincipalRequest> = {
5822
5929
  message.kind = object.kind ?? 0;
5823
5930
  message.id = object.id ?? "";
5824
5931
  message.sourceSystem = object.sourceSystem ?? "";
5825
- message.alias = object.alias ?? "";
5932
+ message.alias = object.alias ?? undefined;
5933
+ message.accountUserId = object.accountUserId ?? undefined;
5826
5934
  return message;
5827
5935
  },
5828
5936
  };
@@ -8665,28 +8773,28 @@ export const TokenActivityMeasures: MessageFns<TokenActivityMeasures> = {
8665
8773
  },
8666
8774
  };
8667
8775
 
8668
- function createBaseProjectOverviewRequest(): ProjectOverviewRequest {
8669
- return { organizationId: "", projectId: "", activeAfter: undefined, topSessions: 0 };
8776
+ function createBaseDailyActivityRequest(): DailyActivityRequest {
8777
+ return { organizationId: "", projectId: "", startDate: "", endDate: "" };
8670
8778
  }
8671
8779
 
8672
- export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8673
- encode(message: ProjectOverviewRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8780
+ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8781
+ encode(message: DailyActivityRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8674
8782
  if (message.organizationId !== "") {
8675
8783
  writer.uint32(10).string(message.organizationId);
8676
8784
  }
8677
8785
  if (message.projectId !== "") {
8678
8786
  writer.uint32(18).string(message.projectId);
8679
8787
  }
8680
- if (message.activeAfter !== undefined) {
8681
- Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(26).fork()).join();
8788
+ if (message.startDate !== "") {
8789
+ writer.uint32(26).string(message.startDate);
8682
8790
  }
8683
- if (message.topSessions !== 0) {
8684
- writer.uint32(32).int32(message.topSessions);
8791
+ if (message.endDate !== "") {
8792
+ writer.uint32(34).string(message.endDate);
8685
8793
  }
8686
8794
  return writer;
8687
8795
  },
8688
8796
 
8689
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewRequest {
8797
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityRequest {
8690
8798
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
8691
8799
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
8692
8800
  if (previousRecursionDepth >= 100) {
@@ -8695,7 +8803,7 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8695
8803
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
8696
8804
  try {
8697
8805
  const end = length === undefined ? reader.len : reader.pos + length;
8698
- const message = createBaseProjectOverviewRequest();
8806
+ const message = createBaseDailyActivityRequest();
8699
8807
  while (reader.pos < end) {
8700
8808
  const tag = reader.uint32();
8701
8809
  switch (tag >>> 3) {
@@ -8720,15 +8828,15 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8720
8828
  break;
8721
8829
  }
8722
8830
 
8723
- message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
8831
+ message.startDate = reader.string();
8724
8832
  continue;
8725
8833
  }
8726
8834
  case 4: {
8727
- if (tag !== 32) {
8835
+ if (tag !== 34) {
8728
8836
  break;
8729
8837
  }
8730
8838
 
8731
- message.topSessions = reader.int32();
8839
+ message.endDate = reader.string();
8732
8840
  continue;
8733
8841
  }
8734
8842
  }
@@ -8743,7 +8851,7 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8743
8851
  }
8744
8852
  },
8745
8853
 
8746
- fromJSON(object: any): ProjectOverviewRequest {
8854
+ fromJSON(object: any): DailyActivityRequest {
8747
8855
  return {
8748
8856
  organizationId: isSet(object.organizationId)
8749
8857
  ? globalThis.String(object.organizationId)
@@ -8755,20 +8863,20 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8755
8863
  : isSet(object.project_id)
8756
8864
  ? globalThis.String(object.project_id)
8757
8865
  : "",
8758
- activeAfter: isSet(object.activeAfter)
8759
- ? fromJsonTimestamp(object.activeAfter)
8760
- : isSet(object.active_after)
8761
- ? fromJsonTimestamp(object.active_after)
8762
- : undefined,
8763
- topSessions: isSet(object.topSessions)
8764
- ? globalThis.Number(object.topSessions)
8765
- : isSet(object.top_sessions)
8766
- ? globalThis.Number(object.top_sessions)
8767
- : 0,
8866
+ startDate: isSet(object.startDate)
8867
+ ? globalThis.String(object.startDate)
8868
+ : isSet(object.start_date)
8869
+ ? globalThis.String(object.start_date)
8870
+ : "",
8871
+ endDate: isSet(object.endDate)
8872
+ ? globalThis.String(object.endDate)
8873
+ : isSet(object.end_date)
8874
+ ? globalThis.String(object.end_date)
8875
+ : "",
8768
8876
  };
8769
8877
  },
8770
8878
 
8771
- toJSON(message: ProjectOverviewRequest): unknown {
8879
+ toJSON(message: DailyActivityRequest): unknown {
8772
8880
  const obj: any = {};
8773
8881
  if (message.organizationId !== "") {
8774
8882
  obj.organizationId = message.organizationId;
@@ -8776,53 +8884,56 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8776
8884
  if (message.projectId !== "") {
8777
8885
  obj.projectId = message.projectId;
8778
8886
  }
8779
- if (message.activeAfter !== undefined) {
8780
- obj.activeAfter = message.activeAfter.toISOString();
8887
+ if (message.startDate !== "") {
8888
+ obj.startDate = message.startDate;
8781
8889
  }
8782
- if (message.topSessions !== 0) {
8783
- obj.topSessions = Math.round(message.topSessions);
8890
+ if (message.endDate !== "") {
8891
+ obj.endDate = message.endDate;
8784
8892
  }
8785
8893
  return obj;
8786
8894
  },
8787
8895
 
8788
- create<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(base?: I): ProjectOverviewRequest {
8789
- return ProjectOverviewRequest.fromPartial(base ?? ({} as any));
8896
+ create<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(base?: I): DailyActivityRequest {
8897
+ return DailyActivityRequest.fromPartial(base ?? ({} as any));
8790
8898
  },
8791
- fromPartial<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(object: I): ProjectOverviewRequest {
8792
- const message = createBaseProjectOverviewRequest();
8899
+ fromPartial<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(object: I): DailyActivityRequest {
8900
+ const message = createBaseDailyActivityRequest();
8793
8901
  message.organizationId = object.organizationId ?? "";
8794
8902
  message.projectId = object.projectId ?? "";
8795
- message.activeAfter = object.activeAfter ?? undefined;
8796
- message.topSessions = object.topSessions ?? 0;
8903
+ message.startDate = object.startDate ?? "";
8904
+ message.endDate = object.endDate ?? "";
8797
8905
  return message;
8798
8906
  },
8799
8907
  };
8800
8908
 
8801
- function createBaseProjectOverview(): ProjectOverview {
8802
- return { totals: undefined, byModel: [], byProvider: [], bySource: [], topSessions: [] };
8909
+ function createBaseDailyActivity(): DailyActivity {
8910
+ return { days: [], startDate: "", endDate: "", coverageStart: "", today: "", asOf: undefined };
8803
8911
  }
8804
8912
 
8805
- export const ProjectOverview: MessageFns<ProjectOverview> = {
8806
- encode(message: ProjectOverview, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8807
- if (message.totals !== undefined) {
8808
- ProjectOverviewTotals.encode(message.totals, writer.uint32(10).fork()).join();
8913
+ export const DailyActivity: MessageFns<DailyActivity> = {
8914
+ encode(message: DailyActivity, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8915
+ for (const v of message.days) {
8916
+ DailyActivityDay.encode(v!, writer.uint32(10).fork()).join();
8809
8917
  }
8810
- for (const v of message.byModel) {
8811
- ProjectOverviewSlice.encode(v!, writer.uint32(18).fork()).join();
8918
+ if (message.startDate !== "") {
8919
+ writer.uint32(18).string(message.startDate);
8812
8920
  }
8813
- for (const v of message.byProvider) {
8814
- ProjectOverviewSlice.encode(v!, writer.uint32(26).fork()).join();
8921
+ if (message.endDate !== "") {
8922
+ writer.uint32(26).string(message.endDate);
8815
8923
  }
8816
- for (const v of message.bySource) {
8817
- ProjectOverviewSlice.encode(v!, writer.uint32(34).fork()).join();
8924
+ if (message.coverageStart !== "") {
8925
+ writer.uint32(34).string(message.coverageStart);
8818
8926
  }
8819
- for (const v of message.topSessions) {
8820
- ProjectSessionRef.encode(v!, writer.uint32(42).fork()).join();
8927
+ if (message.today !== "") {
8928
+ writer.uint32(42).string(message.today);
8929
+ }
8930
+ if (message.asOf !== undefined) {
8931
+ Timestamp.encode(toTimestamp(message.asOf), writer.uint32(50).fork()).join();
8821
8932
  }
8822
8933
  return writer;
8823
8934
  },
8824
8935
 
8825
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverview {
8936
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivity {
8826
8937
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
8827
8938
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
8828
8939
  if (previousRecursionDepth >= 100) {
@@ -8831,7 +8942,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8831
8942
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
8832
8943
  try {
8833
8944
  const end = length === undefined ? reader.len : reader.pos + length;
8834
- const message = createBaseProjectOverview();
8945
+ const message = createBaseDailyActivity();
8835
8946
  while (reader.pos < end) {
8836
8947
  const tag = reader.uint32();
8837
8948
  switch (tag >>> 3) {
@@ -8840,7 +8951,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8840
8951
  break;
8841
8952
  }
8842
8953
 
8843
- message.totals = ProjectOverviewTotals.decode(reader, reader.uint32());
8954
+ message.days.push(DailyActivityDay.decode(reader, reader.uint32()));
8844
8955
  continue;
8845
8956
  }
8846
8957
  case 2: {
@@ -8848,7 +8959,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8848
8959
  break;
8849
8960
  }
8850
8961
 
8851
- message.byModel.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
8962
+ message.startDate = reader.string();
8852
8963
  continue;
8853
8964
  }
8854
8965
  case 3: {
@@ -8856,7 +8967,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8856
8967
  break;
8857
8968
  }
8858
8969
 
8859
- message.byProvider.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
8970
+ message.endDate = reader.string();
8860
8971
  continue;
8861
8972
  }
8862
8973
  case 4: {
@@ -8864,7 +8975,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8864
8975
  break;
8865
8976
  }
8866
8977
 
8867
- message.bySource.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
8978
+ message.coverageStart = reader.string();
8868
8979
  continue;
8869
8980
  }
8870
8981
  case 5: {
@@ -8872,7 +8983,15 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8872
8983
  break;
8873
8984
  }
8874
8985
 
8875
- message.topSessions.push(ProjectSessionRef.decode(reader, reader.uint32()));
8986
+ message.today = reader.string();
8987
+ continue;
8988
+ }
8989
+ case 6: {
8990
+ if (tag !== 50) {
8991
+ break;
8992
+ }
8993
+
8994
+ message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
8876
8995
  continue;
8877
8996
  }
8878
8997
  }
@@ -8887,135 +9006,90 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8887
9006
  }
8888
9007
  },
8889
9008
 
8890
- fromJSON(object: any): ProjectOverview {
9009
+ fromJSON(object: any): DailyActivity {
8891
9010
  return {
8892
- totals: isSet(object.totals) ? ProjectOverviewTotals.fromJSON(object.totals) : undefined,
8893
- byModel: globalThis.Array.isArray(object?.byModel)
8894
- ? object.byModel.map((e: any) => ProjectOverviewSlice.fromJSON(e))
8895
- : globalThis.Array.isArray(object?.by_model)
8896
- ? object.by_model.map((e: any) => ProjectOverviewSlice.fromJSON(e))
8897
- : [],
8898
- byProvider: globalThis.Array.isArray(object?.byProvider)
8899
- ? object.byProvider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
8900
- : globalThis.Array.isArray(object?.by_provider)
8901
- ? object.by_provider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
8902
- : [],
8903
- bySource: globalThis.Array.isArray(object?.bySource)
8904
- ? object.bySource.map((e: any) => ProjectOverviewSlice.fromJSON(e))
8905
- : globalThis.Array.isArray(object?.by_source)
8906
- ? object.by_source.map((e: any) => ProjectOverviewSlice.fromJSON(e))
8907
- : [],
8908
- topSessions: globalThis.Array.isArray(object?.topSessions)
8909
- ? object.topSessions.map((e: any) => ProjectSessionRef.fromJSON(e))
8910
- : globalThis.Array.isArray(object?.top_sessions)
8911
- ? object.top_sessions.map((e: any) => ProjectSessionRef.fromJSON(e))
8912
- : [],
9011
+ days: globalThis.Array.isArray(object?.days) ? object.days.map((e: any) => DailyActivityDay.fromJSON(e)) : [],
9012
+ startDate: isSet(object.startDate)
9013
+ ? globalThis.String(object.startDate)
9014
+ : isSet(object.start_date)
9015
+ ? globalThis.String(object.start_date)
9016
+ : "",
9017
+ endDate: isSet(object.endDate)
9018
+ ? globalThis.String(object.endDate)
9019
+ : isSet(object.end_date)
9020
+ ? globalThis.String(object.end_date)
9021
+ : "",
9022
+ coverageStart: isSet(object.coverageStart)
9023
+ ? globalThis.String(object.coverageStart)
9024
+ : isSet(object.coverage_start)
9025
+ ? globalThis.String(object.coverage_start)
9026
+ : "",
9027
+ today: isSet(object.today) ? globalThis.String(object.today) : "",
9028
+ asOf: isSet(object.asOf)
9029
+ ? fromJsonTimestamp(object.asOf)
9030
+ : isSet(object.as_of)
9031
+ ? fromJsonTimestamp(object.as_of)
9032
+ : undefined,
8913
9033
  };
8914
9034
  },
8915
9035
 
8916
- toJSON(message: ProjectOverview): unknown {
9036
+ toJSON(message: DailyActivity): unknown {
8917
9037
  const obj: any = {};
8918
- if (message.totals !== undefined) {
8919
- obj.totals = ProjectOverviewTotals.toJSON(message.totals);
9038
+ if (message.days?.length) {
9039
+ obj.days = message.days.map((e) => DailyActivityDay.toJSON(e));
8920
9040
  }
8921
- if (message.byModel?.length) {
8922
- obj.byModel = message.byModel.map((e) => ProjectOverviewSlice.toJSON(e));
9041
+ if (message.startDate !== "") {
9042
+ obj.startDate = message.startDate;
8923
9043
  }
8924
- if (message.byProvider?.length) {
8925
- obj.byProvider = message.byProvider.map((e) => ProjectOverviewSlice.toJSON(e));
9044
+ if (message.endDate !== "") {
9045
+ obj.endDate = message.endDate;
8926
9046
  }
8927
- if (message.bySource?.length) {
8928
- obj.bySource = message.bySource.map((e) => ProjectOverviewSlice.toJSON(e));
9047
+ if (message.coverageStart !== "") {
9048
+ obj.coverageStart = message.coverageStart;
8929
9049
  }
8930
- if (message.topSessions?.length) {
8931
- obj.topSessions = message.topSessions.map((e) => ProjectSessionRef.toJSON(e));
9050
+ if (message.today !== "") {
9051
+ obj.today = message.today;
9052
+ }
9053
+ if (message.asOf !== undefined) {
9054
+ obj.asOf = message.asOf.toISOString();
8932
9055
  }
8933
9056
  return obj;
8934
9057
  },
8935
9058
 
8936
- create<I extends Exact<DeepPartial<ProjectOverview>, I>>(base?: I): ProjectOverview {
8937
- return ProjectOverview.fromPartial(base ?? ({} as any));
9059
+ create<I extends Exact<DeepPartial<DailyActivity>, I>>(base?: I): DailyActivity {
9060
+ return DailyActivity.fromPartial(base ?? ({} as any));
8938
9061
  },
8939
- fromPartial<I extends Exact<DeepPartial<ProjectOverview>, I>>(object: I): ProjectOverview {
8940
- const message = createBaseProjectOverview();
8941
- message.totals = (object.totals !== undefined && object.totals !== null)
8942
- ? ProjectOverviewTotals.fromPartial(object.totals)
8943
- : undefined;
8944
- message.byModel = object.byModel?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
8945
- message.byProvider = object.byProvider?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
8946
- message.bySource = object.bySource?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
8947
- message.topSessions = object.topSessions?.map((e) => ProjectSessionRef.fromPartial(e)) || [];
9062
+ fromPartial<I extends Exact<DeepPartial<DailyActivity>, I>>(object: I): DailyActivity {
9063
+ const message = createBaseDailyActivity();
9064
+ message.days = object.days?.map((e) => DailyActivityDay.fromPartial(e)) || [];
9065
+ message.startDate = object.startDate ?? "";
9066
+ message.endDate = object.endDate ?? "";
9067
+ message.coverageStart = object.coverageStart ?? "";
9068
+ message.today = object.today ?? "";
9069
+ message.asOf = object.asOf ?? undefined;
8948
9070
  return message;
8949
9071
  },
8950
9072
  };
8951
9073
 
8952
- function createBaseProjectOverviewTotals(): ProjectOverviewTotals {
8953
- return {
8954
- sessions: 0,
8955
- modelCalls: 0,
8956
- toolCalls: 0,
8957
- userMessages: 0,
8958
- inputTokens: 0,
8959
- outputTokens: 0,
8960
- cacheReadTokens: 0,
8961
- cacheWriteTokens: 0,
8962
- costUsd: 0,
8963
- distinctUsers: 0,
8964
- commits: 0,
8965
- pushes: 0,
8966
- filesTouched: 0,
8967
- lastActivityAt: undefined,
8968
- };
9074
+ function createBaseDailyActivityDay(): DailyActivityDay {
9075
+ return { day: "", measures: undefined, provisional: false };
8969
9076
  }
8970
9077
 
8971
- export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
8972
- encode(message: ProjectOverviewTotals, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8973
- if (message.sessions !== 0) {
8974
- writer.uint32(8).uint64(message.sessions);
8975
- }
8976
- if (message.modelCalls !== 0) {
8977
- writer.uint32(16).uint64(message.modelCalls);
8978
- }
8979
- if (message.toolCalls !== 0) {
8980
- writer.uint32(24).uint64(message.toolCalls);
8981
- }
8982
- if (message.userMessages !== 0) {
8983
- writer.uint32(32).uint64(message.userMessages);
8984
- }
8985
- if (message.inputTokens !== 0) {
8986
- writer.uint32(40).uint64(message.inputTokens);
8987
- }
8988
- if (message.outputTokens !== 0) {
8989
- writer.uint32(48).uint64(message.outputTokens);
9078
+ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9079
+ encode(message: DailyActivityDay, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9080
+ if (message.day !== "") {
9081
+ writer.uint32(10).string(message.day);
8990
9082
  }
8991
- if (message.cacheReadTokens !== 0) {
8992
- writer.uint32(56).uint64(message.cacheReadTokens);
8993
- }
8994
- if (message.cacheWriteTokens !== 0) {
8995
- writer.uint32(64).uint64(message.cacheWriteTokens);
8996
- }
8997
- if (message.costUsd !== 0) {
8998
- writer.uint32(73).double(message.costUsd);
8999
- }
9000
- if (message.distinctUsers !== 0) {
9001
- writer.uint32(80).uint64(message.distinctUsers);
9002
- }
9003
- if (message.commits !== 0) {
9004
- writer.uint32(88).uint64(message.commits);
9005
- }
9006
- if (message.pushes !== 0) {
9007
- writer.uint32(96).uint64(message.pushes);
9008
- }
9009
- if (message.filesTouched !== 0) {
9010
- writer.uint32(104).uint64(message.filesTouched);
9083
+ if (message.measures !== undefined) {
9084
+ DailyActivityMeasures.encode(message.measures, writer.uint32(18).fork()).join();
9011
9085
  }
9012
- if (message.lastActivityAt !== undefined) {
9013
- Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(114).fork()).join();
9086
+ if (message.provisional !== false) {
9087
+ writer.uint32(24).bool(message.provisional);
9014
9088
  }
9015
9089
  return writer;
9016
9090
  },
9017
9091
 
9018
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewTotals {
9092
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityDay {
9019
9093
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9020
9094
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9021
9095
  if (previousRecursionDepth >= 100) {
@@ -9024,24 +9098,24 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
9024
9098
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9025
9099
  try {
9026
9100
  const end = length === undefined ? reader.len : reader.pos + length;
9027
- const message = createBaseProjectOverviewTotals();
9101
+ const message = createBaseDailyActivityDay();
9028
9102
  while (reader.pos < end) {
9029
9103
  const tag = reader.uint32();
9030
9104
  switch (tag >>> 3) {
9031
9105
  case 1: {
9032
- if (tag !== 8) {
9106
+ if (tag !== 10) {
9033
9107
  break;
9034
9108
  }
9035
9109
 
9036
- message.sessions = longToNumber(reader.uint64());
9110
+ message.day = reader.string();
9037
9111
  continue;
9038
9112
  }
9039
9113
  case 2: {
9040
- if (tag !== 16) {
9114
+ if (tag !== 18) {
9041
9115
  break;
9042
9116
  }
9043
9117
 
9044
- message.modelCalls = longToNumber(reader.uint64());
9118
+ message.measures = DailyActivityMeasures.decode(reader, reader.uint32());
9045
9119
  continue;
9046
9120
  }
9047
9121
  case 3: {
@@ -9049,7 +9123,786 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
9049
9123
  break;
9050
9124
  }
9051
9125
 
9052
- message.toolCalls = longToNumber(reader.uint64());
9126
+ message.provisional = reader.bool();
9127
+ continue;
9128
+ }
9129
+ }
9130
+ if ((tag & 7) === 4 || tag === 0) {
9131
+ break;
9132
+ }
9133
+ reader.skip(tag & 7);
9134
+ }
9135
+ return message;
9136
+ } finally {
9137
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9138
+ }
9139
+ },
9140
+
9141
+ fromJSON(object: any): DailyActivityDay {
9142
+ return {
9143
+ day: isSet(object.day) ? globalThis.String(object.day) : "",
9144
+ measures: isSet(object.measures) ? DailyActivityMeasures.fromJSON(object.measures) : undefined,
9145
+ provisional: isSet(object.provisional) ? globalThis.Boolean(object.provisional) : false,
9146
+ };
9147
+ },
9148
+
9149
+ toJSON(message: DailyActivityDay): unknown {
9150
+ const obj: any = {};
9151
+ if (message.day !== "") {
9152
+ obj.day = message.day;
9153
+ }
9154
+ if (message.measures !== undefined) {
9155
+ obj.measures = DailyActivityMeasures.toJSON(message.measures);
9156
+ }
9157
+ if (message.provisional !== false) {
9158
+ obj.provisional = message.provisional;
9159
+ }
9160
+ return obj;
9161
+ },
9162
+
9163
+ create<I extends Exact<DeepPartial<DailyActivityDay>, I>>(base?: I): DailyActivityDay {
9164
+ return DailyActivityDay.fromPartial(base ?? ({} as any));
9165
+ },
9166
+ fromPartial<I extends Exact<DeepPartial<DailyActivityDay>, I>>(object: I): DailyActivityDay {
9167
+ const message = createBaseDailyActivityDay();
9168
+ message.day = object.day ?? "";
9169
+ message.measures = (object.measures !== undefined && object.measures !== null)
9170
+ ? DailyActivityMeasures.fromPartial(object.measures)
9171
+ : undefined;
9172
+ message.provisional = object.provisional ?? false;
9173
+ return message;
9174
+ },
9175
+ };
9176
+
9177
+ function createBaseDailyActivityMeasures(): DailyActivityMeasures {
9178
+ return {
9179
+ inputTokens: 0,
9180
+ outputTokens: 0,
9181
+ cacheReadTokens: 0,
9182
+ cacheWriteTokens: 0,
9183
+ costUsd: 0,
9184
+ modelCalls: 0,
9185
+ toolCalls: 0,
9186
+ userMessages: 0,
9187
+ filesTouched: 0,
9188
+ commits: 0,
9189
+ gitPushes: 0,
9190
+ pullRequestsCreated: 0,
9191
+ pullRequestsMerged: 0,
9192
+ branchesCreated: 0,
9193
+ };
9194
+ }
9195
+
9196
+ export const DailyActivityMeasures: MessageFns<DailyActivityMeasures> = {
9197
+ encode(message: DailyActivityMeasures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9198
+ if (message.inputTokens !== 0) {
9199
+ writer.uint32(8).uint64(message.inputTokens);
9200
+ }
9201
+ if (message.outputTokens !== 0) {
9202
+ writer.uint32(16).uint64(message.outputTokens);
9203
+ }
9204
+ if (message.cacheReadTokens !== 0) {
9205
+ writer.uint32(24).uint64(message.cacheReadTokens);
9206
+ }
9207
+ if (message.cacheWriteTokens !== 0) {
9208
+ writer.uint32(32).uint64(message.cacheWriteTokens);
9209
+ }
9210
+ if (message.costUsd !== 0) {
9211
+ writer.uint32(41).double(message.costUsd);
9212
+ }
9213
+ if (message.modelCalls !== 0) {
9214
+ writer.uint32(48).uint64(message.modelCalls);
9215
+ }
9216
+ if (message.toolCalls !== 0) {
9217
+ writer.uint32(56).uint64(message.toolCalls);
9218
+ }
9219
+ if (message.userMessages !== 0) {
9220
+ writer.uint32(64).uint64(message.userMessages);
9221
+ }
9222
+ if (message.filesTouched !== 0) {
9223
+ writer.uint32(72).uint64(message.filesTouched);
9224
+ }
9225
+ if (message.commits !== 0) {
9226
+ writer.uint32(80).uint64(message.commits);
9227
+ }
9228
+ if (message.gitPushes !== 0) {
9229
+ writer.uint32(88).uint64(message.gitPushes);
9230
+ }
9231
+ if (message.pullRequestsCreated !== 0) {
9232
+ writer.uint32(96).uint64(message.pullRequestsCreated);
9233
+ }
9234
+ if (message.pullRequestsMerged !== 0) {
9235
+ writer.uint32(104).uint64(message.pullRequestsMerged);
9236
+ }
9237
+ if (message.branchesCreated !== 0) {
9238
+ writer.uint32(112).uint64(message.branchesCreated);
9239
+ }
9240
+ return writer;
9241
+ },
9242
+
9243
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityMeasures {
9244
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9245
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9246
+ if (previousRecursionDepth >= 100) {
9247
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9248
+ }
9249
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9250
+ try {
9251
+ const end = length === undefined ? reader.len : reader.pos + length;
9252
+ const message = createBaseDailyActivityMeasures();
9253
+ while (reader.pos < end) {
9254
+ const tag = reader.uint32();
9255
+ switch (tag >>> 3) {
9256
+ case 1: {
9257
+ if (tag !== 8) {
9258
+ break;
9259
+ }
9260
+
9261
+ message.inputTokens = longToNumber(reader.uint64());
9262
+ continue;
9263
+ }
9264
+ case 2: {
9265
+ if (tag !== 16) {
9266
+ break;
9267
+ }
9268
+
9269
+ message.outputTokens = longToNumber(reader.uint64());
9270
+ continue;
9271
+ }
9272
+ case 3: {
9273
+ if (tag !== 24) {
9274
+ break;
9275
+ }
9276
+
9277
+ message.cacheReadTokens = longToNumber(reader.uint64());
9278
+ continue;
9279
+ }
9280
+ case 4: {
9281
+ if (tag !== 32) {
9282
+ break;
9283
+ }
9284
+
9285
+ message.cacheWriteTokens = longToNumber(reader.uint64());
9286
+ continue;
9287
+ }
9288
+ case 5: {
9289
+ if (tag !== 41) {
9290
+ break;
9291
+ }
9292
+
9293
+ message.costUsd = reader.double();
9294
+ continue;
9295
+ }
9296
+ case 6: {
9297
+ if (tag !== 48) {
9298
+ break;
9299
+ }
9300
+
9301
+ message.modelCalls = longToNumber(reader.uint64());
9302
+ continue;
9303
+ }
9304
+ case 7: {
9305
+ if (tag !== 56) {
9306
+ break;
9307
+ }
9308
+
9309
+ message.toolCalls = longToNumber(reader.uint64());
9310
+ continue;
9311
+ }
9312
+ case 8: {
9313
+ if (tag !== 64) {
9314
+ break;
9315
+ }
9316
+
9317
+ message.userMessages = longToNumber(reader.uint64());
9318
+ continue;
9319
+ }
9320
+ case 9: {
9321
+ if (tag !== 72) {
9322
+ break;
9323
+ }
9324
+
9325
+ message.filesTouched = longToNumber(reader.uint64());
9326
+ continue;
9327
+ }
9328
+ case 10: {
9329
+ if (tag !== 80) {
9330
+ break;
9331
+ }
9332
+
9333
+ message.commits = longToNumber(reader.uint64());
9334
+ continue;
9335
+ }
9336
+ case 11: {
9337
+ if (tag !== 88) {
9338
+ break;
9339
+ }
9340
+
9341
+ message.gitPushes = longToNumber(reader.uint64());
9342
+ continue;
9343
+ }
9344
+ case 12: {
9345
+ if (tag !== 96) {
9346
+ break;
9347
+ }
9348
+
9349
+ message.pullRequestsCreated = longToNumber(reader.uint64());
9350
+ continue;
9351
+ }
9352
+ case 13: {
9353
+ if (tag !== 104) {
9354
+ break;
9355
+ }
9356
+
9357
+ message.pullRequestsMerged = longToNumber(reader.uint64());
9358
+ continue;
9359
+ }
9360
+ case 14: {
9361
+ if (tag !== 112) {
9362
+ break;
9363
+ }
9364
+
9365
+ message.branchesCreated = longToNumber(reader.uint64());
9366
+ continue;
9367
+ }
9368
+ }
9369
+ if ((tag & 7) === 4 || tag === 0) {
9370
+ break;
9371
+ }
9372
+ reader.skip(tag & 7);
9373
+ }
9374
+ return message;
9375
+ } finally {
9376
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9377
+ }
9378
+ },
9379
+
9380
+ fromJSON(object: any): DailyActivityMeasures {
9381
+ return {
9382
+ inputTokens: isSet(object.inputTokens)
9383
+ ? globalThis.Number(object.inputTokens)
9384
+ : isSet(object.input_tokens)
9385
+ ? globalThis.Number(object.input_tokens)
9386
+ : 0,
9387
+ outputTokens: isSet(object.outputTokens)
9388
+ ? globalThis.Number(object.outputTokens)
9389
+ : isSet(object.output_tokens)
9390
+ ? globalThis.Number(object.output_tokens)
9391
+ : 0,
9392
+ cacheReadTokens: isSet(object.cacheReadTokens)
9393
+ ? globalThis.Number(object.cacheReadTokens)
9394
+ : isSet(object.cache_read_tokens)
9395
+ ? globalThis.Number(object.cache_read_tokens)
9396
+ : 0,
9397
+ cacheWriteTokens: isSet(object.cacheWriteTokens)
9398
+ ? globalThis.Number(object.cacheWriteTokens)
9399
+ : isSet(object.cache_write_tokens)
9400
+ ? globalThis.Number(object.cache_write_tokens)
9401
+ : 0,
9402
+ costUsd: isSet(object.costUsd)
9403
+ ? globalThis.Number(object.costUsd)
9404
+ : isSet(object.cost_usd)
9405
+ ? globalThis.Number(object.cost_usd)
9406
+ : 0,
9407
+ modelCalls: isSet(object.modelCalls)
9408
+ ? globalThis.Number(object.modelCalls)
9409
+ : isSet(object.model_calls)
9410
+ ? globalThis.Number(object.model_calls)
9411
+ : 0,
9412
+ toolCalls: isSet(object.toolCalls)
9413
+ ? globalThis.Number(object.toolCalls)
9414
+ : isSet(object.tool_calls)
9415
+ ? globalThis.Number(object.tool_calls)
9416
+ : 0,
9417
+ userMessages: isSet(object.userMessages)
9418
+ ? globalThis.Number(object.userMessages)
9419
+ : isSet(object.user_messages)
9420
+ ? globalThis.Number(object.user_messages)
9421
+ : 0,
9422
+ filesTouched: isSet(object.filesTouched)
9423
+ ? globalThis.Number(object.filesTouched)
9424
+ : isSet(object.files_touched)
9425
+ ? globalThis.Number(object.files_touched)
9426
+ : 0,
9427
+ commits: isSet(object.commits) ? globalThis.Number(object.commits) : 0,
9428
+ gitPushes: isSet(object.gitPushes)
9429
+ ? globalThis.Number(object.gitPushes)
9430
+ : isSet(object.git_pushes)
9431
+ ? globalThis.Number(object.git_pushes)
9432
+ : 0,
9433
+ pullRequestsCreated: isSet(object.pullRequestsCreated)
9434
+ ? globalThis.Number(object.pullRequestsCreated)
9435
+ : isSet(object.pull_requests_created)
9436
+ ? globalThis.Number(object.pull_requests_created)
9437
+ : 0,
9438
+ pullRequestsMerged: isSet(object.pullRequestsMerged)
9439
+ ? globalThis.Number(object.pullRequestsMerged)
9440
+ : isSet(object.pull_requests_merged)
9441
+ ? globalThis.Number(object.pull_requests_merged)
9442
+ : 0,
9443
+ branchesCreated: isSet(object.branchesCreated)
9444
+ ? globalThis.Number(object.branchesCreated)
9445
+ : isSet(object.branches_created)
9446
+ ? globalThis.Number(object.branches_created)
9447
+ : 0,
9448
+ };
9449
+ },
9450
+
9451
+ toJSON(message: DailyActivityMeasures): unknown {
9452
+ const obj: any = {};
9453
+ if (message.inputTokens !== 0) {
9454
+ obj.inputTokens = Math.round(message.inputTokens);
9455
+ }
9456
+ if (message.outputTokens !== 0) {
9457
+ obj.outputTokens = Math.round(message.outputTokens);
9458
+ }
9459
+ if (message.cacheReadTokens !== 0) {
9460
+ obj.cacheReadTokens = Math.round(message.cacheReadTokens);
9461
+ }
9462
+ if (message.cacheWriteTokens !== 0) {
9463
+ obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
9464
+ }
9465
+ if (message.costUsd !== 0) {
9466
+ obj.costUsd = message.costUsd;
9467
+ }
9468
+ if (message.modelCalls !== 0) {
9469
+ obj.modelCalls = Math.round(message.modelCalls);
9470
+ }
9471
+ if (message.toolCalls !== 0) {
9472
+ obj.toolCalls = Math.round(message.toolCalls);
9473
+ }
9474
+ if (message.userMessages !== 0) {
9475
+ obj.userMessages = Math.round(message.userMessages);
9476
+ }
9477
+ if (message.filesTouched !== 0) {
9478
+ obj.filesTouched = Math.round(message.filesTouched);
9479
+ }
9480
+ if (message.commits !== 0) {
9481
+ obj.commits = Math.round(message.commits);
9482
+ }
9483
+ if (message.gitPushes !== 0) {
9484
+ obj.gitPushes = Math.round(message.gitPushes);
9485
+ }
9486
+ if (message.pullRequestsCreated !== 0) {
9487
+ obj.pullRequestsCreated = Math.round(message.pullRequestsCreated);
9488
+ }
9489
+ if (message.pullRequestsMerged !== 0) {
9490
+ obj.pullRequestsMerged = Math.round(message.pullRequestsMerged);
9491
+ }
9492
+ if (message.branchesCreated !== 0) {
9493
+ obj.branchesCreated = Math.round(message.branchesCreated);
9494
+ }
9495
+ return obj;
9496
+ },
9497
+
9498
+ create<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(base?: I): DailyActivityMeasures {
9499
+ return DailyActivityMeasures.fromPartial(base ?? ({} as any));
9500
+ },
9501
+ fromPartial<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(object: I): DailyActivityMeasures {
9502
+ const message = createBaseDailyActivityMeasures();
9503
+ message.inputTokens = object.inputTokens ?? 0;
9504
+ message.outputTokens = object.outputTokens ?? 0;
9505
+ message.cacheReadTokens = object.cacheReadTokens ?? 0;
9506
+ message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
9507
+ message.costUsd = object.costUsd ?? 0;
9508
+ message.modelCalls = object.modelCalls ?? 0;
9509
+ message.toolCalls = object.toolCalls ?? 0;
9510
+ message.userMessages = object.userMessages ?? 0;
9511
+ message.filesTouched = object.filesTouched ?? 0;
9512
+ message.commits = object.commits ?? 0;
9513
+ message.gitPushes = object.gitPushes ?? 0;
9514
+ message.pullRequestsCreated = object.pullRequestsCreated ?? 0;
9515
+ message.pullRequestsMerged = object.pullRequestsMerged ?? 0;
9516
+ message.branchesCreated = object.branchesCreated ?? 0;
9517
+ return message;
9518
+ },
9519
+ };
9520
+
9521
+ function createBaseProjectOverviewRequest(): ProjectOverviewRequest {
9522
+ return { organizationId: "", projectId: "", activeAfter: undefined, topSessions: 0 };
9523
+ }
9524
+
9525
+ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
9526
+ encode(message: ProjectOverviewRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9527
+ if (message.organizationId !== "") {
9528
+ writer.uint32(10).string(message.organizationId);
9529
+ }
9530
+ if (message.projectId !== "") {
9531
+ writer.uint32(18).string(message.projectId);
9532
+ }
9533
+ if (message.activeAfter !== undefined) {
9534
+ Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(26).fork()).join();
9535
+ }
9536
+ if (message.topSessions !== 0) {
9537
+ writer.uint32(32).int32(message.topSessions);
9538
+ }
9539
+ return writer;
9540
+ },
9541
+
9542
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewRequest {
9543
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9544
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9545
+ if (previousRecursionDepth >= 100) {
9546
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9547
+ }
9548
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9549
+ try {
9550
+ const end = length === undefined ? reader.len : reader.pos + length;
9551
+ const message = createBaseProjectOverviewRequest();
9552
+ while (reader.pos < end) {
9553
+ const tag = reader.uint32();
9554
+ switch (tag >>> 3) {
9555
+ case 1: {
9556
+ if (tag !== 10) {
9557
+ break;
9558
+ }
9559
+
9560
+ message.organizationId = reader.string();
9561
+ continue;
9562
+ }
9563
+ case 2: {
9564
+ if (tag !== 18) {
9565
+ break;
9566
+ }
9567
+
9568
+ message.projectId = reader.string();
9569
+ continue;
9570
+ }
9571
+ case 3: {
9572
+ if (tag !== 26) {
9573
+ break;
9574
+ }
9575
+
9576
+ message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9577
+ continue;
9578
+ }
9579
+ case 4: {
9580
+ if (tag !== 32) {
9581
+ break;
9582
+ }
9583
+
9584
+ message.topSessions = reader.int32();
9585
+ continue;
9586
+ }
9587
+ }
9588
+ if ((tag & 7) === 4 || tag === 0) {
9589
+ break;
9590
+ }
9591
+ reader.skip(tag & 7);
9592
+ }
9593
+ return message;
9594
+ } finally {
9595
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9596
+ }
9597
+ },
9598
+
9599
+ fromJSON(object: any): ProjectOverviewRequest {
9600
+ return {
9601
+ organizationId: isSet(object.organizationId)
9602
+ ? globalThis.String(object.organizationId)
9603
+ : isSet(object.organization_id)
9604
+ ? globalThis.String(object.organization_id)
9605
+ : "",
9606
+ projectId: isSet(object.projectId)
9607
+ ? globalThis.String(object.projectId)
9608
+ : isSet(object.project_id)
9609
+ ? globalThis.String(object.project_id)
9610
+ : "",
9611
+ activeAfter: isSet(object.activeAfter)
9612
+ ? fromJsonTimestamp(object.activeAfter)
9613
+ : isSet(object.active_after)
9614
+ ? fromJsonTimestamp(object.active_after)
9615
+ : undefined,
9616
+ topSessions: isSet(object.topSessions)
9617
+ ? globalThis.Number(object.topSessions)
9618
+ : isSet(object.top_sessions)
9619
+ ? globalThis.Number(object.top_sessions)
9620
+ : 0,
9621
+ };
9622
+ },
9623
+
9624
+ toJSON(message: ProjectOverviewRequest): unknown {
9625
+ const obj: any = {};
9626
+ if (message.organizationId !== "") {
9627
+ obj.organizationId = message.organizationId;
9628
+ }
9629
+ if (message.projectId !== "") {
9630
+ obj.projectId = message.projectId;
9631
+ }
9632
+ if (message.activeAfter !== undefined) {
9633
+ obj.activeAfter = message.activeAfter.toISOString();
9634
+ }
9635
+ if (message.topSessions !== 0) {
9636
+ obj.topSessions = Math.round(message.topSessions);
9637
+ }
9638
+ return obj;
9639
+ },
9640
+
9641
+ create<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(base?: I): ProjectOverviewRequest {
9642
+ return ProjectOverviewRequest.fromPartial(base ?? ({} as any));
9643
+ },
9644
+ fromPartial<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(object: I): ProjectOverviewRequest {
9645
+ const message = createBaseProjectOverviewRequest();
9646
+ message.organizationId = object.organizationId ?? "";
9647
+ message.projectId = object.projectId ?? "";
9648
+ message.activeAfter = object.activeAfter ?? undefined;
9649
+ message.topSessions = object.topSessions ?? 0;
9650
+ return message;
9651
+ },
9652
+ };
9653
+
9654
+ function createBaseProjectOverview(): ProjectOverview {
9655
+ return { totals: undefined, byModel: [], byProvider: [], bySource: [], topSessions: [] };
9656
+ }
9657
+
9658
+ export const ProjectOverview: MessageFns<ProjectOverview> = {
9659
+ encode(message: ProjectOverview, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9660
+ if (message.totals !== undefined) {
9661
+ ProjectOverviewTotals.encode(message.totals, writer.uint32(10).fork()).join();
9662
+ }
9663
+ for (const v of message.byModel) {
9664
+ ProjectOverviewSlice.encode(v!, writer.uint32(18).fork()).join();
9665
+ }
9666
+ for (const v of message.byProvider) {
9667
+ ProjectOverviewSlice.encode(v!, writer.uint32(26).fork()).join();
9668
+ }
9669
+ for (const v of message.bySource) {
9670
+ ProjectOverviewSlice.encode(v!, writer.uint32(34).fork()).join();
9671
+ }
9672
+ for (const v of message.topSessions) {
9673
+ ProjectSessionRef.encode(v!, writer.uint32(42).fork()).join();
9674
+ }
9675
+ return writer;
9676
+ },
9677
+
9678
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverview {
9679
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9680
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9681
+ if (previousRecursionDepth >= 100) {
9682
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9683
+ }
9684
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9685
+ try {
9686
+ const end = length === undefined ? reader.len : reader.pos + length;
9687
+ const message = createBaseProjectOverview();
9688
+ while (reader.pos < end) {
9689
+ const tag = reader.uint32();
9690
+ switch (tag >>> 3) {
9691
+ case 1: {
9692
+ if (tag !== 10) {
9693
+ break;
9694
+ }
9695
+
9696
+ message.totals = ProjectOverviewTotals.decode(reader, reader.uint32());
9697
+ continue;
9698
+ }
9699
+ case 2: {
9700
+ if (tag !== 18) {
9701
+ break;
9702
+ }
9703
+
9704
+ message.byModel.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
9705
+ continue;
9706
+ }
9707
+ case 3: {
9708
+ if (tag !== 26) {
9709
+ break;
9710
+ }
9711
+
9712
+ message.byProvider.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
9713
+ continue;
9714
+ }
9715
+ case 4: {
9716
+ if (tag !== 34) {
9717
+ break;
9718
+ }
9719
+
9720
+ message.bySource.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
9721
+ continue;
9722
+ }
9723
+ case 5: {
9724
+ if (tag !== 42) {
9725
+ break;
9726
+ }
9727
+
9728
+ message.topSessions.push(ProjectSessionRef.decode(reader, reader.uint32()));
9729
+ continue;
9730
+ }
9731
+ }
9732
+ if ((tag & 7) === 4 || tag === 0) {
9733
+ break;
9734
+ }
9735
+ reader.skip(tag & 7);
9736
+ }
9737
+ return message;
9738
+ } finally {
9739
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9740
+ }
9741
+ },
9742
+
9743
+ fromJSON(object: any): ProjectOverview {
9744
+ return {
9745
+ totals: isSet(object.totals) ? ProjectOverviewTotals.fromJSON(object.totals) : undefined,
9746
+ byModel: globalThis.Array.isArray(object?.byModel)
9747
+ ? object.byModel.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9748
+ : globalThis.Array.isArray(object?.by_model)
9749
+ ? object.by_model.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9750
+ : [],
9751
+ byProvider: globalThis.Array.isArray(object?.byProvider)
9752
+ ? object.byProvider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9753
+ : globalThis.Array.isArray(object?.by_provider)
9754
+ ? object.by_provider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9755
+ : [],
9756
+ bySource: globalThis.Array.isArray(object?.bySource)
9757
+ ? object.bySource.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9758
+ : globalThis.Array.isArray(object?.by_source)
9759
+ ? object.by_source.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9760
+ : [],
9761
+ topSessions: globalThis.Array.isArray(object?.topSessions)
9762
+ ? object.topSessions.map((e: any) => ProjectSessionRef.fromJSON(e))
9763
+ : globalThis.Array.isArray(object?.top_sessions)
9764
+ ? object.top_sessions.map((e: any) => ProjectSessionRef.fromJSON(e))
9765
+ : [],
9766
+ };
9767
+ },
9768
+
9769
+ toJSON(message: ProjectOverview): unknown {
9770
+ const obj: any = {};
9771
+ if (message.totals !== undefined) {
9772
+ obj.totals = ProjectOverviewTotals.toJSON(message.totals);
9773
+ }
9774
+ if (message.byModel?.length) {
9775
+ obj.byModel = message.byModel.map((e) => ProjectOverviewSlice.toJSON(e));
9776
+ }
9777
+ if (message.byProvider?.length) {
9778
+ obj.byProvider = message.byProvider.map((e) => ProjectOverviewSlice.toJSON(e));
9779
+ }
9780
+ if (message.bySource?.length) {
9781
+ obj.bySource = message.bySource.map((e) => ProjectOverviewSlice.toJSON(e));
9782
+ }
9783
+ if (message.topSessions?.length) {
9784
+ obj.topSessions = message.topSessions.map((e) => ProjectSessionRef.toJSON(e));
9785
+ }
9786
+ return obj;
9787
+ },
9788
+
9789
+ create<I extends Exact<DeepPartial<ProjectOverview>, I>>(base?: I): ProjectOverview {
9790
+ return ProjectOverview.fromPartial(base ?? ({} as any));
9791
+ },
9792
+ fromPartial<I extends Exact<DeepPartial<ProjectOverview>, I>>(object: I): ProjectOverview {
9793
+ const message = createBaseProjectOverview();
9794
+ message.totals = (object.totals !== undefined && object.totals !== null)
9795
+ ? ProjectOverviewTotals.fromPartial(object.totals)
9796
+ : undefined;
9797
+ message.byModel = object.byModel?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
9798
+ message.byProvider = object.byProvider?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
9799
+ message.bySource = object.bySource?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
9800
+ message.topSessions = object.topSessions?.map((e) => ProjectSessionRef.fromPartial(e)) || [];
9801
+ return message;
9802
+ },
9803
+ };
9804
+
9805
+ function createBaseProjectOverviewTotals(): ProjectOverviewTotals {
9806
+ return {
9807
+ sessions: 0,
9808
+ modelCalls: 0,
9809
+ toolCalls: 0,
9810
+ userMessages: 0,
9811
+ inputTokens: 0,
9812
+ outputTokens: 0,
9813
+ cacheReadTokens: 0,
9814
+ cacheWriteTokens: 0,
9815
+ costUsd: 0,
9816
+ distinctUsers: 0,
9817
+ commits: 0,
9818
+ pushes: 0,
9819
+ filesTouched: 0,
9820
+ lastActivityAt: undefined,
9821
+ };
9822
+ }
9823
+
9824
+ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
9825
+ encode(message: ProjectOverviewTotals, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9826
+ if (message.sessions !== 0) {
9827
+ writer.uint32(8).uint64(message.sessions);
9828
+ }
9829
+ if (message.modelCalls !== 0) {
9830
+ writer.uint32(16).uint64(message.modelCalls);
9831
+ }
9832
+ if (message.toolCalls !== 0) {
9833
+ writer.uint32(24).uint64(message.toolCalls);
9834
+ }
9835
+ if (message.userMessages !== 0) {
9836
+ writer.uint32(32).uint64(message.userMessages);
9837
+ }
9838
+ if (message.inputTokens !== 0) {
9839
+ writer.uint32(40).uint64(message.inputTokens);
9840
+ }
9841
+ if (message.outputTokens !== 0) {
9842
+ writer.uint32(48).uint64(message.outputTokens);
9843
+ }
9844
+ if (message.cacheReadTokens !== 0) {
9845
+ writer.uint32(56).uint64(message.cacheReadTokens);
9846
+ }
9847
+ if (message.cacheWriteTokens !== 0) {
9848
+ writer.uint32(64).uint64(message.cacheWriteTokens);
9849
+ }
9850
+ if (message.costUsd !== 0) {
9851
+ writer.uint32(73).double(message.costUsd);
9852
+ }
9853
+ if (message.distinctUsers !== 0) {
9854
+ writer.uint32(80).uint64(message.distinctUsers);
9855
+ }
9856
+ if (message.commits !== 0) {
9857
+ writer.uint32(88).uint64(message.commits);
9858
+ }
9859
+ if (message.pushes !== 0) {
9860
+ writer.uint32(96).uint64(message.pushes);
9861
+ }
9862
+ if (message.filesTouched !== 0) {
9863
+ writer.uint32(104).uint64(message.filesTouched);
9864
+ }
9865
+ if (message.lastActivityAt !== undefined) {
9866
+ Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(114).fork()).join();
9867
+ }
9868
+ return writer;
9869
+ },
9870
+
9871
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewTotals {
9872
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9873
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9874
+ if (previousRecursionDepth >= 100) {
9875
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9876
+ }
9877
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9878
+ try {
9879
+ const end = length === undefined ? reader.len : reader.pos + length;
9880
+ const message = createBaseProjectOverviewTotals();
9881
+ while (reader.pos < end) {
9882
+ const tag = reader.uint32();
9883
+ switch (tag >>> 3) {
9884
+ case 1: {
9885
+ if (tag !== 8) {
9886
+ break;
9887
+ }
9888
+
9889
+ message.sessions = longToNumber(reader.uint64());
9890
+ continue;
9891
+ }
9892
+ case 2: {
9893
+ if (tag !== 16) {
9894
+ break;
9895
+ }
9896
+
9897
+ message.modelCalls = longToNumber(reader.uint64());
9898
+ continue;
9899
+ }
9900
+ case 3: {
9901
+ if (tag !== 24) {
9902
+ break;
9903
+ }
9904
+
9905
+ message.toolCalls = longToNumber(reader.uint64());
9053
9906
  continue;
9054
9907
  }
9055
9908
  case 4: {
@@ -12289,12 +13142,8 @@ export const AITokenUsage: MessageFns<AITokenUsage> = {
12289
13142
  };
12290
13143
 
12291
13144
  /**
12292
- * AIGatewayService is the frontend-facing proxy over telemetry.api.v1.AIService:
12293
- * the AI session catalog, one session's conversational replay, the principal
12294
- * id->name catalog (read + alias write), and the global model-price catalog. A thin proxy — it resolves the caller's
12295
- * identity, stamps the authorized organization/project, and forwards. Messages
12296
- * duplicate the telemetry-api shape (proto domain isolation); unary responses
12297
- * carry ResponseStatus, streams do not.
13145
+ * AIGatewayService is the frontend-facing proxy over telemetry.api.v1.AIService.
13146
+ * It stamps the authorized organization/project and forwards telemetry-api-shaped messages.
12298
13147
  */
12299
13148
  export interface AIGatewayService {
12300
13149
  /**
@@ -12337,18 +13186,22 @@ export interface AIGatewayService {
12337
13186
  */
12338
13187
  StreamGitActivitySummary(request: GitActivitySummaryRequest, metadata?: Metadata): Observable<GitActivitySummary>;
12339
13188
  /**
12340
- * Live token burn calendar: a windowed, dimension-sliced token/cost trend series over ai_events
12341
- * model_calls plus whole-window totals — one aggregate read re-derived each tick, instead of a
12342
- * client-reduced matrix of PromQL queries.
13189
+ * Live token burn calendar: a windowed, dimension-sliced token/cost trend series
13190
+ * plus whole-window totals.
12343
13191
  */
12344
13192
  StreamTokenActivitySummary(
12345
13193
  request: TokenActivitySummaryRequest,
12346
13194
  metadata?: Metadata,
12347
13195
  ): Observable<TokenActivitySummary>;
12348
13196
  /**
12349
- * Live stream of one project's flagship dashboard bundle — headline totals, model/provider/source mix,
12350
- * and top sessions by cost, a complete snapshot re-derived each tick. Replaces a whole-catalog stream
12351
- * plus a matrix of PromQL queries.
13197
+ * Live token-burn calendar over an inclusive UTC [start_date, end_date] range: one complete row per
13198
+ * covered day off the precomputed daily rollup. Covered empty days are zero; uncomputed history is
13199
+ * omitted; today is provisional.
13200
+ */
13201
+ StreamDailyActivity(request: DailyActivityRequest, metadata?: Metadata): Observable<DailyActivity>;
13202
+ /**
13203
+ * Live stream of one project's dashboard bundle: headline totals, model/provider/source mix,
13204
+ * and top sessions by cost.
12352
13205
  */
12353
13206
  StreamProjectOverview(request: ProjectOverviewRequest, metadata?: Metadata): Observable<ProjectOverview>;
12354
13207
  /** Per-file working-state feed (keyset-paginated) behind the unlanded-work funnel. */
@@ -12390,6 +13243,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
12390
13243
  this.StreamGitActivities = this.StreamGitActivities.bind(this);
12391
13244
  this.StreamGitActivitySummary = this.StreamGitActivitySummary.bind(this);
12392
13245
  this.StreamTokenActivitySummary = this.StreamTokenActivitySummary.bind(this);
13246
+ this.StreamDailyActivity = this.StreamDailyActivity.bind(this);
12393
13247
  this.StreamProjectOverview = this.StreamProjectOverview.bind(this);
12394
13248
  this.ListFiles = this.ListFiles.bind(this);
12395
13249
  this.StreamFilesSummary = this.StreamFilesSummary.bind(this);
@@ -12480,6 +13334,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
12480
13334
  return result.pipe(map((data) => TokenActivitySummary.decode(new BinaryReader(data))));
12481
13335
  }
12482
13336
 
13337
+ StreamDailyActivity(request: DailyActivityRequest, metadata?: Metadata): Observable<DailyActivity> {
13338
+ const data = DailyActivityRequest.encode(request).finish();
13339
+ const result = this.rpc.serverStreamingRequest(this.service, "StreamDailyActivity", data, metadata);
13340
+ return result.pipe(map((data) => DailyActivity.decode(new BinaryReader(data))));
13341
+ }
13342
+
12483
13343
  StreamProjectOverview(request: ProjectOverviewRequest, metadata?: Metadata): Observable<ProjectOverview> {
12484
13344
  const data = ProjectOverviewRequest.encode(request).finish();
12485
13345
  const result = this.rpc.serverStreamingRequest(this.service, "StreamProjectOverview", data, metadata);