@opsee/mcp-server 0.9.60 → 0.10.2

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.
Files changed (40) hide show
  1. package/gen/api/v1/billing_pb.d.ts +0 -40
  2. package/gen/api/v1/billing_pb.js +22 -36
  3. package/gen/api/v1/developer_metrics_pb.d.ts +9 -3
  4. package/gen/api/v1/developer_metrics_pb.js +2 -1
  5. package/gen/api/v1/models_pb.d.ts +116 -5
  6. package/gen/api/v1/models_pb.js +33 -26
  7. package/gen/api/v1/project_pb.d.ts +18 -13
  8. package/gen/api/v1/project_pb.js +1 -1
  9. package/gen/api/v1/task_subscription_pb.d.ts +146 -0
  10. package/gen/api/v1/task_subscription_pb.js +66 -0
  11. package/gen/api/v1/vcs_connection_pb.d.ts +34 -3
  12. package/gen/api/v1/vcs_connection_pb.js +28 -20
  13. package/gen/api/v1/vcs_integration_pb.d.ts +11 -1
  14. package/gen/api/v1/vcs_integration_pb.js +2 -1
  15. package/gen/fk/foreign_key_pb.d.ts +22 -0
  16. package/gen/fk/foreign_key_pb.js +24 -0
  17. package/package.json +11 -11
  18. package/src/auth/kv-store.ts +12 -33
  19. package/src/auth/manager.ts +1 -6
  20. package/src/auth/oauth-provider.ts +32 -104
  21. package/src/auth/renew.ts +5 -15
  22. package/src/client/api.ts +3 -5
  23. package/src/server-http.ts +14 -30
  24. package/src/tools/acceptance-criteria.ts +4 -14
  25. package/src/tools/descriptions.ts +2 -7
  26. package/src/tools/doc-links.ts +4 -9
  27. package/src/tools/doc-spaces.ts +1 -1
  28. package/src/tools/docs.ts +8 -19
  29. package/src/tools/notifications.ts +2 -6
  30. package/src/tools/tasks-bulk.ts +3 -8
  31. package/src/tools/tasks-read-write.ts +1 -8
  32. package/src/utils/format/blocknote.ts +8 -23
  33. package/src/utils/tool-schema.ts +7 -29
  34. package/README.md +0 -304
  35. package/gen/api/v1/deployment_pb.d.ts +0 -277
  36. package/gen/api/v1/deployment_pb.js +0 -89
  37. package/gen/api/v1/environment_pb.d.ts +0 -277
  38. package/gen/api/v1/environment_pb.js +0 -89
  39. package/gen/api/v1/test_run_pb.d.ts +0 -277
  40. package/gen/api/v1/test_run_pb.js +0 -89
@@ -5,7 +5,7 @@
5
5
  import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { VCSProvider } from "./vcs_pb";
8
- import type { ProjectRepository, VCSIntegration } from "./models_pb";
8
+ import type { ProjectRepository } from "./models_pb";
9
9
  import type { EmptySchema } from "@bufbuild/protobuf/wkt";
10
10
 
11
11
  /**
@@ -313,9 +313,9 @@ export declare const ConnectRepositoryRequestSchema: GenMessage<ConnectRepositor
313
313
  */
314
314
  export declare type ConnectRepositoryResponse = Message<"api.v1.ConnectRepositoryResponse"> & {
315
315
  /**
316
- * @generated from field: api.v1.VCSIntegration integration = 1;
316
+ * @generated from field: api.v1.ProjectRepository repository = 2;
317
317
  */
318
- integration?: VCSIntegration;
318
+ repository?: ProjectRepository;
319
319
  };
320
320
 
321
321
  /**
@@ -340,6 +340,27 @@ export declare type DisconnectRepositoryRequest = Message<"api.v1.DisconnectRepo
340
340
  */
341
341
  export declare const DisconnectRepositoryRequestSchema: GenMessage<DisconnectRepositoryRequest>;
342
342
 
343
+ /**
344
+ * @generated from message api.v1.DisconnectVCSAccountRequest
345
+ */
346
+ export declare type DisconnectVCSAccountRequest = Message<"api.v1.DisconnectVCSAccountRequest"> & {
347
+ /**
348
+ * @generated from field: uint32 project_id = 1;
349
+ */
350
+ projectId: number;
351
+
352
+ /**
353
+ * @generated from field: api.v1.VCSProvider provider = 2;
354
+ */
355
+ provider: VCSProvider;
356
+ };
357
+
358
+ /**
359
+ * Describes the message api.v1.DisconnectVCSAccountRequest.
360
+ * Use `create(DisconnectVCSAccountRequestSchema)` to create a new message.
361
+ */
362
+ export declare const DisconnectVCSAccountRequestSchema: GenMessage<DisconnectVCSAccountRequest>;
363
+
343
364
  /**
344
365
  * @generated from message api.v1.GetConnectionStatusRequest
345
366
  */
@@ -911,6 +932,16 @@ export declare const VCSConnectionService: GenService<{
911
932
  input: typeof DisconnectRepositoryRequestSchema;
912
933
  output: typeof EmptySchema;
913
934
  },
935
+ /**
936
+ * Disconnect an entire VCS account connection (all repos + stored credentials) for a provider
937
+ *
938
+ * @generated from rpc api.v1.VCSConnectionService.DisconnectVCSAccount
939
+ */
940
+ disconnectVCSAccount: {
941
+ methodKind: "unary";
942
+ input: typeof DisconnectVCSAccountRequestSchema;
943
+ output: typeof EmptySchema;
944
+ },
914
945
  /**
915
946
  * Get VCS connection status for a project
916
947
  *
@@ -8,12 +8,13 @@ import { file_google_api_annotations } from "../../google/api/annotations_pb";
8
8
  import { file_validate_validate } from "../../validate/validate_pb";
9
9
  import { file_api_v1_models } from "./models_pb";
10
10
  import { file_api_v1_vcs } from "./vcs_pb";
11
+ import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
11
12
 
12
13
  /**
13
14
  * Describes the file api/v1/vcs_connection.proto.
14
15
  */
15
16
  export const file_api_v1_vcs_connection = /*@__PURE__*/
