@miradorlabs/web-grpc 3.23.0 → 3.25.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.
@@ -644,6 +644,76 @@ export function aIFileConfidenceToJSON(object: AIFileConfidence): string {
644
644
  }
645
645
  }
646
646
 
647
+ /** AIFileSort mirrors telemetry.api.v1.AIFileSort; every sort breaks ties on (repository_key, ref, path). */
648
+ export enum AIFileSort {
649
+ AI_FILE_SORT_UNSPECIFIED = 0,
650
+ /** AI_FILE_SORT_UNLANDED_COST - highest first */
651
+ AI_FILE_SORT_UNLANDED_COST = 1,
652
+ /** AI_FILE_SORT_NET_UNLANDED_COST - unlanded cost less its subscription slice (at least 0), highest first */
653
+ AI_FILE_SORT_NET_UNLANDED_COST = 2,
654
+ /** AI_FILE_SORT_UNLANDED_OUTPUT_TOKENS - highest first */
655
+ AI_FILE_SORT_UNLANDED_OUTPUT_TOKENS = 3,
656
+ /** AI_FILE_SORT_EDITS - highest first */
657
+ AI_FILE_SORT_EDITS = 4,
658
+ /** AI_FILE_SORT_SESSIONS - most sessions first */
659
+ AI_FILE_SORT_SESSIONS = 5,
660
+ /** AI_FILE_SORT_LAST_EDITED - oldest last edit first; a never-edited file (a session or path read) first of all */
661
+ AI_FILE_SORT_LAST_EDITED = 6,
662
+ UNRECOGNIZED = -1,
663
+ }
664
+
665
+ export function aIFileSortFromJSON(object: any): AIFileSort {
666
+ switch (object) {
667
+ case 0:
668
+ case "AI_FILE_SORT_UNSPECIFIED":
669
+ return AIFileSort.AI_FILE_SORT_UNSPECIFIED;
670
+ case 1:
671
+ case "AI_FILE_SORT_UNLANDED_COST":
672
+ return AIFileSort.AI_FILE_SORT_UNLANDED_COST;
673
+ case 2:
674
+ case "AI_FILE_SORT_NET_UNLANDED_COST":
675
+ return AIFileSort.AI_FILE_SORT_NET_UNLANDED_COST;
676
+ case 3:
677
+ case "AI_FILE_SORT_UNLANDED_OUTPUT_TOKENS":
678
+ return AIFileSort.AI_FILE_SORT_UNLANDED_OUTPUT_TOKENS;
679
+ case 4:
680
+ case "AI_FILE_SORT_EDITS":
681
+ return AIFileSort.AI_FILE_SORT_EDITS;
682
+ case 5:
683
+ case "AI_FILE_SORT_SESSIONS":
684
+ return AIFileSort.AI_FILE_SORT_SESSIONS;
685
+ case 6:
686
+ case "AI_FILE_SORT_LAST_EDITED":
687
+ return AIFileSort.AI_FILE_SORT_LAST_EDITED;
688
+ case -1:
689
+ case "UNRECOGNIZED":
690
+ default:
691
+ return AIFileSort.UNRECOGNIZED;
692
+ }
693
+ }
694
+
695
+ export function aIFileSortToJSON(object: AIFileSort): string {
696
+ switch (object) {
697
+ case AIFileSort.AI_FILE_SORT_UNSPECIFIED:
698
+ return "AI_FILE_SORT_UNSPECIFIED";
699
+ case AIFileSort.AI_FILE_SORT_UNLANDED_COST:
700
+ return "AI_FILE_SORT_UNLANDED_COST";
701
+ case AIFileSort.AI_FILE_SORT_NET_UNLANDED_COST:
702
+ return "AI_FILE_SORT_NET_UNLANDED_COST";
703
+ case AIFileSort.AI_FILE_SORT_UNLANDED_OUTPUT_TOKENS:
704
+ return "AI_FILE_SORT_UNLANDED_OUTPUT_TOKENS";
705
+ case AIFileSort.AI_FILE_SORT_EDITS:
706
+ return "AI_FILE_SORT_EDITS";
707
+ case AIFileSort.AI_FILE_SORT_SESSIONS:
708
+ return "AI_FILE_SORT_SESSIONS";
709
+ case AIFileSort.AI_FILE_SORT_LAST_EDITED:
710
+ return "AI_FILE_SORT_LAST_EDITED";
711
+ case AIFileSort.UNRECOGNIZED:
712
+ default:
713
+ return "UNRECOGNIZED";
714
+ }
715
+ }
716
+
647
717
  export enum AIFileGroupBy {
648
718
  AI_FILE_GROUP_BY_UNSPECIFIED = 0,
649
719
  AI_FILE_GROUP_BY_REPOSITORY = 1,
@@ -1225,7 +1295,14 @@ export interface ListGitActivitiesResponse {
1225
1295
  export interface StreamGitActivitiesRequest {
1226
1296
  organizationId: string;
1227
1297
  projectId: string;
1228
- filter: AIGitActivityFilter | undefined;
1298
+ filter:
1299
+ | AIGitActivityFilter
1300
+ | undefined;
1301
+ /**
1302
+ * The newest activities the snapshot and each later poll read: 1..1000, the server default (1000) when 0;
1303
+ * negative is INVALID_ARGUMENT.
1304
+ */
1305
+ pageSize: number;
1229
1306
  }
1230
1307
 
1231
1308
  /**
@@ -1812,6 +1889,11 @@ export interface AISessionRef {
1812
1889
  sessionId: string;
1813
1890
  }
1814
1891
 
1892
+ /**
1893
+ * AIFileFilter mirrors telemetry.api.v1.AIFileFilter: paths match a file's path exactly; directories keep the
1894
+ * files directly in them; branches keep the files on those refs. Without sessions or paths a read keeps only files
1895
+ * the AI edited; with either, every file they name.
1896
+ */
1815
1897
  export interface AIFileFilter {
1816
1898
  repositoryKeys: string[];
1817
1899
  refs: string[];
@@ -1823,13 +1905,36 @@ export interface AIFileFilter {
1823
1905
  activeAfter: Date | undefined;
1824
1906
  activeBefore: Date | undefined;
1825
1907
  abandonedHorizon: Duration | undefined;
1908
+ paths: string[];
1909
+ directories: AIFileDirectoryRef[];
1910
+ branches: AIFileBranchRef[];
1911
+ }
1912
+
1913
+ /**
1914
+ * AIFileDirectoryRef names a directory as AIFileDirectory does. '' is a real value in both fields: the
1915
+ * unattributed repository, the repository root.
1916
+ */
1917
+ export interface AIFileDirectoryRef {
1918
+ repositoryKey: string;
1919
+ directory: string;
1920
+ }
1921
+
1922
+ /** AIFileBranchRef names one ref of one repository: a pair, as repository_keys and refs would cross repositories. */
1923
+ export interface AIFileBranchRef {
1924
+ repositoryKey: string;
1925
+ ref: string;
1826
1926
  }
1827
1927
 
1828
1928
  export interface ListFilesRequest {
1829
1929
  organizationId: string;
1830
1930
  projectId: string;
1831
- filter: AIFileFilter | undefined;
1931
+ filter:
1932
+ | AIFileFilter
1933
+ | undefined;
1934
+ /** Unspecified is the file identity order: repository_key, ref, path. */
1935
+ sort: AIFileSort;
1832
1936
  pageSize: number;
1937
+ /** Valid only with the sort and filter that produced it. */
1833
1938
  pageToken: string;
1834
1939
  }
1835
1940
 
@@ -1870,6 +1975,44 @@ export interface AIFileRow {
1870
1975
  subscriptionUnlandedCostUsd: number;
1871
1976
  }
1872
1977
 
1978
+ export interface ListFileDirectoriesRequest {
1979
+ organizationId: string;
1980
+ projectId: string;
1981
+ filter: AIFileFilter | undefined;
1982
+ }
1983
+
1984
+ export interface ListFileDirectoriesResponse {
1985
+ status:
1986
+ | ResponseStatus
1987
+ | undefined;
1988
+ /** by repository_key, then directory */
1989
+ directories: AIFileDirectory[];
1990
+ }
1991
+
1992
+ /**
1993
+ * AIFileDirectory mirrors telemetry.api.v1.AIFileDirectory. Net = unlanded_cost_usd -
1994
+ * subscription_unlanded_cost_usd, as on AIFileRow.
1995
+ */
1996
+ export interface AIFileDirectory {
1997
+ repositoryKey: string;
1998
+ /** the path up to its last '/'; '' is the repository root */
1999
+ directory: string;
2000
+ files: number;
2001
+ edits: number;
2002
+ /** distinct (source_system, session_id) across its files */
2003
+ sessions: number;
2004
+ unlandedCostUsd: number;
2005
+ subscriptionUnlandedCostUsd: number;
2006
+ unlandedOutputTokens: number;
2007
+ /** files per lifecycle state; a state with none is absent */
2008
+ stateCounts: AIFileStateCount[];
2009
+ }
2010
+
2011
+ export interface AIFileStateCount {
2012
+ state: AIFileLifecycle;
2013
+ files: number;
2014
+ }
2015
+
1873
2016
  export interface FilesSummaryRequest {
1874
2017
  organizationId: string;
1875
2018
  projectId: string;
@@ -7193,7 +7336,7 @@ export const ListGitActivitiesResponse: MessageFns<ListGitActivitiesResponse> =
7193
7336
  };
7194
7337
 
7195
7338
  function createBaseStreamGitActivitiesRequest(): StreamGitActivitiesRequest {
7196
- return { organizationId: "", projectId: "", filter: undefined };
7339
+ return { organizationId: "", projectId: "", filter: undefined, pageSize: 0 };
7197
7340
  }
7198
7341
 
7199
7342
  export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest> = {
@@ -7207,6 +7350,9 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7207
7350
  if (message.filter !== undefined) {
7208
7351
  AIGitActivityFilter.encode(message.filter, writer.uint32(26).fork()).join();
7209
7352
  }
7353
+ if (message.pageSize !== 0) {
7354
+ writer.uint32(32).int32(message.pageSize);
7355
+ }
7210
7356
  return writer;
7211
7357
  },
7212
7358
 
@@ -7247,6 +7393,14 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7247
7393
  message.filter = AIGitActivityFilter.decode(reader, reader.uint32());
7248
7394
  continue;
7249
7395
  }
7396
+ case 4: {
7397
+ if (tag !== 32) {
7398
+ break;
7399
+ }
7400
+
7401
+ message.pageSize = reader.int32();
7402
+ continue;
7403
+ }
7250
7404
  }
7251
7405
  if ((tag & 7) === 4 || tag === 0) {
7252
7406
  break;
@@ -7272,6 +7426,11 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7272
7426
  ? globalThis.String(object.project_id)
7273
7427
  : "",
7274
7428
  filter: isSet(object.filter) ? AIGitActivityFilter.fromJSON(object.filter) : undefined,
7429
+ pageSize: isSet(object.pageSize)
7430
+ ? globalThis.Number(object.pageSize)
7431
+ : isSet(object.page_size)
7432
+ ? globalThis.Number(object.page_size)
7433
+ : 0,
7275
7434
  };
7276
7435
  },
7277
7436
 
@@ -7286,6 +7445,9 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7286
7445
  if (message.filter !== undefined) {
7287
7446
  obj.filter = AIGitActivityFilter.toJSON(message.filter);
7288
7447
  }
7448
+ if (message.pageSize !== 0) {
7449
+ obj.pageSize = Math.round(message.pageSize);
7450
+ }
7289
7451
  return obj;
7290
7452
  },
7291
7453
 
@@ -7299,6 +7461,7 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7299
7461
  message.filter = (object.filter !== undefined && object.filter !== null)
7300
7462
  ? AIGitActivityFilter.fromPartial(object.filter)
7301
7463
  : undefined;
7464
+ message.pageSize = object.pageSize ?? 0;
7302
7465
  return message;
7303
7466
  },
7304
7467
  };
@@ -16031,6 +16194,9 @@ function createBaseAIFileFilter(): AIFileFilter {
16031
16194
  activeAfter: undefined,
16032
16195
  activeBefore: undefined,
16033
16196
  abandonedHorizon: undefined,
16197
+ paths: [],
16198
+ directories: [],
16199
+ branches: [],
16034
16200
  };
