@miradorlabs/web-grpc 2.54.0 → 2.55.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.
@@ -1141,6 +1141,56 @@ export interface TokenActivityMeasures {
1141
1141
  modelCalls: number;
1142
1142
  }
1143
1143
 
1144
+ export interface DailyActivityRequest {
1145
+ organizationId: string;
1146
+ projectId: string;
1147
+ /** Inclusive UTC calendar-day bounds, YYYY-MM-DD. end_date >= start_date. */
1148
+ startDate: string;
1149
+ endDate: string;
1150
+ }
1151
+
1152
+ /**
1153
+ * DailyActivity mirrors telemetry.api.v1.DailyActivity: covered UTC days ascending, replaced wholesale
1154
+ * each tick (streams carry no ResponseStatus). Covered empty days are zero rows; days before
1155
+ * coverage_start are omitted; today is provisional.
1156
+ */
1157
+ export interface DailyActivity {
1158
+ days: DailyActivityDay[];
1159
+ startDate: string;
1160
+ endDate: string;
1161
+ coverageStart: string;
1162
+ today: string;
1163
+ asOf: Date | undefined;
1164
+ }
1165
+
1166
+ export interface DailyActivityDay {
1167
+ /** YYYY-MM-DD UTC */
1168
+ day: string;
1169
+ measures: DailyActivityMeasures | undefined;
1170
+ provisional: boolean;
1171
+ }
1172
+
1173
+ /**
1174
+ * DailyActivityMeasures — input_tokens is cache-inclusive; cache_read/cache_write are subsets. Git
1175
+ * counters are confirmed, non-failed folded activities.
1176
+ */
1177
+ export interface DailyActivityMeasures {
1178
+ inputTokens: number;
1179
+ outputTokens: number;
1180
+ cacheReadTokens: number;
1181
+ cacheWriteTokens: number;
1182
+ costUsd: number;
1183
+ modelCalls: number;
1184
+ toolCalls: number;
1185
+ userMessages: number;
1186
+ filesTouched: number;
1187
+ commits: number;
1188
+ gitPushes: number;
1189
+ pullRequestsCreated: number;
1190
+ pullRequestsMerged: number;
1191
+ branchesCreated: number;
1192
+ }
1193
+
1144
1194
  export interface ProjectOverviewRequest {
1145
1195
  organizationId: string;
1146
1196
  projectId: string;
@@ -8665,28 +8715,28 @@ export const TokenActivityMeasures: MessageFns<TokenActivityMeasures> = {
8665
8715
  },
8666
8716
  };
8667
8717
 