16
- fileDesc("ChthcGkvdjEvdmNzX2Nvbm5lY3Rpb24ucHJvdG8SBmFwaS52MSL6AQocSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBIlCghwcm92aWRlchgBIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIbCgpwcm9qZWN0X2lkGAIgASgNQgf6QgQqAigBEhkKDGluc3RhbmNlX3VybBgDIAEoCUgAiAEBEhwKD29hdXRoX2NsaWVudF9pZBgEIAEoCUgBiAEBEiAKE29hdXRoX2NsaWVudF9zZWNyZXQYBSABKAlIAogBAUIPCg1faW5zdGFuY2VfdXJsQhIKEF9vYXV0aF9jbGllbnRfaWRCFgoUX29hdXRoX2NsaWVudF9zZWNyZXQiSQodSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVzcG9uc2USGQoRYXV0aG9yaXphdGlvbl91cmwYASABKAkSDQoFc3RhdGUYAiABKAkihgIKHENvbXBsZXRlVkNTQ29ubmVjdGlvblJlcXVlc3QSJQoIcHJvdmlkZXIYASABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGwoKcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoARIWCgVzdGF0ZRgDIAEoCUIH+kIEcgIQARIcCg9pbnN0YWxsYXRpb25faWQYBCABKANIAIgBARIZCgxzZXR1cF9hY3Rpb24YBSABKAlIAYgBARIRCgRjb2RlGAYgASgJSAKIAQFCEgoQX2luc3RhbGxhdGlvbl9pZEIPCg1fc2V0dXBfYWN0aW9uQgcKBV9jb2RlSgQIBxAISgQICBAJSgQICRAKIkEKHUNvbXBsZXRlVkNTQ29ubmVjdGlvblJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKOAQoXTGlzdFJlcG9zaXRvcmllc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRIOCgZzZWFyY2gYBSABKAkiqQEKClJlcG9zaXRvcnkSCgoCaWQYASABKAMSDAoEbmFtZRgCIAEoCRIRCglmdWxsX25hbWUYAyABKAkSDQoFb3duZXIYBCABKAkSFgoOZGVmYXVsdF9icmFuY2gYBSABKAkSDwoHcHJpdmF0ZRgGIAEoCBITCgtkZXNjcmlwdGlvbhgHIAEoCRILCgN1cmwYCCABKAkSFAoMaXNfY29ubmVjdGVkGAkgASgIIqYBChhMaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2USKAoMcmVwb3NpdG9yaWVzGAEgAygLMhIuYXBpLnYxLlJlcG9zaXRvcnkSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRINCgV0b3RhbBgFIAEoBRITCgt0b3RhbF9wYWdlcxgGIAEoBSKdAQoYQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoUcmVwb3NpdG9yeV9mdWxsX25hbWUYAiABKAlCB/pCBHICEAESFgoOZGVmYXVsdF9icmFuY2gYAyABKAkSJQoIcHJvdmlkZXIYBCABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXIiSAoZQ29ubmVjdFJlcG9zaXRvcnlSZXNwb25zZRIrCgtpbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS52MS5WQ1NJbnRlZ3JhdGlvbiJCChtEaXNjb25uZWN0UmVwb3NpdG9yeVJlcXVlc3QSIwoSdmNzX2ludGVncmF0aW9uX2lkGAEgASgNQgf6QgQqAigBImAKGkdldENvbm5lY3Rpb25TdGF0dXNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoIcHJvdmlkZXIYAiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXIi9QEKG0dldENvbm5lY3Rpb25TdGF0dXNSZXNwb25zZRIUCgxpc19jb25uZWN0ZWQYASABKAgSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIUCgxhY2NvdW50X25hbWUYAyABKAkSFAoMYWNjb3VudF90eXBlGAQgASgJEiQKHGNvbm5lY3RlZF9yZXBvc2l0b3JpZXNfY291bnQYBSABKAUSJQoIcHJvdmlkZXIYBiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGQoMaW5zdGFuY2VfdXJsGAcgASgJSACIAQFCDwoNX2luc3RhbmNlX3VybCJUChVHZXRPcHNlZUNvbmZpZ1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBImsKFkdldE9wc2VlQ29uZmlnUmVzcG9uc2USFgoOY29uZmlnX2NvbnRlbnQYASABKAkSEwoLY29tbWl0X2hhc2gYAiABKAkSFAoMbGFzdF91cGRhdGVkGAMgASgJEg4KBmV4aXN0cxgEIAEoCCKQAQoYVXBkYXRlT3BzZWVDb25maWdSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESHgoNcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoARIfCg5jb25maWdfY29udGVudBgDIAEoCUIH+kIEcgIQARIWCg5jb21taXRfbWVzc2FnZRgEIAEoCSJSChlVcGRhdGVPcHNlZUNvbmZpZ1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSEwoLY29tbWl0X2hhc2gYAiABKAkSDwoHbWVzc2FnZRgDIAEoCSJXChhHZXRBbmFseXNpc1N0YXR1c1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBIpgBChlHZXRBbmFseXNpc1N0YXR1c1Jlc3BvbnNlEg4KBnN0YXR1cxgBIAEoCRIQCghqb2JfbmFtZRgCIAEoCRISCgpzdGFydGVkX2F0GAMgASgJEhQKDGNvbXBsZXRlZF9hdBgEIAEoCRIVCg1lcnJvcl9tZXNzYWdlGAUgASgJEhgKEGhhc19vcHNlZV9jb25maWcYBiABKAgilAEKH1VwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBEhgKEGF1dG9fc3luY19pc3N1ZXMYAyABKAgSGgoSZW5hYmxlX3ByX3dlYmhvb2tzGAQgASgIImIKIFVwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSLQoKcmVwb3NpdG9yeRgCIAEoCzIZLmFwaS52MS5Qcm9qZWN0UmVwb3NpdG9yeSJ5ChtTeW5jUmVwb3NpdG9yeUlzc3Vlc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIWCg5yZXBvc2l0b3J5X2lkcxgCIAMoDRIlCghwcm92aWRlchgDIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlciJAChxTeW5jUmVwb3NpdG9yeUlzc3Vlc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKCAgoVUmV1c2FibGVWQ1NDb25uZWN0aW9uEhYKDmludGVncmF0aW9uX2lkGAEgASgNEhkKEXNvdXJjZV9wcm9qZWN0X2lkGAIgASgNEhsKE3NvdXJjZV9wcm9qZWN0X25hbWUYAyABKAkSJQoIcHJvdmlkZXIYBCABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISFAoMYWNjb3VudF9uYW1lGAUgASgJEhQKDGFjY291bnRfdHlwZRgGIAEoCRIaChJhY2NvdW50X2F2YXRhcl91cmwYByABKAkSGQoMaW5zdGFuY2VfdXJsGAggASgJSACIAQFCDwoNX2luc3RhbmNlX3VybCJkCh5MaXN0UmV1c2FibGVDb25uZWN0aW9uc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlciJVCh9MaXN0UmV1c2FibGVDb25uZWN0aW9uc1Jlc3BvbnNlEjIKC2Nvbm5lY3Rpb25zGAEgAygLMh0uYXBpLnYxLlJldXNhYmxlVkNTQ29ubmVjdGlvbiJnChlSZXVzZVZDU0Nvbm5lY3Rpb25SZXF1ZXN0EiYKFXNvdXJjZV9pbnRlZ3JhdGlvbl9pZBgBIAEoDUIH+kIEKgIoARIiChF0YXJnZXRfcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoASI+ChpSZXVzZVZDU0Nvbm5lY3Rpb25SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkiXwogVHJpZ2dlclJlcG9zaXRvcnlBbmFseXNpc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBIkUKIVRyaWdnZXJSZXBvc2l0b3J5QW5hbHlzaXNSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkyuxEKFFZDU0Nvbm5lY3Rpb25TZXJ2aWNlEoQBChVJbml0aWF0ZVZDU0Nvbm5lY3Rpb24SJC5hcGkudjEuSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBolLmFwaS52MS5Jbml0aWF0ZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIegtPkkwIYOgEqIhMvYXBpL3YxL3Zjcy9jb25uZWN0EoUBChVDb21wbGV0ZVZDU0Nvbm5lY3Rpb24SJC5hcGkudjEuQ29tcGxldGVWQ1NDb25uZWN0aW9uUmVxdWVzdBolLmFwaS52MS5Db21wbGV0ZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIfgtPkkwIZOgEqIhQvYXBpL3YxL3Zjcy9jYWxsYmFjaxKNAQoQTGlzdFJlcG9zaXRvcmllcxIfLmFwaS52MS5MaXN0UmVwb3NpdG9yaWVzUmVxdWVzdBogLmFwaS52MS5MaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2UiNoLT5JMCMBIuL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JlcG9zaXRvcmllcxKTAQoRQ29ubmVjdFJlcG9zaXRvcnkSIC5hcGkudjEuQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0GiEuYXBpLnYxLkNvbm5lY3RSZXBvc2l0b3J5UmVzcG9uc2UiOYLT5JMCMzoBKiIuL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JlcG9zaXRvcmllcxKKAQoURGlzY29ubmVjdFJlcG9zaXRvcnkSIy5hcGkudjEuRGlzY29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi8qLS9hcGkvdjEvdmNzL2ludGVncmF0aW9ucy97dmNzX2ludGVncmF0aW9uX2lkfRKQAQoTR2V0Q29ubmVjdGlvblN0YXR1cxIiLmFwaS52MS5HZXRDb25uZWN0aW9uU3RhdHVzUmVxdWVzdBojLmFwaS52MS5HZXRDb25uZWN0aW9uU3RhdHVzUmVzcG9uc2UiMILT5JMCKhIoL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3N0YXR1cxKZAQoOR2V0T3BzZWVDb25maWcSHS5hcGkudjEuR2V0T3BzZWVDb25maWdSZXF1ZXN0Gh4uYXBpLnYxLkdldE9wc2VlQ29uZmlnUmVzcG9uc2UiSILT5JMCQhJAL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9vcHNlZRKlAQoRVXBkYXRlT3BzZWVDb25maWcSIC5hcGkudjEuVXBkYXRlT3BzZWVDb25maWdSZXF1ZXN0GiEuYXBpLnYxLlVwZGF0ZU9wc2VlQ29uZmlnUmVzcG9uc2UiS4LT5JMCRToBKhpAL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9vcHNlZRKsAQoRR2V0QW5hbHlzaXNTdGF0dXMSIC5hcGkudjEuR2V0QW5hbHlzaXNTdGF0dXNSZXF1ZXN0GiEuYXBpLnYxLkdldEFuYWx5c2lzU3RhdHVzUmVzcG9uc2UiUoLT5JMCTBJKL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9hbmFseXNpcy9zdGF0dXMSvQEKGFVwZGF0ZVJlcG9zaXRvcnlTZXR0aW5ncxInLmFwaS52MS5VcGRhdGVSZXBvc2l0b3J5U2V0dGluZ3NSZXF1ZXN0GiguYXBpLnYxLlVwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1Jlc3BvbnNlIk6C0+STAkg6ASoaQy9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vc2V0dGluZ3MSmwEKFFN5bmNSZXBvc2l0b3J5SXNzdWVzEiMuYXBpLnYxLlN5bmNSZXBvc2l0b3J5SXNzdWVzUmVxdWVzdBokLmFwaS52MS5TeW5jUmVwb3NpdG9yeUlzc3Vlc1Jlc3BvbnNlIjiC0+STAjI6ASoiLS9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9zeW5jLWlzc3VlcxKqAQoXTGlzdFJldXNhYmxlQ29ubmVjdGlvbnMSJi5hcGkudjEuTGlzdFJldXNhYmxlQ29ubmVjdGlvbnNSZXF1ZXN0GicuYXBpLnYxLkxpc3RSZXVzYWJsZUNvbm5lY3Rpb25zUmVzcG9uc2UiPoLT5JMCOBI2L2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JldXNhYmxlLWNvbm5lY3Rpb25zEoQBChJSZXVzZVZDU0Nvbm5lY3Rpb24SIS5hcGkudjEuUmV1c2VWQ1NDb25uZWN0aW9uUmVxdWVzdBoiLmFwaS52MS5SZXVzZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIngtPkkwIhOgEqIhwvYXBpL3YxL3Zjcy9yZXVzZS1jb25uZWN0aW9uEsgBChlUcmlnZ2VyUmVwb3NpdG9yeUFuYWx5c2lzEiguYXBpLnYxLlRyaWdnZXJSZXBvc2l0b3J5QW5hbHlzaXNSZXF1ZXN0GikuYXBpLnYxLlRyaWdnZXJSZXBvc2l0b3J5QW5hbHlzaXNSZXNwb25zZSJWgtPkkwJQOgEqIksvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2FuYWx5c2lzL3RyaWdnZXJCdwoKY29tLmFwaS52MUISVmNzQ29ubmVjdGlvblByb3RvUAFaHG9wc2VlL2JhY2tlbmQvZ2VuL2FwaS92MTtnZW6iAgNBWFiqAgZBcGkuVjHKAgZBcGlcVjHiAhJBcGlcVjFcR1BCTWV0YWRhdGHqAgdBcGk6OlYxYgZwcm90bzM", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_models, file_api_v1_vcs]);
17
+ fileDesc("ChthcGkvdjEvdmNzX2Nvbm5lY3Rpb24ucHJvdG8SBmFwaS52MSL6AQocSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBIlCghwcm92aWRlchgBIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIbCgpwcm9qZWN0X2lkGAIgASgNQgf6QgQqAigBEhkKDGluc3RhbmNlX3VybBgDIAEoCUgAiAEBEhwKD29hdXRoX2NsaWVudF9pZBgEIAEoCUgBiAEBEiAKE29hdXRoX2NsaWVudF9zZWNyZXQYBSABKAlIAogBAUIPCg1faW5zdGFuY2VfdXJsQhIKEF9vYXV0aF9jbGllbnRfaWRCFgoUX29hdXRoX2NsaWVudF9zZWNyZXQiSQodSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVzcG9uc2USGQoRYXV0aG9yaXphdGlvbl91cmwYASABKAkSDQoFc3RhdGUYAiABKAkihgIKHENvbXBsZXRlVkNTQ29ubmVjdGlvblJlcXVlc3QSJQoIcHJvdmlkZXIYASABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGwoKcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoARIWCgVzdGF0ZRgDIAEoCUIH+kIEcgIQARIcCg9pbnN0YWxsYXRpb25faWQYBCABKANIAIgBARIZCgxzZXR1cF9hY3Rpb24YBSABKAlIAYgBARIRCgRjb2RlGAYgASgJSAKIAQFCEgoQX2luc3RhbGxhdGlvbl9pZEIPCg1fc2V0dXBfYWN0aW9uQgcKBV9jb2RlSgQIBxAISgQICBAJSgQICRAKIkEKHUNvbXBsZXRlVkNTQ29ubmVjdGlvblJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKOAQoXTGlzdFJlcG9zaXRvcmllc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRIOCgZzZWFyY2gYBSABKAkiqQEKClJlcG9zaXRvcnkSCgoCaWQYASABKAMSDAoEbmFtZRgCIAEoCRIRCglmdWxsX25hbWUYAyABKAkSDQoFb3duZXIYBCABKAkSFgoOZGVmYXVsdF9icmFuY2gYBSABKAkSDwoHcHJpdmF0ZRgGIAEoCBITCgtkZXNjcmlwdGlvbhgHIAEoCRILCgN1cmwYCCABKAkSFAoMaXNfY29ubmVjdGVkGAkgASgIIqYBChhMaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2USKAoMcmVwb3NpdG9yaWVzGAEgAygLMhIuYXBpLnYxLlJlcG9zaXRvcnkSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRINCgV0b3RhbBgFIAEoBRITCgt0b3RhbF9wYWdlcxgGIAEoBSKdAQoYQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoUcmVwb3NpdG9yeV9mdWxsX25hbWUYAiABKAlCB/pCBHICEAESFgoOZGVmYXVsdF9icmFuY2gYAyABKAkSJQoIcHJvdmlkZXIYBCABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXIiXQoZQ29ubmVjdFJlcG9zaXRvcnlSZXNwb25zZRItCgpyZXBvc2l0b3J5GAIgASgLMhkuYXBpLnYxLlByb2plY3RSZXBvc2l0b3J5SgQIARACUgtpbnRlZ3JhdGlvbiJCChtEaXNjb25uZWN0UmVwb3NpdG9yeVJlcXVlc3QSIwoSdmNzX2ludGVncmF0aW9uX2lkGAEgASgNQgf6QgQqAigBIm0KG0Rpc2Nvbm5lY3RWQ1NBY2NvdW50UmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEjEKCHByb3ZpZGVyGAIgASgOMhMuYXBpLnYxLlZDU1Byb3ZpZGVyQgr6QgeCAQQQASAAImAKGkdldENvbm5lY3Rpb25TdGF0dXNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoIcHJvdmlkZXIYAiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXIi9QEKG0dldENvbm5lY3Rpb25TdGF0dXNSZXNwb25zZRIUCgxpc19jb25uZWN0ZWQYASABKAgSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIUCgxhY2NvdW50X25hbWUYAyABKAkSFAoMYWNjb3VudF90eXBlGAQgASgJEiQKHGNvbm5lY3RlZF9yZXBvc2l0b3JpZXNfY291bnQYBSABKAUSJQoIcHJvdmlkZXIYBiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGQoMaW5zdGFuY2VfdXJsGAcgASgJSACIAQFCDwoNX2luc3RhbmNlX3VybCJUChVHZXRPcHNlZUNvbmZpZ1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBImsKFkdldE9wc2VlQ29uZmlnUmVzcG9uc2USFgoOY29uZmlnX2NvbnRlbnQYASABKAkSEwoLY29tbWl0X2hhc2gYAiABKAkSFAoMbGFzdF91cGRhdGVkGAMgASgJEg4KBmV4aXN0cxgEIAEoCCKcAQoYVXBkYXRlT3BzZWVDb25maWdSZXF1ZXN0EicKCnByb2plY3RfaWQYASABKA1CE/pCBCoCKAGCtRgIcHJvamVjdHMSHgoNcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoARIfCg5jb25maWdfY29udGVudBgDIAEoCUIH+kIEcgIQARIWCg5jb21taXRfbWVzc2FnZRgEIAEoCSJSChlVcGRhdGVPcHNlZUNvbmZpZ1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSEwoLY29tbWl0X2hhc2gYAiABKAkSDwoHbWVzc2FnZRgDIAEoCSJXChhHZXRBbmFseXNpc1N0YXR1c1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBIpgBChlHZXRBbmFseXNpc1N0YXR1c1Jlc3BvbnNlEg4KBnN0YXR1cxgBIAEoCRIQCghqb2JfbmFtZRgCIAEoCRISCgpzdGFydGVkX2F0GAMgASgJEhQKDGNvbXBsZXRlZF9hdBgEIAEoCRIVCg1lcnJvcl9tZXNzYWdlGAUgASgJEhgKEGhhc19vcHNlZV9jb25maWcYBiABKAgioAEKH1VwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1JlcXVlc3QSJwoKcHJvamVjdF9pZBgBIAEoDUIT+kIEKgIoAYK1GAhwcm9qZWN0cxIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBEhgKEGF1dG9fc3luY19pc3N1ZXMYAyABKAgSGgoSZW5hYmxlX3ByX3dlYmhvb2tzGAQgASgIImIKIFVwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSLQoKcmVwb3NpdG9yeRgCIAEoCzIZLmFwaS52MS5Qcm9qZWN0UmVwb3NpdG9yeSJ5ChtTeW5jUmVwb3NpdG9yeUlzc3Vlc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIWCg5yZXBvc2l0b3J5X2lkcxgCIAMoDRIlCghwcm92aWRlchgDIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlciJAChxTeW5jUmVwb3NpdG9yeUlzc3Vlc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKCAgoVUmV1c2FibGVWQ1NDb25uZWN0aW9uEhYKDmludGVncmF0aW9uX2lkGAEgASgNEhkKEXNvdXJjZV9wcm9qZWN0X2lkGAIgASgNEhsKE3NvdXJjZV9wcm9qZWN0X25hbWUYAyABKAkSJQoIcHJvdmlkZXIYBCABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISFAoMYWNjb3VudF9uYW1lGAUgASgJEhQKDGFjY291bnRfdHlwZRgGIAEoCRIaChJhY2NvdW50X2F2YXRhcl91cmwYByABKAkSGQoMaW5zdGFuY2VfdXJsGAggASgJSACIAQFCDwoNX2luc3RhbmNlX3VybCJkCh5MaXN0UmV1c2FibGVDb25uZWN0aW9uc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlciJVCh9MaXN0UmV1c2FibGVDb25uZWN0aW9uc1Jlc3BvbnNlEjIKC2Nvbm5lY3Rpb25zGAEgAygLMh0uYXBpLnYxLlJldXNhYmxlVkNTQ29ubmVjdGlvbiJnChlSZXVzZVZDU0Nvbm5lY3Rpb25SZXF1ZXN0EiYKFXNvdXJjZV9pbnRlZ3JhdGlvbl9pZBgBIAEoDUIH+kIEKgIoARIiChF0YXJnZXRfcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoASI+ChpSZXVzZVZDU0Nvbm5lY3Rpb25SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkiXwogVHJpZ2dlclJlcG9zaXRvcnlBbmFseXNpc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBIkUKIVRyaWdnZXJSZXBvc2l0b3J5QW5hbHlzaXNSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkyzxIKFFZDU0Nvbm5lY3Rpb25TZXJ2aWNlEoQBChVJbml0aWF0ZVZDU0Nvbm5lY3Rpb24SJC5hcGkudjEuSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBolLmFwaS52MS5Jbml0aWF0ZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIegtPkkwIYOgEqIhMvYXBpL3YxL3Zjcy9jb25uZWN0EoUBChVDb21wbGV0ZVZDU0Nvbm5lY3Rpb24SJC5hcGkudjEuQ29tcGxldGVWQ1NDb25uZWN0aW9uUmVxdWVzdBolLmFwaS52MS5Db21wbGV0ZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIfgtPkkwIZOgEqIhQvYXBpL3YxL3Zjcy9jYWxsYmFjaxKNAQoQTGlzdFJlcG9zaXRvcmllcxIfLmFwaS52MS5MaXN0UmVwb3NpdG9yaWVzUmVxdWVzdBogLmFwaS52MS5MaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2UiNoLT5JMCMBIuL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JlcG9zaXRvcmllcxKTAQoRQ29ubmVjdFJlcG9zaXRvcnkSIC5hcGkudjEuQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0GiEuYXBpLnYxLkNvbm5lY3RSZXBvc2l0b3J5UmVzcG9uc2UiOYLT5JMCMzoBKiIuL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JlcG9zaXRvcmllcxKKAQoURGlzY29ubmVjdFJlcG9zaXRvcnkSIy5hcGkudjEuRGlzY29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi8qLS9hcGkvdjEvdmNzL2ludGVncmF0aW9ucy97dmNzX2ludGVncmF0aW9uX2lkfRKRAQoURGlzY29ubmVjdFZDU0FjY291bnQSIy5hcGkudjEuRGlzY29ubmVjdFZDU0FjY291bnRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjyC0+STAjYqNC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9hY2NvdW50L3twcm92aWRlcn0SkAEKE0dldENvbm5lY3Rpb25TdGF0dXMSIi5hcGkudjEuR2V0Q29ubmVjdGlvblN0YXR1c1JlcXVlc3QaIy5hcGkudjEuR2V0Q29ubmVjdGlvblN0YXR1c1Jlc3BvbnNlIjCC0+STAioSKC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9zdGF0dXMSmQEKDkdldE9wc2VlQ29uZmlnEh0uYXBpLnYxLkdldE9wc2VlQ29uZmlnUmVxdWVzdBoeLmFwaS52MS5HZXRPcHNlZUNvbmZpZ1Jlc3BvbnNlIkiC0+STAkISQC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vb3BzZWUSpQEKEVVwZGF0ZU9wc2VlQ29uZmlnEiAuYXBpLnYxLlVwZGF0ZU9wc2VlQ29uZmlnUmVxdWVzdBohLmFwaS52MS5VcGRhdGVPcHNlZUNvbmZpZ1Jlc3BvbnNlIkuC0+STAkU6ASoaQC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vb3BzZWUSrAEKEUdldEFuYWx5c2lzU3RhdHVzEiAuYXBpLnYxLkdldEFuYWx5c2lzU3RhdHVzUmVxdWVzdBohLmFwaS52MS5HZXRBbmFseXNpc1N0YXR1c1Jlc3BvbnNlIlKC0+STAkwSSi9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vYW5hbHlzaXMvc3RhdHVzEr0BChhVcGRhdGVSZXBvc2l0b3J5U2V0dGluZ3MSJy5hcGkudjEuVXBkYXRlUmVwb3NpdG9yeVNldHRpbmdzUmVxdWVzdBooLmFwaS52MS5VcGRhdGVSZXBvc2l0b3J5U2V0dGluZ3NSZXNwb25zZSJOgtPkkwJIOgEqGkMvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L3NldHRpbmdzEpsBChRTeW5jUmVwb3NpdG9yeUlzc3VlcxIjLmFwaS52MS5TeW5jUmVwb3NpdG9yeUlzc3Vlc1JlcXVlc3QaJC5hcGkudjEuU3luY1JlcG9zaXRvcnlJc3N1ZXNSZXNwb25zZSI4gtPkkwIyOgEqIi0vYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS92Y3Mvc3luYy1pc3N1ZXMSqgEKF0xpc3RSZXVzYWJsZUNvbm5lY3Rpb25zEiYuYXBpLnYxLkxpc3RSZXVzYWJsZUNvbm5lY3Rpb25zUmVxdWVzdBonLmFwaS52MS5MaXN0UmV1c2FibGVDb25uZWN0aW9uc1Jlc3BvbnNlIj6C0+STAjgSNi9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9yZXVzYWJsZS1jb25uZWN0aW9ucxKEAQoSUmV1c2VWQ1NDb25uZWN0aW9uEiEuYXBpLnYxLlJldXNlVkNTQ29ubmVjdGlvblJlcXVlc3QaIi5hcGkudjEuUmV1c2VWQ1NDb25uZWN0aW9uUmVzcG9uc2UiJ4LT5JMCIToBKiIcL2FwaS92MS92Y3MvcmV1c2UtY29ubmVjdGlvbhLIAQoZVHJpZ2dlclJlcG9zaXRvcnlBbmFseXNpcxIoLmFwaS52MS5UcmlnZ2VyUmVwb3NpdG9yeUFuYWx5c2lzUmVxdWVzdBopLmFwaS52MS5UcmlnZ2VyUmVwb3NpdG9yeUFuYWx5c2lzUmVzcG9uc2UiVoLT5JMCUDoBKiJLL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9hbmFseXNpcy90cmlnZ2VyQncKCmNvbS5hcGkudjFCElZjc0Nvbm5lY3Rpb25Qcm90b1ABWhxvcHNlZS9iYWNrZW5kL2dlbi9hcGkvdjE7Z2VuogIDQVhYqgIGQXBpLlYxygIGQXBpXFYx4gISQXBpXFYxXEdQQk1ldGFkYXRh6gIHQXBpOjpWMWIGcHJvdG8z", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_models, file_api_v1_vcs, file_fk_foreign_key]);
17
18
 
