@miradorlabs/web-grpc 3.24.0 → 3.26.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,
@@ -921,6 +991,11 @@ export interface AISessionSummary {
921
991
  clients: string[];
922
992
  /** The versions those apps reported, verbatim. */
923
993
  clientVersions: string[];
994
+ /**
995
+ * The terma CLI versions the session's records named, verbatim, client-supplied and display only. Empty when
996
+ * none named one (not carried by terma, by a terma older than the stamp, or written before the column existed).
997
+ */
998
+ termaVersions: string[];
924
999
  /** The harness's latest title for the session (summary · session_title); "" when it named none. */
925
1000
  title: string;
926
1001
  /** The harness's latest "while you were away" recap (summary · recap); "" when it wrote none. */
@@ -1225,7 +1300,14 @@ export interface ListGitActivitiesResponse {
1225
1300
  export interface StreamGitActivitiesRequest {
1226
1301
  organizationId: string;
1227
1302
  projectId: string;
1228
- filter: AIGitActivityFilter | undefined;
1303
+ filter:
1304
+ | AIGitActivityFilter
1305
+ | undefined;
1306
+ /**
1307
+ * The newest activities the snapshot and each later poll read: 1..1000, the server default (1000) when 0;
1308
+ * negative is INVALID_ARGUMENT.
1309
+ */
1310
+ pageSize: number;
1229
1311
  }
1230
1312
 
1231
1313
  /**
@@ -1812,6 +1894,11 @@ export interface AISessionRef {
1812
1894
  sessionId: string;
1813
1895
  }
1814
1896
 
1897
+ /**
1898
+ * AIFileFilter mirrors telemetry.api.v1.AIFileFilter: paths match a file's path exactly; directories keep the
1899
+ * files directly in them; branches keep the files on those refs. Without sessions or paths a read keeps only files
1900
+ * the AI edited; with either, every file they name.
1901
+ */
1815
1902
  export interface AIFileFilter {
1816
1903
  repositoryKeys: string[];
1817
1904
  refs: string[];
@@ -1823,13 +1910,36 @@ export interface AIFileFilter {
1823
1910
  activeAfter: Date | undefined;
1824
1911
  activeBefore: Date | undefined;
1825
1912
  abandonedHorizon: Duration | undefined;
1913
+ paths: string[];
1914
+ directories: AIFileDirectoryRef[];
1915
+ branches: AIFileBranchRef[];
1916
+ }
1917
+
1918
+ /**
1919
+ * AIFileDirectoryRef names a directory as AIFileDirectory does. '' is a real value in both fields: the
1920
+ * unattributed repository, the repository root.
1921
+ */
1922
+ export interface AIFileDirectoryRef {
1923
+ repositoryKey: string;
1924
+ directory: string;
1925
+ }
1926
+
1927
+ /** AIFileBranchRef names one ref of one repository: a pair, as repository_keys and refs would cross repositories. */
1928
+ export interface AIFileBranchRef {
1929
+ repositoryKey: string;
1930
+ ref: string;
1826
1931
  }
1827
1932
 
1828
1933
  export interface ListFilesRequest {
1829
1934
  organizationId: string;
1830
1935
  projectId: string;
1831
- filter: AIFileFilter | undefined;
1936
+ filter:
1937
+ | AIFileFilter
1938
+ | undefined;
1939
+ /** Unspecified is the file identity order: repository_key, ref, path. */
1940
+ sort: AIFileSort;
1832
1941
  pageSize: number;
1942
+ /** Valid only with the sort and filter that produced it. */
1833
1943
  pageToken: string;
1834
1944
  }
1835
1945
 
@@ -1870,6 +1980,44 @@ export interface AIFileRow {
1870
1980
  subscriptionUnlandedCostUsd: number;
1871
1981
  }
1872
1982
 
1983
+ export interface ListFileDirectoriesRequest {
1984
+ organizationId: string;
1985
+ projectId: string;
1986
+ filter: AIFileFilter | undefined;
1987
+ }
1988
+
1989
+ export interface ListFileDirectoriesResponse {
1990
+ status:
1991
+ | ResponseStatus
1992
+ | undefined;
1993
+ /** by repository_key, then directory */
1994
+ directories: AIFileDirectory[];
1995
+ }
1996
+
1997
+ /**
1998
+ * AIFileDirectory mirrors telemetry.api.v1.AIFileDirectory. Net = unlanded_cost_usd -
1999
+ * subscription_unlanded_cost_usd, as on AIFileRow.
2000
+ */
2001
+ export interface AIFileDirectory {
2002
+ repositoryKey: string;
2003
+ /** the path up to its last '/'; '' is the repository root */
2004
+ directory: string;
2005
+ files: number;
2006
+ edits: number;
2007
+ /** distinct (source_system, session_id) across its files */
2008
+ sessions: number;
2009
+ unlandedCostUsd: number;
2010
+ subscriptionUnlandedCostUsd: number;
2011
+ unlandedOutputTokens: number;
2012
+ /** files per lifecycle state; a state with none is absent */
2013
+ stateCounts: AIFileStateCount[];
2014
+ }
2015
+
2016
+ export interface AIFileStateCount {
2017
+ state: AIFileLifecycle;
2018
+ files: number;
2019
+ }
2020
+
1873
2021
  export interface FilesSummaryRequest {
1874
2022
  organizationId: string;
1875
2023
  projectId: string;
@@ -2967,6 +3115,7 @@ function createBaseAISessionSummary(): AISessionSummary {
2967
3115
  observer: "",
2968
3116
  clients: [],
2969
3117
  clientVersions: [],
3118
+ termaVersions: [],
2970
3119
  title: "",
2971
3120
  recap: "",
2972
3121
  };
@@ -3070,6 +3219,9 @@ export const AISessionSummary: MessageFns<AISessionSummary> = {
3070
3219
  for (const v of message.clientVersions) {
3071
3220
  writer.uint32(258).string(v!);
3072
3221
  }
3222
+ for (const v of message.termaVersions) {
3223
+ writer.uint32(282).string(v!);
3224
+ }
3073
3225
  if (message.title !== "") {
3074
3226
  writer.uint32(266).string(message.title);
3075
3227
  }
@@ -3348,6 +3500,14 @@ export const AISessionSummary: MessageFns<AISessionSummary> = {
3348
3500
  message.clientVersions.push(reader.string());
3349
3501
  continue;
3350
3502
  }
3503
+ case 35: {
3504
+ if (tag !== 282) {
3505
+ break;
3506
+ }
3507
+
3508
+ message.termaVersions.push(reader.string());
3509
+ continue;
3510
+ }
3351
3511
  case 33: {
3352
3512
  if (tag !== 266) {
3353
3513
  break;
@@ -3506,6 +3666,11 @@ export const AISessionSummary: MessageFns<AISessionSummary> = {
3506
3666
  : globalThis.Array.isArray(object?.client_versions)
3507
3667
  ? object.client_versions.map((e: any) => globalThis.String(e))
3508
3668
  : [],
3669
+ termaVersions: globalThis.Array.isArray(object?.termaVersions)
3670
+ ? object.termaVersions.map((e: any) => globalThis.String(e))
3671
+ : globalThis.Array.isArray(object?.terma_versions)
3672
+ ? object.terma_versions.map((e: any) => globalThis.String(e))
3673
+ : [],
3509
3674
  title: isSet(object.title) ? globalThis.String(object.title) : "",
3510
3675
  recap: isSet(object.recap) ? globalThis.String(object.recap) : "",
3511
3676
  };
@@ -3609,6 +3774,9 @@ export const AISessionSummary: MessageFns<AISessionSummary> = {
3609
3774
  if (message.clientVersions?.length) {
3610
3775
  obj.clientVersions = message.clientVersions;
3611
3776
  }
3777
+ if (message.termaVersions?.length) {
3778
+ obj.termaVersions = message.termaVersions;
3779
+ }
3612
3780
  if (message.title !== "") {
3613
3781
  obj.title = message.title;
3614
3782
  }
@@ -3657,6 +3825,7 @@ export const AISessionSummary: MessageFns<AISessionSummary> = {
3657
3825
  message.observer = object.observer ?? "";
3658
3826
  message.clients = object.clients?.map((e) => e) || [];
3659
3827
  message.clientVersions = object.clientVersions?.map((e) => e) || [];
3828
+ message.termaVersions = object.termaVersions?.map((e) => e) || [];
3660
3829
  message.title = object.title ?? "";
3661
3830
  message.recap = object.recap ?? "";
3662
3831
  return message;
@@ -7193,7 +7362,7 @@ export const ListGitActivitiesResponse: MessageFns<ListGitActivitiesResponse> =
7193
7362
  };
7194
7363
 
7195
7364
  function createBaseStreamGitActivitiesRequest(): StreamGitActivitiesRequest {
7196
- return { organizationId: "", projectId: "", filter: undefined };
7365
+ return { organizationId: "", projectId: "", filter: undefined, pageSize: 0 };
7197
7366
  }
7198
7367
 
7199
7368
  export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest> = {
@@ -7207,6 +7376,9 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7207
7376
  if (message.filter !== undefined) {
7208
7377
  AIGitActivityFilter.encode(message.filter, writer.uint32(26).fork()).join();
7209
7378
  }
7379
+ if (message.pageSize !== 0) {
7380
+ writer.uint32(32).int32(message.pageSize);
7381
+ }
7210
7382
  return writer;
7211
7383
  },
7212
7384
 
@@ -7247,6 +7419,14 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7247
7419
  message.filter = AIGitActivityFilter.decode(reader, reader.uint32());
7248
7420
  continue;
7249
7421
  }
7422
+ case 4: {
7423
+ if (tag !== 32) {
7424
+ break;
7425
+ }
7426
+
7427
+ message.pageSize = reader.int32();
7428
+ continue;
7429
+ }
7250
7430
  }
7251
7431
  if ((tag & 7) === 4 || tag === 0) {
7252
7432
  break;
@@ -7272,6 +7452,11 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7272
7452
  ? globalThis.String(object.project_id)
7273
7453
  : "",
7274
7454
  filter: isSet(object.filter) ? AIGitActivityFilter.fromJSON(object.filter) : undefined,
7455
+ pageSize: isSet(object.pageSize)
7456
+ ? globalThis.Number(object.pageSize)
7457
+ : isSet(object.page_size)
7458
+ ? globalThis.Number(object.page_size)
7459
+ : 0,
7275
7460
  };
7276
7461
  },
7277
7462
 
@@ -7286,6 +7471,9 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7286
7471
  if (message.filter !== undefined) {
7287
7472
  obj.filter = AIGitActivityFilter.toJSON(message.filter);
7288
7473
  }
7474
+ if (message.pageSize !== 0) {
7475
+ obj.pageSize = Math.round(message.pageSize);
7476
+ }
7289
7477
  return obj;
7290
7478
  },
7291
7479
 
@@ -7299,6 +7487,7 @@ export const StreamGitActivitiesRequest: MessageFns<StreamGitActivitiesRequest>
7299
7487
  message.filter = (object.filter !== undefined && object.filter !== null)
7300
7488
  ? AIGitActivityFilter.fromPartial(object.filter)
7301
7489
  : undefined;
7490
+ message.pageSize = object.pageSize ?? 0;
7302
7491
  return message;
7303
7492
  },
7304
7493
  };
@@ -16031,6 +16220,9 @@ function createBaseAIFileFilter(): AIFileFilter {
16031
16220
  activeAfter: undefined,
16032
16221
  activeBefore: undefined,
16033
16222
  abandonedHorizon: undefined,
16223
+ paths: [],
16224
+ directories: [],
16225
+ branches: [],
16034
16226
  };
16035
16227
  }
16036
16228
 
@@ -16063,6 +16255,15 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16063
16255
  if (message.abandonedHorizon !== undefined) {
16064
16256
  Duration.encode(message.abandonedHorizon, writer.uint32(74).fork()).join();
16065
16257
  }
16258
+ for (const v of message.paths) {
16259
+ writer.uint32(82).string(v!);
16260
+ }
16261
+ for (const v of message.directories) {
16262
+ AIFileDirectoryRef.encode(v!, writer.uint32(90).fork()).join();
16263
+ }
16264
+ for (const v of message.branches) {
16265
+ AIFileBranchRef.encode(v!, writer.uint32(98).fork()).join();
16266
+ }
16066
16267
  return writer;
16067
16268
  },