16035
16201
  }
16036
16202
 
@@ -16063,6 +16229,15 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16063
16229
  if (message.abandonedHorizon !== undefined) {
16064
16230
  Duration.encode(message.abandonedHorizon, writer.uint32(74).fork()).join();
16065
16231
  }
16232
+ for (const v of message.paths) {
16233
+ writer.uint32(82).string(v!);
16234
+ }
16235
+ for (const v of message.directories) {
16236
+ AIFileDirectoryRef.encode(v!, writer.uint32(90).fork()).join();
16237
+ }
16238
+ for (const v of message.branches) {
16239
+ AIFileBranchRef.encode(v!, writer.uint32(98).fork()).join();
16240
+ }
16066
16241
  return writer;
16067
16242
  },
16068
16243
 
@@ -16171,6 +16346,30 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16171
16346
  message.abandonedHorizon = Duration.decode(reader, reader.uint32());
16172
16347
  continue;
16173
16348
  }
16349
+ case 10: {
16350
+ if (tag !== 82) {
16351
+ break;
16352
+ }
16353
+
16354
+ message.paths.push(reader.string());
16355
+ continue;
16356
+ }
16357
+ case 11: {
16358
+ if (tag !== 90) {
16359
+ break;
16360
+ }
16361
+
16362
+ message.directories.push(AIFileDirectoryRef.decode(reader, reader.uint32()));
16363
+ continue;
16364
+ }
16365
+ case 12: {
16366
+ if (tag !== 98) {
16367
+ break;
16368
+ }
16369
+
16370
+ message.branches.push(AIFileBranchRef.decode(reader, reader.uint32()));
16371
+ continue;
16372
+ }
16174
16373
  }
16175
16374
  if ((tag & 7) === 4 || tag === 0) {
16176
16375
  break;
@@ -16216,6 +16415,15 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16216
16415
  : isSet(object.abandoned_horizon)
16217
16416
  ? Duration.fromJSON(object.abandoned_horizon)
16218
16417
  : undefined,
16418
+ paths: globalThis.Array.isArray(object?.paths)
16419
+ ? object.paths.map((e: any) => globalThis.String(e))
16420
+ : [],
16421
+ directories: globalThis.Array.isArray(object?.directories)
16422
+ ? object.directories.map((e: any) => AIFileDirectoryRef.fromJSON(e))
16423
+ : [],
16424
+ branches: globalThis.Array.isArray(object?.branches)
16425
+ ? object.branches.map((e: any) => AIFileBranchRef.fromJSON(e))
16426
+ : [],
16219
16427
  };
16220
16428
  },
16221
16429
 
@@ -16248,6 +16456,15 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16248
16456
  if (message.abandonedHorizon !== undefined) {
16249
16457
  obj.abandonedHorizon = Duration.toJSON(message.abandonedHorizon);
16250
16458
  }
16459
+ if (message.paths?.length) {
16460
+ obj.paths = message.paths;
16461
+ }
16462
+ if (message.directories?.length) {
16463
+ obj.directories = message.directories.map((e) => AIFileDirectoryRef.toJSON(e));
16464
+ }
16465
+ if (message.branches?.length) {
16466
+ obj.branches = message.branches.map((e) => AIFileBranchRef.toJSON(e));
16467
+ }
16251
16468
  return obj;
16252
16469
  },
16253
16470
 
@@ -16269,35 +16486,29 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16269
16486
  message.abandonedHorizon = (object.abandonedHorizon !== undefined && object.abandonedHorizon !== null)
16270
16487
  ? Duration.fromPartial(object.abandonedHorizon)
16271
16488
  : undefined;
16489
+ message.paths = object.paths?.map((e) => e) || [];
16490
+ message.directories = object.directories?.map((e) => AIFileDirectoryRef.fromPartial(e)) || [];
16491
+ message.branches = object.branches?.map((e) => AIFileBranchRef.fromPartial(e)) || [];
16272
16492
  return message;
16273
16493
  },
16274
16494
  };
16275
16495
 