18
19
  /**
19
20
  * Describes the message api.v1.InitiateVCSConnectionRequest.
@@ -85,138 +86,145 @@ export const ConnectRepositoryResponseSchema = /*@__PURE__*/
85
86
  export const DisconnectRepositoryRequestSchema = /*@__PURE__*/
86
87
  messageDesc(file_api_v1_vcs_connection, 9);
87
88
 
89
+ /**
90
+ * Describes the message api.v1.DisconnectVCSAccountRequest.
91
+ * Use `create(DisconnectVCSAccountRequestSchema)` to create a new message.
92
+ */
93
+ export const DisconnectVCSAccountRequestSchema = /*@__PURE__*/
94
+ messageDesc(file_api_v1_vcs_connection, 10);
95
+
88
96
  /**
89
97
  * Describes the message api.v1.GetConnectionStatusRequest.
90
98
  * Use `create(GetConnectionStatusRequestSchema)` to create a new message.
91
99
  */
92
100
  export const GetConnectionStatusRequestSchema = /*@__PURE__*/
93
- messageDesc(file_api_v1_vcs_connection, 10);
101
+ messageDesc(file_api_v1_vcs_connection, 11);
94
102
 
95
103
  /**
96
104
  * Describes the message api.v1.GetConnectionStatusResponse.
97
105
  * Use `create(GetConnectionStatusResponseSchema)` to create a new message.
98
106
  */