16068
16269
 
@@ -16171,6 +16372,30 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16171
16372
  message.abandonedHorizon = Duration.decode(reader, reader.uint32());
16172
16373
  continue;
16173
16374
  }
16375
+ case 10: {
16376
+ if (tag !== 82) {
16377
+ break;
16378
+ }
16379
+
16380
+ message.paths.push(reader.string());
16381
+ continue;
16382
+ }
16383
+ case 11: {
16384
+ if (tag !== 90) {
16385
+ break;
16386
+ }
16387
+
16388
+ message.directories.push(AIFileDirectoryRef.decode(reader, reader.uint32()));
16389
+ continue;
16390
+ }
16391
+ case 12: {
16392
+ if (tag !== 98) {
16393
+ break;
16394
+ }
16395
+
16396
+ message.branches.push(AIFileBranchRef.decode(reader, reader.uint32()));
16397
+ continue;
16398
+ }
16174
16399
  }
16175
16400
  if ((tag & 7) === 4 || tag === 0) {
16176
16401
  break;
@@ -16216,6 +16441,15 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16216
16441
  : isSet(object.abandoned_horizon)
16217
16442
  ? Duration.fromJSON(object.abandoned_horizon)
16218
16443
  : undefined,
16444
+ paths: globalThis.Array.isArray(object?.paths)
16445
+ ? object.paths.map((e: any) => globalThis.String(e))
16446
+ : [],
16447
+ directories: globalThis.Array.isArray(object?.directories)
16448
+ ? object.directories.map((e: any) => AIFileDirectoryRef.fromJSON(e))
16449
+ : [],
16450
+ branches: globalThis.Array.isArray(object?.branches)
16451
+ ? object.branches.map((e: any) => AIFileBranchRef.fromJSON(e))
16452
+ : [],
16219
16453
  };
16220
16454
  },
16221
16455
 
@@ -16248,6 +16482,15 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16248
16482
  if (message.abandonedHorizon !== undefined) {
16249
16483
  obj.abandonedHorizon = Duration.toJSON(message.abandonedHorizon);
16250
16484
  }
16485
+ if (message.paths?.length) {
16486
+ obj.paths = message.paths;
16487
+ }
16488
+ if (message.directories?.length) {
16489
+ obj.directories = message.directories.map((e) => AIFileDirectoryRef.toJSON(e));
16490
+ }
16491
+ if (message.branches?.length) {
16492
+ obj.branches = message.branches.map((e) => AIFileBranchRef.toJSON(e));
16493
+ }
16251
16494
  return obj;
16252
16495
  },
16253
16496
 
@@ -16269,35 +16512,29 @@ export const AIFileFilter: MessageFns<AIFileFilter> = {
16269
16512
  message.abandonedHorizon = (object.abandonedHorizon !== undefined && object.abandonedHorizon !== null)
16270
16513
  ? Duration.fromPartial(object.abandonedHorizon)
16271
16514
  : undefined;
16515
+ message.paths = object.paths?.map((e) => e) || [];
16516
+ message.directories = object.directories?.map((e) => AIFileDirectoryRef.fromPartial(e)) || [];
16517
+ message.branches = object.branches?.map((e) => AIFileBranchRef.fromPartial(e)) || [];
16272
16518
  return message;
16273
16519
  },
16274
16520
  };
16275
16521
 