16276
- function createBaseListFilesRequest(): ListFilesRequest {
16277
- return { organizationId: "", projectId: "", filter: undefined, pageSize: 0, pageToken: "" };
16496
+ function createBaseAIFileDirectoryRef(): AIFileDirectoryRef {
16497
+ return { repositoryKey: "", directory: "" };
16278
16498
  }
16279
16499
 
16280
- export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16281
- encode(message: ListFilesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16282
- if (message.organizationId !== "") {
16283
- writer.uint32(10).string(message.organizationId);
16284
- }
16285
- if (message.projectId !== "") {
16286
- writer.uint32(18).string(message.projectId);
16287
- }
16288
- if (message.filter !== undefined) {
16289
- AIFileFilter.encode(message.filter, writer.uint32(26).fork()).join();
16290
- }
16291
- if (message.pageSize !== 0) {
16292
- writer.uint32(32).int32(message.pageSize);
16500
+ export const AIFileDirectoryRef: MessageFns<AIFileDirectoryRef> = {
16501
+ encode(message: AIFileDirectoryRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16502
+ if (message.repositoryKey !== "") {
16503
+ writer.uint32(10).string(message.repositoryKey);
16293
16504
  }
16294
- if (message.pageToken !== "") {
16295
- writer.uint32(42).string(message.pageToken);
16505
+ if (message.directory !== "") {
16506
+ writer.uint32(18).string(message.directory);
16296
16507
  }
16297
16508
  return writer;
16298
16509
  },
16299
16510
 
16300
- decode(input: BinaryReader | Uint8Array, length?: number): ListFilesRequest {
16511
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileDirectoryRef {
16301
16512
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16302
16513
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16303
16514
  if (previousRecursionDepth >= 100) {
@@ -16306,7 +16517,7 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16306
16517
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16307
16518
  try {
16308
16519
  const end = length === undefined ? reader.len : reader.pos + length;
16309
- const message = createBaseListFilesRequest();
16520
+ const message = createBaseAIFileDirectoryRef();
16310
16521
  while (reader.pos < end) {
16311
16522
  const tag = reader.uint32();
16312
16523
  switch (tag >>> 3) {
@@ -16315,7 +16526,7 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16315
16526
  break;
16316
16527
  }
16317
16528
 
16318
- message.organizationId = reader.string();
16529
+ message.repositoryKey = reader.string();
16319
16530
  continue;
16320
16531
  }
16321
16532
  case 2: {
@@ -16323,31 +16534,7 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16323
16534
  break;
16324
16535
  }
16325
16536
 
16326
- message.projectId = reader.string();
16327
- continue;
16328
- }
16329
- case 3: {
16330
- if (tag !== 26) {
16331
- break;
16332
- }
16333
-
16334
- message.filter = AIFileFilter.decode(reader, reader.uint32());
16335
- continue;
16336
- }
16337
- case 4: {
16338
- if (tag !== 32) {
16339
- break;
16340
- }
16341
-
16342
- message.pageSize = reader.int32();
16343
- continue;
16344
- }
16345
- case 5: {
16346
- if (tag !== 42) {
16347
- break;
16348
- }
16349
-
16350
- message.pageToken = reader.string();
16537
+ message.directory = reader.string();
16351
16538
  continue;
16352
16539
  }
16353
16540
  }
@@ -16362,87 +16549,55 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16362
16549
  }
16363
16550
  },
16364
16551
 
16365
- fromJSON(object: any): ListFilesRequest {
16552
+ fromJSON(object: any): AIFileDirectoryRef {
16366
16553
  return {
16367
- organizationId: isSet(object.organizationId)
16368
- ? globalThis.String(object.organizationId)
16369
- : isSet(object.organization_id)
16370
- ? globalThis.String(object.organization_id)
16371
- : "",
16372
- projectId: isSet(object.projectId)
16373
- ? globalThis.String(object.projectId)
16374
- : isSet(object.project_id)
16375
- ? globalThis.String(object.project_id)
16376
- : "",
16377
- filter: isSet(object.filter) ? AIFileFilter.fromJSON(object.filter) : undefined,
16378
- pageSize: isSet(object.pageSize)
16379
- ? globalThis.Number(object.pageSize)
16380
- : isSet(object.page_size)
16381
- ? globalThis.Number(object.page_size)
16382
- : 0,
16383
- pageToken: isSet(object.pageToken)
16384
- ? globalThis.String(object.pageToken)
16385
- : isSet(object.page_token)
16386
- ? globalThis.String(object.page_token)
16554
+ repositoryKey: isSet(object.repositoryKey)
16555
+ ? globalThis.String(object.repositoryKey)
16556
+ : isSet(object.repository_key)
16557
+ ? globalThis.String(object.repository_key)
16387
16558
  : "",
16559
+ directory: isSet(object.directory) ? globalThis.String(object.directory) : "",
16388
16560
  };
16389
16561
  },
16390
16562
 
16391
- toJSON(message: ListFilesRequest): unknown {
16563
+ toJSON(message: AIFileDirectoryRef): unknown {
16392
16564
  const obj: any = {};
16393
- if (message.organizationId !== "") {
16394
- obj.organizationId = message.organizationId;
16395
- }
16396
- if (message.projectId !== "") {
16397
- obj.projectId = message.projectId;
16398
- }
16399
- if (message.filter !== undefined) {
16400
- obj.filter = AIFileFilter.toJSON(message.filter);
16401
- }
16402
- if (message.pageSize !== 0) {
16403
- obj.pageSize = Math.round(message.pageSize);
16565
+ if (message.repositoryKey !== "") {
16566
+ obj.repositoryKey = message.repositoryKey;
16404
16567
  }
16405
- if (message.pageToken !== "") {
16406
- obj.pageToken = message.pageToken;
16568
+ if (message.directory !== "") {
16569
+ obj.directory = message.directory;
16407
16570
  }
16408
16571
  return obj;
16409
16572
  },
16410
16573
 
16411
- create<I extends Exact<DeepPartial<ListFilesRequest>, I>>(base?: I): ListFilesRequest {
16412
- return ListFilesRequest.fromPartial(base ?? ({} as any));
16574
+ create<I extends Exact<DeepPartial<AIFileDirectoryRef>, I>>(base?: I): AIFileDirectoryRef {
16575
+ return AIFileDirectoryRef.fromPartial(base ?? ({} as any));
16413
16576
  },
16414
- fromPartial<I extends Exact<DeepPartial<ListFilesRequest>, I>>(object: I): ListFilesRequest {
16415
- const message = createBaseListFilesRequest();
16416
- message.organizationId = object.organizationId ?? "";
16417
- message.projectId = object.projectId ?? "";
16418
- message.filter = (object.filter !== undefined && object.filter !== null)
16419
- ? AIFileFilter.fromPartial(object.filter)
16420
- : undefined;
16421
- message.pageSize = object.pageSize ?? 0;
16422
- message.pageToken = object.pageToken ?? "";
16577
+ fromPartial<I extends Exact<DeepPartial<AIFileDirectoryRef>, I>>(object: I): AIFileDirectoryRef {
16578
+ const message = createBaseAIFileDirectoryRef();
16579
+ message.repositoryKey = object.repositoryKey ?? "";
16580
+ message.directory = object.directory ?? "";
16423
16581
  return message;
16424
16582
  },
16425
16583
  };
16426
16584
 
16427
- function createBaseListFilesResponse(): ListFilesResponse {
16428
- return { status: undefined, files: [], nextPageToken: "" };
16585
+ function createBaseAIFileBranchRef(): AIFileBranchRef {
16586
+ return { repositoryKey: "", ref: "" };
16429
16587
  }
16430
16588
 
16431
- export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16432
- encode(message: ListFilesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16433
- if (message.status !== undefined) {
16434
- ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
16435
- }
16436
- for (const v of message.files) {
16437
- AIFileRow.encode(v!, writer.uint32(18).fork()).join();
16589
+ export const AIFileBranchRef: MessageFns<AIFileBranchRef> = {
16590
+ encode(message: AIFileBranchRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16591
+ if (message.repositoryKey !== "") {
16592
+ writer.uint32(10).string(message.repositoryKey);
16438
16593
  }
16439
- if (message.nextPageToken !== "") {
16440
- writer.uint32(26).string(message.nextPageToken);
16594
+ if (message.ref !== "") {
16595
+ writer.uint32(18).string(message.ref);
16441
16596
  }
16442
16597
  return writer;
16443
16598
  },
16444
16599
 
16445
- decode(input: BinaryReader | Uint8Array, length?: number): ListFilesResponse {
16600
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileBranchRef {
16446
16601
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16447
16602
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16448
16603
  if (previousRecursionDepth >= 100) {
@@ -16451,7 +16606,7 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16451
16606
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16452
16607
  try {
16453
16608
  const end = length === undefined ? reader.len : reader.pos + length;
16454
- const message = createBaseListFilesResponse();
16609
+ const message = createBaseAIFileBranchRef();
16455
16610
  while (reader.pos < end) {
16456
16611
  const tag = reader.uint32();
16457
16612
  switch (tag >>> 3) {
@@ -16460,7 +16615,7 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16460
16615
  break;
16461
16616
  }
16462
16617
 
16463
- message.status = ResponseStatus.decode(reader, reader.uint32());
16618
+ message.repositoryKey = reader.string();
16464
16619
  continue;
16465
16620
  }
16466
16621
  case 2: {
@@ -16468,15 +16623,7 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16468
16623
  break;
16469
16624
  }
16470
16625
 
16471
- message.files.push(AIFileRow.decode(reader, reader.uint32()));
16472
- continue;
16473
- }
16474
- case 3: {
16475
- if (tag !== 26) {
16476
- break;
16477
- }
16478
-
16479
- message.nextPageToken = reader.string();
16626
+ message.ref = reader.string();
16480
16627
  continue;
16481
16628
  }
16482
16629
  }
@@ -16491,145 +16638,1054 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16491
16638
  }
16492
16639
  },
16493
16640
 
16494
- fromJSON(object: any): ListFilesResponse {
16641
+ fromJSON(object: any): AIFileBranchRef {
16495
16642
  return {
16496
- status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
16497
- files: globalThis.Array.isArray(object?.files) ? object.files.map((e: any) => AIFileRow.fromJSON(e)) : [],
16498
- nextPageToken: isSet(object.nextPageToken)
16499
- ? globalThis.String(object.nextPageToken)
16500
- : isSet(object.next_page_token)
16501
- ? globalThis.String(object.next_page_token)
16643
+ repositoryKey: isSet(object.repositoryKey)
16644
+ ? globalThis.String(object.repositoryKey)
16645
+ : isSet(object.repository_key)
16646
+ ? globalThis.String(object.repository_key)
16647
+ : "",
16648
+ ref: isSet(object.ref) ? globalThis.String(object.ref) : "",
16649
+ };
16650
+ },
16651
+
16652
+ toJSON(message: AIFileBranchRef): unknown {
16653
+ const obj: any = {};
16654
+ if (message.repositoryKey !== "") {
16655
+ obj.repositoryKey = message.repositoryKey;
16656
+ }
16657
+ if (message.ref !== "") {
16658
+ obj.ref = message.ref;
16659
+ }
16660
+ return obj;
16661
+ },
16662
+
16663
+ create<I extends Exact<DeepPartial<AIFileBranchRef>, I>>(base?: I): AIFileBranchRef {
16664
+ return AIFileBranchRef.fromPartial(base ?? ({} as any));
16665
+ },
16666
+ fromPartial<I extends Exact<DeepPartial<AIFileBranchRef>, I>>(object: I): AIFileBranchRef {
16667
+ const message = createBaseAIFileBranchRef();
16668
+ message.repositoryKey = object.repositoryKey ?? "";
16669
+ message.ref = object.ref ?? "";
16670
+ return message;
16671
+ },
16672
+ };
16673
+
16674
+ function createBaseListFilesRequest(): ListFilesRequest {
16675
+ return { organizationId: "", projectId: "", filter: undefined, sort: 0, pageSize: 0, pageToken: "" };
16676
+ }
16677
+
16678
+ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16679
+ encode(message: ListFilesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16680
+ if (message.organizationId !== "") {
16681
+ writer.uint32(10).string(message.organizationId);
16682
+ }
16683
+ if (message.projectId !== "") {
16684
+ writer.uint32(18).string(message.projectId);
16685
+ }
16686
+ if (message.filter !== undefined) {
16687
+ AIFileFilter.encode(message.filter, writer.uint32(26).fork()).join();
16688
+ }
16689
+ if (message.sort !== 0) {
16690
+ writer.uint32(48).int32(message.sort);
16691
+ }
16692
+ if (message.pageSize !== 0) {
16693
+ writer.uint32(32).int32(message.pageSize);
16694
+ }
16695
+ if (message.pageToken !== "") {
16696
+ writer.uint32(42).string(message.pageToken);
16697
+ }
16698
+ return writer;
16699
+ },
16700
+
16701
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFilesRequest {
16702
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16703
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16704
+ if (previousRecursionDepth >= 100) {
16705
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
16706
+ }
16707
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16708
+ try {
16709
+ const end = length === undefined ? reader.len : reader.pos + length;
16710
+ const message = createBaseListFilesRequest();
16711
+ while (reader.pos < end) {
16712
+ const tag = reader.uint32();
16713
+ switch (tag >>> 3) {
16714
+ case 1: {
16715
+ if (tag !== 10) {
16716
+ break;
16717
+ }
16718
+
16719
+ message.organizationId = reader.string();
16720
+ continue;
16721
+ }
16722
+ case 2: {
16723
+ if (tag !== 18) {
16724
+ break;
16725
+ }
16726
+
16727
+ message.projectId = reader.string();
16728
+ continue;
16729
+ }
16730
+ case 3: {
16731
+ if (tag !== 26) {
16732
+ break;
16733
+ }
16734
+
16735
+ message.filter = AIFileFilter.decode(reader, reader.uint32());
16736
+ continue;
16737
+ }
16738
+ case 6: {
16739
+ if (tag !== 48) {
16740
+ break;
16741
+ }
16742
+
16743
+ message.sort = reader.int32() as any;
16744
+ continue;
16745
+ }
16746
+ case 4: {
16747
+ if (tag !== 32) {
16748
+ break;
16749
+ }
16750
+
16751
+ message.pageSize = reader.int32();
16752
+ continue;
16753
+ }
16754
+ case 5: {
16755
+ if (tag !== 42) {
16756
+ break;
16757
+ }
16758
+
16759
+ message.pageToken = reader.string();
16760
+ continue;
16761
+ }
16762
+ }
16763
+ if ((tag & 7) === 4 || tag === 0) {
16764
+ break;
16765
+ }
16766
+ reader.skip(tag & 7);
16767
+ }
16768
+ return message;
16769
+ } finally {
16770
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
16771
+ }
16772
+ },
16773
+
16774
+ fromJSON(object: any): ListFilesRequest {
16775
+ return {
16776
+ organizationId: isSet(object.organizationId)
16777
+ ? globalThis.String(object.organizationId)
16778
+ : isSet(object.organization_id)
16779
+ ? globalThis.String(object.organization_id)
16780
+ : "",
16781
+ projectId: isSet(object.projectId)
16782
+ ? globalThis.String(object.projectId)
16783
+ : isSet(object.project_id)
16784
+ ? globalThis.String(object.project_id)
16785
+ : "",
16786
+ filter: isSet(object.filter) ? AIFileFilter.fromJSON(object.filter) : undefined,
16787
+ sort: isSet(object.sort) ? aIFileSortFromJSON(object.sort) : 0,
16788
+ pageSize: isSet(object.pageSize)
16789
+ ? globalThis.Number(object.pageSize)
16790
+ : isSet(object.page_size)
16791
+ ? globalThis.Number(object.page_size)
16792
+ : 0,
16793
+ pageToken: isSet(object.pageToken)
16794
+ ? globalThis.String(object.pageToken)
16795
+ : isSet(object.page_token)
16796
+ ? globalThis.String(object.page_token)
16797
+ : "",
16798
+ };
16799
+ },
16800
+
16801
+ toJSON(message: ListFilesRequest): unknown {
16802
+ const obj: any = {};
16803
+ if (message.organizationId !== "") {
16804
+ obj.organizationId = message.organizationId;
16805
+ }
16806
+ if (message.projectId !== "") {
16807
+ obj.projectId = message.projectId;
16808
+ }
16809
+ if (message.filter !== undefined) {
16810
+ obj.filter = AIFileFilter.toJSON(message.filter);
16811
+ }
16812
+ if (message.sort !== 0) {
16813
+ obj.sort = aIFileSortToJSON(message.sort);
16814
+ }
16815
+ if (message.pageSize !== 0) {
16816
+ obj.pageSize = Math.round(message.pageSize);
16817
+ }
16818
+ if (message.pageToken !== "") {
16819
+ obj.pageToken = message.pageToken;
16820
+ }
16821
+ return obj;
16822
+ },
16823
+
16824
+ create<I extends Exact<DeepPartial<ListFilesRequest>, I>>(base?: I): ListFilesRequest {
16825
+ return ListFilesRequest.fromPartial(base ?? ({} as any));
16826
+ },
16827
+ fromPartial<I extends Exact<DeepPartial<ListFilesRequest>, I>>(object: I): ListFilesRequest {
16828
+ const message = createBaseListFilesRequest();
16829
+ message.organizationId = object.organizationId ?? "";
16830
+ message.projectId = object.projectId ?? "";
16831
+ message.filter = (object.filter !== undefined && object.filter !== null)
16832
+ ? AIFileFilter.fromPartial(object.filter)
16833
+ : undefined;
16834
+ message.sort = object.sort ?? 0;
16835
+ message.pageSize = object.pageSize ?? 0;
16836
+ message.pageToken = object.pageToken ?? "";
16837
+ return message;
16838
+ },
16839
+ };
16840
+
16841
+ function createBaseListFilesResponse(): ListFilesResponse {
16842
+ return { status: undefined, files: [], nextPageToken: "" };
16843
+ }
16844
+
16845
+ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16846
+ encode(message: ListFilesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16847
+ if (message.status !== undefined) {
16848
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
16849
+ }
16850
+ for (const v of message.files) {
16851
+ AIFileRow.encode(v!, writer.uint32(18).fork()).join();
16852
+ }
16853
+ if (message.nextPageToken !== "") {
16854
+ writer.uint32(26).string(message.nextPageToken);
16855
+ }
16856
+ return writer;
16857
+ },
16858
+
16859
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFilesResponse {
16860
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16861
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16862
+ if (previousRecursionDepth >= 100) {
16863
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
16864
+ }
16865
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16866
+ try {
16867
+ const end = length === undefined ? reader.len : reader.pos + length;
16868
+ const message = createBaseListFilesResponse();
16869
+ while (reader.pos < end) {
16870
+ const tag = reader.uint32();
16871
+ switch (tag >>> 3) {
16872
+ case 1: {
16873
+ if (tag !== 10) {
16874
+ break;
16875
+ }
16876
+
16877
+ message.status = ResponseStatus.decode(reader, reader.uint32());
16878
+ continue;
16879
+ }
16880
+ case 2: {
16881
+ if (tag !== 18) {
16882
+ break;
16883
+ }
16884
+
16885
+ message.files.push(AIFileRow.decode(reader, reader.uint32()));
16886
+ continue;
16887
+ }
16888
+ case 3: {
16889
+ if (tag !== 26) {
16890
+ break;
16891
+ }
16892
+
16893
+ message.nextPageToken = reader.string();
16894
+ continue;
16895
+ }
16896
+ }
16897
+ if ((tag & 7) === 4 || tag === 0) {
16898
+ break;
16899
+ }
16900
+ reader.skip(tag & 7);
16901
+ }
16902
+ return message;
16903
+ } finally {
16904
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
16905
+ }
16906
+ },
16907
+
16908
+ fromJSON(object: any): ListFilesResponse {
16909
+ return {
16910
+ status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
16911
+ files: globalThis.Array.isArray(object?.files) ? object.files.map((e: any) => AIFileRow.fromJSON(e)) : [],
16912
+ nextPageToken: isSet(object.nextPageToken)
16913
+ ? globalThis.String(object.nextPageToken)
16914
+ : isSet(object.next_page_token)
16915
+ ? globalThis.String(object.next_page_token)
16916
+ : "",
16917
+ };
16918
+ },
16919
+
16920
+ toJSON(message: ListFilesResponse): unknown {
16921
+ const obj: any = {};
16922
+ if (message.status !== undefined) {
16923
+ obj.status = ResponseStatus.toJSON(message.status);
16924
+ }
16925
+ if (message.files?.length) {
16926
+ obj.files = message.files.map((e) => AIFileRow.toJSON(e));
16927
+ }
16928
+ if (message.nextPageToken !== "") {
16929
+ obj.nextPageToken = message.nextPageToken;
16930
+ }
16931
+ return obj;
16932
+ },
16933
+
16934
+ create<I extends Exact<DeepPartial<ListFilesResponse>, I>>(base?: I): ListFilesResponse {
16935
+ return ListFilesResponse.fromPartial(base ?? ({} as any));
16936
+ },
16937
+ fromPartial<I extends Exact<DeepPartial<ListFilesResponse>, I>>(object: I): ListFilesResponse {
16938
+ const message = createBaseListFilesResponse();
16939
+ message.status = (object.status !== undefined && object.status !== null)
16940
+ ? ResponseStatus.fromPartial(object.status)
16941
+ : undefined;
16942
+ message.files = object.files?.map((e) => AIFileRow.fromPartial(e)) || [];
16943
+ message.nextPageToken = object.nextPageToken ?? "";
16944
+ return message;
16945
+ },
16946
+ };
16947
+
16948
+ function createBaseAIFileRow(): AIFileRow {
16949
+ return {
16950
+ repositoryKey: "",
16951
+ ref: "",
16952
+ path: "",
16953
+ oldPath: "",
16954
+ state: 0,
16955
+ tier: 0,
16956
+ confidence: 0,
16957
+ firstEditedAt: undefined,
16958
+ lastEditedAt: undefined,
16959
+ lastStagedAt: undefined,
16960
+ lastCommittedAt: undefined,
16961
+ lastCommitSha: "",
16962
+ lastPushedAt: undefined,
16963
+ discardedAt: undefined,
16964
+ discardReason: "",
16965
+ editCount: 0,
16966
+ sessions: [],
16967
+ unlandedCostUsd: 0,
16968
+ unlandedOutputTokens: 0,
16969
+ totalCostUsd: 0,
16970
+ subscriptionTotalCostUsd: 0,
16971
+ subscriptionUnlandedCostUsd: 0,
16972
+ };
16973
+ }
16974
+
16975
+ export const AIFileRow: MessageFns<AIFileRow> = {
16976
+ encode(message: AIFileRow, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16977
+ if (message.repositoryKey !== "") {
16978
+ writer.uint32(10).string(message.repositoryKey);
16979
+ }
16980
+ if (message.ref !== "") {
16981
+ writer.uint32(18).string(message.ref);
16982
+ }
16983
+ if (message.path !== "") {
16984
+ writer.uint32(26).string(message.path);
16985
+ }
16986
+ if (message.oldPath !== "") {
16987
+ writer.uint32(34).string(message.oldPath);
16988
+ }
16989
+ if (message.state !== 0) {
16990
+ writer.uint32(40).int32(message.state);
16991
+ }
16992
+ if (message.tier !== 0) {
16993
+ writer.uint32(48).int32(message.tier);
16994
+ }
16995
+ if (message.confidence !== 0) {
16996
+ writer.uint32(56).int32(message.confidence);
16997
+ }
16998
+ if (message.firstEditedAt !== undefined) {
16999
+ Timestamp.encode(toTimestamp(message.firstEditedAt), writer.uint32(66).fork()).join();
17000
+ }
17001
+ if (message.lastEditedAt !== undefined) {
17002
+ Timestamp.encode(toTimestamp(message.lastEditedAt), writer.uint32(74).fork()).join();
17003
+ }
17004
+ if (message.lastStagedAt !== undefined) {
17005
+ Timestamp.encode(toTimestamp(message.lastStagedAt), writer.uint32(82).fork()).join();
17006
+ }
17007
+ if (message.lastCommittedAt !== undefined) {
17008
+ Timestamp.encode(toTimestamp(message.lastCommittedAt), writer.uint32(90).fork()).join();
17009
+ }
17010
+ if (message.lastCommitSha !== "") {
17011
+ writer.uint32(98).string(message.lastCommitSha);
17012
+ }
17013
+ if (message.lastPushedAt !== undefined) {
17014
+ Timestamp.encode(toTimestamp(message.lastPushedAt), writer.uint32(106).fork()).join();
17015
+ }
17016
+ if (message.discardedAt !== undefined) {
17017
+ Timestamp.encode(toTimestamp(message.discardedAt), writer.uint32(114).fork()).join();
17018
+ }
17019
+ if (message.discardReason !== "") {
17020
+ writer.uint32(122).string(message.discardReason);
17021
+ }
17022
+ if (message.editCount !== 0) {
17023
+ writer.uint32(128).uint32(message.editCount);
17024
+ }
17025
+ for (const v of message.sessions) {
17026
+ AISessionRef.encode(v!, writer.uint32(138).fork()).join();
17027
+ }
17028
+ if (message.unlandedCostUsd !== 0) {
17029
+ writer.uint32(145).double(message.unlandedCostUsd);
17030
+ }
17031
+ if (message.unlandedOutputTokens !== 0) {
17032
+ writer.uint32(152).uint64(message.unlandedOutputTokens);
17033
+ }
17034
+ if (message.totalCostUsd !== 0) {
17035
+ writer.uint32(161).double(message.totalCostUsd);
17036
+ }
17037
+ if (message.subscriptionTotalCostUsd !== 0) {
17038
+ writer.uint32(169).double(message.subscriptionTotalCostUsd);
17039
+ }
17040
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17041
+ writer.uint32(177).double(message.subscriptionUnlandedCostUsd);
17042
+ }
17043
+ return writer;
17044
+ },
17045
+
17046
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileRow {
17047
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17048
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17049
+ if (previousRecursionDepth >= 100) {
17050
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
17051
+ }
17052
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17053
+ try {
17054
+ const end = length === undefined ? reader.len : reader.pos + length;
17055
+ const message = createBaseAIFileRow();
17056
+ while (reader.pos < end) {
17057
+ const tag = reader.uint32();
17058
+ switch (tag >>> 3) {
17059
+ case 1: {
17060
+ if (tag !== 10) {
17061
+ break;
17062
+ }
17063
+
17064
+ message.repositoryKey = reader.string();
17065
+ continue;
17066
+ }
17067
+ case 2: {
17068
+ if (tag !== 18) {
17069
+ break;
17070
+ }
17071
+
17072
+ message.ref = reader.string();
17073
+ continue;
17074
+ }
17075
+ case 3: {
17076
+ if (tag !== 26) {
17077
+ break;
17078
+ }
17079
+
17080
+ message.path = reader.string();
17081
+ continue;
17082
+ }
17083
+ case 4: {
17084
+ if (tag !== 34) {
17085
+ break;
17086
+ }
17087
+
17088
+ message.oldPath = reader.string();
17089
+ continue;
17090
+ }
17091
+ case 5: {
17092
+ if (tag !== 40) {
17093
+ break;
17094
+ }
17095
+
17096
+ message.state = reader.int32() as any;
17097
+ continue;
17098
+ }
17099
+ case 6: {
17100
+ if (tag !== 48) {
17101
+ break;
17102
+ }
17103
+
17104
+ message.tier = reader.int32() as any;
17105
+ continue;
17106
+ }
17107
+ case 7: {
17108
+ if (tag !== 56) {
17109
+ break;
17110
+ }
17111
+
17112
+ message.confidence = reader.int32() as any;
17113
+ continue;
17114
+ }
17115
+ case 8: {
17116
+ if (tag !== 66) {
17117
+ break;
17118
+ }
17119
+
17120
+ message.firstEditedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
17121
+ continue;
17122
+ }
17123
+ case 9: {
17124
+ if (tag !== 74) {
17125
+ break;
17126
+ }
17127
+
17128
+ message.lastEditedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
17129
+ continue;
17130
+ }
17131
+ case 10: {
17132
+ if (tag !== 82) {
17133
+ break;
17134
+ }
17135
+
17136
+ message.lastStagedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
17137
+ continue;
17138
+ }
17139
+ case 11: {
17140
+ if (tag !== 90) {
17141
+ break;
17142
+ }
17143
+
17144
+ message.lastCommittedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
17145
+ continue;
17146
+ }
17147
+ case 12: {
17148
+ if (tag !== 98) {
17149
+ break;
17150
+ }
17151
+
17152
+ message.lastCommitSha = reader.string();
17153
+ continue;
17154
+ }
17155
+ case 13: {
17156
+ if (tag !== 106) {
17157
+ break;
17158
+ }
17159
+
17160
+ message.lastPushedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
17161
+ continue;
17162
+ }
17163
+ case 14: {
17164
+ if (tag !== 114) {
17165
+ break;
17166
+ }
17167
+
17168
+ message.discardedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
17169
+ continue;
17170
+ }
17171
+ case 15: {
17172
+ if (tag !== 122) {
17173
+ break;
17174
+ }
17175
+
17176
+ message.discardReason = reader.string();
17177
+ continue;
17178
+ }
17179
+ case 16: {
17180
+ if (tag !== 128) {
17181
+ break;
17182
+ }
17183
+
17184
+ message.editCount = reader.uint32();
17185
+ continue;
17186
+ }
17187
+ case 17: {
17188
+ if (tag !== 138) {
17189
+ break;
17190
+ }
17191
+
17192
+ message.sessions.push(AISessionRef.decode(reader, reader.uint32()));
17193
+ continue;
17194
+ }
17195
+ case 18: {
17196
+ if (tag !== 145) {
17197
+ break;
17198
+ }
17199
+
17200
+ message.unlandedCostUsd = reader.double();
17201
+ continue;
17202
+ }
17203
+ case 19: {
17204
+ if (tag !== 152) {
17205
+ break;
17206
+ }
17207
+
17208
+ message.unlandedOutputTokens = longToNumber(reader.uint64());
17209
+ continue;
17210
+ }
17211
+ case 20: {
17212
+ if (tag !== 161) {
17213
+ break;
17214
+ }
17215
+
17216
+ message.totalCostUsd = reader.double();
17217
+ continue;
17218
+ }
17219
+ case 21: {
17220
+ if (tag !== 169) {
17221
+ break;
17222
+ }
17223
+
17224
+ message.subscriptionTotalCostUsd = reader.double();
17225
+ continue;
17226
+ }
17227
+ case 22: {
17228
+ if (tag !== 177) {
17229
+ break;
17230
+ }
17231
+
17232
+ message.subscriptionUnlandedCostUsd = reader.double();
17233
+ continue;
17234
+ }
17235
+ }
17236
+ if ((tag & 7) === 4 || tag === 0) {
17237
+ break;
17238
+ }
17239
+ reader.skip(tag & 7);
17240
+ }
17241
+ return message;
17242
+ } finally {
17243
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
17244
+ }
17245
+ },
17246
+
17247
+ fromJSON(object: any): AIFileRow {
17248
+ return {
17249
+ repositoryKey: isSet(object.repositoryKey)
17250
+ ? globalThis.String(object.repositoryKey)
17251
+ : isSet(object.repository_key)
17252
+ ? globalThis.String(object.repository_key)
17253
+ : "",
17254
+ ref: isSet(object.ref) ? globalThis.String(object.ref) : "",
17255
+ path: isSet(object.path) ? globalThis.String(object.path) : "",
17256
+ oldPath: isSet(object.oldPath)
17257
+ ? globalThis.String(object.oldPath)
17258
+ : isSet(object.old_path)
17259
+ ? globalThis.String(object.old_path)
17260
+ : "",
17261
+ state: isSet(object.state) ? aIFileLifecycleFromJSON(object.state) : 0,
17262
+ tier: isSet(object.tier) ? aIFileTierFromJSON(object.tier) : 0,
17263
+ confidence: isSet(object.confidence) ? aIFileConfidenceFromJSON(object.confidence) : 0,
17264
+ firstEditedAt: isSet(object.firstEditedAt)
17265
+ ? fromJsonTimestamp(object.firstEditedAt)
17266
+ : isSet(object.first_edited_at)
17267
+ ? fromJsonTimestamp(object.first_edited_at)
17268
+ : undefined,
17269
+ lastEditedAt: isSet(object.lastEditedAt)
17270
+ ? fromJsonTimestamp(object.lastEditedAt)
17271
+ : isSet(object.last_edited_at)
17272
+ ? fromJsonTimestamp(object.last_edited_at)
17273
+ : undefined,
17274
+ lastStagedAt: isSet(object.lastStagedAt)
17275
+ ? fromJsonTimestamp(object.lastStagedAt)
17276
+ : isSet(object.last_staged_at)
17277
+ ? fromJsonTimestamp(object.last_staged_at)
17278
+ : undefined,
17279
+ lastCommittedAt: isSet(object.lastCommittedAt)
17280
+ ? fromJsonTimestamp(object.lastCommittedAt)
17281
+ : isSet(object.last_committed_at)
17282
+ ? fromJsonTimestamp(object.last_committed_at)
17283
+ : undefined,
17284
+ lastCommitSha: isSet(object.lastCommitSha)
17285
+ ? globalThis.String(object.lastCommitSha)
17286
+ : isSet(object.last_commit_sha)
17287
+ ? globalThis.String(object.last_commit_sha)
17288
+ : "",
17289
+ lastPushedAt: isSet(object.lastPushedAt)
17290
+ ? fromJsonTimestamp(object.lastPushedAt)
17291
+ : isSet(object.last_pushed_at)
17292
+ ? fromJsonTimestamp(object.last_pushed_at)
17293
+ : undefined,
17294
+ discardedAt: isSet(object.discardedAt)
17295
+ ? fromJsonTimestamp(object.discardedAt)
17296
+ : isSet(object.discarded_at)
17297
+ ? fromJsonTimestamp(object.discarded_at)
17298
+ : undefined,
17299
+ discardReason: isSet(object.discardReason)
17300
+ ? globalThis.String(object.discardReason)
17301
+ : isSet(object.discard_reason)
17302
+ ? globalThis.String(object.discard_reason)
17303
+ : "",
17304
+ editCount: isSet(object.editCount)
17305
+ ? globalThis.Number(object.editCount)
17306
+ : isSet(object.edit_count)
17307
+ ? globalThis.Number(object.edit_count)
17308
+ : 0,
17309
+ sessions: globalThis.Array.isArray(object?.sessions)
17310
+ ? object.sessions.map((e: any) => AISessionRef.fromJSON(e))
17311
+ : [],
17312
+ unlandedCostUsd: isSet(object.unlandedCostUsd)
17313
+ ? globalThis.Number(object.unlandedCostUsd)
17314
+ : isSet(object.unlanded_cost_usd)
17315
+ ? globalThis.Number(object.unlanded_cost_usd)
17316
+ : 0,
17317
+ unlandedOutputTokens: isSet(object.unlandedOutputTokens)
17318
+ ? globalThis.Number(object.unlandedOutputTokens)
17319
+ : isSet(object.unlanded_output_tokens)
17320
+ ? globalThis.Number(object.unlanded_output_tokens)
17321
+ : 0,
17322
+ totalCostUsd: isSet(object.totalCostUsd)
17323
+ ? globalThis.Number(object.totalCostUsd)
17324
+ : isSet(object.total_cost_usd)
17325
+ ? globalThis.Number(object.total_cost_usd)
17326
+ : 0,
17327
+ subscriptionTotalCostUsd: isSet(object.subscriptionTotalCostUsd)
17328
+ ? globalThis.Number(object.subscriptionTotalCostUsd)
17329
+ : isSet(object.subscription_total_cost_usd)
17330
+ ? globalThis.Number(object.subscription_total_cost_usd)
17331
+ : 0,
17332
+ subscriptionUnlandedCostUsd: isSet(object.subscriptionUnlandedCostUsd)
17333
+ ? globalThis.Number(object.subscriptionUnlandedCostUsd)
17334
+ : isSet(object.subscription_unlanded_cost_usd)
17335
+ ? globalThis.Number(object.subscription_unlanded_cost_usd)
17336
+ : 0,
17337
+ };
17338
+ },
17339
+
17340
+ toJSON(message: AIFileRow): unknown {
17341
+ const obj: any = {};
17342
+ if (message.repositoryKey !== "") {
17343
+ obj.repositoryKey = message.repositoryKey;
17344
+ }
17345
+ if (message.ref !== "") {
17346
+ obj.ref = message.ref;
17347
+ }
17348
+ if (message.path !== "") {
17349
+ obj.path = message.path;
17350
+ }
17351
+ if (message.oldPath !== "") {
17352
+ obj.oldPath = message.oldPath;
17353
+ }
17354
+ if (message.state !== 0) {
17355
+ obj.state = aIFileLifecycleToJSON(message.state);
17356
+ }
17357
+ if (message.tier !== 0) {
17358
+ obj.tier = aIFileTierToJSON(message.tier);
17359
+ }
17360
+ if (message.confidence !== 0) {
17361
+ obj.confidence = aIFileConfidenceToJSON(message.confidence);
17362
+ }
17363
+ if (message.firstEditedAt !== undefined) {
17364
+ obj.firstEditedAt = message.firstEditedAt.toISOString();
17365
+ }
17366
+ if (message.lastEditedAt !== undefined) {
17367
+ obj.lastEditedAt = message.lastEditedAt.toISOString();
17368
+ }
17369
+ if (message.lastStagedAt !== undefined) {
17370
+ obj.lastStagedAt = message.lastStagedAt.toISOString();
17371
+ }
17372
+ if (message.lastCommittedAt !== undefined) {
17373
+ obj.lastCommittedAt = message.lastCommittedAt.toISOString();
17374
+ }
17375
+ if (message.lastCommitSha !== "") {
17376
+ obj.lastCommitSha = message.lastCommitSha;
17377
+ }
17378
+ if (message.lastPushedAt !== undefined) {
17379
+ obj.lastPushedAt = message.lastPushedAt.toISOString();
17380
+ }
17381
+ if (message.discardedAt !== undefined) {
17382
+ obj.discardedAt = message.discardedAt.toISOString();
17383
+ }
17384
+ if (message.discardReason !== "") {
17385
+ obj.discardReason = message.discardReason;
17386
+ }
17387
+ if (message.editCount !== 0) {
17388
+ obj.editCount = Math.round(message.editCount);
17389
+ }
17390
+ if (message.sessions?.length) {
17391
+ obj.sessions = message.sessions.map((e) => AISessionRef.toJSON(e));
17392
+ }
17393
+ if (message.unlandedCostUsd !== 0) {
17394
+ obj.unlandedCostUsd = message.unlandedCostUsd;
17395
+ }
17396
+ if (message.unlandedOutputTokens !== 0) {
17397
+ obj.unlandedOutputTokens = Math.round(message.unlandedOutputTokens);
17398
+ }
17399
+ if (message.totalCostUsd !== 0) {
17400
+ obj.totalCostUsd = message.totalCostUsd;
17401
+ }
17402
+ if (message.subscriptionTotalCostUsd !== 0) {
17403
+ obj.subscriptionTotalCostUsd = message.subscriptionTotalCostUsd;
17404
+ }
17405
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17406
+ obj.subscriptionUnlandedCostUsd = message.subscriptionUnlandedCostUsd;
17407
+ }
17408
+ return obj;
17409
+ },
17410
+
17411
+ create<I extends Exact<DeepPartial<AIFileRow>, I>>(base?: I): AIFileRow {
17412
+ return AIFileRow.fromPartial(base ?? ({} as any));
17413
+ },
17414
+ fromPartial<I extends Exact<DeepPartial<AIFileRow>, I>>(object: I): AIFileRow {
17415
+ const message = createBaseAIFileRow();
17416
+ message.repositoryKey = object.repositoryKey ?? "";
17417
+ message.ref = object.ref ?? "";
17418
+ message.path = object.path ?? "";
17419
+ message.oldPath = object.oldPath ?? "";
17420
+ message.state = object.state ?? 0;
17421
+ message.tier = object.tier ?? 0;
17422
+ message.confidence = object.confidence ?? 0;
17423
+ message.firstEditedAt = object.firstEditedAt ?? undefined;
17424
+ message.lastEditedAt = object.lastEditedAt ?? undefined;
17425
+ message.lastStagedAt = object.lastStagedAt ?? undefined;
17426
+ message.lastCommittedAt = object.lastCommittedAt ?? undefined;
17427
+ message.lastCommitSha = object.lastCommitSha ?? "";
17428
+ message.lastPushedAt = object.lastPushedAt ?? undefined;
17429
+ message.discardedAt = object.discardedAt ?? undefined;
17430
+ message.discardReason = object.discardReason ?? "";
17431
+ message.editCount = object.editCount ?? 0;
17432
+ message.sessions = object.sessions?.map((e) => AISessionRef.fromPartial(e)) || [];
17433
+ message.unlandedCostUsd = object.unlandedCostUsd ?? 0;
17434
+ message.unlandedOutputTokens = object.unlandedOutputTokens ?? 0;
17435
+ message.totalCostUsd = object.totalCostUsd ?? 0;
17436
+ message.subscriptionTotalCostUsd = object.subscriptionTotalCostUsd ?? 0;
17437
+ message.subscriptionUnlandedCostUsd = object.subscriptionUnlandedCostUsd ?? 0;
17438
+ return message;
17439
+ },
17440
+ };
17441
+
17442
+ function createBaseListFileDirectoriesRequest(): ListFileDirectoriesRequest {
17443
+ return { organizationId: "", projectId: "", filter: undefined };
17444
+ }
17445
+
17446
+ export const ListFileDirectoriesRequest: MessageFns<ListFileDirectoriesRequest> = {
17447
+ encode(message: ListFileDirectoriesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17448
+ if (message.organizationId !== "") {
17449
+ writer.uint32(10).string(message.organizationId);
17450
+ }
17451
+ if (message.projectId !== "") {
17452
+ writer.uint32(18).string(message.projectId);
17453
+ }
17454
+ if (message.filter !== undefined) {
17455
+ AIFileFilter.encode(message.filter, writer.uint32(26).fork()).join();
17456
+ }
17457
+ return writer;
17458
+ },
17459
+
17460
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFileDirectoriesRequest {
17461
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17462
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17463
+ if (previousRecursionDepth >= 100) {
17464
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
17465
+ }
17466
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17467
+ try {
17468
+ const end = length === undefined ? reader.len : reader.pos + length;
17469
+ const message = createBaseListFileDirectoriesRequest();
17470
+ while (reader.pos < end) {
17471
+ const tag = reader.uint32();
17472
+ switch (tag >>> 3) {
17473
+ case 1: {
17474
+ if (tag !== 10) {
17475
+ break;
17476
+ }
17477
+
17478
+ message.organizationId = reader.string();
17479
+ continue;
17480
+ }
17481
+ case 2: {
17482
+ if (tag !== 18) {
17483
+ break;
17484
+ }
17485
+
17486
+ message.projectId = reader.string();
17487
+ continue;
17488
+ }
17489
+ case 3: {
17490
+ if (tag !== 26) {
17491
+ break;
17492
+ }
17493
+
17494
+ message.filter = AIFileFilter.decode(reader, reader.uint32());
17495
+ continue;
17496
+ }
17497
+ }
17498
+ if ((tag & 7) === 4 || tag === 0) {
17499
+ break;
17500
+ }
17501
+ reader.skip(tag & 7);
17502
+ }
17503
+ return message;
17504
+ } finally {
17505
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
17506
+ }
17507
+ },
17508
+
17509
+ fromJSON(object: any): ListFileDirectoriesRequest {
17510
+ return {
17511
+ organizationId: isSet(object.organizationId)
17512
+ ? globalThis.String(object.organizationId)
17513
+ : isSet(object.organization_id)
17514
+ ? globalThis.String(object.organization_id)
17515
+ : "",
17516
+ projectId: isSet(object.projectId)
17517
+ ? globalThis.String(object.projectId)
17518
+ : isSet(object.project_id)
17519
+ ? globalThis.String(object.project_id)
16502
17520
  : "",
17521
+ filter: isSet(object.filter) ? AIFileFilter.fromJSON(object.filter) : undefined,
17522
+ };
17523
+ },
17524
+
17525
+ toJSON(message: ListFileDirectoriesRequest): unknown {
17526
+ const obj: any = {};
17527
+ if (message.organizationId !== "") {
17528
+ obj.organizationId = message.organizationId;
17529
+ }
17530
+ if (message.projectId !== "") {
17531
+ obj.projectId = message.projectId;
17532
+ }
17533
+ if (message.filter !== undefined) {
17534
+ obj.filter = AIFileFilter.toJSON(message.filter);
17535
+ }
17536
+ return obj;
17537
+ },
17538
+
17539
+ create<I extends Exact<DeepPartial<ListFileDirectoriesRequest>, I>>(base?: I): ListFileDirectoriesRequest {
17540
+ return ListFileDirectoriesRequest.fromPartial(base ?? ({} as any));
17541
+ },
17542
+ fromPartial<I extends Exact<DeepPartial<ListFileDirectoriesRequest>, I>>(object: I): ListFileDirectoriesRequest {
17543
+ const message = createBaseListFileDirectoriesRequest();
17544
+ message.organizationId = object.organizationId ?? "";
17545
+ message.projectId = object.projectId ?? "";
17546
+ message.filter = (object.filter !== undefined && object.filter !== null)
17547
+ ? AIFileFilter.fromPartial(object.filter)
17548
+ : undefined;
17549
+ return message;
17550
+ },
17551
+ };
17552
+
17553
+ function createBaseListFileDirectoriesResponse(): ListFileDirectoriesResponse {
17554
+ return { status: undefined, directories: [] };
17555
+ }
17556
+
17557
+ export const ListFileDirectoriesResponse: MessageFns<ListFileDirectoriesResponse> = {
17558
+ encode(message: ListFileDirectoriesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17559
+ if (message.status !== undefined) {
17560
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
17561
+ }
17562
+ for (const v of message.directories) {
17563
+ AIFileDirectory.encode(v!, writer.uint32(18).fork()).join();
17564
+ }
17565
+ return writer;
17566
+ },
17567
+
17568
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFileDirectoriesResponse {
17569
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17570
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17571
+ if (previousRecursionDepth >= 100) {
17572
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
17573
+ }
17574
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17575
+ try {
17576
+ const end = length === undefined ? reader.len : reader.pos + length;
17577
+ const message = createBaseListFileDirectoriesResponse();
17578
+ while (reader.pos < end) {
17579
+ const tag = reader.uint32();
17580
+ switch (tag >>> 3) {
17581
+ case 1: {
17582
+ if (tag !== 10) {
17583
+ break;
17584
+ }
17585
+
17586
+ message.status = ResponseStatus.decode(reader, reader.uint32());
17587
+ continue;
17588
+ }
17589
+ case 2: {
17590
+ if (tag !== 18) {
17591
+ break;
17592
+ }
17593
+
17594
+ message.directories.push(AIFileDirectory.decode(reader, reader.uint32()));
17595
+ continue;
17596
+ }
17597
+ }
17598
+ if ((tag & 7) === 4 || tag === 0) {
17599
+ break;
17600
+ }
17601
+ reader.skip(tag & 7);
17602
+ }
17603
+ return message;
17604
+ } finally {
17605
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
17606
+ }
17607
+ },
17608
+
17609
+ fromJSON(object: any): ListFileDirectoriesResponse {
17610
+ return {
17611
+ status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
17612
+ directories: globalThis.Array.isArray(object?.directories)
17613
+ ? object.directories.map((e: any) => AIFileDirectory.fromJSON(e))
17614
+ : [],
16503
17615
  };
16504
17616
  },
16505
17617
 
16506
- toJSON(message: ListFilesResponse): unknown {
17618
+ toJSON(message: ListFileDirectoriesResponse): unknown {
16507
17619
  const obj: any = {};
16508
17620
  if (message.status !== undefined) {
16509
17621
  obj.status = ResponseStatus.toJSON(message.status);
16510
17622
  }
16511
- if (message.files?.length) {
16512
- obj.files = message.files.map((e) => AIFileRow.toJSON(e));
16513
- }
16514
- if (message.nextPageToken !== "") {
16515
- obj.nextPageToken = message.nextPageToken;
17623
+ if (message.directories?.length) {
17624
+ obj.directories = message.directories.map((e) => AIFileDirectory.toJSON(e));
16516
17625
  }
16517
17626
  return obj;
16518
17627
  },
16519
17628
 
16520
- create<I extends Exact<DeepPartial<ListFilesResponse>, I>>(base?: I): ListFilesResponse {
16521
- return ListFilesResponse.fromPartial(base ?? ({} as any));
17629
+ create<I extends Exact<DeepPartial<ListFileDirectoriesResponse>, I>>(base?: I): ListFileDirectoriesResponse {
17630
+ return ListFileDirectoriesResponse.fromPartial(base ?? ({} as any));
16522
17631
  },
16523
- fromPartial<I extends Exact<DeepPartial<ListFilesResponse>, I>>(object: I): ListFilesResponse {
16524
- const message = createBaseListFilesResponse();
17632
+ fromPartial<I extends Exact<DeepPartial<ListFileDirectoriesResponse>, I>>(object: I): ListFileDirectoriesResponse {
17633
+ const message = createBaseListFileDirectoriesResponse();
16525
17634
  message.status = (object.status !== undefined && object.status !== null)
16526
17635
  ? ResponseStatus.fromPartial(object.status)
16527
17636
  : undefined;
16528
- message.files = object.files?.map((e) => AIFileRow.fromPartial(e)) || [];
16529
- message.nextPageToken = object.nextPageToken ?? "";
17637
+ message.directories = object.directories?.map((e) => AIFileDirectory.fromPartial(e)) || [];
16530
17638
  return message;
16531
17639
  },
16532
17640
  };
16533
17641
 
16534
- function createBaseAIFileRow(): AIFileRow {
17642
+ function createBaseAIFileDirectory(): AIFileDirectory {
16535
17643
  return {
16536
17644
  repositoryKey: "",
16537
- ref: "",
16538
- path: "",
16539
- oldPath: "",
16540
- state: 0,
16541
- tier: 0,
16542
- confidence: 0,
16543
- firstEditedAt: undefined,
16544
- lastEditedAt: undefined,
16545
- lastStagedAt: undefined,
16546
- lastCommittedAt: undefined,
16547
- lastCommitSha: "",
16548
- lastPushedAt: undefined,
16549
- discardedAt: undefined,
16550
- discardReason: "",
16551
- editCount: 0,
16552
- sessions: [],
17645
+ directory: "",
17646
+ files: 0,
17647
+ edits: 0,
17648
+ sessions: 0,
16553
17649
  unlandedCostUsd: 0,
16554
- unlandedOutputTokens: 0,
16555
- totalCostUsd: 0,
16556
- subscriptionTotalCostUsd: 0,
16557
17650
  subscriptionUnlandedCostUsd: 0,
17651
+ unlandedOutputTokens: 0,
17652
+ stateCounts: [],
16558
17653
  };
16559
17654
  }
16560
17655
 
16561
- export const AIFileRow: MessageFns<AIFileRow> = {
16562
- encode(message: AIFileRow, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17656
+ export const AIFileDirectory: MessageFns<AIFileDirectory> = {
17657
+ encode(message: AIFileDirectory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16563
17658
  if (message.repositoryKey !== "") {
16564
17659
  writer.uint32(10).string(message.repositoryKey);
16565
17660
  }
16566
- if (message.ref !== "") {
16567
- writer.uint32(18).string(message.ref);
16568
- }
16569
- if (message.path !== "") {
16570
- writer.uint32(26).string(message.path);
16571
- }
16572
- if (message.oldPath !== "") {
16573
- writer.uint32(34).string(message.oldPath);
16574
- }
16575
- if (message.state !== 0) {
16576
- writer.uint32(40).int32(message.state);
16577
- }
16578
- if (message.tier !== 0) {
16579
- writer.uint32(48).int32(message.tier);
16580
- }
16581
- if (message.confidence !== 0) {
16582
- writer.uint32(56).int32(message.confidence);
16583
- }
16584
- if (message.firstEditedAt !== undefined) {
16585
- Timestamp.encode(toTimestamp(message.firstEditedAt), writer.uint32(66).fork()).join();
16586
- }
16587
- if (message.lastEditedAt !== undefined) {
16588
- Timestamp.encode(toTimestamp(message.lastEditedAt), writer.uint32(74).fork()).join();
16589
- }
16590
- if (message.lastStagedAt !== undefined) {
16591
- Timestamp.encode(toTimestamp(message.lastStagedAt), writer.uint32(82).fork()).join();
16592
- }
16593
- if (message.lastCommittedAt !== undefined) {
16594
- Timestamp.encode(toTimestamp(message.lastCommittedAt), writer.uint32(90).fork()).join();
16595
- }
16596
- if (message.lastCommitSha !== "") {
16597
- writer.uint32(98).string(message.lastCommitSha);
16598
- }
16599
- if (message.lastPushedAt !== undefined) {
16600
- Timestamp.encode(toTimestamp(message.lastPushedAt), writer.uint32(106).fork()).join();
16601
- }
16602
- if (message.discardedAt !== undefined) {
16603
- Timestamp.encode(toTimestamp(message.discardedAt), writer.uint32(114).fork()).join();
17661
+ if (message.directory !== "") {
17662
+ writer.uint32(18).string(message.directory);
16604
17663
  }
16605
- if (message.discardReason !== "") {
16606
- writer.uint32(122).string(message.discardReason);
17664
+ if (message.files !== 0) {
17665
+ writer.uint32(24).uint64(message.files);
16607
17666
  }
16608
- if (message.editCount !== 0) {
16609
- writer.uint32(128).uint32(message.editCount);
17667
+ if (message.edits !== 0) {
17668
+ writer.uint32(32).uint64(message.edits);
16610
17669
  }
16611
- for (const v of message.sessions) {
16612
- AISessionRef.encode(v!, writer.uint32(138).fork()).join();
17670
+ if (message.sessions !== 0) {
17671
+ writer.uint32(40).uint64(message.sessions);
16613
17672
  }
16614
17673
  if (message.unlandedCostUsd !== 0) {
16615
- writer.uint32(145).double(message.unlandedCostUsd);
16616
- }
16617
- if (message.unlandedOutputTokens !== 0) {
16618
- writer.uint32(152).uint64(message.unlandedOutputTokens);
17674
+ writer.uint32(49).double(message.unlandedCostUsd);
16619
17675
  }
16620
- if (message.totalCostUsd !== 0) {
16621
- writer.uint32(161).double(message.totalCostUsd);
17676
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17677
+ writer.uint32(57).double(message.subscriptionUnlandedCostUsd);
16622
17678
  }
16623
- if (message.subscriptionTotalCostUsd !== 0) {
16624
- writer.uint32(169).double(message.subscriptionTotalCostUsd);
17679
+ if (message.unlandedOutputTokens !== 0) {
17680
+ writer.uint32(64).uint64(message.unlandedOutputTokens);
16625
17681
  }
16626
- if (message.subscriptionUnlandedCostUsd !== 0) {
16627
- writer.uint32(177).double(message.subscriptionUnlandedCostUsd);
17682
+ for (const v of message.stateCounts) {
17683
+ AIFileStateCount.encode(v!, writer.uint32(74).fork()).join();
16628
17684
  }
16629
17685
  return writer;
16630
17686
  },
16631
17687
 
16632
- decode(input: BinaryReader | Uint8Array, length?: number): AIFileRow {
17688
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileDirectory {
16633
17689
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16634
17690
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16635
17691
  if (previousRecursionDepth >= 100) {
@@ -16638,7 +17694,7 @@ export const AIFileRow: MessageFns<AIFileRow> = {
16638
17694
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16639
17695
  try {
16640
17696
  const end = length === undefined ? reader.len : reader.pos + length;
16641
- const message = createBaseAIFileRow();
17697
+ const message = createBaseAIFileDirectory();
16642
17698
  while (reader.pos < end) {
16643
17699
  const tag = reader.uint32();
16644
17700
  switch (tag >>> 3) {
@@ -16655,23 +17711,23 @@ export const AIFileRow: MessageFns<AIFileRow> = {
16655
17711
  break;
16656
17712
  }
16657
17713
 
16658
- message.ref = reader.string();
17714
+ message.directory = reader.string();
16659
17715
  continue;
16660
17716
  }
16661
17717
  case 3: {
16662
- if (tag !== 26) {
17718
+ if (tag !== 24) {
16663
17719
  break;
16664
17720
  }
16665
17721
 
16666
- message.path = reader.string();
17722
+ message.files = longToNumber(reader.uint64());
16667
17723
  continue;
16668
17724
  }
16669
17725
  case 4: {
16670
- if (tag !== 34) {
17726
+ if (tag !== 32) {
16671
17727
  break;
16672
17728
  }
16673
17729
 
16674
- message.oldPath = reader.string();
17730
+ message.edits = longToNumber(reader.uint64());
16675
17731
  continue;
16676
17732
  }
16677
17733
  case 5: {
@@ -16679,143 +17735,39 @@ export const AIFileRow: MessageFns<AIFileRow> = {
16679
17735
  break;
16680
17736
  }
16681
17737
 
16682
- message.state = reader.int32() as any;
17738
+ message.sessions = longToNumber(reader.uint64());
16683
17739
  continue;
16684
17740
  }
16685
17741
  case 6: {
16686
- if (tag !== 48) {
16687
- break;
16688
- }
16689
-
16690
- message.tier = reader.int32() as any;
16691
- continue;
16692
- }
16693
- case 7: {
16694
- if (tag !== 56) {
16695
- break;
16696
- }
16697
-
16698
- message.confidence = reader.int32() as any;
16699
- continue;
16700
- }
16701
- case 8: {
16702
- if (tag !== 66) {
16703
- break;
16704
- }
16705
-
16706
- message.firstEditedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
16707
- continue;
16708
- }
16709
- case 9: {
16710
- if (tag !== 74) {
16711
- break;
16712
- }
16713
-
16714
- message.lastEditedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
16715
- continue;
16716
- }
16717
- case 10: {
16718
- if (tag !== 82) {
16719
- break;
16720
- }
16721
-
16722
- message.lastStagedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
16723
- continue;
16724
- }
16725
- case 11: {
16726
- if (tag !== 90) {
16727
- break;
16728
- }
16729
-
16730
- message.lastCommittedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
16731
- continue;
16732
- }
16733
- case 12: {
16734
- if (tag !== 98) {
16735
- break;
16736
- }
16737
-
16738
- message.lastCommitSha = reader.string();
16739
- continue;
16740
- }
16741
- case 13: {
16742
- if (tag !== 106) {
16743
- break;
16744
- }
16745
-
16746
- message.lastPushedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
16747
- continue;
16748
- }
16749
- case 14: {
16750
- if (tag !== 114) {
16751
- break;
16752
- }
16753
-
16754
- message.discardedAt = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
16755
- continue;
16756
- }
16757
- case 15: {
16758
- if (tag !== 122) {
16759
- break;
16760
- }
16761
-
16762
- message.discardReason = reader.string();
16763
- continue;
16764
- }
16765
- case 16: {
16766
- if (tag !== 128) {
16767
- break;
16768
- }
16769
-
16770
- message.editCount = reader.uint32();
16771
- continue;
16772
- }
16773
- case 17: {
16774
- if (tag !== 138) {
16775
- break;
16776
- }
16777
-
16778
- message.sessions.push(AISessionRef.decode(reader, reader.uint32()));
16779
- continue;
16780
- }
16781
- case 18: {
16782
- if (tag !== 145) {
17742
+ if (tag !== 49) {
16783
17743
  break;
16784
17744
  }
16785
17745
 
16786
17746
  message.unlandedCostUsd = reader.double();
16787
17747
  continue;
16788
17748
  }
16789
- case 19: {
16790
- if (tag !== 152) {
16791
- break;
16792
- }
16793
-
16794
- message.unlandedOutputTokens = longToNumber(reader.uint64());
16795
- continue;
16796
- }
16797
- case 20: {
16798
- if (tag !== 161) {
17749
+ case 7: {
17750
+ if (tag !== 57) {
16799
17751
  break;
16800
17752
  }
16801
17753
 
16802
- message.totalCostUsd = reader.double();
17754
+ message.subscriptionUnlandedCostUsd = reader.double();
16803
17755
  continue;
16804
17756
  }
16805
- case 21: {
16806
- if (tag !== 169) {
17757
+ case 8: {
17758
+ if (tag !== 64) {
16807
17759
  break;
16808
17760
  }
16809
17761
 
16810
- message.subscriptionTotalCostUsd = reader.double();
17762
+ message.unlandedOutputTokens = longToNumber(reader.uint64());
16811
17763
  continue;
16812
17764
  }
16813
- case 22: {
16814
- if (tag !== 177) {
17765
+ case 9: {
17766
+ if (tag !== 74) {
16815
17767
  break;
16816
17768
  }
16817
17769
 
16818
- message.subscriptionUnlandedCostUsd = reader.double();
17770
+ message.stateCounts.push(AIFileStateCount.decode(reader, reader.uint32()));
16819
17771
  continue;
16820
17772
  }
16821
17773
  }
@@ -16830,197 +17782,171 @@ export const AIFileRow: MessageFns<AIFileRow> = {
16830
17782
  }
16831
17783
  },
16832
17784
 
16833
- fromJSON(object: any): AIFileRow {
17785
+ fromJSON(object: any): AIFileDirectory {
16834
17786
  return {
16835
17787
  repositoryKey: isSet(object.repositoryKey)
16836
17788
  ? globalThis.String(object.repositoryKey)
16837
17789
  : isSet(object.repository_key)
16838
17790
  ? globalThis.String(object.repository_key)
16839
17791
  : "",
16840
- ref: isSet(object.ref) ? globalThis.String(object.ref) : "",
16841
- path: isSet(object.path) ? globalThis.String(object.path) : "",
16842
- oldPath: isSet(object.oldPath)
16843
- ? globalThis.String(object.oldPath)
16844
- : isSet(object.old_path)
16845
- ? globalThis.String(object.old_path)
16846
- : "",
16847
- state: isSet(object.state) ? aIFileLifecycleFromJSON(object.state) : 0,
16848
- tier: isSet(object.tier) ? aIFileTierFromJSON(object.tier) : 0,
16849
- confidence: isSet(object.confidence) ? aIFileConfidenceFromJSON(object.confidence) : 0,
16850
- firstEditedAt: isSet(object.firstEditedAt)
16851
- ? fromJsonTimestamp(object.firstEditedAt)
16852
- : isSet(object.first_edited_at)
16853
- ? fromJsonTimestamp(object.first_edited_at)
16854
- : undefined,
16855
- lastEditedAt: isSet(object.lastEditedAt)
16856
- ? fromJsonTimestamp(object.lastEditedAt)
16857
- : isSet(object.last_edited_at)
16858
- ? fromJsonTimestamp(object.last_edited_at)
16859
- : undefined,
16860
- lastStagedAt: isSet(object.lastStagedAt)
16861
- ? fromJsonTimestamp(object.lastStagedAt)
16862
- : isSet(object.last_staged_at)
16863
- ? fromJsonTimestamp(object.last_staged_at)
16864
- : undefined,
16865
- lastCommittedAt: isSet(object.lastCommittedAt)
16866
- ? fromJsonTimestamp(object.lastCommittedAt)
16867
- : isSet(object.last_committed_at)
16868
- ? fromJsonTimestamp(object.last_committed_at)
16869
- : undefined,
16870
- lastCommitSha: isSet(object.lastCommitSha)
16871
- ? globalThis.String(object.lastCommitSha)
16872
- : isSet(object.last_commit_sha)
16873
- ? globalThis.String(object.last_commit_sha)
16874
- : "",
16875
- lastPushedAt: isSet(object.lastPushedAt)
16876
- ? fromJsonTimestamp(object.lastPushedAt)
16877
- : isSet(object.last_pushed_at)
16878
- ? fromJsonTimestamp(object.last_pushed_at)
16879
- : undefined,
16880
- discardedAt: isSet(object.discardedAt)
16881
- ? fromJsonTimestamp(object.discardedAt)
16882
- : isSet(object.discarded_at)
16883
- ? fromJsonTimestamp(object.discarded_at)
16884
- : undefined,
16885
- discardReason: isSet(object.discardReason)
16886
- ? globalThis.String(object.discardReason)
16887
- : isSet(object.discard_reason)
16888
- ? globalThis.String(object.discard_reason)
16889
- : "",
16890
- editCount: isSet(object.editCount)
16891
- ? globalThis.Number(object.editCount)
16892
- : isSet(object.edit_count)
16893
- ? globalThis.Number(object.edit_count)
16894
- : 0,
16895
- sessions: globalThis.Array.isArray(object?.sessions)
16896
- ? object.sessions.map((e: any) => AISessionRef.fromJSON(e))
16897
- : [],
17792
+ directory: isSet(object.directory) ? globalThis.String(object.directory) : "",
17793
+ files: isSet(object.files) ? globalThis.Number(object.files) : 0,
17794
+ edits: isSet(object.edits) ? globalThis.Number(object.edits) : 0,
17795
+ sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
16898
17796
  unlandedCostUsd: isSet(object.unlandedCostUsd)
16899
17797
  ? globalThis.Number(object.unlandedCostUsd)
16900
17798
  : isSet(object.unlanded_cost_usd)
16901
17799
  ? globalThis.Number(object.unlanded_cost_usd)
16902
17800
  : 0,
16903
- unlandedOutputTokens: isSet(object.unlandedOutputTokens)
16904
- ? globalThis.Number(object.unlandedOutputTokens)
16905
- : isSet(object.unlanded_output_tokens)
16906
- ? globalThis.Number(object.unlanded_output_tokens)
16907
- : 0,
16908
- totalCostUsd: isSet(object.totalCostUsd)
16909
- ? globalThis.Number(object.totalCostUsd)
16910
- : isSet(object.total_cost_usd)
16911
- ? globalThis.Number(object.total_cost_usd)
16912
- : 0,
16913
- subscriptionTotalCostUsd: isSet(object.subscriptionTotalCostUsd)
16914
- ? globalThis.Number(object.subscriptionTotalCostUsd)
16915
- : isSet(object.subscription_total_cost_usd)
16916
- ? globalThis.Number(object.subscription_total_cost_usd)
16917
- : 0,
16918
17801
  subscriptionUnlandedCostUsd: isSet(object.subscriptionUnlandedCostUsd)
16919
17802
  ? globalThis.Number(object.subscriptionUnlandedCostUsd)
16920
17803
  : isSet(object.subscription_unlanded_cost_usd)
16921
17804
  ? globalThis.Number(object.subscription_unlanded_cost_usd)
16922
17805
  : 0,
17806
+ unlandedOutputTokens: isSet(object.unlandedOutputTokens)
17807
+ ? globalThis.Number(object.unlandedOutputTokens)
17808
+ : isSet(object.unlanded_output_tokens)
17809
+ ? globalThis.Number(object.unlanded_output_tokens)
17810
+ : 0,
17811
+ stateCounts: globalThis.Array.isArray(object?.stateCounts)
17812
+ ? object.stateCounts.map((e: any) => AIFileStateCount.fromJSON(e))
17813
+ : globalThis.Array.isArray(object?.state_counts)
17814
+ ? object.state_counts.map((e: any) => AIFileStateCount.fromJSON(e))
17815
+ : [],
16923
17816
  };
16924
17817
  },
16925
17818
 
16926
- toJSON(message: AIFileRow): unknown {
17819
+ toJSON(message: AIFileDirectory): unknown {
16927
17820
  const obj: any = {};
16928
17821
  if (message.repositoryKey !== "") {
16929
17822
  obj.repositoryKey = message.repositoryKey;
16930
17823
  }
16931
- if (message.ref !== "") {
16932
- obj.ref = message.ref;
16933
- }
16934
- if (message.path !== "") {
16935
- obj.path = message.path;
16936
- }
16937
- if (message.oldPath !== "") {
16938
- obj.oldPath = message.oldPath;
16939
- }
16940
- if (message.state !== 0) {
16941
- obj.state = aIFileLifecycleToJSON(message.state);
16942
- }
16943
- if (message.tier !== 0) {
16944
- obj.tier = aIFileTierToJSON(message.tier);
16945
- }
16946
- if (message.confidence !== 0) {
16947
- obj.confidence = aIFileConfidenceToJSON(message.confidence);
16948
- }
16949
- if (message.firstEditedAt !== undefined) {
16950
- obj.firstEditedAt = message.firstEditedAt.toISOString();
17824
+ if (message.directory !== "") {
17825
+ obj.directory = message.directory;
16951
17826
  }
16952
- if (message.lastEditedAt !== undefined) {
16953
- obj.lastEditedAt = message.lastEditedAt.toISOString();
16954
- }
16955
- if (message.lastStagedAt !== undefined) {
16956
- obj.lastStagedAt = message.lastStagedAt.toISOString();
17827
+ if (message.files !== 0) {
17828
+ obj.files = Math.round(message.files);
16957
17829
  }
16958
- if (message.lastCommittedAt !== undefined) {
16959
- obj.lastCommittedAt = message.lastCommittedAt.toISOString();
17830
+ if (message.edits !== 0) {
17831
+ obj.edits = Math.round(message.edits);
16960
17832
  }
16961
- if (message.lastCommitSha !== "") {
16962
- obj.lastCommitSha = message.lastCommitSha;
17833
+ if (message.sessions !== 0) {
17834
+ obj.sessions = Math.round(message.sessions);
16963
17835
  }
16964
- if (message.lastPushedAt !== undefined) {
16965
- obj.lastPushedAt = message.lastPushedAt.toISOString();
17836
+ if (message.unlandedCostUsd !== 0) {
17837
+ obj.unlandedCostUsd = message.unlandedCostUsd;
16966
17838
  }
16967
- if (message.discardedAt !== undefined) {
16968
- obj.discardedAt = message.discardedAt.toISOString();
17839
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17840
+ obj.subscriptionUnlandedCostUsd = message.subscriptionUnlandedCostUsd;
16969
17841
  }
16970
- if (message.discardReason !== "") {
16971
- obj.discardReason = message.discardReason;
17842
+ if (message.unlandedOutputTokens !== 0) {
17843
+ obj.unlandedOutputTokens = Math.round(message.unlandedOutputTokens);
16972
17844
  }
16973
- if (message.editCount !== 0) {
16974
- obj.editCount = Math.round(message.editCount);
17845
+ if (message.stateCounts?.length) {
17846
+ obj.stateCounts = message.stateCounts.map((e) => AIFileStateCount.toJSON(e));
16975
17847
  }
16976
- if (message.sessions?.length) {
16977
- obj.sessions = message.sessions.map((e) => AISessionRef.toJSON(e));
17848
+ return obj;
17849
+ },
17850
+
17851
+ create<I extends Exact<DeepPartial<AIFileDirectory>, I>>(base?: I): AIFileDirectory {
17852
+ return AIFileDirectory.fromPartial(base ?? ({} as any));
17853
+ },
17854
+ fromPartial<I extends Exact<DeepPartial<AIFileDirectory>, I>>(object: I): AIFileDirectory {
17855
+ const message = createBaseAIFileDirectory();
17856
+ message.repositoryKey = object.repositoryKey ?? "";
17857
+ message.directory = object.directory ?? "";
17858
+ message.files = object.files ?? 0;
17859
+ message.edits = object.edits ?? 0;
17860
+ message.sessions = object.sessions ?? 0;
17861
+ message.unlandedCostUsd = object.unlandedCostUsd ?? 0;
17862
+ message.subscriptionUnlandedCostUsd = object.subscriptionUnlandedCostUsd ?? 0;
17863
+ message.unlandedOutputTokens = object.unlandedOutputTokens ?? 0;
17864
+ message.stateCounts = object.stateCounts?.map((e) => AIFileStateCount.fromPartial(e)) || [];
17865
+ return message;
17866
+ },
17867
+ };
17868
+
17869
+ function createBaseAIFileStateCount(): AIFileStateCount {
17870
+ return { state: 0, files: 0 };
17871
+ }
17872
+
17873
+ export const AIFileStateCount: MessageFns<AIFileStateCount> = {
17874
+ encode(message: AIFileStateCount, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17875
+ if (message.state !== 0) {
17876
+ writer.uint32(8).int32(message.state);
16978
17877
  }
16979
- if (message.unlandedCostUsd !== 0) {
16980
- obj.unlandedCostUsd = message.unlandedCostUsd;
17878
+ if (message.files !== 0) {
17879
+ writer.uint32(16).uint64(message.files);
16981
17880
  }
16982
- if (message.unlandedOutputTokens !== 0) {
16983
- obj.unlandedOutputTokens = Math.round(message.unlandedOutputTokens);
17881
+ return writer;
17882
+ },
17883
+
17884
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileStateCount {
17885
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17886
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17887
+ if (previousRecursionDepth >= 100) {
17888
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
16984
17889
  }
16985
- if (message.totalCostUsd !== 0) {
16986
- obj.totalCostUsd = message.totalCostUsd;
17890
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17891
+ try {
17892
+ const end = length === undefined ? reader.len : reader.pos + length;
17893
+ const message = createBaseAIFileStateCount();
17894
+ while (reader.pos < end) {
17895
+ const tag = reader.uint32();
17896
+ switch (tag >>> 3) {
17897
+ case 1: {
17898
+ if (tag !== 8) {
17899
+ break;
17900
+ }
17901
+
17902
+ message.state = reader.int32() as any;
17903
+ continue;
17904
+ }
17905
+ case 2: {
17906
+ if (tag !== 16) {
17907
+ break;
17908
+ }
17909
+
17910
+ message.files = longToNumber(reader.uint64());
17911
+ continue;
17912
+ }
17913
+ }
17914
+ if ((tag & 7) === 4 || tag === 0) {
17915
+ break;
17916
+ }
17917
+ reader.skip(tag & 7);
17918
+ }
17919
+ return message;
17920
+ } finally {
17921
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
16987
17922
  }
16988
- if (message.subscriptionTotalCostUsd !== 0) {
16989
- obj.subscriptionTotalCostUsd = message.subscriptionTotalCostUsd;
17923
+ },
17924
+
17925
+ fromJSON(object: any): AIFileStateCount {
17926
+ return {
17927
+ state: isSet(object.state) ? aIFileLifecycleFromJSON(object.state) : 0,
17928
+ files: isSet(object.files) ? globalThis.Number(object.files) : 0,
17929
+ };
17930
+ },
17931
+
17932
+ toJSON(message: AIFileStateCount): unknown {
17933
+ const obj: any = {};
17934
+ if (message.state !== 0) {
17935
+ obj.state = aIFileLifecycleToJSON(message.state);
16990
17936
  }
16991
- if (message.subscriptionUnlandedCostUsd !== 0) {
16992
- obj.subscriptionUnlandedCostUsd = message.subscriptionUnlandedCostUsd;
17937
+ if (message.files !== 0) {
17938
+ obj.files = Math.round(message.files);
16993
17939
  }
16994
17940
  return obj;
16995
17941
  },
16996
17942
 
16997
- create<I extends Exact<DeepPartial<AIFileRow>, I>>(base?: I): AIFileRow {
16998
- return AIFileRow.fromPartial(base ?? ({} as any));
17943
+ create<I extends Exact<DeepPartial<AIFileStateCount>, I>>(base?: I): AIFileStateCount {
17944
+ return AIFileStateCount.fromPartial(base ?? ({} as any));
16999
17945
  },
17000
- fromPartial<I extends Exact<DeepPartial<AIFileRow>, I>>(object: I): AIFileRow {
17001
- const message = createBaseAIFileRow();
17002
- message.repositoryKey = object.repositoryKey ?? "";
17003
- message.ref = object.ref ?? "";
17004
- message.path = object.path ?? "";
17005
- message.oldPath = object.oldPath ?? "";
17946
+ fromPartial<I extends Exact<DeepPartial<AIFileStateCount>, I>>(object: I): AIFileStateCount {
17947
+ const message = createBaseAIFileStateCount();
17006
17948
  message.state = object.state ?? 0;
17007
- message.tier = object.tier ?? 0;
17008
- message.confidence = object.confidence ?? 0;
17009
- message.firstEditedAt = object.firstEditedAt ?? undefined;
17010
- message.lastEditedAt = object.lastEditedAt ?? undefined;
17011
- message.lastStagedAt = object.lastStagedAt ?? undefined;
17012
- message.lastCommittedAt = object.lastCommittedAt ?? undefined;
17013
- message.lastCommitSha = object.lastCommitSha ?? "";
17014
- message.lastPushedAt = object.lastPushedAt ?? undefined;
17015
- message.discardedAt = object.discardedAt ?? undefined;
17016
- message.discardReason = object.discardReason ?? "";
17017
- message.editCount = object.editCount ?? 0;
17018
- message.sessions = object.sessions?.map((e) => AISessionRef.fromPartial(e)) || [];
17019
- message.unlandedCostUsd = object.unlandedCostUsd ?? 0;
17020
- message.unlandedOutputTokens = object.unlandedOutputTokens ?? 0;
17021
- message.totalCostUsd = object.totalCostUsd ?? 0;
17022
- message.subscriptionTotalCostUsd = object.subscriptionTotalCostUsd ?? 0;
17023
- message.subscriptionUnlandedCostUsd = object.subscriptionUnlandedCostUsd ?? 0;
17949
+ message.files = object.files ?? 0;
17024
17950
  return message;
17025
17951
  },
17026
17952
  };
@@ -19969,11 +20895,20 @@ export interface AIGatewayService {
19969
20895
  * conversations last active in the window, their principals and git counts, and the window's burn by model.
19970
20896
  */
19971
20897
  StreamProjectSummaries(request: ProjectSummariesRequest, metadata?: Metadata): Observable<ProjectSummaries>;
19972
- /** Per-file working-state feed (keyset-paginated) behind the unlanded-work funnel. */
20898
+ /**
20899
+ * Per-file working-state feed (keyset-paginated) behind the unlanded-work funnel: one row per
20900
+ * (repository_key, ref, path) the AI edited (with filter.sessions or filter.paths, one they name), its
20901
+ * most-edited checkout copy among those the filter keeps. Mirrors telemetry.api.v1.
20902
+ */
19973
20903
  ListFiles(request: ListFilesRequest, metadata?: Metadata): Promise<ListFilesResponse>;
20904
+ /**
20905
+ * ListFiles' files rolled up by directory, one row per (repository_key, directory), every matching directory in
20906
+ * one response (unpaged). Mirrors telemetry.api.v1.
20907
+ */
20908
+ ListFileDirectories(request: ListFileDirectoriesRequest, metadata?: Metadata): Promise<ListFileDirectoriesResponse>;
19974
20909
  /**
19975
20910
  * Live stream of the unlanded-work funnel: aging tiers + discarded (git-invisible churn), observed vs
19976
- * unverified, a complete snapshot re-derived each tick.
20911
+ * unverified, a complete snapshot re-derived each tick. Counts every checkout copy, edited or not.
19977
20912
  */
19978
20913
  StreamFilesSummary(request: FilesSummaryRequest, metadata?: Metadata): Observable<FilesSummary>;
19979
20914
  /** Latest observed list price per catalog listing from the global catalog, under stored names. */
@@ -20035,6 +20970,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
20035
20970
  this.StreamProjectOverview = this.StreamProjectOverview.bind(this);
20036
20971
  this.StreamProjectSummaries = this.StreamProjectSummaries.bind(this);
20037
20972
  this.ListFiles = this.ListFiles.bind(this);
20973
+ this.ListFileDirectories = this.ListFileDirectories.bind(this);
20038
20974
  this.StreamFilesSummary = this.StreamFilesSummary.bind(this);
20039
20975
  this.ListModelPrices = this.ListModelPrices.bind(this);
20040
20976
  this.ListModelPriceHistory = this.ListModelPriceHistory.bind(this);
@@ -20151,6 +21087,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
20151
21087
  return promise.then((data) => ListFilesResponse.decode(new BinaryReader(data)));
20152
21088
  }
20153
21089
 
21090
+ ListFileDirectories(request: ListFileDirectoriesRequest, metadata?: Metadata): Promise<ListFileDirectoriesResponse> {
21091
+ const data = ListFileDirectoriesRequest.encode(request).finish();
21092
+ const promise = this.rpc.request(this.service, "ListFileDirectories", data, metadata);
21093
+ return promise.then((data) => ListFileDirectoriesResponse.decode(new BinaryReader(data)));
21094
+ }
21095
+
20154
21096
  StreamFilesSummary(request: FilesSummaryRequest, metadata?: Metadata): Observable<FilesSummary> {
20155
21097
  const data = FilesSummaryRequest.encode(request).finish();
20156
21098
  const result = this.rpc.serverStreamingRequest(this.service, "StreamFilesSummary", data, metadata);