99
107
  export const GetConnectionStatusResponseSchema = /*@__PURE__*/
100
- messageDesc(file_api_v1_vcs_connection, 11);
108
+ messageDesc(file_api_v1_vcs_connection, 12);
101
109
 
102
110
  /**
103
111
  * Describes the message api.v1.GetOpseeConfigRequest.
104
112
  * Use `create(GetOpseeConfigRequestSchema)` to create a new message.
105
113
  */
106
114
  export const GetOpseeConfigRequestSchema = /*@__PURE__*/
107
- messageDesc(file_api_v1_vcs_connection, 12);
115
+ messageDesc(file_api_v1_vcs_connection, 13);
108
116
 
109
117
  /**
110
118
  * Describes the message api.v1.GetOpseeConfigResponse.
111
119
  * Use `create(GetOpseeConfigResponseSchema)` to create a new message.
112
120
  */
113
121
  export const GetOpseeConfigResponseSchema = /*@__PURE__*/
114
- messageDesc(file_api_v1_vcs_connection, 13);
122
+ messageDesc(file_api_v1_vcs_connection, 14);
115
123
 
116
124
  /**
117
125
  * Describes the message api.v1.UpdateOpseeConfigRequest.
118
126
  * Use `create(UpdateOpseeConfigRequestSchema)` to create a new message.
119
127
  */
