@miradorlabs/web-grpc 3.5.0 → 3.7.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.
@@ -1025,6 +1025,11 @@ export interface AISessionEvent {
1025
1025
  callCategory: string;
1026
1026
  /** commentary | final | "" (not reported), on assistant replies. */
1027
1027
  replyPhase: string;
1028
+ /**
1029
+ * The run this event is about when it is not that run's own work (the harness summarising subagent X's progress
1030
+ * names X here; agent_id stays the run that did the work). Never set on agent · run. "" = about no other run.
1031
+ */
1032
+ subjectAgentId: string;
1028
1033
  }
1029
1034
 
1030
1035
  export interface AIContentPart {
@@ -1631,6 +1636,57 @@ export interface ModelActivityPrincipal {
1631
1636
  costUsd: number;
1632
1637
  }
1633
1638
 
1639
+ export interface SessionUsageTrendRequest {
1640
+ organizationId: string;
1641
+ projectId: string;
1642
+ sourceSystem: string;
1643
+ /** The session's routing-key partitions, 1 to 100, read as one session. */
1644
+ sessionIds: string[];
1645
+ /**
1646
+ * Bucket width in seconds, > 0; buckets start at multiples of it since the Unix epoch (UTC). Widened to
1647
+ * the next step of 1, 5, 10, 15, 30, 60, 120, 300, 600, 900, 1800, 3600, 7200, 10800, 21600, 43200 s or a
1648
+ * whole number of days when the session would span more than 2000 buckets.
1649
+ */
1650
+ bucketSeconds: number;
1651
+ }
1652
+
1653
+ export interface SessionUsageTrendResponse {
1654
+ status:
1655
+ | ResponseStatus
1656
+ | undefined;
1657
+ /** the width the buckets use */
1658
+ bucketSeconds: number;
1659
+ /** per (bucket, model), by bucket_start then model */
1660
+ buckets: SessionUsageBucket[];
1661
+ /** per (bucket, action), by bucket_start then action */
1662
+ gitBuckets: SessionGitBucket[];
1663
+ }
1664
+
1665
+ /**
1666
+ * SessionUsageBucket: model is the stored name, '' when unreported; input_tokens is cache-inclusive, the
1667
+ * cache fields are subsets.
1668
+ */
1669
+ export interface SessionUsageBucket {
1670
+ bucketStart: Date | undefined;
1671
+ model: string;
1672
+ modelCalls: number;
1673
+ inputTokens: number;
1674
+ outputTokens: number;
1675
+ cacheReadTokens: number;
1676
+ cacheWriteTokens: number;
1677
+ costUsd: number;
1678
+ }
1679
+
1680
+ /**
1681
+ * SessionGitBucket: the stored action (commit, push, pr_create, pr_merge, …), counted as the session rollup
1682
+ * counts it (known failures left out).
1683
+ */
1684
+ export interface SessionGitBucket {
1685
+ bucketStart: Date | undefined;
1686
+ action: string;
1687
+ count: number;
1688
+ }
1689
+
1634
1690
  /** AISessionRef is a session's identity: two sources can issue the same session_id. */
1635
1691
  export interface AISessionRef {
1636
1692
  sourceSystem: string;
@@ -4246,6 +4302,7 @@ function createBaseAISessionEvent(): AISessionEvent {
4246
4302
  context: "",
4247
4303
  callCategory: "",
4248
4304
  replyPhase: "",
4305
+ subjectAgentId: "",
4249
4306
  };
4250
4307
  }
4251
4308
 
@@ -4335,6 +4392,9 @@ export const AISessionEvent: MessageFns<AISessionEvent> = {
4335
4392
  if (message.replyPhase !== "") {
4336
4393
  writer.uint32(226).string(message.replyPhase);
4337
4394
  }
4395
+ if (message.subjectAgentId !== "") {
4396
+ writer.uint32(234).string(message.subjectAgentId);
4397
+ }
4338
4398
  return writer;
4339
4399
  },
4340
4400
 
@@ -4575,6 +4635,14 @@ export const AISessionEvent: MessageFns<AISessionEvent> = {
4575
4635
  message.replyPhase = reader.string();
4576
4636
  continue;
4577
4637
  }
4638
+ case 29: {
4639
+ if (tag !== 234) {
4640
+ break;
4641
+ }
4642
+
4643
+ message.subjectAgentId = reader.string();
4644
+ continue;
4645
+ }
4578
4646
  }
4579
4647
  if ((tag & 7) === 4 || tag === 0) {
4580
4648
  break;
@@ -4683,6 +4751,11 @@ export const AISessionEvent: MessageFns<AISessionEvent> = {
4683
4751
  : isSet(object.reply_phase)
4684
4752
  ? globalThis.String(object.reply_phase)
4685
4753
  : "",
4754
+ subjectAgentId: isSet(object.subjectAgentId)
4755
+ ? globalThis.String(object.subjectAgentId)
4756
+ : isSet(object.subject_agent_id)
4757
+ ? globalThis.String(object.subject_agent_id)
4758
+ : "",
4686
4759
  };
4687
4760
  },
4688
4761
 
@@ -4772,6 +4845,9 @@ export const AISessionEvent: MessageFns<AISessionEvent> = {
4772
4845
  if (message.replyPhase !== "") {
4773
4846
  obj.replyPhase = message.replyPhase;
4774
4847
  }
4848
+ if (message.subjectAgentId !== "") {
4849
+ obj.subjectAgentId = message.subjectAgentId;
4850
+ }
4775
4851
  return obj;
4776
4852
  },
4777
4853
 
@@ -4810,6 +4886,7 @@ export const AISessionEvent: MessageFns<AISessionEvent> = {
4810
4886
  message.context = object.context ?? "";
4811
4887
  message.callCategory = object.callCategory ?? "";
4812
4888
  message.replyPhase = object.replyPhase ?? "";
4889
+ message.subjectAgentId = object.subjectAgentId ?? "";
4813
4890
  return message;
4814
4891
  },
4815
4892
  };
@@ -13670,22 +13747,31 @@ export const ModelActivityPrincipal: MessageFns<ModelActivityPrincipal> = {
13670
13747
  },
13671
13748
  };
13672
13749
 