8668
- function createBaseProjectOverviewRequest(): ProjectOverviewRequest {
8669
- return { organizationId: "", projectId: "", activeAfter: undefined, topSessions: 0 };
8718
+ function createBaseDailyActivityRequest(): DailyActivityRequest {
8719
+ return { organizationId: "", projectId: "", startDate: "", endDate: "" };
8670
8720
  }
8671
8721
 
8672
- export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8673
- encode(message: ProjectOverviewRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8722
+ export const DailyActivityRequest: MessageFns<DailyActivityRequest> = {
8723
+ encode(message: DailyActivityRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8674
8724
  if (message.organizationId !== "") {
8675
8725
  writer.uint32(10).string(message.organizationId);
8676
8726
  }
8677
8727
  if (message.projectId !== "") {
8678
8728
  writer.uint32(18).string(message.projectId);
8679
8729
  }
8680
- if (message.activeAfter !== undefined) {
8681
- Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(26).fork()).join();
8730
+ if (message.startDate !== "") {
8731
+ writer.uint32(26).string(message.startDate);
8682
8732
  }
8683
- if (message.topSessions !== 0) {
8684
- writer.uint32(32).int32(message.topSessions);
8733
+ if (message.endDate !== "") {
8734
+ writer.uint32(34).string(message.endDate);
8685
8735
  }
8686
8736
  return writer;
8687
8737
  },
8688
8738
 
8689
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewRequest {
8739
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityRequest {
8690
8740
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
8691
8741
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
8692
8742
  if (previousRecursionDepth >= 100) {
@@ -8695,7 +8745,7 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8695
8745
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
8696
8746
  try {
8697
8747
  const end = length === undefined ? reader.len : reader.pos + length;
8698
- const message = createBaseProjectOverviewRequest();
8748
+ const message = createBaseDailyActivityRequest();
8699
8749
  while (reader.pos < end) {
8700
8750
  const tag = reader.uint32();
8701
8751
  switch (tag >>> 3) {
@@ -8720,15 +8770,15 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8720
8770
  break;
8721
8771
  }
8722
8772
 
8723
- message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
8773
+ message.startDate = reader.string();
8724
8774
  continue;
8725
8775
  }
8726
8776
  case 4: {
8727
- if (tag !== 32) {
8777
+ if (tag !== 34) {
8728
8778
  break;
8729
8779
  }
8730
8780
 
8731
- message.topSessions = reader.int32();
8781
+ message.endDate = reader.string();
8732
8782
  continue;
8733
8783
  }
8734
8784
  }
@@ -8743,7 +8793,7 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8743
8793
  }
8744
8794
  },
8745
8795
 
8746
- fromJSON(object: any): ProjectOverviewRequest {
8796
+ fromJSON(object: any): DailyActivityRequest {
8747
8797
  return {
8748
8798
  organizationId: isSet(object.organizationId)
8749
8799
  ? globalThis.String(object.organizationId)
@@ -8755,20 +8805,20 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8755
8805
  : isSet(object.project_id)
8756
8806
  ? globalThis.String(object.project_id)
8757
8807
  : "",
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,
8808
+ startDate: isSet(object.startDate)
8809
+ ? globalThis.String(object.startDate)
8810
+ : isSet(object.start_date)
8811
+ ? globalThis.String(object.start_date)
8812
+ : "",
8813
+ endDate: isSet(object.endDate)
8814
+ ? globalThis.String(object.endDate)
8815
+ : isSet(object.end_date)
8816
+ ? globalThis.String(object.end_date)
8817
+ : "",
8768
8818
  };
8769
8819
  },
8770
8820
 
8771
- toJSON(message: ProjectOverviewRequest): unknown {
8821
+ toJSON(message: DailyActivityRequest): unknown {
8772
8822
  const obj: any = {};
8773
8823
  if (message.organizationId !== "") {
8774
8824
  obj.organizationId = message.organizationId;
@@ -8776,53 +8826,56 @@ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
8776
8826
  if (message.projectId !== "") {
8777
8827
  obj.projectId = message.projectId;
8778
8828
  }
8779
- if (message.activeAfter !== undefined) {
8780
- obj.activeAfter = message.activeAfter.toISOString();
8829
+ if (message.startDate !== "") {
8830
+ obj.startDate = message.startDate;
8781
8831
  }
8782
- if (message.topSessions !== 0) {
8783
- obj.topSessions = Math.round(message.topSessions);
8832
+ if (message.endDate !== "") {
8833
+ obj.endDate = message.endDate;
8784
8834
  }
8785
8835
  return obj;
8786
8836
  },
8787
8837
 
8788
- create<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(base?: I): ProjectOverviewRequest {
8789
- return ProjectOverviewRequest.fromPartial(base ?? ({} as any));
8838
+ create<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(base?: I): DailyActivityRequest {
8839
+ return DailyActivityRequest.fromPartial(base ?? ({} as any));
8790
8840
  },
8791
- fromPartial<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(object: I): ProjectOverviewRequest {
8792
- const message = createBaseProjectOverviewRequest();
8841
+ fromPartial<I extends Exact<DeepPartial<DailyActivityRequest>, I>>(object: I): DailyActivityRequest {
8842
+ const message = createBaseDailyActivityRequest();
8793
8843
  message.organizationId = object.organizationId ?? "";
8794
8844
  message.projectId = object.projectId ?? "";
8795
- message.activeAfter = object.activeAfter ?? undefined;
8796
- message.topSessions = object.topSessions ?? 0;
8845
+ message.startDate = object.startDate ?? "";
8846
+ message.endDate = object.endDate ?? "";
8797
8847
  return message;
8798
8848
  },
8799
8849
  };
8800
8850
 
8801
- function createBaseProjectOverview(): ProjectOverview {
8802
- return { totals: undefined, byModel: [], byProvider: [], bySource: [], topSessions: [] };
8851
+ function createBaseDailyActivity(): DailyActivity {
8852
+ return { days: [], startDate: "", endDate: "", coverageStart: "", today: "", asOf: undefined };
8803
8853
  }
8804
8854
 
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();
8855
+ export const DailyActivity: MessageFns<DailyActivity> = {
8856
+ encode(message: DailyActivity, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
8857
+ for (const v of message.days) {
8858
+ DailyActivityDay.encode(v!, writer.uint32(10).fork()).join();
8809
8859
  }
8810
- for (const v of message.byModel) {
8811
- ProjectOverviewSlice.encode(v!, writer.uint32(18).fork()).join();
8860
+ if (message.startDate !== "") {
8861
+ writer.uint32(18).string(message.startDate);
8812
8862
  }
8813
- for (const v of message.byProvider) {
8814
- ProjectOverviewSlice.encode(v!, writer.uint32(26).fork()).join();
8863
+ if (message.endDate !== "") {
8864
+ writer.uint32(26).string(message.endDate);
8815
8865
  }
8816
- for (const v of message.bySource) {
8817
- ProjectOverviewSlice.encode(v!, writer.uint32(34).fork()).join();
8866
+ if (message.coverageStart !== "") {
8867
+ writer.uint32(34).string(message.coverageStart);
8818
8868
  }
8819
- for (const v of message.topSessions) {
8820
- ProjectSessionRef.encode(v!, writer.uint32(42).fork()).join();
8869
+ if (message.today !== "") {
8870
+ writer.uint32(42).string(message.today);
8871
+ }
8872
+ if (message.asOf !== undefined) {
8873
+ Timestamp.encode(toTimestamp(message.asOf), writer.uint32(50).fork()).join();
8821
8874
  }
8822
8875
  return writer;
8823
8876
  },
8824
8877
 
8825
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverview {
8878
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivity {
8826
8879
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
8827
8880
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
8828
8881
  if (previousRecursionDepth >= 100) {
@@ -8831,7 +8884,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8831
8884
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
8832
8885
  try {
8833
8886
  const end = length === undefined ? reader.len : reader.pos + length;
8834
- const message = createBaseProjectOverview();
8887
+ const message = createBaseDailyActivity();
8835
8888
  while (reader.pos < end) {
8836
8889
  const tag = reader.uint32();
8837
8890
  switch (tag >>> 3) {
@@ -8840,7 +8893,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8840
8893
  break;
8841
8894
  }
8842
8895
 
8843
- message.totals = ProjectOverviewTotals.decode(reader, reader.uint32());
8896
+ message.days.push(DailyActivityDay.decode(reader, reader.uint32()));
8844
8897
  continue;
8845
8898
  }
8846
8899
  case 2: {
@@ -8848,7 +8901,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8848
8901
  break;
8849
8902
  }
8850
8903
 
8851
- message.byModel.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
8904
+ message.startDate = reader.string();
8852
8905
  continue;
8853
8906
  }
8854
8907
  case 3: {
@@ -8856,7 +8909,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8856
8909
  break;
8857
8910
  }
8858
8911
 
8859
- message.byProvider.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
8912
+ message.endDate = reader.string();
8860
8913
  continue;
8861
8914
  }
8862
8915
  case 4: {
@@ -8864,7 +8917,7 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8864
8917
  break;
8865
8918
  }
8866
8919
 
8867
- message.bySource.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
8920
+ message.coverageStart = reader.string();
8868
8921
  continue;
8869
8922
  }
8870
8923
  case 5: {
@@ -8872,7 +8925,15 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8872
8925
  break;
8873
8926
  }
8874
8927
 
8875
- message.topSessions.push(ProjectSessionRef.decode(reader, reader.uint32()));
8928
+ message.today = reader.string();
8929
+ continue;
8930
+ }
8931
+ case 6: {
8932
+ if (tag !== 50) {
8933
+ break;
8934
+ }
8935
+
8936
+ message.asOf = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
8876
8937
  continue;
8877
8938
  }
8878
8939
  }
@@ -8887,135 +8948,90 @@ export const ProjectOverview: MessageFns<ProjectOverview> = {
8887
8948
  }
8888
8949
  },
8889
8950
 
8890
- fromJSON(object: any): ProjectOverview {
8951
+ fromJSON(object: any): DailyActivity {
8891
8952
  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
- : [],
8953
+ days: globalThis.Array.isArray(object?.days) ? object.days.map((e: any) => DailyActivityDay.fromJSON(e)) : [],
8954
+ startDate: isSet(object.startDate)
8955
+ ? globalThis.String(object.startDate)
8956
+ : isSet(object.start_date)
8957
+ ? globalThis.String(object.start_date)
8958
+ : "",
8959
+ endDate: isSet(object.endDate)
8960
+ ? globalThis.String(object.endDate)
8961
+ : isSet(object.end_date)
8962
+ ? globalThis.String(object.end_date)
8963
+ : "",
8964
+ coverageStart: isSet(object.coverageStart)
8965
+ ? globalThis.String(object.coverageStart)
8966
+ : isSet(object.coverage_start)
8967
+ ? globalThis.String(object.coverage_start)
8968
+ : "",
8969
+ today: isSet(object.today) ? globalThis.String(object.today) : "",
8970
+ asOf: isSet(object.asOf)
8971
+ ? fromJsonTimestamp(object.asOf)
8972
+ : isSet(object.as_of)
8973
+ ? fromJsonTimestamp(object.as_of)
8974
+ : undefined,
8913
8975
  };
8914
8976
  },
8915
8977
 
8916
- toJSON(message: ProjectOverview): unknown {
8978
+ toJSON(message: DailyActivity): unknown {
8917
8979
  const obj: any = {};
8918
- if (message.totals !== undefined) {
8919
- obj.totals = ProjectOverviewTotals.toJSON(message.totals);
8980
+ if (message.days?.length) {
8981
+ obj.days = message.days.map((e) => DailyActivityDay.toJSON(e));
8920
8982
  }
8921
- if (message.byModel?.length) {
8922
- obj.byModel = message.byModel.map((e) => ProjectOverviewSlice.toJSON(e));
8983
+ if (message.startDate !== "") {
8984
+ obj.startDate = message.startDate;
8923
8985
  }
8924
- if (message.byProvider?.length) {
8925
- obj.byProvider = message.byProvider.map((e) => ProjectOverviewSlice.toJSON(e));
8986
+ if (message.endDate !== "") {
8987
+ obj.endDate = message.endDate;
8926
8988
  }
8927
- if (message.bySource?.length) {
8928
- obj.bySource = message.bySource.map((e) => ProjectOverviewSlice.toJSON(e));
8989
+ if (message.coverageStart !== "") {
8990
+ obj.coverageStart = message.coverageStart;
8929
8991
  }
8930
- if (message.topSessions?.length) {
8931
- obj.topSessions = message.topSessions.map((e) => ProjectSessionRef.toJSON(e));
8992
+ if (message.today !== "") {
8993
+ obj.today = message.today;
8994
+ }
8995
+ if (message.asOf !== undefined) {
8996
+ obj.asOf = message.asOf.toISOString();
8932
8997
  }
8933
8998
  return obj;
8934
8999
  },
8935
9000
 
8936
- create<I extends Exact<DeepPartial<ProjectOverview>, I>>(base?: I): ProjectOverview {
8937
- return ProjectOverview.fromPartial(base ?? ({} as any));
9001
+ create<I extends Exact<DeepPartial<DailyActivity>, I>>(base?: I): DailyActivity {
9002
+ return DailyActivity.fromPartial(base ?? ({} as any));
8938
9003
  },
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)) || [];
9004
+ fromPartial<I extends Exact<DeepPartial<DailyActivity>, I>>(object: I): DailyActivity {
9005
+ const message = createBaseDailyActivity();
9006
+ message.days = object.days?.map((e) => DailyActivityDay.fromPartial(e)) || [];
9007
+ message.startDate = object.startDate ?? "";
9008
+ message.endDate = object.endDate ?? "";
9009
+ message.coverageStart = object.coverageStart ?? "";
9010
+ message.today = object.today ?? "";
9011
+ message.asOf = object.asOf ?? undefined;
8948
9012
  return message;
8949
9013
  },
8950
9014
  };
8951
9015
 
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
- };
9016
+ function createBaseDailyActivityDay(): DailyActivityDay {
9017
+ return { day: "", measures: undefined, provisional: false };
8969
9018
  }
8970
9019
 
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);
8990
- }
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);
9020
+ export const DailyActivityDay: MessageFns<DailyActivityDay> = {
9021
+ encode(message: DailyActivityDay, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9022
+ if (message.day !== "") {
9023
+ writer.uint32(10).string(message.day);
9008
9024
  }
9009
- if (message.filesTouched !== 0) {
9010
- writer.uint32(104).uint64(message.filesTouched);
9025
+ if (message.measures !== undefined) {
9026
+ DailyActivityMeasures.encode(message.measures, writer.uint32(18).fork()).join();
9011
9027
  }
9012
- if (message.lastActivityAt !== undefined) {
9013
- Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(114).fork()).join();
9028
+ if (message.provisional !== false) {
9029
+ writer.uint32(24).bool(message.provisional);
9014
9030
  }
9015
9031
  return writer;
9016
9032
  },
9017
9033
 
9018
- decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewTotals {
9034
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityDay {
9019
9035
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9020
9036
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9021
9037
  if (previousRecursionDepth >= 100) {
@@ -9024,24 +9040,24 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
9024
9040
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9025
9041
  try {
9026
9042
  const end = length === undefined ? reader.len : reader.pos + length;
9027
- const message = createBaseProjectOverviewTotals();
9043
+ const message = createBaseDailyActivityDay();
9028
9044
  while (reader.pos < end) {
9029
9045
  const tag = reader.uint32();
9030
9046
  switch (tag >>> 3) {
9031
9047
  case 1: {
9032
- if (tag !== 8) {
9048
+ if (tag !== 10) {
9033
9049
  break;
9034
9050
  }
9035
9051
 
9036
- message.sessions = longToNumber(reader.uint64());
9052
+ message.day = reader.string();
9037
9053
  continue;
9038
9054
  }
9039
9055
  case 2: {
9040
- if (tag !== 16) {
9056
+ if (tag !== 18) {
9041
9057
  break;
9042
9058
  }
9043
9059
 
9044
- message.modelCalls = longToNumber(reader.uint64());
9060
+ message.measures = DailyActivityMeasures.decode(reader, reader.uint32());
9045
9061
  continue;
9046
9062
  }
9047
9063
  case 3: {
@@ -9049,31 +9065,810 @@ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
9049
9065
  break;
9050
9066
  }
9051
9067
 
9052
- message.toolCalls = longToNumber(reader.uint64());
9053
- continue;
9054
- }
9055
- case 4: {
9056
- if (tag !== 32) {
9057
- break;
9058
- }
9059
-
9060
- message.userMessages = longToNumber(reader.uint64());
9068
+ message.provisional = reader.bool();
9061
9069
  continue;
9062
9070
  }
9063
- case 5: {
9064
- if (tag !== 40) {
9065
- break;
9066
- }
9071
+ }
9072
+ if ((tag & 7) === 4 || tag === 0) {
9073
+ break;
9074
+ }
9075
+ reader.skip(tag & 7);
9076
+ }
9077
+ return message;
9078
+ } finally {
9079
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9080
+ }
9081
+ },
9067
9082
 
9068
- message.inputTokens = longToNumber(reader.uint64());
9069
- continue;
9070
- }
9071
- case 6: {
9072
- if (tag !== 48) {
9073
- break;
9074
- }
9083
+ fromJSON(object: any): DailyActivityDay {
9084
+ return {
9085
+ day: isSet(object.day) ? globalThis.String(object.day) : "",
9086
+ measures: isSet(object.measures) ? DailyActivityMeasures.fromJSON(object.measures) : undefined,
9087
+ provisional: isSet(object.provisional) ? globalThis.Boolean(object.provisional) : false,
9088
+ };
9089
+ },
9075
9090
 
9076
- message.outputTokens = longToNumber(reader.uint64());
9091
+ toJSON(message: DailyActivityDay): unknown {
9092
+ const obj: any = {};
9093
+ if (message.day !== "") {
9094
+ obj.day = message.day;
9095
+ }
9096
+ if (message.measures !== undefined) {
9097
+ obj.measures = DailyActivityMeasures.toJSON(message.measures);
9098
+ }
9099
+ if (message.provisional !== false) {
9100
+ obj.provisional = message.provisional;
9101
+ }
9102
+ return obj;
9103
+ },
9104
+
9105
+ create<I extends Exact<DeepPartial<DailyActivityDay>, I>>(base?: I): DailyActivityDay {
9106
+ return DailyActivityDay.fromPartial(base ?? ({} as any));
9107
+ },
9108
+ fromPartial<I extends Exact<DeepPartial<DailyActivityDay>, I>>(object: I): DailyActivityDay {
9109
+ const message = createBaseDailyActivityDay();
9110
+ message.day = object.day ?? "";
9111
+ message.measures = (object.measures !== undefined && object.measures !== null)
9112
+ ? DailyActivityMeasures.fromPartial(object.measures)
9113
+ : undefined;
9114
+ message.provisional = object.provisional ?? false;
9115
+ return message;
9116
+ },
9117
+ };
9118
+
9119
+ function createBaseDailyActivityMeasures(): DailyActivityMeasures {
9120
+ return {
9121
+ inputTokens: 0,
9122
+ outputTokens: 0,
9123
+ cacheReadTokens: 0,
9124
+ cacheWriteTokens: 0,
9125
+ costUsd: 0,
9126
+ modelCalls: 0,
9127
+ toolCalls: 0,
9128
+ userMessages: 0,
9129
+ filesTouched: 0,
9130
+ commits: 0,
9131
+ gitPushes: 0,
9132
+ pullRequestsCreated: 0,
9133
+ pullRequestsMerged: 0,
9134
+ branchesCreated: 0,
9135
+ };
9136
+ }
9137
+
9138
+ export const DailyActivityMeasures: MessageFns<DailyActivityMeasures> = {
9139
+ encode(message: DailyActivityMeasures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9140
+ if (message.inputTokens !== 0) {
9141
+ writer.uint32(8).uint64(message.inputTokens);
9142
+ }
9143
+ if (message.outputTokens !== 0) {
9144
+ writer.uint32(16).uint64(message.outputTokens);
9145
+ }
9146
+ if (message.cacheReadTokens !== 0) {
9147
+ writer.uint32(24).uint64(message.cacheReadTokens);
9148
+ }
9149
+ if (message.cacheWriteTokens !== 0) {
9150
+ writer.uint32(32).uint64(message.cacheWriteTokens);
9151
+ }
9152
+ if (message.costUsd !== 0) {
9153
+ writer.uint32(41).double(message.costUsd);
9154
+ }
9155
+ if (message.modelCalls !== 0) {
9156
+ writer.uint32(48).uint64(message.modelCalls);
9157
+ }
9158
+ if (message.toolCalls !== 0) {
9159
+ writer.uint32(56).uint64(message.toolCalls);
9160
+ }
9161
+ if (message.userMessages !== 0) {
9162
+ writer.uint32(64).uint64(message.userMessages);
9163
+ }
9164
+ if (message.filesTouched !== 0) {
9165
+ writer.uint32(72).uint64(message.filesTouched);
9166
+ }
9167
+ if (message.commits !== 0) {
9168
+ writer.uint32(80).uint64(message.commits);
9169
+ }
9170
+ if (message.gitPushes !== 0) {
9171
+ writer.uint32(88).uint64(message.gitPushes);
9172
+ }
9173
+ if (message.pullRequestsCreated !== 0) {
9174
+ writer.uint32(96).uint64(message.pullRequestsCreated);
9175
+ }
9176
+ if (message.pullRequestsMerged !== 0) {
9177
+ writer.uint32(104).uint64(message.pullRequestsMerged);
9178
+ }
9179
+ if (message.branchesCreated !== 0) {
9180
+ writer.uint32(112).uint64(message.branchesCreated);
9181
+ }
9182
+ return writer;
9183
+ },
9184
+
9185
+ decode(input: BinaryReader | Uint8Array, length?: number): DailyActivityMeasures {
9186
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9187
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9188
+ if (previousRecursionDepth >= 100) {
9189
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9190
+ }
9191
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9192
+ try {
9193
+ const end = length === undefined ? reader.len : reader.pos + length;
9194
+ const message = createBaseDailyActivityMeasures();
9195
+ while (reader.pos < end) {
9196
+ const tag = reader.uint32();
9197
+ switch (tag >>> 3) {
9198
+ case 1: {
9199
+ if (tag !== 8) {
9200
+ break;
9201
+ }
9202
+
9203
+ message.inputTokens = longToNumber(reader.uint64());
9204
+ continue;
9205
+ }
9206
+ case 2: {
9207
+ if (tag !== 16) {
9208
+ break;
9209
+ }
9210
+
9211
+ message.outputTokens = longToNumber(reader.uint64());
9212
+ continue;
9213
+ }
9214
+ case 3: {
9215
+ if (tag !== 24) {
9216
+ break;
9217
+ }
9218
+
9219
+ message.cacheReadTokens = longToNumber(reader.uint64());
9220
+ continue;
9221
+ }
9222
+ case 4: {
9223
+ if (tag !== 32) {
9224
+ break;
9225
+ }
9226
+
9227
+ message.cacheWriteTokens = longToNumber(reader.uint64());
9228
+ continue;
9229
+ }
9230
+ case 5: {
9231
+ if (tag !== 41) {
9232
+ break;
9233
+ }
9234
+
9235
+ message.costUsd = reader.double();
9236
+ continue;
9237
+ }
9238
+ case 6: {
9239
+ if (tag !== 48) {
9240
+ break;
9241
+ }
9242
+
9243
+ message.modelCalls = longToNumber(reader.uint64());
9244
+ continue;
9245
+ }
9246
+ case 7: {
9247
+ if (tag !== 56) {
9248
+ break;
9249
+ }
9250
+
9251
+ message.toolCalls = longToNumber(reader.uint64());
9252
+ continue;
9253
+ }
9254
+ case 8: {
9255
+ if (tag !== 64) {
9256
+ break;
9257
+ }
9258
+
9259
+ message.userMessages = longToNumber(reader.uint64());
9260
+ continue;
9261
+ }
9262
+ case 9: {
9263
+ if (tag !== 72) {
9264
+ break;
9265
+ }
9266
+
9267
+ message.filesTouched = longToNumber(reader.uint64());
9268
+ continue;
9269
+ }
9270
+ case 10: {
9271
+ if (tag !== 80) {
9272
+ break;
9273
+ }
9274
+
9275
+ message.commits = longToNumber(reader.uint64());
9276
+ continue;
9277
+ }
9278
+ case 11: {
9279
+ if (tag !== 88) {
9280
+ break;
9281
+ }
9282
+
9283
+ message.gitPushes = longToNumber(reader.uint64());
9284
+ continue;
9285
+ }
9286
+ case 12: {
9287
+ if (tag !== 96) {
9288
+ break;
9289
+ }
9290
+
9291
+ message.pullRequestsCreated = longToNumber(reader.uint64());
9292
+ continue;
9293
+ }
9294
+ case 13: {
9295
+ if (tag !== 104) {
9296
+ break;
9297
+ }
9298
+
9299
+ message.pullRequestsMerged = longToNumber(reader.uint64());
9300
+ continue;
9301
+ }
9302
+ case 14: {
9303
+ if (tag !== 112) {
9304
+ break;
9305
+ }
9306
+
9307
+ message.branchesCreated = longToNumber(reader.uint64());
9308
+ continue;
9309
+ }
9310
+ }
9311
+ if ((tag & 7) === 4 || tag === 0) {
9312
+ break;
9313
+ }
9314
+ reader.skip(tag & 7);
9315
+ }
9316
+ return message;
9317
+ } finally {
9318
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9319
+ }
9320
+ },
9321
+
9322
+ fromJSON(object: any): DailyActivityMeasures {
9323
+ return {
9324
+ inputTokens: isSet(object.inputTokens)
9325
+ ? globalThis.Number(object.inputTokens)
9326
+ : isSet(object.input_tokens)
9327
+ ? globalThis.Number(object.input_tokens)
9328
+ : 0,
9329
+ outputTokens: isSet(object.outputTokens)
9330
+ ? globalThis.Number(object.outputTokens)
9331
+ : isSet(object.output_tokens)
9332
+ ? globalThis.Number(object.output_tokens)
9333
+ : 0,
9334
+ cacheReadTokens: isSet(object.cacheReadTokens)
9335
+ ? globalThis.Number(object.cacheReadTokens)
9336
+ : isSet(object.cache_read_tokens)
9337
+ ? globalThis.Number(object.cache_read_tokens)
9338
+ : 0,
9339
+ cacheWriteTokens: isSet(object.cacheWriteTokens)
9340
+ ? globalThis.Number(object.cacheWriteTokens)
9341
+ : isSet(object.cache_write_tokens)
9342
+ ? globalThis.Number(object.cache_write_tokens)
9343
+ : 0,
9344
+ costUsd: isSet(object.costUsd)
9345
+ ? globalThis.Number(object.costUsd)
9346
+ : isSet(object.cost_usd)
9347
+ ? globalThis.Number(object.cost_usd)
9348
+ : 0,
9349
+ modelCalls: isSet(object.modelCalls)
9350
+ ? globalThis.Number(object.modelCalls)
9351
+ : isSet(object.model_calls)
9352
+ ? globalThis.Number(object.model_calls)
9353
+ : 0,
9354
+ toolCalls: isSet(object.toolCalls)
9355
+ ? globalThis.Number(object.toolCalls)
9356
+ : isSet(object.tool_calls)
9357
+ ? globalThis.Number(object.tool_calls)
9358
+ : 0,
9359
+ userMessages: isSet(object.userMessages)
9360
+ ? globalThis.Number(object.userMessages)
9361
+ : isSet(object.user_messages)
9362
+ ? globalThis.Number(object.user_messages)
9363
+ : 0,
9364
+ filesTouched: isSet(object.filesTouched)
9365
+ ? globalThis.Number(object.filesTouched)
9366
+ : isSet(object.files_touched)
9367
+ ? globalThis.Number(object.files_touched)
9368
+ : 0,
9369
+ commits: isSet(object.commits) ? globalThis.Number(object.commits) : 0,
9370
+ gitPushes: isSet(object.gitPushes)
9371
+ ? globalThis.Number(object.gitPushes)
9372
+ : isSet(object.git_pushes)
9373
+ ? globalThis.Number(object.git_pushes)
9374
+ : 0,
9375
+ pullRequestsCreated: isSet(object.pullRequestsCreated)
9376
+ ? globalThis.Number(object.pullRequestsCreated)
9377
+ : isSet(object.pull_requests_created)
9378
+ ? globalThis.Number(object.pull_requests_created)
9379
+ : 0,
9380
+ pullRequestsMerged: isSet(object.pullRequestsMerged)
9381
+ ? globalThis.Number(object.pullRequestsMerged)
9382
+ : isSet(object.pull_requests_merged)
9383
+ ? globalThis.Number(object.pull_requests_merged)
9384
+ : 0,
9385
+ branchesCreated: isSet(object.branchesCreated)
9386
+ ? globalThis.Number(object.branchesCreated)
9387
+ : isSet(object.branches_created)
9388
+ ? globalThis.Number(object.branches_created)
9389
+ : 0,
9390
+ };
9391
+ },
9392
+
9393
+ toJSON(message: DailyActivityMeasures): unknown {
9394
+ const obj: any = {};
9395
+ if (message.inputTokens !== 0) {
9396
+ obj.inputTokens = Math.round(message.inputTokens);
9397
+ }
9398
+ if (message.outputTokens !== 0) {
9399
+ obj.outputTokens = Math.round(message.outputTokens);
9400
+ }
9401
+ if (message.cacheReadTokens !== 0) {
9402
+ obj.cacheReadTokens = Math.round(message.cacheReadTokens);
9403
+ }
9404
+ if (message.cacheWriteTokens !== 0) {
9405
+ obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
9406
+ }
9407
+ if (message.costUsd !== 0) {
9408
+ obj.costUsd = message.costUsd;
9409
+ }
9410
+ if (message.modelCalls !== 0) {
9411
+ obj.modelCalls = Math.round(message.modelCalls);
9412
+ }
9413
+ if (message.toolCalls !== 0) {
9414
+ obj.toolCalls = Math.round(message.toolCalls);
9415
+ }
9416
+ if (message.userMessages !== 0) {
9417
+ obj.userMessages = Math.round(message.userMessages);
9418
+ }
9419
+ if (message.filesTouched !== 0) {
9420
+ obj.filesTouched = Math.round(message.filesTouched);
9421
+ }
9422
+ if (message.commits !== 0) {
9423
+ obj.commits = Math.round(message.commits);
9424
+ }
9425
+ if (message.gitPushes !== 0) {
9426
+ obj.gitPushes = Math.round(message.gitPushes);
9427
+ }
9428
+ if (message.pullRequestsCreated !== 0) {
9429
+ obj.pullRequestsCreated = Math.round(message.pullRequestsCreated);
9430
+ }
9431
+ if (message.pullRequestsMerged !== 0) {
9432
+ obj.pullRequestsMerged = Math.round(message.pullRequestsMerged);
9433
+ }
9434
+ if (message.branchesCreated !== 0) {
9435
+ obj.branchesCreated = Math.round(message.branchesCreated);
9436
+ }
9437
+ return obj;
9438
+ },
9439
+
9440
+ create<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(base?: I): DailyActivityMeasures {
9441
+ return DailyActivityMeasures.fromPartial(base ?? ({} as any));
9442
+ },
9443
+ fromPartial<I extends Exact<DeepPartial<DailyActivityMeasures>, I>>(object: I): DailyActivityMeasures {
9444
+ const message = createBaseDailyActivityMeasures();
9445
+ message.inputTokens = object.inputTokens ?? 0;
9446
+ message.outputTokens = object.outputTokens ?? 0;
9447
+ message.cacheReadTokens = object.cacheReadTokens ?? 0;
9448
+ message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
9449
+ message.costUsd = object.costUsd ?? 0;
9450
+ message.modelCalls = object.modelCalls ?? 0;
9451
+ message.toolCalls = object.toolCalls ?? 0;
9452
+ message.userMessages = object.userMessages ?? 0;
9453
+ message.filesTouched = object.filesTouched ?? 0;
9454
+ message.commits = object.commits ?? 0;
9455
+ message.gitPushes = object.gitPushes ?? 0;
9456
+ message.pullRequestsCreated = object.pullRequestsCreated ?? 0;
9457
+ message.pullRequestsMerged = object.pullRequestsMerged ?? 0;
9458
+ message.branchesCreated = object.branchesCreated ?? 0;
9459
+ return message;
9460
+ },
9461
+ };
9462
+
9463
+ function createBaseProjectOverviewRequest(): ProjectOverviewRequest {
9464
+ return { organizationId: "", projectId: "", activeAfter: undefined, topSessions: 0 };
9465
+ }
9466
+
9467
+ export const ProjectOverviewRequest: MessageFns<ProjectOverviewRequest> = {
9468
+ encode(message: ProjectOverviewRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9469
+ if (message.organizationId !== "") {
9470
+ writer.uint32(10).string(message.organizationId);
9471
+ }
9472
+ if (message.projectId !== "") {
9473
+ writer.uint32(18).string(message.projectId);
9474
+ }
9475
+ if (message.activeAfter !== undefined) {
9476
+ Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(26).fork()).join();
9477
+ }
9478
+ if (message.topSessions !== 0) {
9479
+ writer.uint32(32).int32(message.topSessions);
9480
+ }
9481
+ return writer;
9482
+ },
9483
+
9484
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewRequest {
9485
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9486
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9487
+ if (previousRecursionDepth >= 100) {
9488
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9489
+ }
9490
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9491
+ try {
9492
+ const end = length === undefined ? reader.len : reader.pos + length;
9493
+ const message = createBaseProjectOverviewRequest();
9494
+ while (reader.pos < end) {
9495
+ const tag = reader.uint32();
9496
+ switch (tag >>> 3) {
9497
+ case 1: {
9498
+ if (tag !== 10) {
9499
+ break;
9500
+ }
9501
+
9502
+ message.organizationId = reader.string();
9503
+ continue;
9504
+ }
9505
+ case 2: {
9506
+ if (tag !== 18) {
9507
+ break;
9508
+ }
9509
+
9510
+ message.projectId = reader.string();
9511
+ continue;
9512
+ }
9513
+ case 3: {
9514
+ if (tag !== 26) {
9515
+ break;
9516
+ }
9517
+
9518
+ message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
9519
+ continue;
9520
+ }
9521
+ case 4: {
9522
+ if (tag !== 32) {
9523
+ break;
9524
+ }
9525
+
9526
+ message.topSessions = reader.int32();
9527
+ continue;
9528
+ }
9529
+ }
9530
+ if ((tag & 7) === 4 || tag === 0) {
9531
+ break;
9532
+ }
9533
+ reader.skip(tag & 7);
9534
+ }
9535
+ return message;
9536
+ } finally {
9537
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9538
+ }
9539
+ },
9540
+
9541
+ fromJSON(object: any): ProjectOverviewRequest {
9542
+ return {
9543
+ organizationId: isSet(object.organizationId)
9544
+ ? globalThis.String(object.organizationId)
9545
+ : isSet(object.organization_id)
9546
+ ? globalThis.String(object.organization_id)
9547
+ : "",
9548
+ projectId: isSet(object.projectId)
9549
+ ? globalThis.String(object.projectId)
9550
+ : isSet(object.project_id)
9551
+ ? globalThis.String(object.project_id)
9552
+ : "",
9553
+ activeAfter: isSet(object.activeAfter)
9554
+ ? fromJsonTimestamp(object.activeAfter)
9555
+ : isSet(object.active_after)
9556
+ ? fromJsonTimestamp(object.active_after)
9557
+ : undefined,
9558
+ topSessions: isSet(object.topSessions)
9559
+ ? globalThis.Number(object.topSessions)
9560
+ : isSet(object.top_sessions)
9561
+ ? globalThis.Number(object.top_sessions)
9562
+ : 0,
9563
+ };
9564
+ },
9565
+
9566
+ toJSON(message: ProjectOverviewRequest): unknown {
9567
+ const obj: any = {};
9568
+ if (message.organizationId !== "") {
9569
+ obj.organizationId = message.organizationId;
9570
+ }
9571
+ if (message.projectId !== "") {
9572
+ obj.projectId = message.projectId;
9573
+ }
9574
+ if (message.activeAfter !== undefined) {
9575
+ obj.activeAfter = message.activeAfter.toISOString();
9576
+ }
9577
+ if (message.topSessions !== 0) {
9578
+ obj.topSessions = Math.round(message.topSessions);
9579
+ }
9580
+ return obj;
9581
+ },
9582
+
9583
+ create<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(base?: I): ProjectOverviewRequest {
9584
+ return ProjectOverviewRequest.fromPartial(base ?? ({} as any));
9585
+ },
9586
+ fromPartial<I extends Exact<DeepPartial<ProjectOverviewRequest>, I>>(object: I): ProjectOverviewRequest {
9587
+ const message = createBaseProjectOverviewRequest();
9588
+ message.organizationId = object.organizationId ?? "";
9589
+ message.projectId = object.projectId ?? "";
9590
+ message.activeAfter = object.activeAfter ?? undefined;
9591
+ message.topSessions = object.topSessions ?? 0;
9592
+ return message;
9593
+ },
9594
+ };
9595
+
9596
+ function createBaseProjectOverview(): ProjectOverview {
9597
+ return { totals: undefined, byModel: [], byProvider: [], bySource: [], topSessions: [] };
9598
+ }
9599
+
9600
+ export const ProjectOverview: MessageFns<ProjectOverview> = {
9601
+ encode(message: ProjectOverview, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9602
+ if (message.totals !== undefined) {
9603
+ ProjectOverviewTotals.encode(message.totals, writer.uint32(10).fork()).join();
9604
+ }
9605
+ for (const v of message.byModel) {
9606
+ ProjectOverviewSlice.encode(v!, writer.uint32(18).fork()).join();
9607
+ }
9608
+ for (const v of message.byProvider) {
9609
+ ProjectOverviewSlice.encode(v!, writer.uint32(26).fork()).join();
9610
+ }
9611
+ for (const v of message.bySource) {
9612
+ ProjectOverviewSlice.encode(v!, writer.uint32(34).fork()).join();
9613
+ }
9614
+ for (const v of message.topSessions) {
9615
+ ProjectSessionRef.encode(v!, writer.uint32(42).fork()).join();
9616
+ }
9617
+ return writer;
9618
+ },
9619
+
9620
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverview {
9621
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9622
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9623
+ if (previousRecursionDepth >= 100) {
9624
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9625
+ }
9626
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9627
+ try {
9628
+ const end = length === undefined ? reader.len : reader.pos + length;
9629
+ const message = createBaseProjectOverview();
9630
+ while (reader.pos < end) {
9631
+ const tag = reader.uint32();
9632
+ switch (tag >>> 3) {
9633
+ case 1: {
9634
+ if (tag !== 10) {
9635
+ break;
9636
+ }
9637
+
9638
+ message.totals = ProjectOverviewTotals.decode(reader, reader.uint32());
9639
+ continue;
9640
+ }
9641
+ case 2: {
9642
+ if (tag !== 18) {
9643
+ break;
9644
+ }
9645
+
9646
+ message.byModel.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
9647
+ continue;
9648
+ }
9649
+ case 3: {
9650
+ if (tag !== 26) {
9651
+ break;
9652
+ }
9653
+
9654
+ message.byProvider.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
9655
+ continue;
9656
+ }
9657
+ case 4: {
9658
+ if (tag !== 34) {
9659
+ break;
9660
+ }
9661
+
9662
+ message.bySource.push(ProjectOverviewSlice.decode(reader, reader.uint32()));
9663
+ continue;
9664
+ }
9665
+ case 5: {
9666
+ if (tag !== 42) {
9667
+ break;
9668
+ }
9669
+
9670
+ message.topSessions.push(ProjectSessionRef.decode(reader, reader.uint32()));
9671
+ continue;
9672
+ }
9673
+ }
9674
+ if ((tag & 7) === 4 || tag === 0) {
9675
+ break;
9676
+ }
9677
+ reader.skip(tag & 7);
9678
+ }
9679
+ return message;
9680
+ } finally {
9681
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
9682
+ }
9683
+ },
9684
+
9685
+ fromJSON(object: any): ProjectOverview {
9686
+ return {
9687
+ totals: isSet(object.totals) ? ProjectOverviewTotals.fromJSON(object.totals) : undefined,
9688
+ byModel: globalThis.Array.isArray(object?.byModel)
9689
+ ? object.byModel.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9690
+ : globalThis.Array.isArray(object?.by_model)
9691
+ ? object.by_model.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9692
+ : [],
9693
+ byProvider: globalThis.Array.isArray(object?.byProvider)
9694
+ ? object.byProvider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9695
+ : globalThis.Array.isArray(object?.by_provider)
9696
+ ? object.by_provider.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9697
+ : [],
9698
+ bySource: globalThis.Array.isArray(object?.bySource)
9699
+ ? object.bySource.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9700
+ : globalThis.Array.isArray(object?.by_source)
9701
+ ? object.by_source.map((e: any) => ProjectOverviewSlice.fromJSON(e))
9702
+ : [],
9703
+ topSessions: globalThis.Array.isArray(object?.topSessions)
9704
+ ? object.topSessions.map((e: any) => ProjectSessionRef.fromJSON(e))
9705
+ : globalThis.Array.isArray(object?.top_sessions)
9706
+ ? object.top_sessions.map((e: any) => ProjectSessionRef.fromJSON(e))
9707
+ : [],
9708
+ };
9709
+ },
9710
+
9711
+ toJSON(message: ProjectOverview): unknown {
9712
+ const obj: any = {};
9713
+ if (message.totals !== undefined) {
9714
+ obj.totals = ProjectOverviewTotals.toJSON(message.totals);
9715
+ }
9716
+ if (message.byModel?.length) {
9717
+ obj.byModel = message.byModel.map((e) => ProjectOverviewSlice.toJSON(e));
9718
+ }
9719
+ if (message.byProvider?.length) {
9720
+ obj.byProvider = message.byProvider.map((e) => ProjectOverviewSlice.toJSON(e));
9721
+ }
9722
+ if (message.bySource?.length) {
9723
+ obj.bySource = message.bySource.map((e) => ProjectOverviewSlice.toJSON(e));
9724
+ }
9725
+ if (message.topSessions?.length) {
9726
+ obj.topSessions = message.topSessions.map((e) => ProjectSessionRef.toJSON(e));
9727
+ }
9728
+ return obj;
9729
+ },
9730
+
9731
+ create<I extends Exact<DeepPartial<ProjectOverview>, I>>(base?: I): ProjectOverview {
9732
+ return ProjectOverview.fromPartial(base ?? ({} as any));
9733
+ },
9734
+ fromPartial<I extends Exact<DeepPartial<ProjectOverview>, I>>(object: I): ProjectOverview {
9735
+ const message = createBaseProjectOverview();
9736
+ message.totals = (object.totals !== undefined && object.totals !== null)
9737
+ ? ProjectOverviewTotals.fromPartial(object.totals)
9738
+ : undefined;
9739
+ message.byModel = object.byModel?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
9740
+ message.byProvider = object.byProvider?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
9741
+ message.bySource = object.bySource?.map((e) => ProjectOverviewSlice.fromPartial(e)) || [];
9742
+ message.topSessions = object.topSessions?.map((e) => ProjectSessionRef.fromPartial(e)) || [];
9743
+ return message;
9744
+ },
9745
+ };
9746
+
9747
+ function createBaseProjectOverviewTotals(): ProjectOverviewTotals {
9748
+ return {
9749
+ sessions: 0,
9750
+ modelCalls: 0,
9751
+ toolCalls: 0,
9752
+ userMessages: 0,
9753
+ inputTokens: 0,
9754
+ outputTokens: 0,
9755
+ cacheReadTokens: 0,
9756
+ cacheWriteTokens: 0,
9757
+ costUsd: 0,
9758
+ distinctUsers: 0,
9759
+ commits: 0,
9760
+ pushes: 0,
9761
+ filesTouched: 0,
9762
+ lastActivityAt: undefined,
9763
+ };
9764
+ }
9765
+
9766
+ export const ProjectOverviewTotals: MessageFns<ProjectOverviewTotals> = {
9767
+ encode(message: ProjectOverviewTotals, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
9768
+ if (message.sessions !== 0) {
9769
+ writer.uint32(8).uint64(message.sessions);
9770
+ }
9771
+ if (message.modelCalls !== 0) {
9772
+ writer.uint32(16).uint64(message.modelCalls);
9773
+ }
9774
+ if (message.toolCalls !== 0) {
9775
+ writer.uint32(24).uint64(message.toolCalls);
9776
+ }
9777
+ if (message.userMessages !== 0) {
9778
+ writer.uint32(32).uint64(message.userMessages);
9779
+ }
9780
+ if (message.inputTokens !== 0) {
9781
+ writer.uint32(40).uint64(message.inputTokens);
9782
+ }
9783
+ if (message.outputTokens !== 0) {
9784
+ writer.uint32(48).uint64(message.outputTokens);
9785
+ }
9786
+ if (message.cacheReadTokens !== 0) {
9787
+ writer.uint32(56).uint64(message.cacheReadTokens);
9788
+ }
9789
+ if (message.cacheWriteTokens !== 0) {
9790
+ writer.uint32(64).uint64(message.cacheWriteTokens);
9791
+ }
9792
+ if (message.costUsd !== 0) {
9793
+ writer.uint32(73).double(message.costUsd);
9794
+ }
9795
+ if (message.distinctUsers !== 0) {
9796
+ writer.uint32(80).uint64(message.distinctUsers);
9797
+ }
9798
+ if (message.commits !== 0) {
9799
+ writer.uint32(88).uint64(message.commits);
9800
+ }
9801
+ if (message.pushes !== 0) {
9802
+ writer.uint32(96).uint64(message.pushes);
9803
+ }
9804
+ if (message.filesTouched !== 0) {
9805
+ writer.uint32(104).uint64(message.filesTouched);
9806
+ }
9807
+ if (message.lastActivityAt !== undefined) {
9808
+ Timestamp.encode(toTimestamp(message.lastActivityAt), writer.uint32(114).fork()).join();
9809
+ }
9810
+ return writer;
9811
+ },
9812
+
9813
+ decode(input: BinaryReader | Uint8Array, length?: number): ProjectOverviewTotals {
9814
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
9815
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
9816
+ if (previousRecursionDepth >= 100) {
9817
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
9818
+ }
9819
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
9820
+ try {
9821
+ const end = length === undefined ? reader.len : reader.pos + length;
9822
+ const message = createBaseProjectOverviewTotals();
9823
+ while (reader.pos < end) {
9824
+ const tag = reader.uint32();
9825
+ switch (tag >>> 3) {
9826
+ case 1: {
9827
+ if (tag !== 8) {
9828
+ break;
9829
+ }
9830
+
9831
+ message.sessions = longToNumber(reader.uint64());
9832
+ continue;
9833
+ }
9834
+ case 2: {
9835
+ if (tag !== 16) {
9836
+ break;
9837
+ }
9838
+
9839
+ message.modelCalls = longToNumber(reader.uint64());
9840
+ continue;
9841
+ }
9842
+ case 3: {
9843
+ if (tag !== 24) {
9844
+ break;
9845
+ }
9846
+
9847
+ message.toolCalls = longToNumber(reader.uint64());
9848
+ continue;
9849
+ }
9850
+ case 4: {
9851
+ if (tag !== 32) {
9852
+ break;
9853
+ }
9854
+
9855
+ message.userMessages = longToNumber(reader.uint64());
9856
+ continue;
9857
+ }
9858
+ case 5: {
9859
+ if (tag !== 40) {
9860
+ break;
9861
+ }
9862
+
9863
+ message.inputTokens = longToNumber(reader.uint64());
9864
+ continue;
9865
+ }
9866
+ case 6: {
9867
+ if (tag !== 48) {
9868
+ break;
9869
+ }
9870
+
9871
+ message.outputTokens = longToNumber(reader.uint64());
9077
9872
  continue;
9078
9873
  }
9079
9874
  case 7: {
@@ -12289,12 +13084,8 @@ export const AITokenUsage: MessageFns<AITokenUsage> = {
12289
13084
  };
12290
13085
 
12291
13086
  /**
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.
13087
+ * AIGatewayService is the frontend-facing proxy over telemetry.api.v1.AIService.
13088
+ * It stamps the authorized organization/project and forwards telemetry-api-shaped messages.
12298
13089
  */
12299
13090
  export interface AIGatewayService {
12300
13091
  /**
@@ -12337,18 +13128,22 @@ export interface AIGatewayService {
12337
13128
  */
12338
13129
  StreamGitActivitySummary(request: GitActivitySummaryRequest, metadata?: Metadata): Observable<GitActivitySummary>;
12339
13130
  /**
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.
13131
+ * Live token burn calendar: a windowed, dimension-sliced token/cost trend series
13132
+ * plus whole-window totals.
12343
13133
  */
12344
13134
  StreamTokenActivitySummary(
12345
13135
  request: TokenActivitySummaryRequest,
12346
13136
  metadata?: Metadata,
12347
13137
  ): Observable<TokenActivitySummary>;
12348
13138
  /**
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.
13139
+ * Live token-burn calendar over an inclusive UTC [start_date, end_date] range: one complete row per
13140
+ * covered day off the precomputed daily rollup. Covered empty days are zero; uncomputed history is
13141
+ * omitted; today is provisional.
13142
+ */
13143
+ StreamDailyActivity(request: DailyActivityRequest, metadata?: Metadata): Observable<DailyActivity>;
13144
+ /**
13145
+ * Live stream of one project's dashboard bundle: headline totals, model/provider/source mix,
13146
+ * and top sessions by cost.
12352
13147
  */
12353
13148
  StreamProjectOverview(request: ProjectOverviewRequest, metadata?: Metadata): Observable<ProjectOverview>;
12354
13149
  /** Per-file working-state feed (keyset-paginated) behind the unlanded-work funnel. */
@@ -12390,6 +13185,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
12390
13185
  this.StreamGitActivities = this.StreamGitActivities.bind(this);
12391
13186
  this.StreamGitActivitySummary = this.StreamGitActivitySummary.bind(this);
12392
13187
  this.StreamTokenActivitySummary = this.StreamTokenActivitySummary.bind(this);
13188
+ this.StreamDailyActivity = this.StreamDailyActivity.bind(this);
12393
13189
  this.StreamProjectOverview = this.StreamProjectOverview.bind(this);
12394
13190
  this.ListFiles = this.ListFiles.bind(this);
12395
13191
  this.StreamFilesSummary = this.StreamFilesSummary.bind(this);
@@ -12480,6 +13276,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
12480
13276
  return result.pipe(map((data) => TokenActivitySummary.decode(new BinaryReader(data))));
12481
13277
  }
12482
13278
 
13279
+ StreamDailyActivity(request: DailyActivityRequest, metadata?: Metadata): Observable<DailyActivity> {
13280
+ const data = DailyActivityRequest.encode(request).finish();
13281
+ const result = this.rpc.serverStreamingRequest(this.service, "StreamDailyActivity", data, metadata);
13282
+ return result.pipe(map((data) => DailyActivity.decode(new BinaryReader(data))));
13283
+ }
13284
+
12483
13285
  StreamProjectOverview(request: ProjectOverviewRequest, metadata?: Metadata): Observable<ProjectOverview> {
12484
13286
  const data = ProjectOverviewRequest.encode(request).finish();
12485
13287
  const result = this.rpc.serverStreamingRequest(this.service, "StreamProjectOverview", data, metadata);