120
128
  export const UpdateOpseeConfigRequestSchema = /*@__PURE__*/
121
- messageDesc(file_api_v1_vcs_connection, 14);
129
+ messageDesc(file_api_v1_vcs_connection, 15);
122
130
 
123
131
  /**
124
132
  * Describes the message api.v1.UpdateOpseeConfigResponse.
125
133
  * Use `create(UpdateOpseeConfigResponseSchema)` to create a new message.
126
134
  */
127
135
  export const UpdateOpseeConfigResponseSchema = /*@__PURE__*/
128
- messageDesc(file_api_v1_vcs_connection, 15);
136
+ messageDesc(file_api_v1_vcs_connection, 16);
129
137
 
130
138
  /**
131
139
  * Describes the message api.v1.GetAnalysisStatusRequest.
132
140
  * Use `create(GetAnalysisStatusRequestSchema)` to create a new message.
133
141
  */
134
142
  export const GetAnalysisStatusRequestSchema = /*@__PURE__*/
135
- messageDesc(file_api_v1_vcs_connection, 16);
143
+ messageDesc(file_api_v1_vcs_connection, 17);
136
144
 
137
145
  /**
138
146
  * Describes the message api.v1.GetAnalysisStatusResponse.
139
147
  * Use `create(GetAnalysisStatusResponseSchema)` to create a new message.
140
148
  */
141
149
  export const GetAnalysisStatusResponseSchema = /*@__PURE__*/
142
- messageDesc(file_api_v1_vcs_connection, 17);
150
+ messageDesc(file_api_v1_vcs_connection, 18);
143
151
 
144
152
  /**
145
153
  * Describes the message api.v1.UpdateRepositorySettingsRequest.
146
154
  * Use `create(UpdateRepositorySettingsRequestSchema)` to create a new message.
147
155
  */
148
156
  export const UpdateRepositorySettingsRequestSchema = /*@__PURE__*/
149
- messageDesc(file_api_v1_vcs_connection, 18);
157
+ messageDesc(file_api_v1_vcs_connection, 19);
150
158
 
151
159
  /**
152
160
  * Describes the message api.v1.UpdateRepositorySettingsResponse.
153
161
  * Use `create(UpdateRepositorySettingsResponseSchema)` to create a new message.
154
162
  */
155
163
  export const UpdateRepositorySettingsResponseSchema = /*@__PURE__*/
156
- messageDesc(file_api_v1_vcs_connection, 19);
164
+ messageDesc(file_api_v1_vcs_connection, 20);
157
165
 
158
166
  /**
159
167
  * Describes the message api.v1.SyncRepositoryIssuesRequest.
160
168
  * Use `create(SyncRepositoryIssuesRequestSchema)` to create a new message.
161
169
  */
162
170
  export const SyncRepositoryIssuesRequestSchema = /*@__PURE__*/
163
- messageDesc(file_api_v1_vcs_connection, 20);
171
+ messageDesc(file_api_v1_vcs_connection, 21);
164
172
 
165
173
  /**
166
174
  * Describes the message api.v1.SyncRepositoryIssuesResponse.
167
175
  * Use `create(SyncRepositoryIssuesResponseSchema)` to create a new message.
168
176
  */
169
177
  export const SyncRepositoryIssuesResponseSchema = /*@__PURE__*/
170
- messageDesc(file_api_v1_vcs_connection, 21);
178
+ messageDesc(file_api_v1_vcs_connection, 22);
171
179
 
172
180
  /**
173
181
  * Describes the message api.v1.ReusableVCSConnection.
174
182
  * Use `create(ReusableVCSConnectionSchema)` to create a new message.
175
183
  */
176
184
  export const ReusableVCSConnectionSchema = /*@__PURE__*/
177
- messageDesc(file_api_v1_vcs_connection, 22);
185
+ messageDesc(file_api_v1_vcs_connection, 23);
178
186
 
179
187
  /**
180
188
  * Describes the message api.v1.ListReusableConnectionsRequest.
181
189
  * Use `create(ListReusableConnectionsRequestSchema)` to create a new message.
182
190
  */
183
191
  export const ListReusableConnectionsRequestSchema = /*@__PURE__*/
184
- messageDesc(file_api_v1_vcs_connection, 23);
192
+ messageDesc(file_api_v1_vcs_connection, 24);
185
193
 
186
194
  /**
187
195
  * Describes the message api.v1.ListReusableConnectionsResponse.
188
196
  * Use `create(ListReusableConnectionsResponseSchema)` to create a new message.
189
197
  */
190
198
  export const ListReusableConnectionsResponseSchema = /*@__PURE__*/
191
- messageDesc(file_api_v1_vcs_connection, 24);
199
+ messageDesc(file_api_v1_vcs_connection, 25);
192
200
 
193
201
  /**
194
202
  * Describes the message api.v1.ReuseVCSConnectionRequest.
195
203
  * Use `create(ReuseVCSConnectionRequestSchema)` to create a new message.
196
204
  */
197
205
  export const ReuseVCSConnectionRequestSchema = /*@__PURE__*/
198
- messageDesc(file_api_v1_vcs_connection, 25);
206
+ messageDesc(file_api_v1_vcs_connection, 26);
199
207
 
200
208
  /**
201
209
  * Describes the message api.v1.ReuseVCSConnectionResponse.
202
210
  * Use `create(ReuseVCSConnectionResponseSchema)` to create a new message.
203
211
  */
204
212
  export const ReuseVCSConnectionResponseSchema = /*@__PURE__*/
205
- messageDesc(file_api_v1_vcs_connection, 26);
213
+ messageDesc(file_api_v1_vcs_connection, 27);
206
214
 
207
215
  /**
208
216
  * Describes the message api.v1.TriggerRepositoryAnalysisRequest.
209
217
  * Use `create(TriggerRepositoryAnalysisRequestSchema)` to create a new message.
210
218
  */
211
219
  export const TriggerRepositoryAnalysisRequestSchema = /*@__PURE__*/
212
- messageDesc(file_api_v1_vcs_connection, 27);
220
+ messageDesc(file_api_v1_vcs_connection, 28);
213
221
 
214
222
  /**
215
223
  * Describes the message api.v1.TriggerRepositoryAnalysisResponse.
216
224
  * Use `create(TriggerRepositoryAnalysisResponseSchema)` to create a new message.
217
225
  */
218
226
  export const TriggerRepositoryAnalysisResponseSchema = /*@__PURE__*/
219
- messageDesc(file_api_v1_vcs_connection, 28);
227
+ messageDesc(file_api_v1_vcs_connection, 29);
220
228
 
221
229
  /**
222
230
  * Service definition
@@ -7,7 +7,7 @@ import type { Message } from "@bufbuild/protobuf";
7
7
  import type { VCSProvider } from "./vcs_pb";
8
8
  import type { Pagination } from "./pagination_pb";
9
9
  import type { FilterOptions } from "./filter_pb";
10
- import type { VCSIntegration } from "./models_pb";
10
+ import type { ProjectRepository, VCSIntegration } from "./models_pb";
11
11
  import type { EmptySchema } from "@bufbuild/protobuf/wkt";
12
12
 
13
13
  /**
@@ -195,6 +195,11 @@ export declare const DeleteVCSIntegrationRequestSchema: GenMessage<DeleteVCSInte
195
195
  /**
196
196
  * Response definitions
197
197
  *
198
+ * A project has at most one VCSIntegration per provider (the account/app
199
+ * installation) and one ProjectRepository per connected repository. They are
200
+ * different things, so they are returned as separate lists rather than a
201
+ * single one where the repositories wear an integration's field names.
202
+ *
198
203
  * @generated from message api.v1.GetVCSIntegrationsResponse
199
204
  */
200
205
  export declare type GetVCSIntegrationsResponse = Message<"api.v1.GetVCSIntegrationsResponse"> & {
@@ -207,6 +212,11 @@ export declare type GetVCSIntegrationsResponse = Message<"api.v1.GetVCSIntegrati
207
212
  * @generated from field: api.v1.Pagination pagination = 2;
208
213
  */
209
214
  pagination?: Pagination;
215
+
216
+ /**
217
+ * @generated from field: repeated api.v1.ProjectRepository project_repositories = 3;
218
+ */
219
+ projectRepositories: ProjectRepository[];
210
220
  };
211
221
 
212
222
  /**
@@ -10,12 +10,13 @@ import { file_api_v1_pagination } from "./pagination_pb";
10
10
  import { file_api_v1_filter } from "./filter_pb";
11
11
  import { file_api_v1_models } from "./models_pb";
12
12
  import { file_api_v1_vcs } from "./vcs_pb";
13
+ import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
13
14
 
14
15
  /**
15
16
  * Describes the file api/v1/vcs_integration.proto.
16
17
  */
17
18
  export const file_api_v1_vcs_integration = /*@__PURE__*/