13673
- function createBaseAISessionRef(): AISessionRef {
13674
- return { sourceSystem: "", sessionId: "" };
13750
+ function createBaseSessionUsageTrendRequest(): SessionUsageTrendRequest {
13751
+ return { organizationId: "", projectId: "", sourceSystem: "", sessionIds: [], bucketSeconds: 0 };
13675
13752
  }
13676
13753
 
13677
- export const AISessionRef: MessageFns<AISessionRef> = {
13678
- encode(message: AISessionRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13754
+ export const SessionUsageTrendRequest: MessageFns<SessionUsageTrendRequest> = {
13755
+ encode(message: SessionUsageTrendRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13756
+ if (message.organizationId !== "") {
13757
+ writer.uint32(10).string(message.organizationId);
13758
+ }
13759
+ if (message.projectId !== "") {
13760
+ writer.uint32(18).string(message.projectId);
13761
+ }
13679
13762
  if (message.sourceSystem !== "") {
13680
- writer.uint32(10).string(message.sourceSystem);
13763
+ writer.uint32(26).string(message.sourceSystem);
13681
13764
  }
13682
- if (message.sessionId !== "") {
13683
- writer.uint32(18).string(message.sessionId);
13765
+ for (const v of message.sessionIds) {
13766
+ writer.uint32(34).string(v!);
13767
+ }
13768
+ if (message.bucketSeconds !== 0) {
13769
+ writer.uint32(40).uint32(message.bucketSeconds);
13684
13770
  }
13685
13771
  return writer;
13686
13772
  },
13687
13773
 
13688
- decode(input: BinaryReader | Uint8Array, length?: number): AISessionRef {
13774
+ decode(input: BinaryReader | Uint8Array, length?: number): SessionUsageTrendRequest {
13689
13775
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
13690
13776
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
13691
13777
  if (previousRecursionDepth >= 100) {
@@ -13694,7 +13780,7 @@ export const AISessionRef: MessageFns<AISessionRef> = {
13694
13780
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
13695
13781
  try {
13696
13782
  const end = length === undefined ? reader.len : reader.pos + length;
13697
- const message = createBaseAISessionRef();
13783
+ const message = createBaseSessionUsageTrendRequest();
13698
13784
  while (reader.pos < end) {
13699
13785
  const tag = reader.uint32();
13700
13786
  switch (tag >>> 3) {
@@ -13703,7 +13789,7 @@ export const AISessionRef: MessageFns<AISessionRef> = {
13703
13789
  break;
13704
13790
  }
13705
13791
 
13706
- message.sourceSystem = reader.string();
13792
+ message.organizationId = reader.string();
13707
13793
  continue;
13708
13794
  }
13709
13795
  case 2: {
@@ -13711,7 +13797,31 @@ export const AISessionRef: MessageFns<AISessionRef> = {
13711
13797
  break;
13712
13798
  }
13713
13799
 
13714
- message.sessionId = reader.string();
13800
+ message.projectId = reader.string();
13801
+ continue;
13802
+ }
13803
+ case 3: {
13804
+ if (tag !== 26) {
13805
+ break;
13806
+ }
13807
+
13808
+ message.sourceSystem = reader.string();
13809
+ continue;
13810
+ }
13811
+ case 4: {
13812
+ if (tag !== 34) {
13813
+ break;
13814
+ }
13815
+
13816
+ message.sessionIds.push(reader.string());
13817
+ continue;
13818
+ }
13819
+ case 5: {
13820
+ if (tag !== 40) {
13821
+ break;
13822
+ }
13823
+
13824
+ message.bucketSeconds = reader.uint32();
13715
13825
  continue;
13716
13826
  }
13717
13827
  }
@@ -13726,94 +13836,92 @@ export const AISessionRef: MessageFns<AISessionRef> = {
13726
13836
  }
13727
13837
  },
13728
13838
 
13729
- fromJSON(object: any): AISessionRef {
13839
+ fromJSON(object: any): SessionUsageTrendRequest {
13730
13840
  return {
13841
+ organizationId: isSet(object.organizationId)
13842
+ ? globalThis.String(object.organizationId)
13843
+ : isSet(object.organization_id)
13844
+ ? globalThis.String(object.organization_id)
13845
+ : "",
13846
+ projectId: isSet(object.projectId)
13847
+ ? globalThis.String(object.projectId)
13848
+ : isSet(object.project_id)
13849
+ ? globalThis.String(object.project_id)
13850
+ : "",
13731
13851
  sourceSystem: isSet(object.sourceSystem)
13732
13852
  ? globalThis.String(object.sourceSystem)
13733
13853
  : isSet(object.source_system)
13734
13854
  ? globalThis.String(object.source_system)
13735
13855
  : "",
13736
- sessionId: isSet(object.sessionId)
13737
- ? globalThis.String(object.sessionId)
13738
- : isSet(object.session_id)
13739
- ? globalThis.String(object.session_id)
13740
- : "",
13856
+ sessionIds: globalThis.Array.isArray(object?.sessionIds)
13857
+ ? object.sessionIds.map((e: any) => globalThis.String(e))
13858
+ : globalThis.Array.isArray(object?.session_ids)
13859
+ ? object.session_ids.map((e: any) => globalThis.String(e))
13860
+ : [],
13861
+ bucketSeconds: isSet(object.bucketSeconds)
13862
+ ? globalThis.Number(object.bucketSeconds)
13863
+ : isSet(object.bucket_seconds)
13864
+ ? globalThis.Number(object.bucket_seconds)
13865
+ : 0,
13741
13866
  };
13742
13867
  },
13743
13868
 
13744
- toJSON(message: AISessionRef): unknown {
13869
+ toJSON(message: SessionUsageTrendRequest): unknown {
13745
13870
  const obj: any = {};
13871
+ if (message.organizationId !== "") {
13872
+ obj.organizationId = message.organizationId;
13873
+ }
13874
+ if (message.projectId !== "") {
13875
+ obj.projectId = message.projectId;
13876
+ }
13746
13877
  if (message.sourceSystem !== "") {
13747
13878
  obj.sourceSystem = message.sourceSystem;
13748
13879
  }
13749
- if (message.sessionId !== "") {
13750
- obj.sessionId = message.sessionId;
13880
+ if (message.sessionIds?.length) {
13881
+ obj.sessionIds = message.sessionIds;
13882
+ }
13883
+ if (message.bucketSeconds !== 0) {
13884
+ obj.bucketSeconds = Math.round(message.bucketSeconds);
13751
13885
  }
13752
13886
  return obj;
13753
13887
  },
13754
13888
 
13755
- create<I extends Exact<DeepPartial<AISessionRef>, I>>(base?: I): AISessionRef {
13756
- return AISessionRef.fromPartial(base ?? ({} as any));
13889
+ create<I extends Exact<DeepPartial<SessionUsageTrendRequest>, I>>(base?: I): SessionUsageTrendRequest {
13890
+ return SessionUsageTrendRequest.fromPartial(base ?? ({} as any));
13757
13891
  },
13758
- fromPartial<I extends Exact<DeepPartial<AISessionRef>, I>>(object: I): AISessionRef {
13759
- const message = createBaseAISessionRef();
13892
+ fromPartial<I extends Exact<DeepPartial<SessionUsageTrendRequest>, I>>(object: I): SessionUsageTrendRequest {
13893
+ const message = createBaseSessionUsageTrendRequest();
13894
+ message.organizationId = object.organizationId ?? "";
13895
+ message.projectId = object.projectId ?? "";
13760
13896
  message.sourceSystem = object.sourceSystem ?? "";
13761
- message.sessionId = object.sessionId ?? "";
13897
+ message.sessionIds = object.sessionIds?.map((e) => e) || [];
13898
+ message.bucketSeconds = object.bucketSeconds ?? 0;
13762
13899
  return message;
13763
13900
  },
13764
13901
  };
13765
13902
 
13766
- function createBaseAIFileFilter(): AIFileFilter {
13767
- return {
13768
- repositoryKey: [],
13769
- ref: [],
13770
- state: [],
13771
- tier: [],
13772
- session: [],
13773
- minAge: undefined,
13774
- activeAfter: undefined,
13775
- activeBefore: undefined,
13776
- abandonedHorizon: undefined,
13777
- };
13903
+ function createBaseSessionUsageTrendResponse(): SessionUsageTrendResponse {
13904
+ return { status: undefined, bucketSeconds: 0, buckets: [], gitBuckets: [] };
13778
13905
  }
13779
13906
 
13780
- export const AIFileFilter: MessageFns<AIFileFilter> = {
13781
- encode(message: AIFileFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13782
- for (const v of message.repositoryKey) {
13783
- writer.uint32(10).string(v!);
13784
- }
13785
- for (const v of message.ref) {
13786
- writer.uint32(18).string(v!);
13787
- }
13788
- writer.uint32(26).fork();
13789
- for (const v of message.state) {
13790
- writer.int32(v);
13791
- }
13792
- writer.join();
13793
- writer.uint32(34).fork();
13794
- for (const v of message.tier) {
13795
- writer.int32(v);
13796
- }
13797
- writer.join();
13798
- for (const v of message.session) {
13799
- AISessionRef.encode(v!, writer.uint32(42).fork()).join();
13800
- }
13801
- if (message.minAge !== undefined) {
13802
- Duration.encode(message.minAge, writer.uint32(50).fork()).join();
13907
+ export const SessionUsageTrendResponse: MessageFns<SessionUsageTrendResponse> = {
13908
+ encode(message: SessionUsageTrendResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13909
+ if (message.status !== undefined) {
13910
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
13803
13911
  }
13804
- if (message.activeAfter !== undefined) {
13805
- Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(58).fork()).join();
13912
+ if (message.bucketSeconds !== 0) {
13913
+ writer.uint32(16).uint32(message.bucketSeconds);
13806
13914
  }
13807
- if (message.activeBefore !== undefined) {
13808
- Timestamp.encode(toTimestamp(message.activeBefore), writer.uint32(66).fork()).join();
13915
+ for (const v of message.buckets) {
13916
+ SessionUsageBucket.encode(v!, writer.uint32(26).fork()).join();
13809
13917
  }
13810
- if (message.abandonedHorizon !== undefined) {
13811
- Duration.encode(message.abandonedHorizon, writer.uint32(74).fork()).join();
13918
+ for (const v of message.gitBuckets) {
13919
+ SessionGitBucket.encode(v!, writer.uint32(34).fork()).join();
13812
13920
  }
13813
13921
  return writer;
13814
13922
  },
13815
13923
 
13816
- decode(input: BinaryReader | Uint8Array, length?: number): AIFileFilter {
13924
+ decode(input: BinaryReader | Uint8Array, length?: number): SessionUsageTrendResponse {
13817
13925
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
13818
13926
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
13819
13927
  if (previousRecursionDepth >= 100) {
@@ -13822,7 +13930,7 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
13822
13930
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
13823
13931
  try {
13824
13932
  const end = length === undefined ? reader.len : reader.pos + length;
13825
- const message = createBaseAIFileFilter();
13933
+ const message = createBaseSessionUsageTrendResponse();
13826
13934
  while (reader.pos < end) {
13827
13935
  const tag = reader.uint32();
13828
13936
  switch (tag >>> 3) {
@@ -13831,91 +13939,31 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
13831
13939
  break;
13832
13940
  }
13833
13941
 
13834
- message.repositoryKey.push(reader.string());
13942
+ message.status = ResponseStatus.decode(reader, reader.uint32());
13835
13943
  continue;
13836
13944
  }
13837
13945
  case 2: {
13838
- if (tag !== 18) {
13946
+ if (tag !== 16) {
13839
13947
  break;
13840
13948
  }
13841
13949
 
13842
- message.ref.push(reader.string());
13950
+ message.bucketSeconds = reader.uint32();
13843
13951
  continue;
13844
13952
  }
13845
13953
  case 3: {
13846
- if (tag === 24) {
13847
- message.state.push(reader.int32() as any);
13848
-
13849
- continue;
13850
- }
13851
-
13852
- if (tag === 26) {
13853
- const end2 = reader.uint32() + reader.pos;
13854
- while (reader.pos < end2) {
13855
- message.state.push(reader.int32() as any);
13856
- }
13857
-
13858
- continue;
13859
- }
13860
-
13861
- break;
13862
- }
13863
- case 4: {
13864
- if (tag === 32) {
13865
- message.tier.push(reader.int32() as any);
13866
-
13867
- continue;
13868
- }
13869
-
13870
- if (tag === 34) {
13871
- const end2 = reader.uint32() + reader.pos;
13872
- while (reader.pos < end2) {
13873
- message.tier.push(reader.int32() as any);
13874
- }
13875
-
13876
- continue;
13877
- }
13878
-
13879
- break;
13880
- }
13881
- case 5: {
13882
- if (tag !== 42) {
13883
- break;
13884
- }
13885
-
13886
- message.session.push(AISessionRef.decode(reader, reader.uint32()));
13887
- continue;
13888
- }
13889
- case 6: {
13890
- if (tag !== 50) {
13891
- break;
13892
- }
13893
-
13894
- message.minAge = Duration.decode(reader, reader.uint32());
13895
- continue;
13896
- }
13897
- case 7: {
13898
- if (tag !== 58) {
13899
- break;
13900
- }
13901
-
13902
- message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
13903
- continue;
13904
- }
13905
- case 8: {
13906
- if (tag !== 66) {
13954
+ if (tag !== 26) {
13907
13955
  break;
13908
13956
  }
13909
13957
 
13910
- message.activeBefore = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
13958
+ message.buckets.push(SessionUsageBucket.decode(reader, reader.uint32()));
13911
13959
  continue;
13912
13960
  }
13913
- case 9: {
13914
- if (tag !== 74) {
13961
+ case 4: {
13962
+ if (tag !== 34) {
13915
13963
  break;
13916
13964
  }
13917
13965
 
13918
- message.abandonedHorizon = Duration.decode(reader, reader.uint32());
13966
+ message.gitBuckets.push(SessionGitBucket.decode(reader, reader.uint32()));
13919
13967
  continue;
13920
13968
  }
13921
13969
  }
@@ -13930,24 +13978,658 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
13930
13978
  }
13931
13979
  },
13932
13980
 
13933
- fromJSON(object: any): AIFileFilter {
13981
+ fromJSON(object: any): SessionUsageTrendResponse {
13934
13982
  return {
13935
- repositoryKey: globalThis.Array.isArray(object?.repositoryKey)
13936
- ? object.repositoryKey.map((e: any) => globalThis.String(e))
13937
- : globalThis.Array.isArray(object?.repository_key)
13938
- ? object.repository_key.map((e: any) => globalThis.String(e))
13983
+ status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
13984
+ bucketSeconds: isSet(object.bucketSeconds)
13985
+ ? globalThis.Number(object.bucketSeconds)
13986
+ : isSet(object.bucket_seconds)
13987
+ ? globalThis.Number(object.bucket_seconds)
13988
+ : 0,
13989
+ buckets: globalThis.Array.isArray(object?.buckets)
13990
+ ? object.buckets.map((e: any) => SessionUsageBucket.fromJSON(e))
13939
13991
  : [],
13940
- ref: globalThis.Array.isArray(object?.ref) ? object.ref.map((e: any) => globalThis.String(e)) : [],
13941
- state: globalThis.Array.isArray(object?.state) ? object.state.map((e: any) => aIFileLifecycleFromJSON(e)) : [],
13942
- tier: globalThis.Array.isArray(object?.tier) ? object.tier.map((e: any) => aIFileTierFromJSON(e)) : [],
13943
- session: globalThis.Array.isArray(object?.session)
13944
- ? object.session.map((e: any) => AISessionRef.fromJSON(e))
13992
+ gitBuckets: globalThis.Array.isArray(object?.gitBuckets)
13993
+ ? object.gitBuckets.map((e: any) => SessionGitBucket.fromJSON(e))
13994
+ : globalThis.Array.isArray(object?.git_buckets)
13995
+ ? object.git_buckets.map((e: any) => SessionGitBucket.fromJSON(e))
13945
13996
  : [],
13946
- minAge: isSet(object.minAge)
13947
- ? Duration.fromJSON(object.minAge)
13948
- : isSet(object.min_age)
13949
- ? Duration.fromJSON(object.min_age)
13950
- : undefined,
13997
+ };
13998
+ },
13999
+
14000
+ toJSON(message: SessionUsageTrendResponse): unknown {
14001
+ const obj: any = {};
14002
+ if (message.status !== undefined) {
14003
+ obj.status = ResponseStatus.toJSON(message.status);
14004
+ }
14005
+ if (message.bucketSeconds !== 0) {
14006
+ obj.bucketSeconds = Math.round(message.bucketSeconds);
14007
+ }
14008
+ if (message.buckets?.length) {
14009
+ obj.buckets = message.buckets.map((e) => SessionUsageBucket.toJSON(e));
14010
+ }
14011
+ if (message.gitBuckets?.length) {
14012
+ obj.gitBuckets = message.gitBuckets.map((e) => SessionGitBucket.toJSON(e));
14013
+ }
14014
+ return obj;
14015
+ },
14016
+
14017
+ create<I extends Exact<DeepPartial<SessionUsageTrendResponse>, I>>(base?: I): SessionUsageTrendResponse {
14018
+ return SessionUsageTrendResponse.fromPartial(base ?? ({} as any));
14019
+ },
14020
+ fromPartial<I extends Exact<DeepPartial<SessionUsageTrendResponse>, I>>(object: I): SessionUsageTrendResponse {
14021
+ const message = createBaseSessionUsageTrendResponse();
14022
+ message.status = (object.status !== undefined && object.status !== null)
14023
+ ? ResponseStatus.fromPartial(object.status)
14024
+ : undefined;
14025
+ message.bucketSeconds = object.bucketSeconds ?? 0;
14026
+ message.buckets = object.buckets?.map((e) => SessionUsageBucket.fromPartial(e)) || [];
14027
+ message.gitBuckets = object.gitBuckets?.map((e) => SessionGitBucket.fromPartial(e)) || [];
14028
+ return message;
14029
+ },
14030
+ };
14031
+
14032
+ function createBaseSessionUsageBucket(): SessionUsageBucket {
14033
+ return {
14034
+ bucketStart: undefined,
14035
+ model: "",
14036
+ modelCalls: 0,
14037
+ inputTokens: 0,
14038
+ outputTokens: 0,
14039
+ cacheReadTokens: 0,
14040
+ cacheWriteTokens: 0,
14041
+ costUsd: 0,
14042
+ };
14043
+ }
14044
+
14045
+ export const SessionUsageBucket: MessageFns<SessionUsageBucket> = {
14046
+ encode(message: SessionUsageBucket, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
14047
+ if (message.bucketStart !== undefined) {
14048
+ Timestamp.encode(toTimestamp(message.bucketStart), writer.uint32(10).fork()).join();
14049
+ }
14050
+ if (message.model !== "") {
14051
+ writer.uint32(18).string(message.model);
14052
+ }
14053
+ if (message.modelCalls !== 0) {
14054
+ writer.uint32(24).uint64(message.modelCalls);
14055
+ }
14056
+ if (message.inputTokens !== 0) {
14057
+ writer.uint32(32).uint64(message.inputTokens);
14058
+ }
14059
+ if (message.outputTokens !== 0) {
14060
+ writer.uint32(40).uint64(message.outputTokens);
14061
+ }
14062
+ if (message.cacheReadTokens !== 0) {
14063
+ writer.uint32(48).uint64(message.cacheReadTokens);
14064
+ }
14065
+ if (message.cacheWriteTokens !== 0) {
14066
+ writer.uint32(56).uint64(message.cacheWriteTokens);
14067
+ }
14068
+ if (message.costUsd !== 0) {
14069
+ writer.uint32(65).double(message.costUsd);
14070
+ }
14071
+ return writer;
14072
+ },
14073
+
14074
+ decode(input: BinaryReader | Uint8Array, length?: number): SessionUsageBucket {
14075
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
14076
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
14077
+ if (previousRecursionDepth >= 100) {
14078
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
14079
+ }
14080
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
14081
+ try {
14082
+ const end = length === undefined ? reader.len : reader.pos + length;
14083
+ const message = createBaseSessionUsageBucket();
14084
+ while (reader.pos < end) {
14085
+ const tag = reader.uint32();
14086
+ switch (tag >>> 3) {
14087
+ case 1: {
14088
+ if (tag !== 10) {
14089
+ break;
14090
+ }
14091
+
14092
+ message.bucketStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
14093
+ continue;
14094
+ }
14095
+ case 2: {
14096
+ if (tag !== 18) {
14097
+ break;
14098
+ }
14099
+
14100
+ message.model = reader.string();
14101
+ continue;
14102
+ }
14103
+ case 3: {
14104
+ if (tag !== 24) {
14105
+ break;
14106
+ }
14107
+
14108
+ message.modelCalls = longToNumber(reader.uint64());
14109
+ continue;
14110
+ }
14111
+ case 4: {
14112
+ if (tag !== 32) {
14113
+ break;
14114
+ }
14115
+
14116
+ message.inputTokens = longToNumber(reader.uint64());
14117
+ continue;
14118
+ }
14119
+ case 5: {
14120
+ if (tag !== 40) {
14121
+ break;
14122
+ }
14123
+
14124
+ message.outputTokens = longToNumber(reader.uint64());
14125
+ continue;
14126
+ }
14127
+ case 6: {
14128
+ if (tag !== 48) {
14129
+ break;
14130
+ }
14131
+
14132
+ message.cacheReadTokens = longToNumber(reader.uint64());
14133
+ continue;
14134
+ }
14135
+ case 7: {
14136
+ if (tag !== 56) {
14137
+ break;
14138
+ }
14139
+
14140
+ message.cacheWriteTokens = longToNumber(reader.uint64());
14141
+ continue;
14142
+ }
14143
+ case 8: {
14144
+ if (tag !== 65) {
14145
+ break;
14146
+ }
14147
+
14148
+ message.costUsd = reader.double();
14149
+ continue;
14150
+ }
14151
+ }
14152
+ if ((tag & 7) === 4 || tag === 0) {
14153
+ break;
14154
+ }
14155
+ reader.skip(tag & 7);
14156
+ }
14157
+ return message;
14158
+ } finally {
14159
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
14160
+ }
14161
+ },
14162
+
14163
+ fromJSON(object: any): SessionUsageBucket {
14164
+ return {
14165
+ bucketStart: isSet(object.bucketStart)
14166
+ ? fromJsonTimestamp(object.bucketStart)
14167
+ : isSet(object.bucket_start)
14168
+ ? fromJsonTimestamp(object.bucket_start)
14169
+ : undefined,
14170
+ model: isSet(object.model) ? globalThis.String(object.model) : "",
14171
+ modelCalls: isSet(object.modelCalls)
14172
+ ? globalThis.Number(object.modelCalls)
14173
+ : isSet(object.model_calls)
14174
+ ? globalThis.Number(object.model_calls)
14175
+ : 0,
14176
+ inputTokens: isSet(object.inputTokens)
14177
+ ? globalThis.Number(object.inputTokens)
14178
+ : isSet(object.input_tokens)
14179
+ ? globalThis.Number(object.input_tokens)
14180
+ : 0,
14181
+ outputTokens: isSet(object.outputTokens)
14182
+ ? globalThis.Number(object.outputTokens)
14183
+ : isSet(object.output_tokens)
14184
+ ? globalThis.Number(object.output_tokens)
14185
+ : 0,
14186
+ cacheReadTokens: isSet(object.cacheReadTokens)
14187
+ ? globalThis.Number(object.cacheReadTokens)
14188
+ : isSet(object.cache_read_tokens)
14189
+ ? globalThis.Number(object.cache_read_tokens)
14190
+ : 0,
14191
+ cacheWriteTokens: isSet(object.cacheWriteTokens)
14192
+ ? globalThis.Number(object.cacheWriteTokens)
14193
+ : isSet(object.cache_write_tokens)
14194
+ ? globalThis.Number(object.cache_write_tokens)
14195
+ : 0,
14196
+ costUsd: isSet(object.costUsd)
14197
+ ? globalThis.Number(object.costUsd)
14198
+ : isSet(object.cost_usd)
14199
+ ? globalThis.Number(object.cost_usd)
14200
+ : 0,
14201
+ };
14202
+ },
14203
+
14204
+ toJSON(message: SessionUsageBucket): unknown {
14205
+ const obj: any = {};
14206
+ if (message.bucketStart !== undefined) {
14207
+ obj.bucketStart = message.bucketStart.toISOString();
14208
+ }
14209
+ if (message.model !== "") {
14210
+ obj.model = message.model;
14211
+ }
14212
+ if (message.modelCalls !== 0) {
14213
+ obj.modelCalls = Math.round(message.modelCalls);
14214
+ }
14215
+ if (message.inputTokens !== 0) {
14216
+ obj.inputTokens = Math.round(message.inputTokens);
14217
+ }
14218
+ if (message.outputTokens !== 0) {
14219
+ obj.outputTokens = Math.round(message.outputTokens);
14220
+ }
14221
+ if (message.cacheReadTokens !== 0) {
14222
+ obj.cacheReadTokens = Math.round(message.cacheReadTokens);
14223
+ }
14224
+ if (message.cacheWriteTokens !== 0) {
14225
+ obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
14226
+ }
14227
+ if (message.costUsd !== 0) {
14228
+ obj.costUsd = message.costUsd;
14229
+ }
14230
+ return obj;
14231
+ },
14232
+
14233
+ create<I extends Exact<DeepPartial<SessionUsageBucket>, I>>(base?: I): SessionUsageBucket {
14234
+ return SessionUsageBucket.fromPartial(base ?? ({} as any));
14235
+ },
14236
+ fromPartial<I extends Exact<DeepPartial<SessionUsageBucket>, I>>(object: I): SessionUsageBucket {
14237
+ const message = createBaseSessionUsageBucket();
14238
+ message.bucketStart = object.bucketStart ?? undefined;
14239
+ message.model = object.model ?? "";
14240
+ message.modelCalls = object.modelCalls ?? 0;
14241
+ message.inputTokens = object.inputTokens ?? 0;
14242
+ message.outputTokens = object.outputTokens ?? 0;
14243
+ message.cacheReadTokens = object.cacheReadTokens ?? 0;
14244
+ message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
14245
+ message.costUsd = object.costUsd ?? 0;
14246
+ return message;
14247
+ },
14248
+ };
14249
+
14250
+ function createBaseSessionGitBucket(): SessionGitBucket {
14251
+ return { bucketStart: undefined, action: "", count: 0 };
14252
+ }
14253
+
14254
+ export const SessionGitBucket: MessageFns<SessionGitBucket> = {
14255
+ encode(message: SessionGitBucket, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
14256
+ if (message.bucketStart !== undefined) {
14257
+ Timestamp.encode(toTimestamp(message.bucketStart), writer.uint32(10).fork()).join();
14258
+ }
14259
+ if (message.action !== "") {
14260
+ writer.uint32(18).string(message.action);
14261
+ }
14262
+ if (message.count !== 0) {
14263
+ writer.uint32(24).uint64(message.count);
14264
+ }
14265
+ return writer;
14266
+ },
14267
+
14268
+ decode(input: BinaryReader | Uint8Array, length?: number): SessionGitBucket {
14269
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
14270
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
14271
+ if (previousRecursionDepth >= 100) {
14272
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
14273
+ }
14274
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
14275
+ try {
14276
+ const end = length === undefined ? reader.len : reader.pos + length;
14277
+ const message = createBaseSessionGitBucket();
14278
+ while (reader.pos < end) {
14279
+ const tag = reader.uint32();
14280
+ switch (tag >>> 3) {
14281
+ case 1: {
14282
+ if (tag !== 10) {
14283
+ break;
14284
+ }
14285
+
14286
+ message.bucketStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
14287
+ continue;
14288
+ }
14289
+ case 2: {
14290
+ if (tag !== 18) {
14291
+ break;
14292
+ }
14293
+
14294
+ message.action = reader.string();
14295
+ continue;
14296
+ }
14297
+ case 3: {
14298
+ if (tag !== 24) {
14299
+ break;
14300
+ }
14301
+
14302
+ message.count = longToNumber(reader.uint64());
14303
+ continue;
14304
+ }
14305
+ }
14306
+ if ((tag & 7) === 4 || tag === 0) {
14307
+ break;
14308
+ }
14309
+ reader.skip(tag & 7);
14310
+ }
14311
+ return message;
14312
+ } finally {
14313
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
14314
+ }
14315
+ },
14316
+
14317
+ fromJSON(object: any): SessionGitBucket {
14318
+ return {
14319
+ bucketStart: isSet(object.bucketStart)
14320
+ ? fromJsonTimestamp(object.bucketStart)
14321
+ : isSet(object.bucket_start)
14322
+ ? fromJsonTimestamp(object.bucket_start)
14323
+ : undefined,
14324
+ action: isSet(object.action) ? globalThis.String(object.action) : "",
14325
+ count: isSet(object.count) ? globalThis.Number(object.count) : 0,
14326
+ };
14327
+ },
14328
+
14329
+ toJSON(message: SessionGitBucket): unknown {
14330
+ const obj: any = {};
14331
+ if (message.bucketStart !== undefined) {
14332
+ obj.bucketStart = message.bucketStart.toISOString();
14333
+ }
14334
+ if (message.action !== "") {
14335
+ obj.action = message.action;
14336
+ }
14337
+ if (message.count !== 0) {
14338
+ obj.count = Math.round(message.count);
14339
+ }
14340
+ return obj;
14341
+ },
14342
+
14343
+ create<I extends Exact<DeepPartial<SessionGitBucket>, I>>(base?: I): SessionGitBucket {
14344
+ return SessionGitBucket.fromPartial(base ?? ({} as any));
14345
+ },
14346
+ fromPartial<I extends Exact<DeepPartial<SessionGitBucket>, I>>(object: I): SessionGitBucket {
14347
+ const message = createBaseSessionGitBucket();
14348
+ message.bucketStart = object.bucketStart ?? undefined;
14349
+ message.action = object.action ?? "";
14350
+ message.count = object.count ?? 0;
14351
+ return message;
14352
+ },
14353
+ };
14354
+
14355
+ function createBaseAISessionRef(): AISessionRef {
14356
+ return { sourceSystem: "", sessionId: "" };
14357
+ }
14358
+
14359
+ export const AISessionRef: MessageFns<AISessionRef> = {
14360
+ encode(message: AISessionRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
14361
+ if (message.sourceSystem !== "") {
14362
+ writer.uint32(10).string(message.sourceSystem);
14363
+ }
14364
+ if (message.sessionId !== "") {
14365
+ writer.uint32(18).string(message.sessionId);
14366
+ }
14367
+ return writer;
14368
+ },
14369
+
14370
+ decode(input: BinaryReader | Uint8Array, length?: number): AISessionRef {
14371
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
14372
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
14373
+ if (previousRecursionDepth >= 100) {
14374
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
14375
+ }
14376
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
14377
+ try {
14378
+ const end = length === undefined ? reader.len : reader.pos + length;
14379
+ const message = createBaseAISessionRef();
14380
+ while (reader.pos < end) {
14381
+ const tag = reader.uint32();
14382
+ switch (tag >>> 3) {
14383
+ case 1: {
14384
+ if (tag !== 10) {
14385
+ break;
14386
+ }
14387
+
14388
+ message.sourceSystem = reader.string();
14389
+ continue;
14390
+ }
14391
+ case 2: {
14392
+ if (tag !== 18) {
14393
+ break;
14394
+ }
14395
+
14396
+ message.sessionId = reader.string();
14397
+ continue;
14398
+ }
14399
+ }
14400
+ if ((tag & 7) === 4 || tag === 0) {
14401
+ break;
14402
+ }
14403
+ reader.skip(tag & 7);
14404
+ }
14405
+ return message;
14406
+ } finally {
14407
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
14408
+ }
14409
+ },
14410
+
14411
+ fromJSON(object: any): AISessionRef {
14412
+ return {
14413
+ sourceSystem: isSet(object.sourceSystem)
14414
+ ? globalThis.String(object.sourceSystem)
14415
+ : isSet(object.source_system)
14416
+ ? globalThis.String(object.source_system)
14417
+ : "",
14418
+ sessionId: isSet(object.sessionId)
14419
+ ? globalThis.String(object.sessionId)
14420
+ : isSet(object.session_id)
14421
+ ? globalThis.String(object.session_id)
14422
+ : "",
14423
+ };
14424
+ },
14425
+
14426
+ toJSON(message: AISessionRef): unknown {
14427
+ const obj: any = {};
14428
+ if (message.sourceSystem !== "") {
14429
+ obj.sourceSystem = message.sourceSystem;
14430
+ }
14431
+ if (message.sessionId !== "") {
14432
+ obj.sessionId = message.sessionId;
14433
+ }
14434
+ return obj;
14435
+ },
14436
+
14437
+ create<I extends Exact<DeepPartial<AISessionRef>, I>>(base?: I): AISessionRef {
14438
+ return AISessionRef.fromPartial(base ?? ({} as any));
14439
+ },
14440
+ fromPartial<I extends Exact<DeepPartial<AISessionRef>, I>>(object: I): AISessionRef {
14441
+ const message = createBaseAISessionRef();
14442
+ message.sourceSystem = object.sourceSystem ?? "";
14443
+ message.sessionId = object.sessionId ?? "";
14444
+ return message;
14445
+ },
14446
+ };
14447
+
14448
+ function createBaseAIFileFilter(): AIFileFilter {
14449
+ return {
14450
+ repositoryKey: [],
14451
+ ref: [],
14452
+ state: [],
14453
+ tier: [],
14454
+ session: [],
14455
+ minAge: undefined,
14456
+ activeAfter: undefined,
14457
+ activeBefore: undefined,
14458
+ abandonedHorizon: undefined,
14459
+ };
14460
+ }
14461
+
14462
+ export const AIFileFilter: MessageFns<AIFileFilter> = {
14463
+ encode(message: AIFileFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
14464
+ for (const v of message.repositoryKey) {
14465
+ writer.uint32(10).string(v!);
14466
+ }
14467
+ for (const v of message.ref) {
14468
+ writer.uint32(18).string(v!);
14469
+ }
14470
+ writer.uint32(26).fork();
14471
+ for (const v of message.state) {
14472
+ writer.int32(v);
14473
+ }
14474
+ writer.join();
14475
+ writer.uint32(34).fork();
14476
+ for (const v of message.tier) {
14477
+ writer.int32(v);
14478
+ }
14479
+ writer.join();
14480
+ for (const v of message.session) {
14481
+ AISessionRef.encode(v!, writer.uint32(42).fork()).join();
14482
+ }
14483
+ if (message.minAge !== undefined) {
14484
+ Duration.encode(message.minAge, writer.uint32(50).fork()).join();
14485
+ }
14486
+ if (message.activeAfter !== undefined) {
14487
+ Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(58).fork()).join();
14488
+ }
14489
+ if (message.activeBefore !== undefined) {
14490
+ Timestamp.encode(toTimestamp(message.activeBefore), writer.uint32(66).fork()).join();
14491
+ }
14492
+ if (message.abandonedHorizon !== undefined) {
14493
+ Duration.encode(message.abandonedHorizon, writer.uint32(74).fork()).join();
14494
+ }
14495
+ return writer;
14496
+ },
14497
+
14498
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileFilter {
14499
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
14500
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
14501
+ if (previousRecursionDepth >= 100) {
14502
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
14503
+ }
14504
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
14505
+ try {
14506
+ const end = length === undefined ? reader.len : reader.pos + length;
14507
+ const message = createBaseAIFileFilter();
14508
+ while (reader.pos < end) {
14509
+ const tag = reader.uint32();
14510
+ switch (tag >>> 3) {
14511
+ case 1: {
14512
+ if (tag !== 10) {
14513
+ break;
14514
+ }
14515
+
14516
+ message.repositoryKey.push(reader.string());
14517
+ continue;
14518
+ }
14519
+ case 2: {
14520
+ if (tag !== 18) {
14521
+ break;
14522
+ }
14523
+
14524
+ message.ref.push(reader.string());
14525
+ continue;
14526
+ }
14527
+ case 3: {
14528
+ if (tag === 24) {
14529
+ message.state.push(reader.int32() as any);
14530
+
14531
+ continue;
14532
+ }
14533
+
14534
+ if (tag === 26) {
14535
+ const end2 = reader.uint32() + reader.pos;
14536
+ while (reader.pos < end2) {
14537
+ message.state.push(reader.int32() as any);
14538
+ }
14539
+
14540
+ continue;
14541
+ }
14542
+
14543
+ break;
14544
+ }
14545
+ case 4: {
14546
+ if (tag === 32) {
14547
+ message.tier.push(reader.int32() as any);
14548
+
14549
+ continue;
14550
+ }
14551
+
14552
+ if (tag === 34) {
14553
+ const end2 = reader.uint32() + reader.pos;
14554
+ while (reader.pos < end2) {
14555
+ message.tier.push(reader.int32() as any);
14556
+ }
14557
+
14558
+ continue;
14559
+ }
14560
+
14561
+ break;
14562
+ }
14563
+ case 5: {
14564
+ if (tag !== 42) {
14565
+ break;
14566
+ }
14567
+
14568
+ message.session.push(AISessionRef.decode(reader, reader.uint32()));
14569
+ continue;
14570
+ }
14571
+ case 6: {
14572
+ if (tag !== 50) {
14573
+ break;
14574
+ }
14575
+
14576
+ message.minAge = Duration.decode(reader, reader.uint32());
14577
+ continue;
14578
+ }
14579
+ case 7: {
14580
+ if (tag !== 58) {
14581
+ break;
14582
+ }
14583
+
14584
+ message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
14585
+ continue;
14586
+ }
14587
+ case 8: {
14588
+ if (tag !== 66) {
14589
+ break;
14590
+ }
14591
+
14592
+ message.activeBefore = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
14593
+ continue;
14594
+ }
14595
+ case 9: {
14596
+ if (tag !== 74) {
14597
+ break;
14598
+ }
14599
+
14600
+ message.abandonedHorizon = Duration.decode(reader, reader.uint32());
14601
+ continue;
14602
+ }
14603
+ }
14604
+ if ((tag & 7) === 4 || tag === 0) {
14605
+ break;
14606
+ }
14607
+ reader.skip(tag & 7);
14608
+ }
14609
+ return message;
14610
+ } finally {
14611
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
14612
+ }
14613
+ },
14614
+
14615
+ fromJSON(object: any): AIFileFilter {
14616
+ return {
14617
+ repositoryKey: globalThis.Array.isArray(object?.repositoryKey)
14618
+ ? object.repositoryKey.map((e: any) => globalThis.String(e))
14619
+ : globalThis.Array.isArray(object?.repository_key)
14620
+ ? object.repository_key.map((e: any) => globalThis.String(e))
14621
+ : [],
14622
+ ref: globalThis.Array.isArray(object?.ref) ? object.ref.map((e: any) => globalThis.String(e)) : [],
14623
+ state: globalThis.Array.isArray(object?.state) ? object.state.map((e: any) => aIFileLifecycleFromJSON(e)) : [],
14624
+ tier: globalThis.Array.isArray(object?.tier) ? object.tier.map((e: any) => aIFileTierFromJSON(e)) : [],
14625
+ session: globalThis.Array.isArray(object?.session)
14626
+ ? object.session.map((e: any) => AISessionRef.fromJSON(e))
14627
+ : [],
14628
+ minAge: isSet(object.minAge)
14629
+ ? Duration.fromJSON(object.minAge)
14630
+ : isSet(object.min_age)
14631
+ ? Duration.fromJSON(object.min_age)
14632
+ : undefined,
13951
14633
  activeAfter: isSet(object.activeAfter)
13952
14634
  ? fromJsonTimestamp(object.activeAfter)
13953
14635
  : isSet(object.active_after)
@@ -17715,6 +18397,11 @@ export interface AIGatewayService {
17715
18397
  * costliest first. Mirrors telemetry.api.v1.
17716
18398
  */
17717
18399
  ListModelActivity(request: ModelActivityRequest, metadata?: Metadata): Promise<ModelActivityResponse>;
18400
+ /**
18401
+ * One session's model calls and git activity on one epoch-aligned time grid: per bucket, each model's
18402
+ * calls, tokens and cost, and each git action's count. Mirrors telemetry.api.v1.
18403
+ */
18404
+ GetSessionUsageTrend(request: SessionUsageTrendRequest, metadata?: Metadata): Promise<SessionUsageTrendResponse>;
17718
18405
  /**
17719
18406
  * Per-seat entitlement usage board: every entitlement owner's latest observed funding facility and
17720
18407
  * per-harness usage % windows. Stream-first (first frame = full snapshot), seat-scoped. Mirrors
@@ -17751,6 +18438,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
17751
18438
  this.ListModelPriceHistory = this.ListModelPriceHistory.bind(this);
17752
18439
  this.ListResourceRankings = this.ListResourceRankings.bind(this);
17753
18440
  this.ListModelActivity = this.ListModelActivity.bind(this);
18441
+ this.GetSessionUsageTrend = this.GetSessionUsageTrend.bind(this);
17754
18442
  this.StreamEntitlements = this.StreamEntitlements.bind(this);
17755
18443
  }
17756
18444
  ListSessions(request: ListSessionsRequest, metadata?: Metadata): Promise<ListSessionsResponse> {
@@ -17888,6 +18576,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
17888
18576
  return promise.then((data) => ModelActivityResponse.decode(new BinaryReader(data)));
17889
18577
  }
17890
18578
 
18579
+ GetSessionUsageTrend(request: SessionUsageTrendRequest, metadata?: Metadata): Promise<SessionUsageTrendResponse> {
18580
+ const data = SessionUsageTrendRequest.encode(request).finish();
18581
+ const promise = this.rpc.request(this.service, "GetSessionUsageTrend", data, metadata);
18582
+ return promise.then((data) => SessionUsageTrendResponse.decode(new BinaryReader(data)));
18583
+ }
18584
+
17891
18585
  StreamEntitlements(request: StreamEntitlementsRequest, metadata?: Metadata): Observable<EntitlementsSnapshot> {
17892
18586
  const data = StreamEntitlementsRequest.encode(request).finish();
17893
18587
  const result = this.rpc.serverStreamingRequest(this.service, "StreamEntitlements", data, metadata);