16276
- function createBaseListFilesRequest(): ListFilesRequest {
16277
- return { organizationId: "", projectId: "", filter: undefined, pageSize: 0, pageToken: "" };
16522
+ function createBaseAIFileDirectoryRef(): AIFileDirectoryRef {
16523
+ return { repositoryKey: "", directory: "" };
16278
16524
  }
16279
16525
 
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);
16526
+ export const AIFileDirectoryRef: MessageFns<AIFileDirectoryRef> = {
16527
+ encode(message: AIFileDirectoryRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16528
+ if (message.repositoryKey !== "") {
16529
+ writer.uint32(10).string(message.repositoryKey);
16293
16530
  }
16294
- if (message.pageToken !== "") {
16295
- writer.uint32(42).string(message.pageToken);
16531
+ if (message.directory !== "") {
16532
+ writer.uint32(18).string(message.directory);
16296
16533
  }
16297
16534
  return writer;
16298
16535
  },
16299
16536
 
16300
- decode(input: BinaryReader | Uint8Array, length?: number): ListFilesRequest {
16537
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileDirectoryRef {
16301
16538
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16302
16539
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16303
16540
  if (previousRecursionDepth >= 100) {
@@ -16306,7 +16543,7 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16306
16543
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16307
16544
  try {
16308
16545
  const end = length === undefined ? reader.len : reader.pos + length;
16309
- const message = createBaseListFilesRequest();
16546
+ const message = createBaseAIFileDirectoryRef();
16310
16547
  while (reader.pos < end) {
16311
16548
  const tag = reader.uint32();
16312
16549
  switch (tag >>> 3) {
@@ -16315,7 +16552,7 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16315
16552
  break;
16316
16553
  }
16317
16554
 
16318
- message.organizationId = reader.string();
16555
+ message.repositoryKey = reader.string();
16319
16556
  continue;
16320
16557
  }
16321
16558
  case 2: {
@@ -16323,31 +16560,7 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16323
16560
  break;
16324
16561
  }
16325
16562
 
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();
16563
+ message.directory = reader.string();
16351
16564
  continue;
16352
16565
  }
16353
16566
  }
@@ -16362,87 +16575,55 @@ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16362
16575
  }
16363
16576
  },
16364
16577
 
16365
- fromJSON(object: any): ListFilesRequest {
16578
+ fromJSON(object: any): AIFileDirectoryRef {
16366
16579
  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)
16580
+ repositoryKey: isSet(object.repositoryKey)
16581
+ ? globalThis.String(object.repositoryKey)
16582
+ : isSet(object.repository_key)
16583
+ ? globalThis.String(object.repository_key)
16387
16584
  : "",
16585
+ directory: isSet(object.directory) ? globalThis.String(object.directory) : "",
16388
16586
  };
16389
16587
  },
16390
16588
 
16391
- toJSON(message: ListFilesRequest): unknown {
16589
+ toJSON(message: AIFileDirectoryRef): unknown {
16392
16590
  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);
16591
+ if (message.repositoryKey !== "") {
16592
+ obj.repositoryKey = message.repositoryKey;
16404
16593
  }
16405
- if (message.pageToken !== "") {
16406
- obj.pageToken = message.pageToken;
16594
+ if (message.directory !== "") {
16595
+ obj.directory = message.directory;
16407
16596
  }
16408
16597
  return obj;
16409
16598
  },
16410
16599
 
16411
- create<I extends Exact<DeepPartial<ListFilesRequest>, I>>(base?: I): ListFilesRequest {
16412
- return ListFilesRequest.fromPartial(base ?? ({} as any));
16600
+ create<I extends Exact<DeepPartial<AIFileDirectoryRef>, I>>(base?: I): AIFileDirectoryRef {
16601
+ return AIFileDirectoryRef.fromPartial(base ?? ({} as any));
16413
16602
  },
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 ?? "";
16603
+ fromPartial<I extends Exact<DeepPartial<AIFileDirectoryRef>, I>>(object: I): AIFileDirectoryRef {
16604
+ const message = createBaseAIFileDirectoryRef();
16605
+ message.repositoryKey = object.repositoryKey ?? "";
16606
+ message.directory = object.directory ?? "";
16423
16607
  return message;
16424
16608
  },
16425
16609
  };
16426
16610
 
16427
- function createBaseListFilesResponse(): ListFilesResponse {
16428
- return { status: undefined, files: [], nextPageToken: "" };
16611
+ function createBaseAIFileBranchRef(): AIFileBranchRef {
16612
+ return { repositoryKey: "", ref: "" };
16429
16613
  }
16430
16614
 
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();
16615
+ export const AIFileBranchRef: MessageFns<AIFileBranchRef> = {
16616
+ encode(message: AIFileBranchRef, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16617
+ if (message.repositoryKey !== "") {
16618
+ writer.uint32(10).string(message.repositoryKey);
16438
16619
  }
16439
- if (message.nextPageToken !== "") {
16440
- writer.uint32(26).string(message.nextPageToken);
16620
+ if (message.ref !== "") {
16621
+ writer.uint32(18).string(message.ref);
16441
16622
  }
16442
16623
  return writer;
16443
16624
  },
16444
16625
 
16445
- decode(input: BinaryReader | Uint8Array, length?: number): ListFilesResponse {
16626
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileBranchRef {
16446
16627
  const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16447
16628
  const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16448
16629
  if (previousRecursionDepth >= 100) {
@@ -16451,7 +16632,7 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16451
16632
  (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16452
16633
  try {
16453
16634
  const end = length === undefined ? reader.len : reader.pos + length;
16454
- const message = createBaseListFilesResponse();
16635
+ const message = createBaseAIFileBranchRef();
16455
16636
  while (reader.pos < end) {
16456
16637
  const tag = reader.uint32();
16457
16638
  switch (tag >>> 3) {
@@ -16460,7 +16641,7 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16460
16641
  break;
16461
16642
  }
16462
16643
 
16463
- message.status = ResponseStatus.decode(reader, reader.uint32());
16644
+ message.repositoryKey = reader.string();
16464
16645
  continue;
16465
16646
  }
16466
16647
  case 2: {
@@ -16468,14 +16649,273 @@ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16468
16649
  break;
16469
16650
  }
16470
16651
 
16471
- message.files.push(AIFileRow.decode(reader, reader.uint32()));
16652
+ message.ref = reader.string();
16472
16653
  continue;
16473
16654
  }
16474
- case 3: {
16475
- if (tag !== 26) {
16476
- break;
16477
- }
16478
-
16655
+ }
16656
+ if ((tag & 7) === 4 || tag === 0) {
16657
+ break;
16658
+ }
16659
+ reader.skip(tag & 7);
16660
+ }
16661
+ return message;
16662
+ } finally {
16663
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
16664
+ }
16665
+ },
16666
+
16667
+ fromJSON(object: any): AIFileBranchRef {
16668
+ return {
16669
+ repositoryKey: isSet(object.repositoryKey)
16670
+ ? globalThis.String(object.repositoryKey)
16671
+ : isSet(object.repository_key)
16672
+ ? globalThis.String(object.repository_key)
16673
+ : "",
16674
+ ref: isSet(object.ref) ? globalThis.String(object.ref) : "",
16675
+ };
16676
+ },
16677
+
16678
+ toJSON(message: AIFileBranchRef): unknown {
16679
+ const obj: any = {};
16680
+ if (message.repositoryKey !== "") {
16681
+ obj.repositoryKey = message.repositoryKey;
16682
+ }
16683
+ if (message.ref !== "") {
16684
+ obj.ref = message.ref;
16685
+ }
16686
+ return obj;
16687
+ },
16688
+
16689
+ create<I extends Exact<DeepPartial<AIFileBranchRef>, I>>(base?: I): AIFileBranchRef {
16690
+ return AIFileBranchRef.fromPartial(base ?? ({} as any));
16691
+ },
16692
+ fromPartial<I extends Exact<DeepPartial<AIFileBranchRef>, I>>(object: I): AIFileBranchRef {
16693
+ const message = createBaseAIFileBranchRef();
16694
+ message.repositoryKey = object.repositoryKey ?? "";
16695
+ message.ref = object.ref ?? "";
16696
+ return message;
16697
+ },
16698
+ };
16699
+
16700
+ function createBaseListFilesRequest(): ListFilesRequest {
16701
+ return { organizationId: "", projectId: "", filter: undefined, sort: 0, pageSize: 0, pageToken: "" };
16702
+ }
16703
+
16704
+ export const ListFilesRequest: MessageFns<ListFilesRequest> = {
16705
+ encode(message: ListFilesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16706
+ if (message.organizationId !== "") {
16707
+ writer.uint32(10).string(message.organizationId);
16708
+ }
16709
+ if (message.projectId !== "") {
16710
+ writer.uint32(18).string(message.projectId);
16711
+ }
16712
+ if (message.filter !== undefined) {
16713
+ AIFileFilter.encode(message.filter, writer.uint32(26).fork()).join();
16714
+ }
16715
+ if (message.sort !== 0) {
16716
+ writer.uint32(48).int32(message.sort);
16717
+ }
16718
+ if (message.pageSize !== 0) {
16719
+ writer.uint32(32).int32(message.pageSize);
16720
+ }
16721
+ if (message.pageToken !== "") {
16722
+ writer.uint32(42).string(message.pageToken);
16723
+ }
16724
+ return writer;
16725
+ },
16726
+
16727
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFilesRequest {
16728
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16729
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16730
+ if (previousRecursionDepth >= 100) {
16731
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
16732
+ }
16733
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16734
+ try {
16735
+ const end = length === undefined ? reader.len : reader.pos + length;
16736
+ const message = createBaseListFilesRequest();
16737
+ while (reader.pos < end) {
16738
+ const tag = reader.uint32();
16739
+ switch (tag >>> 3) {
16740
+ case 1: {
16741
+ if (tag !== 10) {
16742
+ break;
16743
+ }
16744
+
16745
+ message.organizationId = reader.string();
16746
+ continue;
16747
+ }
16748
+ case 2: {
16749
+ if (tag !== 18) {
16750
+ break;
16751
+ }
16752
+
16753
+ message.projectId = reader.string();
16754
+ continue;
16755
+ }
16756
+ case 3: {
16757
+ if (tag !== 26) {
16758
+ break;
16759
+ }
16760
+
16761
+ message.filter = AIFileFilter.decode(reader, reader.uint32());
16762
+ continue;
16763
+ }
16764
+ case 6: {
16765
+ if (tag !== 48) {
16766
+ break;
16767
+ }
16768
+
16769
+ message.sort = reader.int32() as any;
16770
+ continue;
16771
+ }
16772
+ case 4: {
16773
+ if (tag !== 32) {
16774
+ break;
16775
+ }
16776
+
16777
+ message.pageSize = reader.int32();
16778
+ continue;
16779
+ }
16780
+ case 5: {
16781
+ if (tag !== 42) {
16782
+ break;
16783
+ }
16784
+
16785
+ message.pageToken = reader.string();
16786
+ continue;
16787
+ }
16788
+ }
16789
+ if ((tag & 7) === 4 || tag === 0) {
16790
+ break;
16791
+ }
16792
+ reader.skip(tag & 7);
16793
+ }
16794
+ return message;
16795
+ } finally {
16796
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
16797
+ }
16798
+ },
16799
+
16800
+ fromJSON(object: any): ListFilesRequest {
16801
+ return {
16802
+ organizationId: isSet(object.organizationId)
16803
+ ? globalThis.String(object.organizationId)
16804
+ : isSet(object.organization_id)
16805
+ ? globalThis.String(object.organization_id)
16806
+ : "",
16807
+ projectId: isSet(object.projectId)
16808
+ ? globalThis.String(object.projectId)
16809
+ : isSet(object.project_id)
16810
+ ? globalThis.String(object.project_id)
16811
+ : "",
16812
+ filter: isSet(object.filter) ? AIFileFilter.fromJSON(object.filter) : undefined,
16813
+ sort: isSet(object.sort) ? aIFileSortFromJSON(object.sort) : 0,
16814
+ pageSize: isSet(object.pageSize)
16815
+ ? globalThis.Number(object.pageSize)
16816
+ : isSet(object.page_size)
16817
+ ? globalThis.Number(object.page_size)
16818
+ : 0,
16819
+ pageToken: isSet(object.pageToken)
16820
+ ? globalThis.String(object.pageToken)
16821
+ : isSet(object.page_token)
16822
+ ? globalThis.String(object.page_token)
16823
+ : "",
16824
+ };
16825
+ },
16826
+
16827
+ toJSON(message: ListFilesRequest): unknown {
16828
+ const obj: any = {};
16829
+ if (message.organizationId !== "") {
16830
+ obj.organizationId = message.organizationId;
16831
+ }
16832
+ if (message.projectId !== "") {
16833
+ obj.projectId = message.projectId;
16834
+ }
16835
+ if (message.filter !== undefined) {
16836
+ obj.filter = AIFileFilter.toJSON(message.filter);
16837
+ }
16838
+ if (message.sort !== 0) {
16839
+ obj.sort = aIFileSortToJSON(message.sort);
16840
+ }
16841
+ if (message.pageSize !== 0) {
16842
+ obj.pageSize = Math.round(message.pageSize);
16843
+ }
16844
+ if (message.pageToken !== "") {
16845
+ obj.pageToken = message.pageToken;
16846
+ }
16847
+ return obj;
16848
+ },
16849
+
16850
+ create<I extends Exact<DeepPartial<ListFilesRequest>, I>>(base?: I): ListFilesRequest {
16851
+ return ListFilesRequest.fromPartial(base ?? ({} as any));
16852
+ },
16853
+ fromPartial<I extends Exact<DeepPartial<ListFilesRequest>, I>>(object: I): ListFilesRequest {
16854
+ const message = createBaseListFilesRequest();
16855
+ message.organizationId = object.organizationId ?? "";
16856
+ message.projectId = object.projectId ?? "";
16857
+ message.filter = (object.filter !== undefined && object.filter !== null)
16858
+ ? AIFileFilter.fromPartial(object.filter)
16859
+ : undefined;
16860
+ message.sort = object.sort ?? 0;
16861
+ message.pageSize = object.pageSize ?? 0;
16862
+ message.pageToken = object.pageToken ?? "";
16863
+ return message;
16864
+ },
16865
+ };
16866
+
16867
+ function createBaseListFilesResponse(): ListFilesResponse {
16868
+ return { status: undefined, files: [], nextPageToken: "" };
16869
+ }
16870
+
16871
+ export const ListFilesResponse: MessageFns<ListFilesResponse> = {
16872
+ encode(message: ListFilesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
16873
+ if (message.status !== undefined) {
16874
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
16875
+ }
16876
+ for (const v of message.files) {
16877
+ AIFileRow.encode(v!, writer.uint32(18).fork()).join();
16878
+ }
16879
+ if (message.nextPageToken !== "") {
16880
+ writer.uint32(26).string(message.nextPageToken);
16881
+ }
16882
+ return writer;
16883
+ },
16884
+
16885
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFilesResponse {
16886
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
16887
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
16888
+ if (previousRecursionDepth >= 100) {
16889
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
16890
+ }
16891
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
16892
+ try {
16893
+ const end = length === undefined ? reader.len : reader.pos + length;
16894
+ const message = createBaseListFilesResponse();
16895
+ while (reader.pos < end) {
16896
+ const tag = reader.uint32();
16897
+ switch (tag >>> 3) {
16898
+ case 1: {
16899
+ if (tag !== 10) {
16900
+ break;
16901
+ }
16902
+
16903
+ message.status = ResponseStatus.decode(reader, reader.uint32());
16904
+ continue;
16905
+ }
16906
+ case 2: {
16907
+ if (tag !== 18) {
16908
+ break;
16909
+ }
16910
+
16911
+ message.files.push(AIFileRow.decode(reader, reader.uint32()));
16912
+ continue;
16913
+ }
16914
+ case 3: {
16915
+ if (tag !== 26) {
16916
+ break;
16917
+ }
16918
+
16479
16919
  message.nextPageToken = reader.string();
16480
16920
  continue;
16481
16921
  }
@@ -16799,23 +17239,561 @@ export const AIFileRow: MessageFns<AIFileRow> = {
16799
17239
  break;
16800
17240
  }
16801
17241
 
16802
- message.totalCostUsd = reader.double();
17242
+ message.totalCostUsd = reader.double();
17243
+ continue;
17244
+ }
17245
+ case 21: {
17246
+ if (tag !== 169) {
17247
+ break;
17248
+ }
17249
+
17250
+ message.subscriptionTotalCostUsd = reader.double();
17251
+ continue;
17252
+ }
17253
+ case 22: {
17254
+ if (tag !== 177) {
17255
+ break;
17256
+ }
17257
+
17258
+ message.subscriptionUnlandedCostUsd = reader.double();
17259
+ continue;
17260
+ }
17261
+ }
17262
+ if ((tag & 7) === 4 || tag === 0) {
17263
+ break;
17264
+ }
17265
+ reader.skip(tag & 7);
17266
+ }
17267
+ return message;
17268
+ } finally {
17269
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
17270
+ }
17271
+ },
17272
+
17273
+ fromJSON(object: any): AIFileRow {
17274
+ return {
17275
+ repositoryKey: isSet(object.repositoryKey)
17276
+ ? globalThis.String(object.repositoryKey)
17277
+ : isSet(object.repository_key)
17278
+ ? globalThis.String(object.repository_key)
17279
+ : "",
17280
+ ref: isSet(object.ref) ? globalThis.String(object.ref) : "",
17281
+ path: isSet(object.path) ? globalThis.String(object.path) : "",
17282
+ oldPath: isSet(object.oldPath)
17283
+ ? globalThis.String(object.oldPath)
17284
+ : isSet(object.old_path)
17285
+ ? globalThis.String(object.old_path)
17286
+ : "",
17287
+ state: isSet(object.state) ? aIFileLifecycleFromJSON(object.state) : 0,
17288
+ tier: isSet(object.tier) ? aIFileTierFromJSON(object.tier) : 0,
17289
+ confidence: isSet(object.confidence) ? aIFileConfidenceFromJSON(object.confidence) : 0,
17290
+ firstEditedAt: isSet(object.firstEditedAt)
17291
+ ? fromJsonTimestamp(object.firstEditedAt)
17292
+ : isSet(object.first_edited_at)
17293
+ ? fromJsonTimestamp(object.first_edited_at)
17294
+ : undefined,
17295
+ lastEditedAt: isSet(object.lastEditedAt)
17296
+ ? fromJsonTimestamp(object.lastEditedAt)
17297
+ : isSet(object.last_edited_at)
17298
+ ? fromJsonTimestamp(object.last_edited_at)
17299
+ : undefined,
17300
+ lastStagedAt: isSet(object.lastStagedAt)
17301
+ ? fromJsonTimestamp(object.lastStagedAt)
17302
+ : isSet(object.last_staged_at)
17303
+ ? fromJsonTimestamp(object.last_staged_at)
17304
+ : undefined,
17305
+ lastCommittedAt: isSet(object.lastCommittedAt)
17306
+ ? fromJsonTimestamp(object.lastCommittedAt)
17307
+ : isSet(object.last_committed_at)
17308
+ ? fromJsonTimestamp(object.last_committed_at)
17309
+ : undefined,
17310
+ lastCommitSha: isSet(object.lastCommitSha)
17311
+ ? globalThis.String(object.lastCommitSha)
17312
+ : isSet(object.last_commit_sha)
17313
+ ? globalThis.String(object.last_commit_sha)
17314
+ : "",
17315
+ lastPushedAt: isSet(object.lastPushedAt)
17316
+ ? fromJsonTimestamp(object.lastPushedAt)
17317
+ : isSet(object.last_pushed_at)
17318
+ ? fromJsonTimestamp(object.last_pushed_at)
17319
+ : undefined,
17320
+ discardedAt: isSet(object.discardedAt)
17321
+ ? fromJsonTimestamp(object.discardedAt)
17322
+ : isSet(object.discarded_at)
17323
+ ? fromJsonTimestamp(object.discarded_at)
17324
+ : undefined,
17325
+ discardReason: isSet(object.discardReason)
17326
+ ? globalThis.String(object.discardReason)
17327
+ : isSet(object.discard_reason)
17328
+ ? globalThis.String(object.discard_reason)
17329
+ : "",
17330
+ editCount: isSet(object.editCount)
17331
+ ? globalThis.Number(object.editCount)
17332
+ : isSet(object.edit_count)
17333
+ ? globalThis.Number(object.edit_count)
17334
+ : 0,
17335
+ sessions: globalThis.Array.isArray(object?.sessions)
17336
+ ? object.sessions.map((e: any) => AISessionRef.fromJSON(e))
17337
+ : [],
17338
+ unlandedCostUsd: isSet(object.unlandedCostUsd)
17339
+ ? globalThis.Number(object.unlandedCostUsd)
17340
+ : isSet(object.unlanded_cost_usd)
17341
+ ? globalThis.Number(object.unlanded_cost_usd)
17342
+ : 0,
17343
+ unlandedOutputTokens: isSet(object.unlandedOutputTokens)
17344
+ ? globalThis.Number(object.unlandedOutputTokens)
17345
+ : isSet(object.unlanded_output_tokens)
17346
+ ? globalThis.Number(object.unlanded_output_tokens)
17347
+ : 0,
17348
+ totalCostUsd: isSet(object.totalCostUsd)
17349
+ ? globalThis.Number(object.totalCostUsd)
17350
+ : isSet(object.total_cost_usd)
17351
+ ? globalThis.Number(object.total_cost_usd)
17352
+ : 0,
17353
+ subscriptionTotalCostUsd: isSet(object.subscriptionTotalCostUsd)
17354
+ ? globalThis.Number(object.subscriptionTotalCostUsd)
17355
+ : isSet(object.subscription_total_cost_usd)
17356
+ ? globalThis.Number(object.subscription_total_cost_usd)
17357
+ : 0,
17358
+ subscriptionUnlandedCostUsd: isSet(object.subscriptionUnlandedCostUsd)
17359
+ ? globalThis.Number(object.subscriptionUnlandedCostUsd)
17360
+ : isSet(object.subscription_unlanded_cost_usd)
17361
+ ? globalThis.Number(object.subscription_unlanded_cost_usd)
17362
+ : 0,
17363
+ };
17364
+ },
17365
+
17366
+ toJSON(message: AIFileRow): unknown {
17367
+ const obj: any = {};
17368
+ if (message.repositoryKey !== "") {
17369
+ obj.repositoryKey = message.repositoryKey;
17370
+ }
17371
+ if (message.ref !== "") {
17372
+ obj.ref = message.ref;
17373
+ }
17374
+ if (message.path !== "") {
17375
+ obj.path = message.path;
17376
+ }
17377
+ if (message.oldPath !== "") {
17378
+ obj.oldPath = message.oldPath;
17379
+ }
17380
+ if (message.state !== 0) {
17381
+ obj.state = aIFileLifecycleToJSON(message.state);
17382
+ }
17383
+ if (message.tier !== 0) {
17384
+ obj.tier = aIFileTierToJSON(message.tier);
17385
+ }
17386
+ if (message.confidence !== 0) {
17387
+ obj.confidence = aIFileConfidenceToJSON(message.confidence);
17388
+ }
17389
+ if (message.firstEditedAt !== undefined) {
17390
+ obj.firstEditedAt = message.firstEditedAt.toISOString();
17391
+ }
17392
+ if (message.lastEditedAt !== undefined) {
17393
+ obj.lastEditedAt = message.lastEditedAt.toISOString();
17394
+ }
17395
+ if (message.lastStagedAt !== undefined) {
17396
+ obj.lastStagedAt = message.lastStagedAt.toISOString();
17397
+ }
17398
+ if (message.lastCommittedAt !== undefined) {
17399
+ obj.lastCommittedAt = message.lastCommittedAt.toISOString();
17400
+ }
17401
+ if (message.lastCommitSha !== "") {
17402
+ obj.lastCommitSha = message.lastCommitSha;
17403
+ }
17404
+ if (message.lastPushedAt !== undefined) {
17405
+ obj.lastPushedAt = message.lastPushedAt.toISOString();
17406
+ }
17407
+ if (message.discardedAt !== undefined) {
17408
+ obj.discardedAt = message.discardedAt.toISOString();
17409
+ }
17410
+ if (message.discardReason !== "") {
17411
+ obj.discardReason = message.discardReason;
17412
+ }
17413
+ if (message.editCount !== 0) {
17414
+ obj.editCount = Math.round(message.editCount);
17415
+ }
17416
+ if (message.sessions?.length) {
17417
+ obj.sessions = message.sessions.map((e) => AISessionRef.toJSON(e));
17418
+ }
17419
+ if (message.unlandedCostUsd !== 0) {
17420
+ obj.unlandedCostUsd = message.unlandedCostUsd;
17421
+ }
17422
+ if (message.unlandedOutputTokens !== 0) {
17423
+ obj.unlandedOutputTokens = Math.round(message.unlandedOutputTokens);
17424
+ }
17425
+ if (message.totalCostUsd !== 0) {
17426
+ obj.totalCostUsd = message.totalCostUsd;
17427
+ }
17428
+ if (message.subscriptionTotalCostUsd !== 0) {
17429
+ obj.subscriptionTotalCostUsd = message.subscriptionTotalCostUsd;
17430
+ }
17431
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17432
+ obj.subscriptionUnlandedCostUsd = message.subscriptionUnlandedCostUsd;
17433
+ }
17434
+ return obj;
17435
+ },
17436
+
17437
+ create<I extends Exact<DeepPartial<AIFileRow>, I>>(base?: I): AIFileRow {
17438
+ return AIFileRow.fromPartial(base ?? ({} as any));
17439
+ },
17440
+ fromPartial<I extends Exact<DeepPartial<AIFileRow>, I>>(object: I): AIFileRow {
17441
+ const message = createBaseAIFileRow();
17442
+ message.repositoryKey = object.repositoryKey ?? "";
17443
+ message.ref = object.ref ?? "";
17444
+ message.path = object.path ?? "";
17445
+ message.oldPath = object.oldPath ?? "";
17446
+ message.state = object.state ?? 0;
17447
+ message.tier = object.tier ?? 0;
17448
+ message.confidence = object.confidence ?? 0;
17449
+ message.firstEditedAt = object.firstEditedAt ?? undefined;
17450
+ message.lastEditedAt = object.lastEditedAt ?? undefined;
17451
+ message.lastStagedAt = object.lastStagedAt ?? undefined;
17452
+ message.lastCommittedAt = object.lastCommittedAt ?? undefined;
17453
+ message.lastCommitSha = object.lastCommitSha ?? "";
17454
+ message.lastPushedAt = object.lastPushedAt ?? undefined;
17455
+ message.discardedAt = object.discardedAt ?? undefined;
17456
+ message.discardReason = object.discardReason ?? "";
17457
+ message.editCount = object.editCount ?? 0;
17458
+ message.sessions = object.sessions?.map((e) => AISessionRef.fromPartial(e)) || [];
17459
+ message.unlandedCostUsd = object.unlandedCostUsd ?? 0;
17460
+ message.unlandedOutputTokens = object.unlandedOutputTokens ?? 0;
17461
+ message.totalCostUsd = object.totalCostUsd ?? 0;
17462
+ message.subscriptionTotalCostUsd = object.subscriptionTotalCostUsd ?? 0;
17463
+ message.subscriptionUnlandedCostUsd = object.subscriptionUnlandedCostUsd ?? 0;
17464
+ return message;
17465
+ },
17466
+ };
17467
+
17468
+ function createBaseListFileDirectoriesRequest(): ListFileDirectoriesRequest {
17469
+ return { organizationId: "", projectId: "", filter: undefined };
17470
+ }
17471
+
17472
+ export const ListFileDirectoriesRequest: MessageFns<ListFileDirectoriesRequest> = {
17473
+ encode(message: ListFileDirectoriesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17474
+ if (message.organizationId !== "") {
17475
+ writer.uint32(10).string(message.organizationId);
17476
+ }
17477
+ if (message.projectId !== "") {
17478
+ writer.uint32(18).string(message.projectId);
17479
+ }
17480
+ if (message.filter !== undefined) {
17481
+ AIFileFilter.encode(message.filter, writer.uint32(26).fork()).join();
17482
+ }
17483
+ return writer;
17484
+ },
17485
+
17486
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFileDirectoriesRequest {
17487
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17488
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17489
+ if (previousRecursionDepth >= 100) {
17490
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
17491
+ }
17492
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17493
+ try {
17494
+ const end = length === undefined ? reader.len : reader.pos + length;
17495
+ const message = createBaseListFileDirectoriesRequest();
17496
+ while (reader.pos < end) {
17497
+ const tag = reader.uint32();
17498
+ switch (tag >>> 3) {
17499
+ case 1: {
17500
+ if (tag !== 10) {
17501
+ break;
17502
+ }
17503
+
17504
+ message.organizationId = reader.string();
17505
+ continue;
17506
+ }
17507
+ case 2: {
17508
+ if (tag !== 18) {
17509
+ break;
17510
+ }
17511
+
17512
+ message.projectId = reader.string();
17513
+ continue;
17514
+ }
17515
+ case 3: {
17516
+ if (tag !== 26) {
17517
+ break;
17518
+ }
17519
+
17520
+ message.filter = AIFileFilter.decode(reader, reader.uint32());
17521
+ continue;
17522
+ }
17523
+ }
17524
+ if ((tag & 7) === 4 || tag === 0) {
17525
+ break;
17526
+ }
17527
+ reader.skip(tag & 7);
17528
+ }
17529
+ return message;
17530
+ } finally {
17531
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
17532
+ }
17533
+ },
17534
+
17535
+ fromJSON(object: any): ListFileDirectoriesRequest {
17536
+ return {
17537
+ organizationId: isSet(object.organizationId)
17538
+ ? globalThis.String(object.organizationId)
17539
+ : isSet(object.organization_id)
17540
+ ? globalThis.String(object.organization_id)
17541
+ : "",
17542
+ projectId: isSet(object.projectId)
17543
+ ? globalThis.String(object.projectId)
17544
+ : isSet(object.project_id)
17545
+ ? globalThis.String(object.project_id)
17546
+ : "",
17547
+ filter: isSet(object.filter) ? AIFileFilter.fromJSON(object.filter) : undefined,
17548
+ };
17549
+ },
17550
+
17551
+ toJSON(message: ListFileDirectoriesRequest): unknown {
17552
+ const obj: any = {};
17553
+ if (message.organizationId !== "") {
17554
+ obj.organizationId = message.organizationId;
17555
+ }
17556
+ if (message.projectId !== "") {
17557
+ obj.projectId = message.projectId;
17558
+ }
17559
+ if (message.filter !== undefined) {
17560
+ obj.filter = AIFileFilter.toJSON(message.filter);
17561
+ }
17562
+ return obj;
17563
+ },
17564
+
17565
+ create<I extends Exact<DeepPartial<ListFileDirectoriesRequest>, I>>(base?: I): ListFileDirectoriesRequest {
17566
+ return ListFileDirectoriesRequest.fromPartial(base ?? ({} as any));
17567
+ },
17568
+ fromPartial<I extends Exact<DeepPartial<ListFileDirectoriesRequest>, I>>(object: I): ListFileDirectoriesRequest {
17569
+ const message = createBaseListFileDirectoriesRequest();
17570
+ message.organizationId = object.organizationId ?? "";
17571
+ message.projectId = object.projectId ?? "";
17572
+ message.filter = (object.filter !== undefined && object.filter !== null)
17573
+ ? AIFileFilter.fromPartial(object.filter)
17574
+ : undefined;
17575
+ return message;
17576
+ },
17577
+ };
17578
+
17579
+ function createBaseListFileDirectoriesResponse(): ListFileDirectoriesResponse {
17580
+ return { status: undefined, directories: [] };
17581
+ }
17582
+
17583
+ export const ListFileDirectoriesResponse: MessageFns<ListFileDirectoriesResponse> = {
17584
+ encode(message: ListFileDirectoriesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17585
+ if (message.status !== undefined) {
17586
+ ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
17587
+ }
17588
+ for (const v of message.directories) {
17589
+ AIFileDirectory.encode(v!, writer.uint32(18).fork()).join();
17590
+ }
17591
+ return writer;
17592
+ },
17593
+
17594
+ decode(input: BinaryReader | Uint8Array, length?: number): ListFileDirectoriesResponse {
17595
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17596
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17597
+ if (previousRecursionDepth >= 100) {
17598
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
17599
+ }
17600
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17601
+ try {
17602
+ const end = length === undefined ? reader.len : reader.pos + length;
17603
+ const message = createBaseListFileDirectoriesResponse();
17604
+ while (reader.pos < end) {
17605
+ const tag = reader.uint32();
17606
+ switch (tag >>> 3) {
17607
+ case 1: {
17608
+ if (tag !== 10) {
17609
+ break;
17610
+ }
17611
+
17612
+ message.status = ResponseStatus.decode(reader, reader.uint32());
17613
+ continue;
17614
+ }
17615
+ case 2: {
17616
+ if (tag !== 18) {
17617
+ break;
17618
+ }
17619
+
17620
+ message.directories.push(AIFileDirectory.decode(reader, reader.uint32()));
17621
+ continue;
17622
+ }
17623
+ }
17624
+ if ((tag & 7) === 4 || tag === 0) {
17625
+ break;
17626
+ }
17627
+ reader.skip(tag & 7);
17628
+ }
17629
+ return message;
17630
+ } finally {
17631
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
17632
+ }
17633
+ },
17634
+
17635
+ fromJSON(object: any): ListFileDirectoriesResponse {
17636
+ return {
17637
+ status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
17638
+ directories: globalThis.Array.isArray(object?.directories)
17639
+ ? object.directories.map((e: any) => AIFileDirectory.fromJSON(e))
17640
+ : [],
17641
+ };
17642
+ },
17643
+
17644
+ toJSON(message: ListFileDirectoriesResponse): unknown {
17645
+ const obj: any = {};
17646
+ if (message.status !== undefined) {
17647
+ obj.status = ResponseStatus.toJSON(message.status);
17648
+ }
17649
+ if (message.directories?.length) {
17650
+ obj.directories = message.directories.map((e) => AIFileDirectory.toJSON(e));
17651
+ }
17652
+ return obj;
17653
+ },
17654
+
17655
+ create<I extends Exact<DeepPartial<ListFileDirectoriesResponse>, I>>(base?: I): ListFileDirectoriesResponse {
17656
+ return ListFileDirectoriesResponse.fromPartial(base ?? ({} as any));
17657
+ },
17658
+ fromPartial<I extends Exact<DeepPartial<ListFileDirectoriesResponse>, I>>(object: I): ListFileDirectoriesResponse {
17659
+ const message = createBaseListFileDirectoriesResponse();
17660
+ message.status = (object.status !== undefined && object.status !== null)
17661
+ ? ResponseStatus.fromPartial(object.status)
17662
+ : undefined;
17663
+ message.directories = object.directories?.map((e) => AIFileDirectory.fromPartial(e)) || [];
17664
+ return message;
17665
+ },
17666
+ };
17667
+
17668
+ function createBaseAIFileDirectory(): AIFileDirectory {
17669
+ return {
17670
+ repositoryKey: "",
17671
+ directory: "",
17672
+ files: 0,
17673
+ edits: 0,
17674
+ sessions: 0,
17675
+ unlandedCostUsd: 0,
17676
+ subscriptionUnlandedCostUsd: 0,
17677
+ unlandedOutputTokens: 0,
17678
+ stateCounts: [],
17679
+ };
17680
+ }
17681
+
17682
+ export const AIFileDirectory: MessageFns<AIFileDirectory> = {
17683
+ encode(message: AIFileDirectory, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17684
+ if (message.repositoryKey !== "") {
17685
+ writer.uint32(10).string(message.repositoryKey);
17686
+ }
17687
+ if (message.directory !== "") {
17688
+ writer.uint32(18).string(message.directory);
17689
+ }
17690
+ if (message.files !== 0) {
17691
+ writer.uint32(24).uint64(message.files);
17692
+ }
17693
+ if (message.edits !== 0) {
17694
+ writer.uint32(32).uint64(message.edits);
17695
+ }
17696
+ if (message.sessions !== 0) {
17697
+ writer.uint32(40).uint64(message.sessions);
17698
+ }
17699
+ if (message.unlandedCostUsd !== 0) {
17700
+ writer.uint32(49).double(message.unlandedCostUsd);
17701
+ }
17702
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17703
+ writer.uint32(57).double(message.subscriptionUnlandedCostUsd);
17704
+ }
17705
+ if (message.unlandedOutputTokens !== 0) {
17706
+ writer.uint32(64).uint64(message.unlandedOutputTokens);
17707
+ }
17708
+ for (const v of message.stateCounts) {
17709
+ AIFileStateCount.encode(v!, writer.uint32(74).fork()).join();
17710
+ }
17711
+ return writer;
17712
+ },
17713
+
17714
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileDirectory {
17715
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17716
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17717
+ if (previousRecursionDepth >= 100) {
17718
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
17719
+ }
17720
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17721
+ try {
17722
+ const end = length === undefined ? reader.len : reader.pos + length;
17723
+ const message = createBaseAIFileDirectory();
17724
+ while (reader.pos < end) {
17725
+ const tag = reader.uint32();
17726
+ switch (tag >>> 3) {
17727
+ case 1: {
17728
+ if (tag !== 10) {
17729
+ break;
17730
+ }
17731
+
17732
+ message.repositoryKey = reader.string();
17733
+ continue;
17734
+ }
17735
+ case 2: {
17736
+ if (tag !== 18) {
17737
+ break;
17738
+ }
17739
+
17740
+ message.directory = reader.string();
17741
+ continue;
17742
+ }
17743
+ case 3: {
17744
+ if (tag !== 24) {
17745
+ break;
17746
+ }
17747
+
17748
+ message.files = longToNumber(reader.uint64());
17749
+ continue;
17750
+ }
17751
+ case 4: {
17752
+ if (tag !== 32) {
17753
+ break;
17754
+ }
17755
+
17756
+ message.edits = longToNumber(reader.uint64());
17757
+ continue;
17758
+ }
17759
+ case 5: {
17760
+ if (tag !== 40) {
17761
+ break;
17762
+ }
17763
+
17764
+ message.sessions = longToNumber(reader.uint64());
17765
+ continue;
17766
+ }
17767
+ case 6: {
17768
+ if (tag !== 49) {
17769
+ break;
17770
+ }
17771
+
17772
+ message.unlandedCostUsd = reader.double();
17773
+ continue;
17774
+ }
17775
+ case 7: {
17776
+ if (tag !== 57) {
17777
+ break;
17778
+ }
17779
+
17780
+ message.subscriptionUnlandedCostUsd = reader.double();
16803
17781
  continue;
16804
17782
  }
16805
- case 21: {
16806
- if (tag !== 169) {
17783
+ case 8: {
17784
+ if (tag !== 64) {
16807
17785
  break;
16808
17786
  }
16809
17787
 
16810
- message.subscriptionTotalCostUsd = reader.double();
17788
+ message.unlandedOutputTokens = longToNumber(reader.uint64());
16811
17789
  continue;
16812
17790
  }
16813
- case 22: {
16814
- if (tag !== 177) {
17791
+ case 9: {
17792
+ if (tag !== 74) {
16815
17793
  break;
16816
17794
  }
16817
17795
 
16818
- message.subscriptionUnlandedCostUsd = reader.double();
17796
+ message.stateCounts.push(AIFileStateCount.decode(reader, reader.uint32()));
16819
17797
  continue;
16820
17798
  }
16821
17799
  }
@@ -16830,197 +17808,171 @@ export const AIFileRow: MessageFns<AIFileRow> = {
16830
17808
  }
16831
17809
  },
16832
17810
 
16833
- fromJSON(object: any): AIFileRow {
17811
+ fromJSON(object: any): AIFileDirectory {
16834
17812
  return {
16835
17813
  repositoryKey: isSet(object.repositoryKey)
16836
17814
  ? globalThis.String(object.repositoryKey)
16837
17815
  : isSet(object.repository_key)
16838
17816
  ? globalThis.String(object.repository_key)
16839
17817
  : "",
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
- : [],
17818
+ directory: isSet(object.directory) ? globalThis.String(object.directory) : "",
17819
+ files: isSet(object.files) ? globalThis.Number(object.files) : 0,
17820
+ edits: isSet(object.edits) ? globalThis.Number(object.edits) : 0,
17821
+ sessions: isSet(object.sessions) ? globalThis.Number(object.sessions) : 0,
16898
17822
  unlandedCostUsd: isSet(object.unlandedCostUsd)
16899
17823
  ? globalThis.Number(object.unlandedCostUsd)
16900
17824
  : isSet(object.unlanded_cost_usd)
16901
17825
  ? globalThis.Number(object.unlanded_cost_usd)
16902
17826
  : 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
17827
  subscriptionUnlandedCostUsd: isSet(object.subscriptionUnlandedCostUsd)
16919
17828
  ? globalThis.Number(object.subscriptionUnlandedCostUsd)
16920
17829
  : isSet(object.subscription_unlanded_cost_usd)
16921
17830
  ? globalThis.Number(object.subscription_unlanded_cost_usd)
16922
17831
  : 0,
17832
+ unlandedOutputTokens: isSet(object.unlandedOutputTokens)
17833
+ ? globalThis.Number(object.unlandedOutputTokens)
17834
+ : isSet(object.unlanded_output_tokens)
17835
+ ? globalThis.Number(object.unlanded_output_tokens)
17836
+ : 0,
17837
+ stateCounts: globalThis.Array.isArray(object?.stateCounts)
17838
+ ? object.stateCounts.map((e: any) => AIFileStateCount.fromJSON(e))
17839
+ : globalThis.Array.isArray(object?.state_counts)
17840
+ ? object.state_counts.map((e: any) => AIFileStateCount.fromJSON(e))
17841
+ : [],
16923
17842
  };
16924
17843
  },
16925
17844
 
16926
- toJSON(message: AIFileRow): unknown {
17845
+ toJSON(message: AIFileDirectory): unknown {
16927
17846
  const obj: any = {};
16928
17847
  if (message.repositoryKey !== "") {
16929
17848
  obj.repositoryKey = message.repositoryKey;
16930
17849
  }
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();
17850
+ if (message.directory !== "") {
17851
+ obj.directory = message.directory;
16951
17852
  }
16952
- if (message.lastEditedAt !== undefined) {
16953
- obj.lastEditedAt = message.lastEditedAt.toISOString();
16954
- }
16955
- if (message.lastStagedAt !== undefined) {
16956
- obj.lastStagedAt = message.lastStagedAt.toISOString();
17853
+ if (message.files !== 0) {
17854
+ obj.files = Math.round(message.files);
16957
17855
  }
16958
- if (message.lastCommittedAt !== undefined) {
16959
- obj.lastCommittedAt = message.lastCommittedAt.toISOString();
17856
+ if (message.edits !== 0) {
17857
+ obj.edits = Math.round(message.edits);
16960
17858
  }
16961
- if (message.lastCommitSha !== "") {
16962
- obj.lastCommitSha = message.lastCommitSha;
17859
+ if (message.sessions !== 0) {
17860
+ obj.sessions = Math.round(message.sessions);
16963
17861
  }
16964
- if (message.lastPushedAt !== undefined) {
16965
- obj.lastPushedAt = message.lastPushedAt.toISOString();
17862
+ if (message.unlandedCostUsd !== 0) {
17863
+ obj.unlandedCostUsd = message.unlandedCostUsd;
16966
17864
  }
16967
- if (message.discardedAt !== undefined) {
16968
- obj.discardedAt = message.discardedAt.toISOString();
17865
+ if (message.subscriptionUnlandedCostUsd !== 0) {
17866
+ obj.subscriptionUnlandedCostUsd = message.subscriptionUnlandedCostUsd;
16969
17867
  }
16970
- if (message.discardReason !== "") {
16971
- obj.discardReason = message.discardReason;
17868
+ if (message.unlandedOutputTokens !== 0) {
17869
+ obj.unlandedOutputTokens = Math.round(message.unlandedOutputTokens);
16972
17870
  }
16973
- if (message.editCount !== 0) {
16974
- obj.editCount = Math.round(message.editCount);
17871
+ if (message.stateCounts?.length) {
17872
+ obj.stateCounts = message.stateCounts.map((e) => AIFileStateCount.toJSON(e));
16975
17873
  }
16976
- if (message.sessions?.length) {
16977
- obj.sessions = message.sessions.map((e) => AISessionRef.toJSON(e));
17874
+ return obj;
17875
+ },
17876
+
17877
+ create<I extends Exact<DeepPartial<AIFileDirectory>, I>>(base?: I): AIFileDirectory {
17878
+ return AIFileDirectory.fromPartial(base ?? ({} as any));
17879
+ },
17880
+ fromPartial<I extends Exact<DeepPartial<AIFileDirectory>, I>>(object: I): AIFileDirectory {
17881
+ const message = createBaseAIFileDirectory();
17882
+ message.repositoryKey = object.repositoryKey ?? "";
17883
+ message.directory = object.directory ?? "";
17884
+ message.files = object.files ?? 0;
17885
+ message.edits = object.edits ?? 0;
17886
+ message.sessions = object.sessions ?? 0;
17887
+ message.unlandedCostUsd = object.unlandedCostUsd ?? 0;
17888
+ message.subscriptionUnlandedCostUsd = object.subscriptionUnlandedCostUsd ?? 0;
17889
+ message.unlandedOutputTokens = object.unlandedOutputTokens ?? 0;
17890
+ message.stateCounts = object.stateCounts?.map((e) => AIFileStateCount.fromPartial(e)) || [];
17891
+ return message;
17892
+ },
17893
+ };
17894
+
17895
+ function createBaseAIFileStateCount(): AIFileStateCount {
17896
+ return { state: 0, files: 0 };
17897
+ }
17898
+
17899
+ export const AIFileStateCount: MessageFns<AIFileStateCount> = {
17900
+ encode(message: AIFileStateCount, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
17901
+ if (message.state !== 0) {
17902
+ writer.uint32(8).int32(message.state);
16978
17903
  }
16979
- if (message.unlandedCostUsd !== 0) {
16980
- obj.unlandedCostUsd = message.unlandedCostUsd;
17904
+ if (message.files !== 0) {
17905
+ writer.uint32(16).uint64(message.files);
16981
17906
  }
16982
- if (message.unlandedOutputTokens !== 0) {
16983
- obj.unlandedOutputTokens = Math.round(message.unlandedOutputTokens);
17907
+ return writer;
17908
+ },
17909
+
17910
+ decode(input: BinaryReader | Uint8Array, length?: number): AIFileStateCount {
17911
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
17912
+ const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
17913
+ if (previousRecursionDepth >= 100) {
17914
+ throw new globalThis.Error("protobuf decode recursion limit exceeded");
16984
17915
  }
16985
- if (message.totalCostUsd !== 0) {
16986
- obj.totalCostUsd = message.totalCostUsd;
17916
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
17917
+ try {
17918
+ const end = length === undefined ? reader.len : reader.pos + length;
17919
+ const message = createBaseAIFileStateCount();
17920
+ while (reader.pos < end) {
17921
+ const tag = reader.uint32();
17922
+ switch (tag >>> 3) {
17923
+ case 1: {
17924
+ if (tag !== 8) {
17925
+ break;
17926
+ }
17927
+
17928
+ message.state = reader.int32() as any;
17929
+ continue;
17930
+ }
17931
+ case 2: {
17932
+ if (tag !== 16) {
17933
+ break;
17934
+ }
17935
+
17936
+ message.files = longToNumber(reader.uint64());
17937
+ continue;
17938
+ }
17939
+ }
17940
+ if ((tag & 7) === 4 || tag === 0) {
17941
+ break;
17942
+ }
17943
+ reader.skip(tag & 7);
17944
+ }
17945
+ return message;
17946
+ } finally {
17947
+ (reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
16987
17948
  }
16988
- if (message.subscriptionTotalCostUsd !== 0) {
16989
- obj.subscriptionTotalCostUsd = message.subscriptionTotalCostUsd;
17949
+ },
17950
+
17951
+ fromJSON(object: any): AIFileStateCount {
17952
+ return {
17953
+ state: isSet(object.state) ? aIFileLifecycleFromJSON(object.state) : 0,
17954
+ files: isSet(object.files) ? globalThis.Number(object.files) : 0,
17955
+ };
17956
+ },
17957
+
17958
+ toJSON(message: AIFileStateCount): unknown {
17959
+ const obj: any = {};
17960
+ if (message.state !== 0) {
17961
+ obj.state = aIFileLifecycleToJSON(message.state);
16990
17962
  }
16991
- if (message.subscriptionUnlandedCostUsd !== 0) {
16992
- obj.subscriptionUnlandedCostUsd = message.subscriptionUnlandedCostUsd;
17963
+ if (message.files !== 0) {
17964
+ obj.files = Math.round(message.files);
16993
17965
  }
16994
17966
  return obj;
16995
17967
  },
16996
17968
 
16997
- create<I extends Exact<DeepPartial<AIFileRow>, I>>(base?: I): AIFileRow {
16998
- return AIFileRow.fromPartial(base ?? ({} as any));
17969
+ create<I extends Exact<DeepPartial<AIFileStateCount>, I>>(base?: I): AIFileStateCount {
17970
+ return AIFileStateCount.fromPartial(base ?? ({} as any));
16999
17971
  },
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 ?? "";
17972
+ fromPartial<I extends Exact<DeepPartial<AIFileStateCount>, I>>(object: I): AIFileStateCount {
17973
+ const message = createBaseAIFileStateCount();
17006
17974
  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;
17975
+ message.files = object.files ?? 0;
17024
17976
  return message;
17025
17977
  },
17026
17978
  };
@@ -19969,11 +20921,20 @@ export interface AIGatewayService {
19969
20921
  * conversations last active in the window, their principals and git counts, and the window's burn by model.
19970
20922
  */
19971
20923
  StreamProjectSummaries(request: ProjectSummariesRequest, metadata?: Metadata): Observable<ProjectSummaries>;
19972
- /** Per-file working-state feed (keyset-paginated) behind the unlanded-work funnel. */
20924
+ /**
20925
+ * Per-file working-state feed (keyset-paginated) behind the unlanded-work funnel: one row per
20926
+ * (repository_key, ref, path) the AI edited (with filter.sessions or filter.paths, one they name), its
20927
+ * most-edited checkout copy among those the filter keeps. Mirrors telemetry.api.v1.
20928
+ */
19973
20929
  ListFiles(request: ListFilesRequest, metadata?: Metadata): Promise<ListFilesResponse>;
20930
+ /**
20931
+ * ListFiles' files rolled up by directory, one row per (repository_key, directory), every matching directory in
20932
+ * one response (unpaged). Mirrors telemetry.api.v1.
20933
+ */
20934
+ ListFileDirectories(request: ListFileDirectoriesRequest, metadata?: Metadata): Promise<ListFileDirectoriesResponse>;
19974
20935
  /**
19975
20936
  * Live stream of the unlanded-work funnel: aging tiers + discarded (git-invisible churn), observed vs
19976
- * unverified, a complete snapshot re-derived each tick.
20937
+ * unverified, a complete snapshot re-derived each tick. Counts every checkout copy, edited or not.
19977
20938
  */
19978
20939
  StreamFilesSummary(request: FilesSummaryRequest, metadata?: Metadata): Observable<FilesSummary>;
19979
20940
  /** Latest observed list price per catalog listing from the global catalog, under stored names. */
@@ -20035,6 +20996,7 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
20035
20996
  this.StreamProjectOverview = this.StreamProjectOverview.bind(this);
20036
20997
  this.StreamProjectSummaries = this.StreamProjectSummaries.bind(this);
20037
20998
  this.ListFiles = this.ListFiles.bind(this);
20999
+ this.ListFileDirectories = this.ListFileDirectories.bind(this);
20038
21000
  this.StreamFilesSummary = this.StreamFilesSummary.bind(this);
20039
21001
  this.ListModelPrices = this.ListModelPrices.bind(this);
20040
21002
  this.ListModelPriceHistory = this.ListModelPriceHistory.bind(this);
@@ -20151,6 +21113,12 @@ export class AIGatewayServiceClientImpl implements AIGatewayService {
20151
21113
  return promise.then((data) => ListFilesResponse.decode(new BinaryReader(data)));
20152
21114
  }
20153
21115
 
21116
+ ListFileDirectories(request: ListFileDirectoriesRequest, metadata?: Metadata): Promise<ListFileDirectoriesResponse> {
21117
+ const data = ListFileDirectoriesRequest.encode(request).finish();
21118
+ const promise = this.rpc.request(this.service, "ListFileDirectories", data, metadata);
21119
+ return promise.then((data) => ListFileDirectoriesResponse.decode(new BinaryReader(data)));
21120
+ }
21121
+
20154
21122
  StreamFilesSummary(request: FilesSummaryRequest, metadata?: Metadata): Observable<FilesSummary> {
20155
21123
  const data = FilesSummaryRequest.encode(request).finish();
20156
21124
  const result = this.rpc.serverStreamingRequest(this.service, "StreamFilesSummary", data, metadata);