18
- fileDesc("ChxhcGkvdjEvdmNzX2ludGVncmF0aW9uLnByb3RvEgZhcGkudjEiyAIKGEFkZFZDU0ludGVncmF0aW9uUmVxdWVzdBIbCgpyZXBvX293bmVyGAEgASgJQgf6QgRyAhABEhoKCXJlcG9fbmFtZRgCIAEoCUIH+kIEcgIQARIgCg90b2tlbl9lbmNyeXB0ZWQYAyABKAlCB/pCBHICEAESHwoOZGVmYXVsdF9icmFuY2gYBCABKAlCB/pCBHICEAESGwoOd2ViaG9va19zZWNyZXQYBSABKAlIAIgBARIdChBwZXJtaXNzaW9uc19qc29uGAYgASgJSAGIAQESEQoJaXNfYWN0aXZlGAcgASgIEhIKCnByb2plY3RfaWQYCCABKA0SJQoIcHJvdmlkZXIYCSABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXJCEQoPX3dlYmhvb2tfc2VjcmV0QhMKEV9wZXJtaXNzaW9uc19qc29uIt4CChlFZGl0VkNTSW50ZWdyYXRpb25SZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhsKCnJlcG9fb3duZXIYAiABKAlCB/pCBHICEAESGgoJcmVwb19uYW1lGAMgASgJQgf6QgRyAhABEiAKD3Rva2VuX2VuY3J5cHRlZBgEIAEoCUIH+kIEcgIQARIfCg5kZWZhdWx0X2JyYW5jaBgFIAEoCUIH+kIEcgIQARIbCg53ZWJob29rX3NlY3JldBgGIAEoCUgAiAEBEh0KEHBlcm1pc3Npb25zX2pzb24YByABKAlIAYgBARIRCglpc19hY3RpdmUYCCABKAgSEgoKcHJvamVjdF9pZBgJIAEoDRIlCghwcm92aWRlchgKIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlckIRCg9fd2ViaG9va19zZWNyZXRCEwoRX3Blcm1pc3Npb25zX2pzb24iJgoYR2V0VkNTSW50ZWdyYXRpb25SZXF1ZXN0EgoKAmlkGAEgASgNIpkBChlHZXRWQ1NJbnRlZ3JhdGlvbnNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESMAoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uQgj6QgWKAQIQARItCg5maWx0ZXJfb3B0aW9ucxgDIAEoCzIVLmFwaS52MS5GaWx0ZXJPcHRpb25zIikKG0RlbGV0ZVZDU0ludGVncmF0aW9uUmVxdWVzdBIKCgJpZBgBIAEoDSJ2ChpHZXRWQ1NJbnRlZ3JhdGlvbnNSZXNwb25zZRIwChB2Y3NfaW50ZWdyYXRpb25zGAEgAygLMhYuYXBpLnYxLlZDU0ludGVncmF0aW9uEiYKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbiJMChlBZGRWQ1NJbnRlZ3JhdGlvblJlc3BvbnNlEi8KD3Zjc19pbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS52MS5WQ1NJbnRlZ3JhdGlvbiJNChpFZGl0VkNTSW50ZWdyYXRpb25SZXNwb25zZRIvCg92Y3NfaW50ZWdyYXRpb24YASABKAsyFi5hcGkudjEuVkNTSW50ZWdyYXRpb24iTAoZR2V0VkNTSW50ZWdyYXRpb25SZXNwb25zZRIvCg92Y3NfaW50ZWdyYXRpb24YASABKAsyFi5hcGkudjEuVkNTSW50ZWdyYXRpb24iWwoYR2V0UmVwb3NpdG9yeVRyZWVSZXF1ZXN0Eh8KDmludGVncmF0aW9uX2lkGAEgASgNQgf6QgQqAigBEgsKA3NoYRgCIAEoCRIRCglyZWN1cnNpdmUYAyABKAgiYgoOUmVwb3NpdG9yeURhdGESDAoEcGF0aBgBIAEoCRIMCgRtb2RlGAIgASgJEgwKBHR5cGUYAyABKAkSCwoDc2hhGAQgASgJEgwKBHNpemUYBSABKAMSCwoDdXJsGAYgASgJIkEKGUdldFJlcG9zaXRvcnlUcmVlUmVzcG9uc2USJAoEdHJlZRgBIAMoCzIWLmFwaS52MS5SZXBvc2l0b3J5RGF0YSJcChVHZXRGaWxlQ29udGVudFJlcXVlc3QSHwoOaW50ZWdyYXRpb25faWQYASABKA1CB/pCBCoCKAESFQoEcGF0aBgCIAEoCUIH+kIEcgIQARILCgNyZWYYAyABKAkicgoWR2V0RmlsZUNvbnRlbnRSZXNwb25zZRIPCgdjb250ZW50GAEgASgJEhAKCGVuY29kaW5nGAIgASgJEgwKBG5hbWUYAyABKAkSDAoEcGF0aBgEIAEoCRIMCgRzaXplGAUgASgDEgsKA3NoYRgGIAEoCTLCBwoVVkNTSW50ZWdyYXRpb25TZXJ2aWNlEn0KEUFkZFZDU0ludGVncmF0aW9uEiAuYXBpLnYxLkFkZFZDU0ludGVncmF0aW9uUmVxdWVzdBohLmFwaS52MS5BZGRWQ1NJbnRlZ3JhdGlvblJlc3BvbnNlIiOC0+STAh06ASoiGC9hcGkvdjEvdmNzX2ludGVncmF0aW9ucxKFAQoSRWRpdFZDU0ludGVncmF0aW9uEiEuYXBpLnYxLkVkaXRWQ1NJbnRlZ3JhdGlvblJlcXVlc3QaIi5hcGkudjEuRWRpdFZDU0ludGVncmF0aW9uUmVzcG9uc2UiKILT5JMCIjoBKhodL2FwaS92MS92Y3NfaW50ZWdyYXRpb25zL3tpZH0SfwoRR2V0VkNTSW50ZWdyYXRpb24SIC5hcGkudjEuR2V0VkNTSW50ZWdyYXRpb25SZXF1ZXN0GiEuYXBpLnYxLkdldFZDU0ludGVncmF0aW9uUmVzcG9uc2UiJYLT5JMCHxIdL2FwaS92MS92Y3NfaW50ZWdyYXRpb25zL3tpZH0SfQoSR2V0VkNTSW50ZWdyYXRpb25zEiEuYXBpLnYxLkdldFZDU0ludGVncmF0aW9uc1JlcXVlc3QaIi5hcGkudjEuR2V0VkNTSW50ZWdyYXRpb25zUmVzcG9uc2UiIILT5JMCGhIYL2FwaS92MS92Y3NfaW50ZWdyYXRpb25zEnoKFERlbGV0ZVZDU0ludGVncmF0aW9uEiMuYXBpLnYxLkRlbGV0ZVZDU0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIlgtPkkwIfKh0vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2lkfRKQAQoRR2V0UmVwb3NpdG9yeVRyZWUSIC5hcGkudjEuR2V0UmVwb3NpdG9yeVRyZWVSZXF1ZXN0GiEuYXBpLnYxLkdldFJlcG9zaXRvcnlUcmVlUmVzcG9uc2UiNoLT5JMCMBIuL2FwaS92MS92Y3NfaW50ZWdyYXRpb25zL3tpbnRlZ3JhdGlvbl9pZH0vdHJlZRKSAQoOR2V0RmlsZUNvbnRlbnQSHS5hcGkudjEuR2V0RmlsZUNvbnRlbnRSZXF1ZXN0Gh4uYXBpLnYxLkdldEZpbGVDb250ZW50UmVzcG9uc2UiQYLT5JMCOxI5L2FwaS92MS92Y3NfaW50ZWdyYXRpb25zL3tpbnRlZ3JhdGlvbl9pZH0vZmlsZXMve3BhdGg9Kip9QngKCmNvbS5hcGkudjFCE1Zjc0ludGVncmF0aW9uUHJvdG9QAVocb3BzZWUvYmFja2VuZC9nZW4vYXBpL3YxO2dlbqICA0FYWKoCBkFwaS5WMcoCBkFwaVxWMeICEkFwaVxWMVxHUEJNZXRhZGF0YeoCB0FwaTo6VjFiBnByb3RvMw", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models, file_api_v1_vcs]);
19
+ fileDesc("ChxhcGkvdjEvdmNzX2ludGVncmF0aW9uLnByb3RvEgZhcGkudjEi1gIKGEFkZFZDU0ludGVncmF0aW9uUmVxdWVzdBIbCgpyZXBvX293bmVyGAEgASgJQgf6QgRyAhABEhoKCXJlcG9fbmFtZRgCIAEoCUIH+kIEcgIQARIgCg90b2tlbl9lbmNyeXB0ZWQYAyABKAlCB/pCBHICEAESHwoOZGVmYXVsdF9icmFuY2gYBCABKAlCB/pCBHICEAESGwoOd2ViaG9va19zZWNyZXQYBSABKAlIAIgBARIdChBwZXJtaXNzaW9uc19qc29uGAYgASgJSAGIAQESEQoJaXNfYWN0aXZlGAcgASgIEiAKCnByb2plY3RfaWQYCCABKA1CDIK1GAhwcm9qZWN0cxIlCghwcm92aWRlchgJIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlckIRCg9fd2ViaG9va19zZWNyZXRCEwoRX3Blcm1pc3Npb25zX2pzb24i7AIKGUVkaXRWQ1NJbnRlZ3JhdGlvblJlcXVlc3QSEwoCaWQYASABKA1CB/pCBCoCKAESGwoKcmVwb19vd25lchgCIAEoCUIH+kIEcgIQARIaCglyZXBvX25hbWUYAyABKAlCB/pCBHICEAESIAoPdG9rZW5fZW5jcnlwdGVkGAQgASgJQgf6QgRyAhABEh8KDmRlZmF1bHRfYnJhbmNoGAUgASgJQgf6QgRyAhABEhsKDndlYmhvb2tfc2VjcmV0GAYgASgJSACIAQESHQoQcGVybWlzc2lvbnNfanNvbhgHIAEoCUgBiAEBEhEKCWlzX2FjdGl2ZRgIIAEoCBIgCgpwcm9qZWN0X2lkGAkgASgNQgyCtRgIcHJvamVjdHMSJQoIcHJvdmlkZXIYCiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXJCEQoPX3dlYmhvb2tfc2VjcmV0QhMKEV9wZXJtaXNzaW9uc19qc29uIiYKGEdldFZDU0ludGVncmF0aW9uUmVxdWVzdBIKCgJpZBgBIAEoDSKZAQoZR2V0VkNTSW50ZWdyYXRpb25zUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEjAKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbkII+kIFigECEAESLQoOZmlsdGVyX29wdGlvbnMYAyABKAsyFS5hcGkudjEuRmlsdGVyT3B0aW9ucyIpChtEZWxldGVWQ1NJbnRlZ3JhdGlvblJlcXVlc3QSCgoCaWQYASABKA0irwEKGkdldFZDU0ludGVncmF0aW9uc1Jlc3BvbnNlEjAKEHZjc19pbnRlZ3JhdGlvbnMYASADKAsyFi5hcGkudjEuVkNTSW50ZWdyYXRpb24SJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uEjcKFHByb2plY3RfcmVwb3NpdG9yaWVzGAMgAygLMhkuYXBpLnYxLlByb2plY3RSZXBvc2l0b3J5IkwKGUFkZFZDU0ludGVncmF0aW9uUmVzcG9uc2USLwoPdmNzX2ludGVncmF0aW9uGAEgASgLMhYuYXBpLnYxLlZDU0ludGVncmF0aW9uIk0KGkVkaXRWQ1NJbnRlZ3JhdGlvblJlc3BvbnNlEi8KD3Zjc19pbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS52MS5WQ1NJbnRlZ3JhdGlvbiJMChlHZXRWQ1NJbnRlZ3JhdGlvblJlc3BvbnNlEi8KD3Zjc19pbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS52MS5WQ1NJbnRlZ3JhdGlvbiJbChhHZXRSZXBvc2l0b3J5VHJlZVJlcXVlc3QSHwoOaW50ZWdyYXRpb25faWQYASABKA1CB/pCBCoCKAESCwoDc2hhGAIgASgJEhEKCXJlY3Vyc2l2ZRgDIAEoCCJiCg5SZXBvc2l0b3J5RGF0YRIMCgRwYXRoGAEgASgJEgwKBG1vZGUYAiABKAkSDAoEdHlwZRgDIAEoCRILCgNzaGEYBCABKAkSDAoEc2l6ZRgFIAEoAxILCgN1cmwYBiABKAkiQQoZR2V0UmVwb3NpdG9yeVRyZWVSZXNwb25zZRIkCgR0cmVlGAEgAygLMhYuYXBpLnYxLlJlcG9zaXRvcnlEYXRhIlwKFUdldEZpbGVDb250ZW50UmVxdWVzdBIfCg5pbnRlZ3JhdGlvbl9pZBgBIAEoDUIH+kIEKgIoARIVCgRwYXRoGAIgASgJQgf6QgRyAhABEgsKA3JlZhgDIAEoCSJyChZHZXRGaWxlQ29udGVudFJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSEAoIZW5jb2RpbmcYAiABKAkSDAoEbmFtZRgDIAEoCRIMCgRwYXRoGAQgASgJEgwKBHNpemUYBSABKAMSCwoDc2hhGAYgASgJMsIHChVWQ1NJbnRlZ3JhdGlvblNlcnZpY2USfQoRQWRkVkNTSW50ZWdyYXRpb24SIC5hcGkudjEuQWRkVkNTSW50ZWdyYXRpb25SZXF1ZXN0GiEuYXBpLnYxLkFkZFZDU0ludGVncmF0aW9uUmVzcG9uc2UiI4LT5JMCHToBKiIYL2FwaS92MS92Y3NfaW50ZWdyYXRpb25zEoUBChJFZGl0VkNTSW50ZWdyYXRpb24SIS5hcGkudjEuRWRpdFZDU0ludGVncmF0aW9uUmVxdWVzdBoiLmFwaS52MS5FZGl0VkNTSW50ZWdyYXRpb25SZXNwb25zZSIogtPkkwIiOgEqGh0vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2lkfRJ/ChFHZXRWQ1NJbnRlZ3JhdGlvbhIgLmFwaS52MS5HZXRWQ1NJbnRlZ3JhdGlvblJlcXVlc3QaIS5hcGkudjEuR2V0VkNTSW50ZWdyYXRpb25SZXNwb25zZSIlgtPkkwIfEh0vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2lkfRJ9ChJHZXRWQ1NJbnRlZ3JhdGlvbnMSIS5hcGkudjEuR2V0VkNTSW50ZWdyYXRpb25zUmVxdWVzdBoiLmFwaS52MS5HZXRWQ1NJbnRlZ3JhdGlvbnNSZXNwb25zZSIggtPkkwIaEhgvYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMSegoURGVsZXRlVkNTSW50ZWdyYXRpb24SIy5hcGkudjEuRGVsZXRlVkNTSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiWC0+STAh8qHS9hcGkvdjEvdmNzX2ludGVncmF0aW9ucy97aWR9EpABChFHZXRSZXBvc2l0b3J5VHJlZRIgLmFwaS52MS5HZXRSZXBvc2l0b3J5VHJlZVJlcXVlc3QaIS5hcGkudjEuR2V0UmVwb3NpdG9yeVRyZWVSZXNwb25zZSI2gtPkkwIwEi4vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2ludGVncmF0aW9uX2lkfS90cmVlEpIBCg5HZXRGaWxlQ29udGVudBIdLmFwaS52MS5HZXRGaWxlQ29udGVudFJlcXVlc3QaHi5hcGkudjEuR2V0RmlsZUNvbnRlbnRSZXNwb25zZSJBgtPkkwI7EjkvYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2ludGVncmF0aW9uX2lkfS9maWxlcy97cGF0aD0qKn1CeAoKY29tLmFwaS52MUITVmNzSW50ZWdyYXRpb25Qcm90b1ABWhxvcHNlZS9iYWNrZW5kL2dlbi9hcGkvdjE7Z2VuogIDQVhYqgIGQXBpLlYxygIGQXBpXFYx4gISQXBpXFYxXEdQQk1ldGFkYXRh6gIHQXBpOjpWMWIGcHJvdG8z", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models, file_api_v1_vcs, file_fk_foreign_key]);
19
20
 
