@miradorlabs/web-grpc 3.1.0 → 3.2.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.
@@ -12,6 +12,7 @@ import { map } from "rxjs/operators";
12
12
  import { Duration } from "../../../../google/protobuf/duration";
13
13
  import { Timestamp } from "../../../../google/protobuf/timestamp";
14
14
  import { ResponseStatus } from "../../common/v1/status";
15
+ import { AIPrincipalKind, aIPrincipalKindFromJSON, aIPrincipalKindToJSON } from "./reference_gateway";
15
16
  import {
16
17
  AnalyticsTimeInterval,
17
18
  analyticsTimeIntervalFromJSON,
@@ -1084,13 +1085,13 @@ export interface SessionTimelinePoint {
1084
1085
  }
1085
1086
 
1086
1087
  /**
1087
- * AIGitActivityFilter mirrors telemetry.api.v1.AIGitActivityFilter. session_id is the
1088
- * session identity (from a session-list row); fields AND, repeated values OR
1089
- * (any-of); empty = unconstrained. event_time bounds are REQUIRED when session_id is empty.
1088
+ * AIGitActivityFilter mirrors telemetry.api.v1.AIGitActivityFilter. session is the
1089
+ * session identity (from a session-list row); fields AND, sessions OR (any-of);
1090
+ * empty = unconstrained. event_time bounds are REQUIRED when session is empty.
1090
1091
  */
1091
1092
  export interface AIGitActivityFilter {
1092
- sessionId: string[];
1093
- sourceSystem: string[];
1093
+ /** both halves required */
1094
+ session: AISessionRef[];
1094
1095
  eventTimeAfter?: Date | undefined;
1095
1096
  eventTimeBefore?: Date | undefined;
1096
1097
  }
@@ -1168,8 +1169,8 @@ export interface GitActivitySummaryRequest {
1168
1169
  organizationId: string;
1169
1170
  projectId: string;
1170
1171
  /**
1171
- * filter's session_id / source_system apply; its event-time bounds are ignored
1172
- * (time_window is the range).
1172
+ * filter's session applies; its event-time bounds are ignored (time_window is the
1173
+ * range).
1173
1174
  */
1174
1175
  filter:
1175
1176
  | AIGitActivityFilter
@@ -1521,12 +1522,71 @@ export interface ResourceRanking {
1521
1522
  sessionCount: number;
1522
1523
  }
1523
1524
 
1525
+ export interface ModelActivityRequest {
1526
+ organizationId: string;
1527
+ projectId: string;
1528
+ groups: ModelActivityGroup[];
1529
+ startTime: Date | undefined;
1530
+ endTime: Date | undefined;
1531
+ }
1532
+
1533
+ export interface ModelActivityGroup {
1534
+ key: string;
1535
+ modelNames: string[];
1536
+ }
1537
+
1538
+ export interface ModelActivityResponse {
1539
+ status: ResponseStatus | undefined;
1540
+ models: ModelActivity[];
1541
+ windowStart: Date | undefined;
1542
+ windowEnd: Date | undefined;
1543
+ }
1544
+
1545
+ export interface ModelActivity {
1546
+ key: string;
1547
+ modelCalls: number;
1548
+ failedCalls: number;
1549
+ inputTokens: number;
1550
+ outputTokens: number;
1551
+ cacheReadTokens: number;
1552
+ cacheWriteTokens: number;
1553
+ costUsd: number;
1554
+ subscriptionCostUsd: number;
1555
+ sessions: number;
1556
+ toolCalls: number;
1557
+ compactions: number;
1558
+ subagentRuns: number;
1559
+ ttftMsSum: number;
1560
+ ttftCalls: number;
1561
+ providers: string[];
1562
+ /** busiest first, at most 200; user id, else api key */
1563
+ principals: ModelActivityPrincipal[];
1564
+ }
1565
+
1566
+ export interface ModelActivityPrincipal {
1567
+ kind: AIPrincipalKind;
1568
+ id: string;
1569
+ sourceSystem: string;
1570
+ modelCalls: number;
1571
+ sessions: number;
1572
+ inputTokens: number;
1573
+ outputTokens: number;
1574
+ costUsd: number;
1575
+ }
1576
+
1577
+ /** AISessionRef is a session's identity: two sources can issue the same session_id. */
1578
+ export interface AISessionRef {
1579
+ sourceSystem: string;
1580
+ sessionId: string;
1581
+ }
1582
+
1524
1583
  export interface AIFileFilter {
1525
1584
  repositoryKey: string[];
1526
1585
  ref: string[];
1527
1586
  state: AIFileLifecycle[];
1528
1587
  tier: AIFileTier[];
1529
- sessionId: string[];
1588
+ /** both halves required */
1589
+ session: AISessionRef[];
1530
1590
  minAge?: Duration | undefined;
1531
1591
  activeAfter?: Date | undefined;
1532
1592
  activeBefore?: Date | undefined;
@@ -1564,8 +1624,8 @@ export interface AIFileRow {
1564
1624
  discardedAt: Date | undefined;
1565
1625
  discardReason: string;
1566
1626
  editCount: number;
1567
- /** internal session ids that touched this file */
1568
- sessionId: string[];
1627
+ /** unique, sorted by (source_system, session_id) */
1628
+ sessions: AISessionRef[];
1569
1629
  unlandedCostUsd: number;
1570
1630
  unlandedOutputTokens: number;
1571
1631
  /**
@@ -6011,22 +6071,19 @@ export const SessionTimelinePoint: MessageFns<SessionTimelinePoint> = {
6011
6071
  };
6012
6072
 
6013
6073
  function createBaseAIGitActivityFilter(): AIGitActivityFilter {
6014
- return { sessionId: [], sourceSystem: [], eventTimeAfter: undefined, eventTimeBefore: undefined };
6074
+ return { session: [], eventTimeAfter: undefined, eventTimeBefore: undefined };
6015
6075
  }
6016
6076
 
6017
6077
  export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6018
6078
  encode(message: AIGitActivityFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
6019
- for (const v of message.sessionId) {
6020
- writer.uint32(10).string(v!);
6021
- }
6022
- for (const v of message.sourceSystem) {
6023
- writer.uint32(18).string(v!);
6079
+ for (const v of message.session) {
6080
+ AISessionRef.encode(v!, writer.uint32(10).fork()).join();
6024
6081
  }
6025
6082
  if (message.eventTimeAfter !== undefined) {
6026
- Timestamp.encode(toTimestamp(message.eventTimeAfter), writer.uint32(26).fork()).join();
6083
+ Timestamp.encode(toTimestamp(message.eventTimeAfter), writer.uint32(18).fork()).join();
6027
6084
  }
6028
6085
  if (message.eventTimeBefore !== undefined) {
6029
- Timestamp.encode(toTimestamp(message.eventTimeBefore), writer.uint32(34).fork()).join();
6086
+ Timestamp.encode(toTimestamp(message.eventTimeBefore), writer.uint32(26).fork()).join();
6030
6087
  }
6031
6088
  return writer;
6032
6089
  },
@@ -6049,7 +6106,7 @@ export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6049
6106
  break;
6050
6107
  }
6051
6108
 
6052
- message.sessionId.push(reader.string());
6109
+ message.session.push(AISessionRef.decode(reader, reader.uint32()));
6053
6110
  continue;
6054
6111
  }
6055
6112
  case 2: {
@@ -6057,7 +6114,7 @@ export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6057
6114
  break;
6058
6115
  }
6059
6116
 
6060
- message.sourceSystem.push(reader.string());
6117
+ message.eventTimeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
6061
6118
  continue;
6062
6119
  }
6063
6120
  case 3: {
@@ -6065,14 +6122,6 @@ export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6065
6122
  break;
6066
6123
  }
6067
6124
 
6068
- message.eventTimeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
6069
- continue;
6070
- }
6071
- case 4: {
6072
- if (tag !== 34) {
6073
- break;
6074
- }
6075
-
6076
6125
  message.eventTimeBefore = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
6077
6126
  continue;
6078
6127
  }
@@ -6090,15 +6139,8 @@ export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6090
6139
 
6091
6140
  fromJSON(object: any): AIGitActivityFilter {
6092
6141
  return {
6093
- sessionId: globalThis.Array.isArray(object?.sessionId)
6094
- ? object.sessionId.map((e: any) => globalThis.String(e))
6095
- : globalThis.Array.isArray(object?.session_id)
6096
- ? object.session_id.map((e: any) => globalThis.String(e))
6097
- : [],
6098
- sourceSystem: globalThis.Array.isArray(object?.sourceSystem)
6099
- ? object.sourceSystem.map((e: any) => globalThis.String(e))
6100
- : globalThis.Array.isArray(object?.source_system)
6101
- ? object.source_system.map((e: any) => globalThis.String(e))
6142
+ session: globalThis.Array.isArray(object?.session)
6143
+ ? object.session.map((e: any) => AISessionRef.fromJSON(e))
6102
6144
  : [],
6103
6145
  eventTimeAfter: isSet(object.eventTimeAfter)
6104
6146
  ? fromJsonTimestamp(object.eventTimeAfter)
@@ -6115,11 +6157,8 @@ export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6115
6157
 
6116
6158
  toJSON(message: AIGitActivityFilter): unknown {
6117
6159
  const obj: any = {};
6118
- if (message.sessionId?.length) {
6119
- obj.sessionId = message.sessionId;
6120
- }
6121
- if (message.sourceSystem?.length) {
6122
- obj.sourceSystem = message.sourceSystem;
6160
+ if (message.session?.length) {
6161
+ obj.session = message.session.map((e) => AISessionRef.toJSON(e));
6123
6162
  }
6124
6163
  if (message.eventTimeAfter !== undefined) {
6125
6164
  obj.eventTimeAfter = message.eventTimeAfter.toISOString();
@@ -6135,8 +6174,7 @@ export const AIGitActivityFilter: MessageFns<AIGitActivityFilter> = {
6135
6174
  },
6136
6175
  fromPartial<I extends Exact<DeepPartial<AIGitActivityFilter>, I>>(object: I): AIGitActivityFilter {
6137
6176
  const message = createBaseAIGitActivityFilter();
6138
- message.sessionId = object.sessionId?.map((e) => e) || [];
6139
- message.sourceSystem = object.sourceSystem?.map((e) => e) || [];
6177
+ message.session = object.session?.map((e) => AISessionRef.fromPartial(e)) || [];
6140
6178
  message.eventTimeAfter = object.eventTimeAfter ?? undefined;
6141
6179
  message.eventTimeBefore = object.eventTimeBefore ?? undefined;
6142
6180
  return message;
@@ -12468,57 +12506,31 @@ export const ResourceRanking: MessageFns<ResourceRanking> = {
12468
12506
  },
12469
12507
  };
12470
12508
 
12471
- function createBaseAIFileFilter(): AIFileFilter {
12472
- return {
12473
- repositoryKey: [],
12474
- ref: [],
12475
- state: [],
12476
- tier: [],
12477
- sessionId: [],
12478
- minAge: undefined,
12479
- activeAfter: undefined,
12480
- activeBefore: undefined,
12481
- abandonedHorizon: undefined,
12482
- };
12509
+ function createBaseModelActivityRequest(): ModelActivityRequest {
12510
+ return { organizationId: "", projectId: "", groups: [], startTime: undefined, endTime: undefined };
12483
12511
  }
12484
12512
 
12485
- export const AIFileFilter: MessageFns<AIFileFilter> = {
12486
- encode(message: AIFileFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
12487
- for (const v of message.repositoryKey) {
12488
- writer.uint32(10).string(v!);
12489
- }
12490
- for (const v of message.ref) {
12491
- writer.uint32(18).string(v!);
12492
- }
12493
- writer.uint32(26).fork();
12494
- for (const v of message.state) {
12495
- writer.int32(v);
12496
- }
12497
- writer.join();
12498
- writer.uint32(34).fork();
12499
- for (const v of message.tier) {
12500
- writer.int32(v);
12501
- }
12502
- writer.join();
12503
- for (const v of message.sessionId) {
12504
- writer.uint32(42).string(v!);
12513
+ export const ModelActivityRequest: MessageFns<ModelActivityRequest> = {
12514
+ encode(message: ModelActivityRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
12515
+ if (message.organizationId !== "") {
12516
+ writer.uint32(10).string(message.organizationId);
12505
12517
  }
12506
- if (message.minAge !== undefined) {
12507
- Duration.encode(message.minAge, writer.uint32(50).fork()).join();
12518
+ if (message.projectId !== "") {
12519
+ writer.uint32(18).string(message.projectId);
12508
12520
  }
12509
- if (message.activeAfter !== undefined) {
12510
- Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(58).fork()).join();
12521
+ for (const v of message.groups) {
12522
+ ModelActivityGroup.encode(v!, writer.uint32(26).fork()).join();
12511
12523
  }
12512
- if (message.activeBefore !== undefined) {
12513
- Timestamp.encode(toTimestamp(message.activeBefore), writer.uint32(66).fork()).join();
12524
+ if (message.startTime !== undefined) {
12525
+ Timestamp.encode(toTimestamp(message.startTime), writer.uint32(34).fork()).join();
12514
12526
  }
12515
- if (message.abandonedHorizon !== undefined) {
12516
- Duration.encode(message.abandonedHorizon, writer.uint32(74).fork()).join();
12527
+ if (message.endTime !== undefined) {
12528
+ Timestamp.encode(toTimestamp(message.endTime), writer.uint32(42).fork()).join();
12517
12529
  }
12518
12530
  return writer;
12519
12531
  },
12520
12532
 
12521
- decode(input: BinaryReader | Uint8Array, length?: number): AIFileFilter {
12533
+ decode(input: BinaryReader | Uint8Array, length?: number): ModelActivityRequest {
12522
12534
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
12523
12535
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
12524
12536
  if (previousRecursionDepth >= 100) {
@@ -12527,7 +12539,7 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
12527
12539
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
12528
12540
  try {
12529
12541
  const end = length === undefined ? reader.len : reader.pos + length;
12530
- const message = createBaseAIFileFilter();
12542
+ const message = createBaseModelActivityRequest();
12531
12543
  while (reader.pos < end) {
12532
12544
  const tag = reader.uint32();
12533
12545
  switch (tag >>> 3) {
@@ -12536,7 +12548,7 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
12536
12548
  break;
12537
12549
  }
12538
12550
 
12539
- message.repositoryKey.push(reader.string());
12551
+ message.organizationId = reader.string();
12540
12552
  continue;
12541
12553
  }
12542
12554
  case 2: {
@@ -12544,83 +12556,31 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
12544
12556
  break;
12545
12557
  }
12546
12558
 
12547
- message.ref.push(reader.string());
12559
+ message.projectId = reader.string();
12548
12560
  continue;
12549
12561
  }
12550
12562
  case 3: {
12551
- if (tag === 24) {
12552
- message.state.push(reader.int32() as any);
12553
-
12554
- continue;
12555
- }
12556
-
12557
- if (tag === 26) {
12558
- const end2 = reader.uint32() + reader.pos;
12559
- while (reader.pos < end2) {
12560
- message.state.push(reader.int32() as any);
12561
- }
12562
-
12563
- continue;
12564
- }
12565
-
12566
- break;
12567
- }
12568
- case 4: {
12569
- if (tag === 32) {
12570
- message.tier.push(reader.int32() as any);
12571
-
12572
- continue;
12573
- }
12574
-
12575
- if (tag === 34) {
12576
- const end2 = reader.uint32() + reader.pos;
12577
- while (reader.pos < end2) {
12578
- message.tier.push(reader.int32() as any);
12579
- }
12580
-
12581
- continue;
12582
- }
12583
-
12584
- break;
12585
- }
12586
- case 5: {
12587
- if (tag !== 42) {
12588
- break;
12589
- }
12590
-
12591
- message.sessionId.push(reader.string());
12592
- continue;
12593
- }
12594
- case 6: {
12595
- if (tag !== 50) {
12596
- break;
12597
- }
12598
-
12599
- message.minAge = Duration.decode(reader, reader.uint32());
12600
- continue;
12601
- }
12602
- case 7: {
12603
- if (tag !== 58) {
12563
+ if (tag !== 26) {
12604
12564
  break;
12605
12565
  }
12606
12566
 
12607
- message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12567
+ message.groups.push(ModelActivityGroup.decode(reader, reader.uint32()));
12608
12568
  continue;
12609
12569
  }
12610
- case 8: {
12611
- if (tag !== 66) {
12570
+ case 4: {
12571
+ if (tag !== 34) {
12612
12572
  break;
12613
12573
  }
12614
12574
 
12615
- message.activeBefore = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12575
+ message.startTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12616
12576
  continue;
12617
12577
  }
12618
- case 9: {
12619
- if (tag !== 74) {
12578
+ case 5: {
12579
+ if (tag !== 42) {
12620
12580
  break;
12621
12581
  }
12622
12582
 
12623
- message.abandonedHorizon = Duration.decode(reader, reader.uint32());
12583
+ message.endTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12624
12584
  continue;
12625
12585
  }
12626
12586
  }
@@ -12635,68 +12595,1200 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
12635
12595
  }
12636
12596
  },
12637
12597
 
12638
- fromJSON(object: any): AIFileFilter {
12598
+ fromJSON(object: any): ModelActivityRequest {
12639
12599
  return {
12640
- repositoryKey: globalThis.Array.isArray(object?.repositoryKey)
12641
- ? object.repositoryKey.map((e: any) => globalThis.String(e))
12642
- : globalThis.Array.isArray(object?.repository_key)
12643
- ? object.repository_key.map((e: any) => globalThis.String(e))
12644
- : [],
12645
- ref: globalThis.Array.isArray(object?.ref) ? object.ref.map((e: any) => globalThis.String(e)) : [],
12646
- state: globalThis.Array.isArray(object?.state) ? object.state.map((e: any) => aIFileLifecycleFromJSON(e)) : [],
12647
- tier: globalThis.Array.isArray(object?.tier) ? object.tier.map((e: any) => aIFileTierFromJSON(e)) : [],
12648
- sessionId: globalThis.Array.isArray(object?.sessionId)
12649
- ? object.sessionId.map((e: any) => globalThis.String(e))
12650
- : globalThis.Array.isArray(object?.session_id)
12651
- ? object.session_id.map((e: any) => globalThis.String(e))
12600
+ organizationId: isSet(object.organizationId)
12601
+ ? globalThis.String(object.organizationId)
12602
+ : isSet(object.organization_id)
12603
+ ? globalThis.String(object.organization_id)
12604
+ : "",
12605
+ projectId: isSet(object.projectId)
12606
+ ? globalThis.String(object.projectId)
12607
+ : isSet(object.project_id)
12608
+ ? globalThis.String(object.project_id)
12609
+ : "",
12610
+ groups: globalThis.Array.isArray(object?.groups)
12611
+ ? object.groups.map((e: any) => ModelActivityGroup.fromJSON(e))
12652
12612
  : [],
12653
- minAge: isSet(object.minAge)
12654
- ? Duration.fromJSON(object.minAge)
12655
- : isSet(object.min_age)
12656
- ? Duration.fromJSON(object.min_age)
12657
- : undefined,
12658
- activeAfter: isSet(object.activeAfter)
12659
- ? fromJsonTimestamp(object.activeAfter)
12660
- : isSet(object.active_after)
12661
- ? fromJsonTimestamp(object.active_after)
12662
- : undefined,
12663
- activeBefore: isSet(object.activeBefore)
12664
- ? fromJsonTimestamp(object.activeBefore)
12665
- : isSet(object.active_before)
12666
- ? fromJsonTimestamp(object.active_before)
12613
+ startTime: isSet(object.startTime)
12614
+ ? fromJsonTimestamp(object.startTime)
12615
+ : isSet(object.start_time)
12616
+ ? fromJsonTimestamp(object.start_time)
12667
12617
  : undefined,
12668
- abandonedHorizon: isSet(object.abandonedHorizon)
12669
- ? Duration.fromJSON(object.abandonedHorizon)
12670
- : isSet(object.abandoned_horizon)
12671
- ? Duration.fromJSON(object.abandoned_horizon)
12618
+ endTime: isSet(object.endTime)
12619
+ ? fromJsonTimestamp(object.endTime)
12620
+ : isSet(object.end_time)
12621
+ ? fromJsonTimestamp(object.end_time)
12672
12622
  : undefined,
12673
12623
  };
12674
12624
  },
12675
12625
 
12676
- toJSON(message: AIFileFilter): unknown {
12626
+ toJSON(message: ModelActivityRequest): unknown {
12677
12627
  const obj: any = {};
12678
- if (message.repositoryKey?.length) {
12679
- obj.repositoryKey = message.repositoryKey;
12680
- }
12681
- if (message.ref?.length) {
12682
- obj.ref = message.ref;
12683
- }
12684
- if (message.state?.length) {
12685
- obj.state = message.state.map((e) => aIFileLifecycleToJSON(e));
12628
+ if (message.organizationId !== "") {
12629
+ obj.organizationId = message.organizationId;
12686
12630
  }
12687
- if (message.tier?.length) {
12688
- obj.tier = message.tier.map((e) => aIFileTierToJSON(e));
12631
+ if (message.projectId !== "") {
12632
+ obj.projectId = message.projectId;
12689
12633
  }
12690
- if (message.sessionId?.length) {
12691
- obj.sessionId = message.sessionId;
12634
+ if (message.groups?.length) {
12635
+ obj.groups = message.groups.map((e) => ModelActivityGroup.toJSON(e));
12692
12636
  }
12693
- if (message.minAge !== undefined) {
12694
- obj.minAge = Duration.toJSON(message.minAge);
12637
+ if (message.startTime !== undefined) {
12638
+ obj.startTime = message.startTime.toISOString();
12695
12639
  }
12696
- if (message.activeAfter !== undefined) {
12697
- obj.activeAfter = message.activeAfter.toISOString();
12640
+ if (message.endTime !== undefined) {
12641
+ obj.endTime = message.endTime.toISOString();
12698
12642
  }
12699
- if (message.activeBefore !== undefined) {
12643
+ return obj;
12644
+ },
12645
+
12646
+ create<I extends Exact<DeepPartial<ModelActivityRequest>, I>>(base?: I): ModelActivityRequest {
12647
+ return ModelActivityRequest.fromPartial(base ?? ({} as any));
12648
+ },
12649
+ fromPartial<I extends Exact<DeepPartial<ModelActivityRequest>, I>>(object: I): ModelActivityRequest {
12650
+ const message = createBaseModelActivityRequest();
12651
+ message.organizationId = object.organizationId ?? "";
12652
+ message.projectId = object.projectId ?? "";
12653
+ message.groups = object.groups?.map((e) => ModelActivityGroup.fromPartial(e)) || [];
12654
+ message.startTime = object.startTime ?? undefined;
12655
+ message.endTime = object.endTime ?? undefined;
12656
+ return message;
12657
+ },
12658
+ };
12659
+
12660
+ function createBaseModelActivityGroup(): ModelActivityGroup {
12661
+ return { key: "", modelNames: [] };
12662
+ }
12663
+
12664
+ export const ModelActivityGroup: MessageFns<ModelActivityGroup> = {
12665
+ encode(message: ModelActivityGroup, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
12666
+ if (message.key !== "") {
12667
+ writer.uint32(10).string(message.key);
12668
+ }
12669
+ for (const v of message.modelNames) {
12670
+ writer.uint32(18).string(v!);
12671
+ }
12672
+ return writer;
12673
+ },
12674
+
12675
+ decode(input: BinaryReader | Uint8Array, length?: number): ModelActivityGroup {
12676
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
12677
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
12678
+ if (previousRecursionDepth >= 100) {
12679
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
12680
+ }
12681
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
12682
+ try {
12683
+ const end = length === undefined ? reader.len : reader.pos + length;
12684
+ const message = createBaseModelActivityGroup();
12685
+ while (reader.pos < end) {
12686
+ const tag = reader.uint32();
12687
+ switch (tag >>> 3) {
12688
+ case 1: {
12689
+ if (tag !== 10) {
12690
+ break;
12691
+ }
12692
+
12693
+ message.key = reader.string();
12694
+ continue;
12695
+ }
12696
+ case 2: {
12697
+ if (tag !== 18) {
12698
+ break;
12699
+ }
12700
+
12701
+ message.modelNames.push(reader.string());
12702
+ continue;
12703
+ }
12704
+ }
12705
+ if ((tag & 7) === 4 || tag === 0) {
12706
+ break;
12707
+ }
12708
+ reader.skip(tag & 7);
12709
+ }
12710
+ return message;
12711
+ } finally {
12712
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
12713
+ }
12714
+ },
12715
+
12716
+ fromJSON(object: any): ModelActivityGroup {
12717
+ return {
12718
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
12719
+ modelNames: globalThis.Array.isArray(object?.modelNames)
12720
+ ? object.modelNames.map((e: any) => globalThis.String(e))
12721
+ : globalThis.Array.isArray(object?.model_names)
12722
+ ? object.model_names.map((e: any) => globalThis.String(e))
12723
+ : [],
12724
+ };
12725
+ },
12726
+
12727
+ toJSON(message: ModelActivityGroup): unknown {
12728
+ const obj: any = {};
12729
+ if (message.key !== "") {
12730
+ obj.key = message.key;
12731
+ }
12732
+ if (message.modelNames?.length) {
12733
+ obj.modelNames = message.modelNames;
12734
+ }
12735
+ return obj;
12736
+ },
12737
+
12738
+ create<I extends Exact<DeepPartial<ModelActivityGroup>, I>>(base?: I): ModelActivityGroup {
12739
+ return ModelActivityGroup.fromPartial(base ?? ({} as any));
12740
+ },
12741
+ fromPartial<I extends Exact<DeepPartial<ModelActivityGroup>, I>>(object: I): ModelActivityGroup {
12742
+ const message = createBaseModelActivityGroup();
12743
+ message.key = object.key ?? "";
12744
+ message.modelNames = object.modelNames?.map((e) => e) || [];
12745
+ return message;
12746
+ },
12747
+ };
12748
+
12749
+ function createBaseModelActivityResponse(): ModelActivityResponse {
12750
+ return { status: undefined, models: [], windowStart: undefined, windowEnd: undefined };
12751
+ }
12752
+
12753
+ export const ModelActivityResponse: MessageFns<ModelActivityResponse> = {
12754
+ encode(message: ModelActivityResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
12755
+ if (message.status !== undefined) {
12756
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
12757
+ }
12758
+ for (const v of message.models) {
12759
+ ModelActivity.encode(v!, writer.uint32(18).fork()).join();
12760
+ }
12761
+ if (message.windowStart !== undefined) {
12762
+ Timestamp.encode(toTimestamp(message.windowStart), writer.uint32(26).fork()).join();
12763
+ }
12764
+ if (message.windowEnd !== undefined) {
12765
+ Timestamp.encode(toTimestamp(message.windowEnd), writer.uint32(34).fork()).join();
12766
+ }
12767
+ return writer;
12768
+ },
12769
+
12770
+ decode(input: BinaryReader | Uint8Array, length?: number): ModelActivityResponse {
12771
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
12772
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
12773
+ if (previousRecursionDepth >= 100) {
12774
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
12775
+ }
12776
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
12777
+ try {
12778
+ const end = length === undefined ? reader.len : reader.pos + length;
12779
+ const message = createBaseModelActivityResponse();
12780
+ while (reader.pos < end) {
12781
+ const tag = reader.uint32();
12782
+ switch (tag >>> 3) {
12783
+ case 1: {
12784
+ if (tag !== 10) {
12785
+ break;
12786
+ }
12787
+
12788
+ message.status = ResponseStatus.decode(reader, reader.uint32());
12789
+ continue;
12790
+ }
12791
+ case 2: {
12792
+ if (tag !== 18) {
12793
+ break;
12794
+ }
12795
+
12796
+ message.models.push(ModelActivity.decode(reader, reader.uint32()));
12797
+ continue;
12798
+ }
12799
+ case 3: {
12800
+ if (tag !== 26) {
12801
+ break;
12802
+ }
12803
+
12804
+ message.windowStart = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12805
+ continue;
12806
+ }
12807
+ case 4: {
12808
+ if (tag !== 34) {
12809
+ break;
12810
+ }
12811
+
12812
+ message.windowEnd = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
12813
+ continue;
12814
+ }
12815
+ }
12816
+ if ((tag & 7) === 4 || tag === 0) {
12817
+ break;
12818
+ }
12819
+ reader.skip(tag & 7);
12820
+ }
12821
+ return message;
12822
+ } finally {
12823
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
12824
+ }
12825
+ },
12826
+
12827
+ fromJSON(object: any): ModelActivityResponse {
12828
+ return {
12829
+ status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
12830
+ models: globalThis.Array.isArray(object?.models) ? object.models.map((e: any) => ModelActivity.fromJSON(e)) : [],
12831
+ windowStart: isSet(object.windowStart)
12832
+ ? fromJsonTimestamp(object.windowStart)
12833
+ : isSet(object.window_start)
12834
+ ? fromJsonTimestamp(object.window_start)
12835
+ : undefined,
12836
+ windowEnd: isSet(object.windowEnd)
12837
+ ? fromJsonTimestamp(object.windowEnd)
12838
+ : isSet(object.window_end)
12839
+ ? fromJsonTimestamp(object.window_end)
12840
+ : undefined,
12841
+ };
12842
+ },
12843
+
12844
+ toJSON(message: ModelActivityResponse): unknown {
12845
+ const obj: any = {};
12846
+ if (message.status !== undefined) {
12847
+ obj.status = ResponseStatus.toJSON(message.status);
12848
+ }
12849
+ if (message.models?.length) {
12850
+ obj.models = message.models.map((e) => ModelActivity.toJSON(e));
12851
+ }
12852
+ if (message.windowStart !== undefined) {
12853
+ obj.windowStart = message.windowStart.toISOString();
12854
+ }
12855
+ if (message.windowEnd !== undefined) {
12856
+ obj.windowEnd = message.windowEnd.toISOString();
12857
+ }
12858
+ return obj;
12859
+ },
12860
+
12861
+ create<I extends Exact<DeepPartial<ModelActivityResponse>, I>>(base?: I): ModelActivityResponse {
12862
+ return ModelActivityResponse.fromPartial(base ?? ({} as any));
12863
+ },
12864
+ fromPartial<I extends Exact<DeepPartial<ModelActivityResponse>, I>>(object: I): ModelActivityResponse {
12865
+ const message = createBaseModelActivityResponse();
12866
+ message.status = (object.status !== undefined && object.status !== null)
12867
+ ? ResponseStatus.fromPartial(object.status)
12868
+ : undefined;
12869
+ message.models = object.models?.map((e) => ModelActivity.fromPartial(e)) || [];
12870
+ message.windowStart = object.windowStart ?? undefined;
12871
+ message.windowEnd = object.windowEnd ?? undefined;
12872
+ return message;
12873
+ },
12874
+ };
12875
+
12876
+ function createBaseModelActivity(): ModelActivity {
12877
+ return {
12878
+ key: "",
12879
+ modelCalls: 0,
12880
+ failedCalls: 0,
12881
+ inputTokens: 0,
12882
+ outputTokens: 0,
12883
+ cacheReadTokens: 0,
12884
+ cacheWriteTokens: 0,
12885
+ costUsd: 0,
12886
+ subscriptionCostUsd: 0,
12887
+ sessions: 0,
12888
+ toolCalls: 0,
12889
+ compactions: 0,
12890
+ subagentRuns: 0,
12891
+ ttftMsSum: 0,
12892
+ ttftCalls: 0,
12893
+ providers: [],
12894
+ principals: [],
12895
+ };
12896
+ }
12897
+
12898
+ export const ModelActivity: MessageFns<ModelActivity> = {
12899
+ encode(message: ModelActivity, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
12900
+ if (message.key !== "") {
12901
+ writer.uint32(10).string(message.key);
12902
+ }
12903
+ if (message.modelCalls !== 0) {
12904
+ writer.uint32(16).uint64(message.modelCalls);
12905
+ }
12906
+ if (message.failedCalls !== 0) {
12907
+ writer.uint32(24).uint64(message.failedCalls);
12908
+ }
12909
+ if (message.inputTokens !== 0) {
12910
+ writer.uint32(32).uint64(message.inputTokens);
12911
+ }
12912
+ if (message.outputTokens !== 0) {
12913
+ writer.uint32(40).uint64(message.outputTokens);
12914
+ }
12915
+ if (message.cacheReadTokens !== 0) {
12916
+ writer.uint32(48).uint64(message.cacheReadTokens);
12917
+ }
12918
+ if (message.cacheWriteTokens !== 0) {
12919
+ writer.uint32(56).uint64(message.cacheWriteTokens);
12920
+ }
12921
+ if (message.costUsd !== 0) {
12922
+ writer.uint32(65).double(message.costUsd);
12923
+ }
12924
+ if (message.subscriptionCostUsd !== 0) {
12925
+ writer.uint32(73).double(message.subscriptionCostUsd);
12926
+ }
12927
+ if (message.sessions !== 0) {
12928
+ writer.uint32(80).uint64(message.sessions);
12929
+ }
12930
+ if (message.toolCalls !== 0) {
12931
+ writer.uint32(88).uint64(message.toolCalls);
12932
+ }
12933
+ if (message.compactions !== 0) {
12934
+ writer.uint32(96).uint64(message.compactions);
12935
+ }
12936
+ if (message.subagentRuns !== 0) {
12937
+ writer.uint32(104).uint64(message.subagentRuns);
12938
+ }
12939
+ if (message.ttftMsSum !== 0) {
12940
+ writer.uint32(112).uint64(message.ttftMsSum);
12941
+ }
12942
+ if (message.ttftCalls !== 0) {
12943
+ writer.uint32(120).uint64(message.ttftCalls);
12944
+ }
12945
+ for (const v of message.providers) {
12946
+ writer.uint32(130).string(v!);
12947
+ }
12948
+ for (const v of message.principals) {
12949
+ ModelActivityPrincipal.encode(v!, writer.uint32(138).fork()).join();
12950
+ }
12951
+ return writer;
12952
+ },
12953
+
12954
+ decode(input: BinaryReader | Uint8Array, length?: number): ModelActivity {
12955
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
12956
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
12957
+ if (previousRecursionDepth >= 100) {
12958
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
12959
+ }
12960
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
12961
+ try {
12962
+ const end = length === undefined ? reader.len : reader.pos + length;
12963
+ const message = createBaseModelActivity();
12964
+ while (reader.pos < end) {
12965
+ const tag = reader.uint32();
12966
+ switch (tag >>> 3) {
12967
+ case 1: {
12968
+ if (tag !== 10) {
12969
+ break;
12970
+ }
12971
+
12972
+ message.key = reader.string();
12973
+ continue;
12974
+ }
12975
+ case 2: {
12976
+ if (tag !== 16) {
12977
+ break;
12978
+ }
12979
+
12980
+ message.modelCalls = longToNumber(reader.uint64());
12981
+ continue;
12982
+ }
12983
+ case 3: {
12984
+ if (tag !== 24) {
12985
+ break;
12986
+ }
12987
+
12988
+ message.failedCalls = longToNumber(reader.uint64());
12989
+ continue;
12990
+ }
12991
+ case 4: {
12992
+ if (tag !== 32) {
12993
+ break;
12994
+ }
12995
+
12996
+ message.inputTokens = longToNumber(reader.uint64());
12997
+ continue;
12998
+ }
12999
+ case 5: {
13000
+ if (tag !== 40) {
13001
+ break;
13002
+ }
13003
+
13004
+ message.outputTokens = longToNumber(reader.uint64());
13005
+ continue;
13006
+ }
13007
+ case 6: {
13008
+ if (tag !== 48) {
13009
+ break;
13010
+ }
13011
+
13012
+ message.cacheReadTokens = longToNumber(reader.uint64());
13013
+ continue;
13014
+ }
13015
+ case 7: {
13016
+ if (tag !== 56) {
13017
+ break;
13018
+ }
13019
+
13020
+ message.cacheWriteTokens = longToNumber(reader.uint64());
13021
+ continue;
13022
+ }
13023
+ case 8: {
13024
+ if (tag !== 65) {
13025
+ break;
13026
+ }
13027
+
13028
+ message.costUsd = reader.double();
13029
+ continue;
13030
+ }
13031
+ case 9: {
13032
+ if (tag !== 73) {
13033
+ break;
13034
+ }
13035
+
13036
+ message.subscriptionCostUsd = reader.double();
13037
+ continue;
13038
+ }
13039
+ case 10: {
13040
+ if (tag !== 80) {
13041
+ break;
13042
+ }
13043
+
13044
+ message.sessions = longToNumber(reader.uint64());
13045
+ continue;
13046
+ }
13047
+ case 11: {
13048
+ if (tag !== 88) {
13049
+ break;
13050
+ }
13051
+
13052
+ message.toolCalls = longToNumber(reader.uint64());
13053
+ continue;
13054
+ }
13055
+ case 12: {
13056
+ if (tag !== 96) {
13057
+ break;
13058
+ }
13059
+
13060
+ message.compactions = longToNumber(reader.uint64());
13061
+ continue;
13062
+ }
13063
+ case 13: {
13064
+ if (tag !== 104) {
13065
+ break;
13066
+ }
13067
+
13068
+ message.subagentRuns = longToNumber(reader.uint64());
13069
+ continue;
13070
+ }
13071
+ case 14: {
13072
+ if (tag !== 112) {
13073
+ break;
13074
+ }
13075
+
13076
+ message.ttftMsSum = longToNumber(reader.uint64());
13077
+ continue;
13078
+ }
13079
+ case 15: {
13080
+ if (tag !== 120) {
13081
+ break;
13082
+ }
13083
+
13084
+ message.ttftCalls = longToNumber(reader.uint64());
13085
+ continue;
13086
+ }
13087
+ case 16: {
13088
+ if (tag !== 130) {
13089
+ break;
13090
+ }
13091
+
13092
+ message.providers.push(reader.string());
13093
+ continue;
13094
+ }
13095
+ case 17: {
13096
+ if (tag !== 138) {
13097
+ break;
13098
+ }
13099
+
13100
+ message.principals.push(ModelActivityPrincipal.decode(reader, reader.uint32()));
13101
+ continue;
13102
+ }
13103
+ }
13104
+ if ((tag & 7) === 4 || tag === 0) {
13105
+ break;
13106
+ }
13107
+ reader.skip(tag & 7);
13108
+ }
13109
+ return message;
13110
+ } finally {
13111
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
13112
+ }
13113
+ },
13114
+
13115
+ fromJSON(object: any): ModelActivity {
13116
+ return {
13117
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
13118
+ modelCalls: isSet(object.modelCalls)
13119
+ ? globalThis.Number(object.modelCalls)
13120
+ : isSet(object.model_calls)
13121
+ ? globalThis.Number(object.model_calls)
13122
+ : 0,
13123
+ failedCalls: isSet(object.failedCalls)
13124
+ ? globalThis.Number(object.failedCalls)
13125
+ : isSet(object.failed_calls)
13126
+ ? globalThis.Number(object.failed_calls)
13127
+ : 0,
13128
+ inputTokens: isSet(object.inputTokens)
13129
+ ? globalThis.Number(object.inputTokens)
13130
+ : isSet(object.input_tokens)
13131
+ ? globalThis.Number(object.input_tokens)
13132
+ : 0,
13133
+ outputTokens: isSet(object.outputTokens)
13134
+ ? globalThis.Number(object.outputTokens)
13135
+ : isSet(object.output_tokens)
13136
+ ? globalThis.Number(object.output_tokens)
13137
+ : 0,
13138
+ cacheReadTokens: isSet(object.cacheReadTokens)
13139
+ ? globalThis.Number(object.cacheReadTokens)
13140
+ : isSet(object.cache_read_tokens)
13141
+ ? globalThis.Number(object.cache_read_tokens)
13142
+ : 0,
13143
+ cacheWriteTokens: isSet(object.cacheWriteTokens)
13144
+ ? globalThis.Number(object.cacheWriteTokens)
13145
+ : isSet(object.cache_write_tokens)
13146
+ ? globalThis.Number(object.cache_write_tokens)
13147
+ : 0,
13148
+ costUsd: isSet(object.costUsd)
13149
+ ? globalThis.Number(object.costUsd)
13150
+ : isSet(object.cost_usd)
13151
+ ? globalThis.Number(object.cost_usd)
13152
+ : 0,
13153
+ subscriptionCostUsd: isSet(object.subscriptionCostUsd)
13154
+ ? globalThis.Number(object.subscriptionCostUsd)
13155
+ : isSet(object.subscription_cost_usd)
13156
+ ? globalThis.Number(object.subscription_cost_usd)
13157
+ : 0,
13158
+ sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
13159
+ toolCalls: isSet(object.toolCalls)
13160
+ ? globalThis.Number(object.toolCalls)
13161
+ : isSet(object.tool_calls)
13162
+ ? globalThis.Number(object.tool_calls)
13163
+ : 0,
13164
+ compactions: isSet(object.compactions) ? globalThis.Number(object.compactions) : 0,
13165
+ subagentRuns: isSet(object.subagentRuns)
13166
+ ? globalThis.Number(object.subagentRuns)
13167
+ : isSet(object.subagent_runs)
13168
+ ? globalThis.Number(object.subagent_runs)
13169
+ : 0,
13170
+ ttftMsSum: isSet(object.ttftMsSum)
13171
+ ? globalThis.Number(object.ttftMsSum)
13172
+ : isSet(object.ttft_ms_sum)
13173
+ ? globalThis.Number(object.ttft_ms_sum)
13174
+ : 0,
13175
+ ttftCalls: isSet(object.ttftCalls)
13176
+ ? globalThis.Number(object.ttftCalls)
13177
+ : isSet(object.ttft_calls)
13178
+ ? globalThis.Number(object.ttft_calls)
13179
+ : 0,
13180
+ providers: globalThis.Array.isArray(object?.providers)
13181
+ ? object.providers.map((e: any) => globalThis.String(e))
13182
+ : [],
13183
+ principals: globalThis.Array.isArray(object?.principals)
13184
+ ? object.principals.map((e: any) => ModelActivityPrincipal.fromJSON(e))
13185
+ : [],
13186
+ };
13187
+ },
13188
+
13189
+ toJSON(message: ModelActivity): unknown {
13190
+ const obj: any = {};
13191
+ if (message.key !== "") {
13192
+ obj.key = message.key;
13193
+ }
13194
+ if (message.modelCalls !== 0) {
13195
+ obj.modelCalls = Math.round(message.modelCalls);
13196
+ }
13197
+ if (message.failedCalls !== 0) {
13198
+ obj.failedCalls = Math.round(message.failedCalls);
13199
+ }
13200
+ if (message.inputTokens !== 0) {
13201
+ obj.inputTokens = Math.round(message.inputTokens);
13202
+ }
13203
+ if (message.outputTokens !== 0) {
13204
+ obj.outputTokens = Math.round(message.outputTokens);
13205
+ }
13206
+ if (message.cacheReadTokens !== 0) {
13207
+ obj.cacheReadTokens = Math.round(message.cacheReadTokens);
13208
+ }
13209
+ if (message.cacheWriteTokens !== 0) {
13210
+ obj.cacheWriteTokens = Math.round(message.cacheWriteTokens);
13211
+ }
13212
+ if (message.costUsd !== 0) {
13213
+ obj.costUsd = message.costUsd;
13214
+ }
13215
+ if (message.subscriptionCostUsd !== 0) {
13216
+ obj.subscriptionCostUsd = message.subscriptionCostUsd;
13217
+ }
13218
+ if (message.sessions !== 0) {
13219
+ obj.sessions = Math.round(message.sessions);
13220
+ }
13221
+ if (message.toolCalls !== 0) {
13222
+ obj.toolCalls = Math.round(message.toolCalls);
13223
+ }
13224
+ if (message.compactions !== 0) {
13225
+ obj.compactions = Math.round(message.compactions);
13226
+ }
13227
+ if (message.subagentRuns !== 0) {
13228
+ obj.subagentRuns = Math.round(message.subagentRuns);
13229
+ }
13230
+ if (message.ttftMsSum !== 0) {
13231
+ obj.ttftMsSum = Math.round(message.ttftMsSum);
13232
+ }
13233
+ if (message.ttftCalls !== 0) {
13234
+ obj.ttftCalls = Math.round(message.ttftCalls);
13235
+ }
13236
+ if (message.providers?.length) {
13237
+ obj.providers = message.providers;
13238
+ }
13239
+ if (message.principals?.length) {
13240
+ obj.principals = message.principals.map((e) => ModelActivityPrincipal.toJSON(e));
13241
+ }
13242
+ return obj;
13243
+ },
13244
+
13245
+ create<I extends Exact<DeepPartial<ModelActivity>, I>>(base?: I): ModelActivity {
13246
+ return ModelActivity.fromPartial(base ?? ({} as any));
13247
+ },
13248
+ fromPartial<I extends Exact<DeepPartial<ModelActivity>, I>>(object: I): ModelActivity {
13249
+ const message = createBaseModelActivity();
13250
+ message.key = object.key ?? "";
13251
+ message.modelCalls = object.modelCalls ?? 0;
13252
+ message.failedCalls = object.failedCalls ?? 0;
13253
+ message.inputTokens = object.inputTokens ?? 0;
13254
+ message.outputTokens = object.outputTokens ?? 0;
13255
+ message.cacheReadTokens = object.cacheReadTokens ?? 0;
13256
+ message.cacheWriteTokens = object.cacheWriteTokens ?? 0;
13257
+ message.costUsd = object.costUsd ?? 0;
13258
+ message.subscriptionCostUsd = object.subscriptionCostUsd ?? 0;
13259
+ message.sessions = object.sessions ?? 0;
13260
+ message.toolCalls = object.toolCalls ?? 0;
13261
+ message.compactions = object.compactions ?? 0;
13262
+ message.subagentRuns = object.subagentRuns ?? 0;
13263
+ message.ttftMsSum = object.ttftMsSum ?? 0;
13264
+ message.ttftCalls = object.ttftCalls ?? 0;
13265
+ message.providers = object.providers?.map((e) => e) || [];
13266
+ message.principals = object.principals?.map((e) => ModelActivityPrincipal.fromPartial(e)) || [];
13267
+ return message;
13268
+ },
13269
+ };
13270
+
13271
+ function createBaseModelActivityPrincipal(): ModelActivityPrincipal {
13272
+ return { kind: 0, id: "", sourceSystem: "", modelCalls: 0, sessions: 0, inputTokens: 0, outputTokens: 0, costUsd: 0 };
13273
+ }
13274
+
13275
+ export const ModelActivityPrincipal: MessageFns<ModelActivityPrincipal> = {
13276
+ encode(message: ModelActivityPrincipal, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13277
+ if (message.kind !== 0) {
13278
+ writer.uint32(8).int32(message.kind);
13279
+ }
13280
+ if (message.id !== "") {
13281
+ writer.uint32(18).string(message.id);
13282
+ }
13283
+ if (message.sourceSystem !== "") {
13284
+ writer.uint32(26).string(message.sourceSystem);
13285
+ }
13286
+ if (message.modelCalls !== 0) {
13287
+ writer.uint32(32).uint64(message.modelCalls);
13288
+ }
13289
+ if (message.sessions !== 0) {
13290
+ writer.uint32(40).uint64(message.sessions);
13291
+ }
13292
+ if (message.inputTokens !== 0) {
13293
+ writer.uint32(48).uint64(message.inputTokens);
13294
+ }
13295
+ if (message.outputTokens !== 0) {
13296
+ writer.uint32(56).uint64(message.outputTokens);
13297
+ }
13298
+ if (message.costUsd !== 0) {
13299
+ writer.uint32(65).double(message.costUsd);
13300
+ }
13301
+ return writer;
13302
+ },
13303
+
13304
+ decode(input: BinaryReader | Uint8Array, length?: number): ModelActivityPrincipal {
13305
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
13306
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
13307
+ if (previousRecursionDepth >= 100) {
13308
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
13309
+ }
13310
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
13311
+ try {
13312
+ const end = length === undefined ? reader.len : reader.pos + length;
13313
+ const message = createBaseModelActivityPrincipal();
13314
+ while (reader.pos < end) {
13315
+ const tag = reader.uint32();
13316
+ switch (tag >>> 3) {
13317
+ case 1: {
13318
+ if (tag !== 8) {
13319
+ break;
13320
+ }
13321
+
13322
+ message.kind = reader.int32() as any;
13323
+ continue;
13324
+ }
13325
+ case 2: {
13326
+ if (tag !== 18) {
13327
+ break;
13328
+ }
13329
+
13330
+ message.id = reader.string();
13331
+ continue;
13332
+ }
13333
+ case 3: {
13334
+ if (tag !== 26) {
13335
+ break;
13336
+ }
13337
+
13338
+ message.sourceSystem = reader.string();
13339
+ continue;
13340
+ }
13341
+ case 4: {
13342
+ if (tag !== 32) {
13343
+ break;
13344
+ }
13345
+
13346
+ message.modelCalls = longToNumber(reader.uint64());
13347
+ continue;
13348
+ }
13349
+ case 5: {
13350
+ if (tag !== 40) {
13351
+ break;
13352
+ }
13353
+
13354
+ message.sessions = longToNumber(reader.uint64());
13355
+ continue;
13356
+ }
13357
+ case 6: {
13358
+ if (tag !== 48) {
13359
+ break;
13360
+ }
13361
+
13362
+ message.inputTokens = longToNumber(reader.uint64());
13363
+ continue;
13364
+ }
13365
+ case 7: {
13366
+ if (tag !== 56) {
13367
+ break;
13368
+ }
13369
+
13370
+ message.outputTokens = longToNumber(reader.uint64());
13371
+ continue;
13372
+ }
13373
+ case 8: {
13374
+ if (tag !== 65) {
13375
+ break;
13376
+ }
13377
+
13378
+ message.costUsd = reader.double();
13379
+ continue;
13380
+ }
13381
+ }
13382
+ if ((tag & 7) === 4 || tag === 0) {
13383
+ break;
13384
+ }
13385
+ reader.skip(tag & 7);
13386
+ }
13387
+ return message;
13388
+ } finally {
13389
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
13390
+ }
13391
+ },
13392
+
13393
+ fromJSON(object: any): ModelActivityPrincipal {
13394
+ return {
13395
+ kind: isSet(object.kind) ? aIPrincipalKindFromJSON(object.kind) : 0,
13396
+ id: isSet(object.id) ? globalThis.String(object.id) : "",
13397
+ sourceSystem: isSet(object.sourceSystem)
13398
+ ? globalThis.String(object.sourceSystem)
13399
+ : isSet(object.source_system)
13400
+ ? globalThis.String(object.source_system)
13401
+ : "",
13402
+ modelCalls: isSet(object.modelCalls)
13403
+ ? globalThis.Number(object.modelCalls)
13404
+ : isSet(object.model_calls)
13405
+ ? globalThis.Number(object.model_calls)
13406
+ : 0,
13407
+ sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
13408
+ inputTokens: isSet(object.inputTokens)
13409
+ ? globalThis.Number(object.inputTokens)
13410
+ : isSet(object.input_tokens)
13411
+ ? globalThis.Number(object.input_tokens)
13412
+ : 0,
13413
+ outputTokens: isSet(object.outputTokens)
13414
+ ? globalThis.Number(object.outputTokens)
13415
+ : isSet(object.output_tokens)
13416
+ ? globalThis.Number(object.output_tokens)
13417
+ : 0,
13418
+ costUsd: isSet(object.costUsd)
13419
+ ? globalThis.Number(object.costUsd)
13420
+ : isSet(object.cost_usd)
13421
+ ? globalThis.Number(object.cost_usd)
13422
+ : 0,
13423
+ };
13424
+ },
13425
+
13426
+ toJSON(message: ModelActivityPrincipal): unknown {
13427
+ const obj: any = {};
13428
+ if (message.kind !== 0) {
13429
+ obj.kind = aIPrincipalKindToJSON(message.kind);
13430
+ }
13431
+ if (message.id !== "") {
13432
+ obj.id = message.id;
13433
+ }
13434
+ if (message.sourceSystem !== "") {
13435
+ obj.sourceSystem = message.sourceSystem;
13436
+ }
13437
+ if (message.modelCalls !== 0) {
13438
+ obj.modelCalls = Math.round(message.modelCalls);
13439
+ }
13440
+ if (message.sessions !== 0) {
13441
+ obj.sessions = Math.round(message.sessions);
13442
+ }
13443
+ if (message.inputTokens !== 0) {
13444
+ obj.inputTokens = Math.round(message.inputTokens);
13445
+ }
13446
+ if (message.outputTokens !== 0) {
13447
+ obj.outputTokens = Math.round(message.outputTokens);
13448
+ }
13449
+ if (message.costUsd !== 0) {
13450
+ obj.costUsd = message.costUsd;
13451
+ }
13452
+ return obj;
13453
+ },
13454
+
13455
+ create<I extends Exact<DeepPartial<ModelActivityPrincipal>, I>>(base?: I): ModelActivityPrincipal {
13456
+ return ModelActivityPrincipal.fromPartial(base ?? ({} as any));
13457
+ },
13458
+ fromPartial<I extends Exact<DeepPartial<ModelActivityPrincipal>, I>>(object: I): ModelActivityPrincipal {
13459
+ const message = createBaseModelActivityPrincipal();
13460
+ message.kind = object.kind ?? 0;
13461
+ message.id = object.id ?? "";
13462
+ message.sourceSystem = object.sourceSystem ?? "";
13463
+ message.modelCalls = object.modelCalls ?? 0;
13464
+ message.sessions = object.sessions ?? 0;
13465
+ message.inputTokens = object.inputTokens ?? 0;
13466
+ message.outputTokens = object.outputTokens ?? 0;
13467
+ message.costUsd = object.costUsd ?? 0;
13468
+ return message;
13469
+ },
13470
+ };
13471
+
13472
+ function createBaseAISessionRef(): AISessionRef {
13473
+ return { sourceSystem: "", sessionId: "" };
13474
+ }
13475
+
13476
+ export const AISessionRef: MessageFns<AISessionRef> = {
13477
+ encode(message: AISessionRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13478
+ if (message.sourceSystem !== "") {
13479
+ writer.uint32(10).string(message.sourceSystem);
13480
+ }
13481
+ if (message.sessionId !== "") {
13482
+ writer.uint32(18).string(message.sessionId);
13483
+ }
13484
+ return writer;
13485
+ },
13486
+
13487
+ decode(input: BinaryReader | Uint8Array, length?: number): AISessionRef {
13488
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
13489
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
13490
+ if (previousRecursionDepth >= 100) {
13491
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
13492
+ }
13493
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
13494
+ try {
13495
+ const end = length === undefined ? reader.len : reader.pos + length;
13496
+ const message = createBaseAISessionRef();
13497
+ while (reader.pos < end) {
13498
+ const tag = reader.uint32();
13499
+ switch (tag >>> 3) {
13500
+ case 1: {
13501
+ if (tag !== 10) {
13502
+ break;
13503
+ }
13504
+
13505
+ message.sourceSystem = reader.string();
13506
+ continue;
13507
+ }
13508
+ case 2: {
13509
+ if (tag !== 18) {
13510
+ break;
13511
+ }
13512
+
13513
+ message.sessionId = reader.string();
13514
+ continue;
13515
+ }
13516
+ }
13517
+ if ((tag & 7) === 4 || tag === 0) {
13518
+ break;
13519
+ }
13520
+ reader.skip(tag & 7);
13521
+ }
13522
+ return message;
13523
+ } finally {
13524
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
13525
+ }
13526
+ },
13527
+
13528
+ fromJSON(object: any): AISessionRef {
13529
+ return {
13530
+ sourceSystem: isSet(object.sourceSystem)
13531
+ ? globalThis.String(object.sourceSystem)
13532
+ : isSet(object.source_system)
13533
+ ? globalThis.String(object.source_system)
13534
+ : "",
13535
+ sessionId: isSet(object.sessionId)
13536
+ ? globalThis.String(object.sessionId)
13537
+ : isSet(object.session_id)
13538
+ ? globalThis.String(object.session_id)
13539
+ : "",
13540
+ };
13541
+ },
13542
+
13543
+ toJSON(message: AISessionRef): unknown {
13544
+ const obj: any = {};
13545
+ if (message.sourceSystem !== "") {
13546
+ obj.sourceSystem = message.sourceSystem;
13547
+ }
13548
+ if (message.sessionId !== "") {
13549
+ obj.sessionId = message.sessionId;
13550
+ }
13551
+ return obj;
13552
+ },
13553
+
13554
+ create<I extends Exact<DeepPartial<AISessionRef>, I>>(base?: I): AISessionRef {
13555
+ return AISessionRef.fromPartial(base ?? ({} as any));
13556
+ },
13557
+ fromPartial<I extends Exact<DeepPartial<AISessionRef>, I>>(object: I): AISessionRef {
13558
+ const message = createBaseAISessionRef();
13559
+ message.sourceSystem = object.sourceSystem ?? "";
13560
+ message.sessionId = object.sessionId ?? "";
13561
+ return message;
13562
+ },
13563
+ };
13564
+
13565
+ function createBaseAIFileFilter(): AIFileFilter {
13566
+ return {
13567
+ repositoryKey: [],
13568
+ ref: [],
13569
+ state: [],
13570
+ tier: [],
13571
+ session: [],
13572
+ minAge: undefined,
13573
+ activeAfter: undefined,
13574
+ activeBefore: undefined,
13575
+ abandonedHorizon: undefined,
13576
+ };
13577
+ }
13578
+
13579
+ export const AIFileFilter: MessageFns<AIFileFilter> = {
13580
+ encode(message: AIFileFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
13581
+ for (const v of message.repositoryKey) {
13582
+ writer.uint32(10).string(v!);
13583
+ }
13584
+ for (const v of message.ref) {
13585
+ writer.uint32(18).string(v!);
13586
+ }
13587
+ writer.uint32(26).fork();
13588
+ for (const v of message.state) {
13589
+ writer.int32(v);
13590
+ }
13591
+ writer.join();
13592
+ writer.uint32(34).fork();
13593
+ for (const v of message.tier) {
13594
+ writer.int32(v);
13595
+ }
13596
+ writer.join();
13597
+ for (const v of message.session) {
13598
+ AISessionRef.encode(v!, writer.uint32(42).fork()).join();
13599
+ }
13600
+ if (message.minAge !== undefined) {
13601
+ Duration.encode(message.minAge, writer.uint32(50).fork()).join();
13602
+ }
13603
+ if (message.activeAfter !== undefined) {
13604
+ Timestamp.encode(toTimestamp(message.activeAfter), writer.uint32(58).fork()).join();
13605
+ }
13606
+ if (message.activeBefore !== undefined) {
13607
+ Timestamp.encode(toTimestamp(message.activeBefore), writer.uint32(66).fork()).join();
13608
+ }
13609
+ if (message.abandonedHorizon !== undefined) {
13610
+ Duration.encode(message.abandonedHorizon, writer.uint32(74).fork()).join();
13611
+ }
13612
+ return writer;
13613
+ },
13614
+
13615
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileFilter {
13616
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
13617
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
13618
+ if (previousRecursionDepth >= 100) {
13619
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
13620
+ }
13621
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
13622
+ try {
13623
+ const end = length === undefined ? reader.len : reader.pos + length;
13624
+ const message = createBaseAIFileFilter();
13625
+ while (reader.pos < end) {
13626
+ const tag = reader.uint32();
13627
+ switch (tag >>> 3) {
13628
+ case 1: {
13629
+ if (tag !== 10) {
13630
+ break;
13631
+ }
13632
+
13633
+ message.repositoryKey.push(reader.string());
13634
+ continue;
13635
+ }
13636
+ case 2: {
13637
+ if (tag !== 18) {
13638
+ break;
13639
+ }
13640
+
13641
+ message.ref.push(reader.string());
13642
+ continue;
13643
+ }
13644
+ case 3: {
13645
+ if (tag === 24) {
13646
+ message.state.push(reader.int32() as any);
13647
+
13648
+ continue;
13649
+ }
13650
+
13651
+ if (tag === 26) {
13652
+ const end2 = reader.uint32() + reader.pos;
13653
+ while (reader.pos < end2) {
13654
+ message.state.push(reader.int32() as any);
13655
+ }
13656
+
13657
+ continue;
13658
+ }
13659
+
13660
+ break;
13661
+ }
13662
+ case 4: {
13663
+ if (tag === 32) {
13664
+ message.tier.push(reader.int32() as any);
13665
+
13666
+ continue;
13667
+ }
13668
+
13669
+ if (tag === 34) {
13670
+ const end2 = reader.uint32() + reader.pos;
13671
+ while (reader.pos < end2) {
13672
+ message.tier.push(reader.int32() as any);
13673
+ }
13674
+
13675
+ continue;
13676
+ }
13677
+
13678
+ break;
13679
+ }
13680
+ case 5: {
13681
+ if (tag !== 42) {
13682
+ break;
13683
+ }
13684
+
13685
+ message.session.push(AISessionRef.decode(reader, reader.uint32()));
13686
+ continue;
13687
+ }
13688
+ case 6: {
13689
+ if (tag !== 50) {
13690
+ break;
13691
+ }
13692
+
13693
+ message.minAge = Duration.decode(reader, reader.uint32());
13694
+ continue;
13695
+ }
13696
+ case 7: {
13697
+ if (tag !== 58) {
13698
+ break;
13699
+ }
13700
+
13701
+ message.activeAfter = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
13702
+ continue;
13703
+ }
13704
+ case 8: {
13705
+ if (tag !== 66) {
13706
+ break;
13707
+ }
13708
+
13709
+ message.activeBefore = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
13710
+ continue;
13711
+ }
13712
+ case 9: {
13713
+ if (tag !== 74) {
13714
+ break;
13715
+ }
13716
+
13717
+ message.abandonedHorizon = Duration.decode(reader, reader.uint32());
13718
+ continue;
13719
+ }
13720
+ }
13721
+ if ((tag & 7) === 4 || tag === 0) {
13722
+ break;
13723
+ }
13724
+ reader.skip(tag & 7);
13725
+ }
13726
+ return message;
13727
+ } finally {
13728
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
13729
+ }
13730
+ },
13731
+
13732
+ fromJSON(object: any): AIFileFilter {
13733
+ return {
13734
+ repositoryKey: globalThis.Array.isArray(object?.repositoryKey)
13735
+ ? object.repositoryKey.map((e: any) => globalThis.String(e))
13736
+ : globalThis.Array.isArray(object?.repository_key)
13737
+ ? object.repository_key.map((e: any) => globalThis.String(e))
13738
+ : [],
13739
+ ref: globalThis.Array.isArray(object?.ref) ? object.ref.map((e: any) => globalThis.String(e)) : [],
13740
+ state: globalThis.Array.isArray(object?.state) ? object.state.map((e: any) => aIFileLifecycleFromJSON(e)) : [],
13741
+ tier: globalThis.Array.isArray(object?.tier) ? object.tier.map((e: any) => aIFileTierFromJSON(e)) : [],
13742
+ session: globalThis.Array.isArray(object?.session)
13743
+ ? object.session.map((e: any) => AISessionRef.fromJSON(e))
13744
+ : [],
13745
+ minAge: isSet(object.minAge)
13746
+ ? Duration.fromJSON(object.minAge)
13747
+ : isSet(object.min_age)
13748
+ ? Duration.fromJSON(object.min_age)
13749
+ : undefined,
13750
+ activeAfter: isSet(object.activeAfter)
13751
+ ? fromJsonTimestamp(object.activeAfter)
13752
+ : isSet(object.active_after)
13753
+ ? fromJsonTimestamp(object.active_after)
13754
+ : undefined,
13755
+ activeBefore: isSet(object.activeBefore)
13756
+ ? fromJsonTimestamp(object.activeBefore)
13757
+ : isSet(object.active_before)
13758
+ ? fromJsonTimestamp(object.active_before)
13759
+ : undefined,
13760
+ abandonedHorizon: isSet(object.abandonedHorizon)
13761
+ ? Duration.fromJSON(object.abandonedHorizon)
13762
+ : isSet(object.abandoned_horizon)
13763
+ ? Duration.fromJSON(object.abandoned_horizon)
13764
+ : undefined,
13765
+ };
13766
+ },
13767
+
13768
+ toJSON(message: AIFileFilter): unknown {
13769
+ const obj: any = {};
13770
+ if (message.repositoryKey?.length) {
13771
+ obj.repositoryKey = message.repositoryKey;
13772
+ }
13773
+ if (message.ref?.length) {
13774
+ obj.ref = message.ref;
13775
+ }
13776
+ if (message.state?.length) {
13777
+ obj.state = message.state.map((e) => aIFileLifecycleToJSON(e));
13778
+ }
13779
+ if (message.tier?.length) {
13780
+ obj.tier = message.tier.map((e) => aIFileTierToJSON(e));
13781
+ }
13782
+ if (message.session?.length) {
13783
+ obj.session = message.session.map((e) => AISessionRef.toJSON(e));
13784
+ }
13785
+ if (message.minAge !== undefined) {
13786
+ obj.minAge = Duration.toJSON(message.minAge);
13787
+ }
13788
+ if (message.activeAfter !== undefined) {
13789
+ obj.activeAfter = message.activeAfter.toISOString();
13790
+ }
13791
+ if (message.activeBefore !== undefined) {
12700
13792
  obj.activeBefore = message.activeBefore.toISOString();
12701
13793
  }
12702
13794
  if (message.abandonedHorizon !== undefined) {
@@ -12714,7 +13806,7 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
12714
13806
  message.ref = object.ref?.map((e) => e) || [];
12715
13807
  message.state = object.state?.map((e) => e) || [];
12716
13808
  message.tier = object.tier?.map((e) => e) || [];
12717
- message.sessionId = object.sessionId?.map((e) => e) || [];
13809
+ message.session = object.session?.map((e) => AISessionRef.fromPartial(e)) || [];
12718
13810
  message.minAge = (object.minAge !== undefined && object.minAge !== null)
12719
13811
  ? Duration.fromPartial(object.minAge)
12720
13812
  : undefined;
@@ -13003,7 +14095,7 @@ function createBaseAIFileRow(): AIFileRow {
13003
14095
  discardedAt: undefined,
13004
14096
  discardReason: "",
13005
14097
  editCount: 0,
13006
- sessionId: [],
14098
+ sessions: [],
13007
14099
  unlandedCostUsd: 0,
13008
14100
  unlandedOutputTokens: 0,
13009
14101
  totalCostUsd: 0,
@@ -13062,8 +14154,8 @@ export const AIFileRow: MessageFns<AIFileRow> = {
13062
14154
  if (message.editCount !== 0) {
13063
14155
  writer.uint32(128).uint32(message.editCount);
13064
14156
  }
13065
- for (const v of message.sessionId) {
13066
- writer.uint32(138).string(v!);
14157
+ for (const v of message.sessions) {
14158
+ AISessionRef.encode(v!, writer.uint32(138).fork()).join();
13067
14159
  }
13068
14160
  if (message.unlandedCostUsd !== 0) {
13069
14161
  writer.uint32(145).double(message.unlandedCostUsd);
@@ -13229,7 +14321,7 @@ export const AIFileRow: MessageFns<AIFileRow> = {
13229
14321
  break;
13230
14322
  }
13231
14323
 
13232
- message.sessionId.push(reader.string());
14324
+ message.sessions.push(AISessionRef.decode(reader, reader.uint32()));
13233
14325
  continue;
13234
14326
  }
13235
14327
  case 18: {
@@ -13346,10 +14438,8 @@ export const AIFileRow: MessageFns<AIFileRow> = {
13346
14438
  : isSet(object.edit_count)
13347
14439
  ? globalThis.Number(object.edit_count)
13348
14440
  : 0,
13349
- sessionId: globalThis.Array.isArray(object?.sessionId)
13350
- ? object.sessionId.map((e: any) => globalThis.String(e))
13351
- : globalThis.Array.isArray(object?.session_id)
13352
- ? object.session_id.map((e: any) => globalThis.String(e))
14441
+ sessions: globalThis.Array.isArray(object?.sessions)
14442
+ ? object.sessions.map((e: any) => AISessionRef.fromJSON(e))
13353
14443
  : [],
13354
14444
  unlandedCostUsd: isSet(object.unlandedCostUsd)
13355
14445
  ? globalThis.Number(object.unlandedCostUsd)
@@ -13429,8 +14519,8 @@ export const AIFileRow: MessageFns<AIFileRow> = {
13429
14519
  if (message.editCount !== 0) {
13430
14520
  obj.editCount = Math.round(message.editCount);
13431
14521
  }
13432
- if (message.sessionId?.length) {
13433
- obj.sessionId = message.sessionId;
14522
+ if (message.sessions?.length) {
14523
+ obj.sessions = message.sessions.map((e) => AISessionRef.toJSON(e));
13434
14524
  }
13435
14525
  if (message.unlandedCostUsd !== 0) {
13436
14526
  obj.unlandedCostUsd = message.unlandedCostUsd;
@@ -13471,7 +14561,7 @@ export const AIFileRow: MessageFns<AIFileRow> = {
13471
14561
  message.discardedAt = object.discardedAt ?? undefined;
13472
14562
  message.discardReason = object.discardReason ?? "";
13473
14563
  message.editCount = object.editCount ?? 0;
13474
- message.sessionId = object.sessionId?.map((e) => e) || [];
14564
+ message.sessions = object.sessions?.map((e) => AISessionRef.fromPartial(e)) || [];
13475
14565
  message.unlandedCostUsd = object.unlandedCostUsd ?? 0;
13476
14566
  message.unlandedOutputTokens = object.unlandedOutputTokens ?? 0;
13477
14567
  message.totalCostUsd = object.totalCostUsd ?? 0;
@@ -16314,6 +17404,12 @@ export interface AIGatewayService {
16314
17404
  * sessions. Mirrors telemetry.api.v1.
16315
17405
  */
16316
17406
  ListResourceRankings(request: ResourceRankingsRequest, metadata?: Metadata): Promise<ResourceRankingsResponse>;
17407
+ /**
17408
+ * Every model of a project over a time range: usage, the tool calls, compactions and subagent runs
17409
+ * attributed to each, and who called it. Groups fold stored spellings; an ungrouped name is its own row,
17410
+ * costliest first. Mirrors telemetry.api.v1.
17411
+ */
17412
+ ListModelActivity(request: ModelActivityRequest, metadata?: Metadata): Promise<ModelActivityResponse>;
16317
17413
  /**
16318
17414
  * Per-seat entitlement usage board: every entitlement owner's latest observed funding facility and
16319
17415
  * per-harness usage % windows. Stream-first (first frame = full snapshot), seat-scoped. Mirrors
@@ -16349,6 +17445,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
16349
17445
  this.ListModelPrices = this.ListModelPrices.bind(this);
16350
17446
  this.ListModelPriceHistory = this.ListModelPriceHistory.bind(this);
16351
17447
  this.ListResourceRankings = this.ListResourceRankings.bind(this);
17448
+ this.ListModelActivity = this.ListModelActivity.bind(this);
16352
17449
  this.StreamEntitlements = this.StreamEntitlements.bind(this);
16353
17450
  }
16354
17451
  ListSessions(request: ListSessionsRequest, metadata?: Metadata): Promise<ListSessionsResponse> {
@@ -16480,6 +17577,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
16480
17577
  return promise.then((data) => ResourceRankingsResponse.decode(new BinaryReader(data)));
16481
17578
  }
16482
17579
 
17580
+ ListModelActivity(request: ModelActivityRequest, metadata?: Metadata): Promise<ModelActivityResponse> {
17581
+ const data = ModelActivityRequest.encode(request).finish();
17582
+ const promise = this.rpc.request(this.service, "ListModelActivity", data, metadata);
17583
+ return promise.then((data) => ModelActivityResponse.decode(new BinaryReader(data)));
17584
+ }
17585
+
16483
17586
  StreamEntitlements(request: StreamEntitlementsRequest, metadata?: Metadata): Observable<EntitlementsSnapshot> {
16484
17587
  const data = StreamEntitlementsRequest.encode(request).finish();
16485
17588
  const result = this.rpc.serverStreamingRequest(this.service, "StreamEntitlements", data, metadata);