20
21
  /**
21
22
  * Describes the message api.v1.AddVCSIntegrationRequest.
@@ -0,0 +1,22 @@
1
+ // @generated by protoc-gen-es v2.2.3
2
+ // @generated from file fk/foreign_key.proto (package fk, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenExtension, GenFile } from "@bufbuild/protobuf/codegenv1";
6
+ import type { FieldOptions } from "@bufbuild/protobuf/wkt";
7
+
8
+ /**
9
+ * Describes the file fk/foreign_key.proto.
10
+ */
11
+ export declare const file_fk_foreign_key: GenFile;
12
+
13
+ /**
14
+ * Marks a field as a foreign key into the named relation (database table).
15
+ * The in-repo protoc-gen-fk-validator plugin (tools/protoc-gen-fk-validator)
16
+ * turns these annotations into GetForeignKeysUint32 methods, which the backend
17
+ * validation interceptor uses to check referenced rows exist.
18
+ *
19
+ * @generated from extension: string foreign_key = 50000;
20
+ */
21
+ export declare const foreign_key: GenExtension<FieldOptions, string>;
22
+
@@ -0,0 +1,24 @@
1
+ // @generated by protoc-gen-es v2.2.3
2
+ // @generated from file fk/foreign_key.proto (package fk, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { extDesc, fileDesc } from "@bufbuild/protobuf/codegenv1";
6
+ import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt";
7
+
8
+ /**
9
+ * Describes the file fk/foreign_key.proto.
10
+ */
11
+ export const file_fk_foreign_key = /*@__PURE__*/
12
+ fileDesc("ChRmay9mb3JlaWduX2tleS5wcm90bxICZms6QAoLZm9yZWlnbl9rZXkSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGNCGAyABKAlSCmZvcmVpZ25LZXlCVwoGY29tLmZrQg9Gb3JlaWduS2V5UHJvdG9QAVoUb3BzZWUvYmFja2VuZC9nZW4vZmuiAgNGWFiqAgJGa8oCAkZr4gIORmtcR1BCTWV0YWRhdGHqAgJGa2IGcHJvdG8z", [file_google_protobuf_descriptor]);
13
+
14
+ /**
15
+ * Marks a field as a foreign key into the named relation (database table).
16
+ * The in-repo protoc-gen-fk-validator plugin (tools/protoc-gen-fk-validator)
17
+ * turns these annotations into GetForeignKeysUint32 methods, which the backend
18
+ * validation interceptor uses to check referenced rows exist.
19
+ *
20
+ * @generated from extension: string foreign_key = 50000;
21
+ */
22
+ export const foreign_key = /*@__PURE__*/
23
+ extDesc(file_fk_foreign_key, 0);
24
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opsee/mcp-server",
3
- "version": "0.9.60",
3
+ "version": "0.10.2",
4
4
  "description": "Opsee MCP server — manage projects, tasks, docs, and cycles from AI coding environments",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,23 +15,23 @@
15
15
  "test": "vitest run"
16
16
  },
17
17
  "dependencies": {
18
- "@bufbuild/protobuf": "^2.2.3",
19
- "@connectrpc/connect": "^2.0.2",
20
- "@connectrpc/connect-node": "^2.0.2",
21
- "@modelcontextprotocol/sdk": "^1.12.1",
18
+ "@bufbuild/protobuf": "^2.14.0",
19
+ "@connectrpc/connect": "^2.1.2",
20
+ "@connectrpc/connect-node": "^2.1.2",
21
+ "@modelcontextprotocol/sdk": "^1.30.0",
22
22
  "cors": "^2.8.6",
23
23
  "express": "^5.2.1",
24
24
  "ioredis": "^5.11.1",
25
- "open": "^10.1.0",
26
- "tsx": "^4.21.0",
27
- "zod": "^4.3.6"
25
+ "open": "^10.2.0",
26
+ "tsx": "^4.23.12",
27
+ "zod": "^4.4.3"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/cors": "^2.8.19",
31
31
  "@types/express": "^5.0.6",
32
- "@types/node": "^22.13.0",
33
- "typescript": "^5.7.0",
34
- "vitest": "^4.1.0"
32
+ "@types/node": "^22.20.1",
33
+ "typescript": "^5.9.3",
34
+ "vitest": "^4.1.10"
35
35
  },
36
36
  "engines": {
37
37
  "node": ">=18.0.0"
@@ -1,13 +1,7 @@
1
1
  import { Redis } from "ioredis";
2
2
 
3
- /**
4
- * Minimal key/value store used to persist OAuth state.
5
- *
6
- * The OAuth flow keeps clients, pending authorizations, authorization codes,
7
- * and revoked tokens here. Backing it with Redis (instead of in-process Maps)
8
- * lets registration on one request survive a server restart and be visible to
9
- * other replicas — which is what makes horizontal scaling safe.
10
- */
3
+ /** KVStore persists OAuth state (clients, pending auths, codes, revocations). A Redis backing makes a
4
+ * registration survive restart and be visible to other replicas, which is what allows scaling out. */
11
5
  export interface KVStore {
12
6
  /** Returns the stored value, or null if missing/expired. */
13
7
  get(key: string): Promise<string | null>;
@@ -17,11 +11,8 @@ export interface KVStore {
17
11
  del(key: string): Promise<void>;
18
12
  }
19
13
 
20
- /**
21
- * Process-local fallback used when Redis is not configured (local dev, stdio
22
- * usage). State is lost on restart and is NOT shared across replicas, so this
23
- * must not be used in a multi-replica deployment.
24
- */
14
+ /** Process-local fallback for local dev/stdio: state is lost on restart and not shared, so it must not
15
+ * be used in a multi-replica deployment. */
25
16
  export class InMemoryKVStore implements KVStore {
26
17
  private entries = new Map<string, { value: string; expiresAt: number | null }>();
27
18
  private readonly maxEntries: number;
@@ -43,8 +34,7 @@ export class InMemoryKVStore implements KVStore {
43
34
  async set(key: string, value: string, ttlSeconds?: number): Promise<void> {
44
35
  const expiresAt =
45
36
  ttlSeconds !== undefined ? Date.now() + ttlSeconds * 1000 : null;
46
- // Re-insert so the most recently set key sorts last in iteration order and
47
- // is evicted last.
37
+ // Re-insert so the newest key sorts last and is evicted last.
48
38
  this.entries.delete(key);
49
39
  this.entries.set(key, { value, expiresAt });
50
40
  this.evictIfNeeded();
@@ -54,12 +44,8 @@ export class InMemoryKVStore implements KVStore {
54
44
  this.entries.delete(key);
55
45
  }
56
46
 
57
- /**
58
- * Bound memory. Dynamic client registrations are stored without a TTL (by
59
- * design — clients cache their DCR indefinitely), so without a cap this
60
- * fallback store grows forever in a long-running remote process that has no
61
- * Redis. Evict expired entries first, then the oldest live entries.
62
- */
47
+ /** Bounds memory: DCR entries are stored without a TTL, so without a cap this store grows forever.
48
+ * Evicts expired entries first, then the oldest live ones. */
63
49
  private evictIfNeeded(): void {
64
50
  if (this.entries.size <= this.maxEntries) return;
65
51
 
@@ -100,11 +86,8 @@ export class RedisKVStore implements KVStore {
100
86
  }
101
87
  }
102
88
 
103
- /**
104
- * Builds a KVStore from the environment. Uses Redis when REDIS_HOST is set,
105
- * mirroring the backend's REDIS_* env conventions; otherwise falls back to an
106
- * in-process store and warns that scaling beyond one replica is unsafe.
107
- */
89
+ /** Builds a KVStore from the environment: Redis when REDIS_HOST is set (matching the backend's REDIS_*
90
+ * conventions), else an in-process store with a warning that multi-replica use is unsafe. */
108
91
  export function createKVStore(): KVStore {
109
92
  const host = process.env.REDIS_HOST;
110
93
  if (!host) {
@@ -120,12 +103,9 @@ export function createKVStore(): KVStore {
120
103
  port: parseInt(process.env.REDIS_PORT || "6379", 10),
121
104
  password: process.env.REDIS_PASSWORD || undefined,
122
105
  db: parseInt(process.env.REDIS_DB || "0", 10),
123
- // ElastiCache with in-transit encryption requires TLS. ServerName must be
124
- // set so SNI/cert validation matches the endpoint host.
106
+ // ElastiCache in-transit encryption needs TLS, with ServerName set so SNI/cert validation matches.
125
107
  tls: process.env.REDIS_TLS === "true" ? { servername: host } : undefined,
126
- // Fail fast instead of hanging the request forever. Without these a
127
- // misconfigured connection (e.g. plaintext to a TLS-only server) leaves
128
- // commands queued indefinitely, so awaiting a GET/SET never resolves.
108
+ // Without these, a misconfigured connection queues commands forever and awaits never resolve.
129
109
  maxRetriesPerRequest: 3,
130
110
  connectTimeout: 10_000,
131
111
  commandTimeout: 5_000,
@@ -134,8 +114,7 @@ export function createKVStore(): KVStore {
134
114
  redis.on("error", (err: Error) => {
135
115
  console.error("[oauth] Redis error:", err.message);
136
116
  });
137
- // "ready" (not "connect") means commands will actually execute — a plaintext
138
- // socket to a TLS-only server fires "connect" but never becomes ready.
117
+ // "ready", not "connect": a plaintext socket to a TLS-only server connects but never gets ready.
139
118
  redis.on("ready", () => {
140
119
  console.log(`[oauth] Redis ready at ${host}`);
141
120
  });
@@ -1,10 +1,6 @@
1
1
  import { readCredentials, clearCredentials, type Credentials } from "./credentials.js";
2
2
 
3
3
  const DEFAULT_SERVER_URL = "https://grpc.api.opsee.ai";
4
- // A stale default that older login builds wrote to ~/.opsee/credentials.json.
5
- // It points at a dead host, so treat a stored value of it as "unset" and fall
6
- // back to the canonical default instead of forcing users to re-login.
7
- const LEGACY_STALE_SERVER_URL = "https://api.opsee.dev";
8
4
 
9
5
  export class AuthManager {
10
6
  private credentials: Credentials | null = null;
@@ -21,10 +17,9 @@ export class AuthManager {
21
17
  }
22
18
 
23
19
  getServerUrl(): string {
24
- const stored = this.credentials?.serverUrl;
25
20
  return (
26
21
  process.env.OPSEE_API_URL ||
27
- (stored && stored !== LEGACY_STALE_SERVER_URL ? stored : undefined) ||
22
+ this.credentials?.serverUrl ||
28
23
  DEFAULT_SERVER_URL
29
24
  );
30
25
  }