openhound-github 0.10.1__tar.gz → 0.12.0__tar.gz

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 (434) hide show
  1. {openhound_github-0.10.1 → openhound_github-0.12.0}/PKG-INFO +1 -1
  2. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_AppInstallation.md +4 -2
  3. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Enterprise.md +2 -1
  4. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunner.md +0 -3
  5. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Environment.md +0 -1
  6. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentSecret.md +1 -0
  7. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRunner.md +0 -3
  8. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgSecret.md +1 -0
  9. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Organization.md +2 -0
  10. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessToken.md +6 -4
  11. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +5 -1
  12. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoRunner.md +0 -3
  13. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoSecret.md +1 -0
  14. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Repository.md +6 -2
  15. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Runner.md +3 -0
  16. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_WorkflowJob.md +24 -24
  17. openhound_github-0.12.0/extension/privilege_zone_rules/t0-app-installations-all-repos.json +8 -0
  18. openhound_github-0.12.0/extension/privilege_zone_rules/t0-apps-all-repos.json +8 -0
  19. openhound_github-0.12.0/extension/privilege_zone_rules/t0-pats-all-repos.json +8 -0
  20. {openhound_github-0.10.1 → openhound_github-0.12.0}/scripts/generate_gh_description_docs.py +6 -1
  21. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/graphql.py +4 -0
  22. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/lookup.py +30 -4
  23. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/app_installation.py +4 -3
  24. openhound_github-0.12.0/src/openhound_github/models/permissions.py +18 -0
  25. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token.py +10 -14
  26. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token_request.py +13 -1
  27. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository.py +10 -0
  28. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow.py +1 -16
  29. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow_job.py +7 -2
  30. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/resources/organization.py +24 -8
  31. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/transforms.py +7 -1
  32. openhound_github-0.12.0/tests/test_credential_permission_models.py +112 -0
  33. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_environment_resources.py +36 -0
  34. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_repository_rulesets.py +43 -2
  35. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_runner_models.py +15 -0
  36. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_workflow_model.py +29 -0
  37. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_workflow_resources.py +59 -0
  38. openhound_github-0.10.1/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -8
  39. openhound_github-0.10.1/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -8
  40. openhound_github-0.10.1/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -8
  41. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/CODE_OF_CONDUCT.md +0 -0
  42. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/CONTRIBUTING.md +0 -0
  43. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GOVERNANCE.md +0 -0
  44. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-COC-Header.png +0 -0
  45. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-CONTRIB-Header.png +0 -0
  46. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-GOV-Header.png +0 -0
  47. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-Header.png +0 -0
  48. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-LIC-Header.png +0 -0
  49. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-SEC-Header.png +0 -0
  50. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SECURITY.md +0 -0
  51. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-Dark.svg +0 -0
  52. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-FOSS-Dark.svg +0 -0
  53. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-FOSS-Light.svg +0 -0
  54. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-Light.svg +0 -0
  55. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/workflows/publish.yml +0 -0
  56. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/workflows/release-on-merge.yml +0 -0
  57. {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/workflows/validate-branch.yml +0 -0
  58. {openhound_github-0.10.1 → openhound_github-0.12.0}/.gitignore +0 -0
  59. {openhound_github-0.10.1 → openhound_github-0.12.0}/.gitmodules +0 -0
  60. {openhound_github-0.10.1 → openhound_github-0.12.0}/.pre-commit-config.yaml +0 -0
  61. {openhound_github-0.10.1 → openhound_github-0.12.0}/LICENSE.md +0 -0
  62. {openhound_github-0.10.1 → openhound_github-0.12.0}/README.md +0 -0
  63. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddAssignee.md +0 -0
  64. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddCollaborator.md +0 -0
  65. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddLabel.md +0 -0
  66. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddMember.md +0 -0
  67. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AdminTo.md +0 -0
  68. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
  69. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AssignedTo.md +0 -0
  70. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
  71. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
  72. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CallsWorkflow.md +0 -0
  73. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanAccess.md +0 -0
  74. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanAccessSecret.md +0 -0
  75. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
  76. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateBranch.md +0 -0
  77. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
  78. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateInternalRepositories.md +0 -0
  79. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreatePrivateRepositories.md +0 -0
  80. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreatePublicRepositories.md +0 -0
  81. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateRepositories.md +0 -0
  82. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
  83. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
  84. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
  85. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanEditProtection.md +0 -0
  86. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanInterceptJob.md +0 -0
  87. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanPwnRequest.md +0 -0
  88. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanReadSecret.md +0 -0
  89. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
  90. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanRequestOIDCTokenFor.md +0 -0
  91. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanUseRunner.md +0 -0
  92. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanWriteBranch.md +0 -0
  93. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CloseDiscussion.md +0 -0
  94. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CloseIssue.md +0 -0
  95. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ClosePullRequest.md +0 -0
  96. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_Contains.md +0 -0
  97. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
  98. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
  99. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateEnterpriseOrganizations.md +0 -0
  100. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateRepository.md +0 -0
  101. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
  102. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateTag.md +0 -0
  103. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateTeam.md +0 -0
  104. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
  105. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
  106. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
  107. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteIssue.md +0 -0
  108. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteTag.md +0 -0
  109. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DependsOn.md +0 -0
  110. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeploysTo.md +0 -0
  111. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
  112. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
  113. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
  114. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditEnterpriseCustomPropertiesForOrganizations.md +0 -0
  115. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
  116. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
  117. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
  118. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoProtections.md +0 -0
  119. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasBaseRole.md +0 -0
  120. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
  121. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasMember.md +0 -0
  122. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
  123. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
  124. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasRole.md +0 -0
  125. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasRunner.md +0 -0
  126. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
  127. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasSecret.md +0 -0
  128. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasVariable.md +0 -0
  129. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_InheritedFrom.md +0 -0
  130. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_InstalledAs.md +0 -0
  131. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_InviteMember.md +0 -0
  132. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_IsEligibleFor.md +0 -0
  133. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
  134. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
  135. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
  136. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseAdmins.md +0 -0
  137. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseIdentityProvider.md +0 -0
  138. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseMembers.md +0 -0
  139. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseOrganizationAdmins.md +0 -0
  140. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseOrganizations.md +0 -0
  141. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseReferrals.md +0 -0
  142. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseTeams.md +0 -0
  143. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
  144. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
  145. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
  146. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
  147. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
  148. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
  149. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
  150. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageTopics.md +0 -0
  151. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageWebhooks.md +0 -0
  152. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MapsToUser.md +0 -0
  153. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
  154. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
  155. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MemberOf.md +0 -0
  156. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
  157. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
  158. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
  159. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
  160. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_Owns.md +0 -0
  161. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ProtectedBy.md +0 -0
  162. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
  163. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
  164. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseAuditLog.md +0 -0
  165. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseDomainVerification.md +0 -0
  166. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseMembers.md +0 -0
  167. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseOrgProjects.md +0 -0
  168. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseOrganizationAdmin.md +0 -0
  169. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
  170. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
  171. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
  172. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadRepoContents.md +0 -0
  173. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RemoveAssignee.md +0 -0
  174. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RemoveLabel.md +0 -0
  175. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
  176. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenIssue.md +0 -0
  177. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
  178. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RequestPrReview.md +0 -0
  179. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
  180. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
  181. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
  182. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RunOrgMigration.md +0 -0
  183. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RunsOn.md +0 -0
  184. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetEnterpriseInteractionLimits.md +0 -0
  185. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
  186. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetIssueType.md +0 -0
  187. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetMilestone.md +0 -0
  188. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetSocialPreview.md +0 -0
  189. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SyncedTo.md +0 -0
  190. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
  191. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
  192. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_TransferRepository.md +0 -0
  193. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_UsesSecret.md +0 -0
  194. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_UsesVariable.md +0 -0
  195. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ValidToken.md +0 -0
  196. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
  197. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseActionsUsageMetrics.md +0 -0
  198. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseBilling.md +0 -0
  199. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseSecretScanningAlerts.md +0 -0
  200. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
  201. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
  202. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseActionsPolicies.md +0 -0
  203. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseBilling.md +0 -0
  204. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterprisePersonalAccessTokenPolicies.md +0 -0
  205. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseSso.md +0 -0
  206. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseTeamMembers.md +0 -0
  207. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
  208. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
  209. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
  210. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
  211. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
  212. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
  213. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteRepoContents.md +0 -0
  214. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
  215. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_App.md +0 -0
  216. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Branch.md +0 -0
  217. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
  218. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseManagedUser.md +0 -0
  219. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRole.md +0 -0
  220. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
  221. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseTeam.md +0 -0
  222. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
  223. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
  224. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
  225. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRole.md +0 -0
  226. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
  227. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgVariable.md +0 -0
  228. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoRole.md +0 -0
  229. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoVariable.md +0 -0
  230. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RunnerGroup.md +0 -0
  231. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
  232. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Secret.md +0 -0
  233. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
  234. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Team.md +0 -0
  235. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_TeamRole.md +0 -0
  236. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_User.md +0 -0
  237. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Variable.md +0 -0
  238. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Workflow.md +1 -1
  239. {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_WorkflowStep.md +0 -0
  240. {openhound_github-0.10.1 → openhound_github-0.12.0}/docs/og-docs.json +0 -0
  241. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
  242. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-enterprise-owners-role.json +0 -0
  243. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
  244. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-organizations.json +0 -0
  245. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
  246. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
  247. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
  248. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
  249. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
  250. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/README.md +0 -0
  251. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
  252. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/active-leaked-secrets.json +0 -0
  253. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
  254. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/all-actions-allowed.json +0 -0
  255. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/app-installations-all-repos.json +0 -0
  256. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
  257. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
  258. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
  259. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
  260. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
  261. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
  262. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-self-approval.json +0 -0
  263. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
  264. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/bypass-pr-requirements.json +0 -0
  265. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dangerous-branch-perms.json +0 -0
  266. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/default-repository-permissions.json +0 -0
  267. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
  268. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
  269. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
  270. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
  271. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/environments-admin-bypass.json +0 -0
  272. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/expired-pats.json +0 -0
  273. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/external-identities-without-scim.json +0 -0
  274. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/github-to-azure-identity.json +0 -0
  275. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/global-repo-perms.json +0 -0
  276. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/hybrid-identities.json +0 -0
  277. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
  278. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-create-pages.json +0 -0
  279. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-create-public-repos.json +0 -0
  280. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-delete-repos.json +0 -0
  281. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
  282. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
  283. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/org-owners.json +0 -0
  284. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/orgs-without-2fa.json +0 -0
  285. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/pats-all-repo-access.json +0 -0
  286. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/pending-pat-requests.json +0 -0
  287. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
  288. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
  289. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
  290. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/public-repos.json +0 -0
  291. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
  292. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/push-to-protected-branches.json +0 -0
  293. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
  294. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
  295. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/repository-workflows.json +0 -0
  296. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/saml-configuration.json +0 -0
  297. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/secret-scanning-alerts.json +0 -0
  298. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
  299. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
  300. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/self-hosted-runners-can-intercept-broad-token-jobs.json +0 -0
  301. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/shared-self-hosted-runners-can-intercept-secret-bearing-jobs.json +0 -0
  302. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/team-membership-admin.json +0 -0
  303. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/team-structure.json +0 -0
  304. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/unprotected-branches.json +0 -0
  305. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
  306. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/unprotected-default-branches.json +0 -0
  307. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
  308. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-interceptable-by-self-hosted-runners.json +0 -0
  309. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-broad-token-write-permissions.json +0 -0
  310. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-id-token-write-on-self-hosted-runners.json +0 -0
  311. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-id-token-write.json +0 -0
  312. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-observed-oidc-auth-steps.json +0 -0
  313. {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/schema.json +0 -0
  314. {openhound_github-0.10.1 → openhound_github-0.12.0}/justfile +0 -0
  315. {openhound_github-0.10.1 → openhound_github-0.12.0}/pyproject.toml +0 -0
  316. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/main.py +0 -0
  317. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/__init__.py +0 -0
  318. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/auth.py +0 -0
  319. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/extension.yaml +0 -0
  320. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/github_rest_client.py +0 -0
  321. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/github_retry.py +0 -0
  322. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/graph.py +0 -0
  323. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/helpers.py +0 -0
  324. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/kinds/edges.py +0 -0
  325. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/kinds/nodes.py +0 -0
  326. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/main.py +0 -0
  327. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/__init__.py +0 -0
  328. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/actions_permission.py +0 -0
  329. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch.py +0 -0
  330. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
  331. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch_protection_rule.py +0 -0
  332. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch_push_allowance.py +0 -0
  333. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise.py +0 -0
  334. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_admin.py +0 -0
  335. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_helpers.py +0 -0
  336. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_managed_user.py +0 -0
  337. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_member.py +0 -0
  338. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_organization.py +0 -0
  339. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role.py +0 -0
  340. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role_team.py +0 -0
  341. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role_user.py +0 -0
  342. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team.py +0 -0
  343. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_member.py +0 -0
  344. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_organization.py +0 -0
  345. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_role.py +0 -0
  346. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_user.py +0 -0
  347. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/env_secret.py +0 -0
  348. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/env_variable.py +0 -0
  349. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/environment.py +0 -0
  350. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/environment_branch_policy.py +0 -0
  351. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/external_identity.py +0 -0
  352. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org.py +0 -0
  353. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_role.py +0 -0
  354. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_role_member.py +0 -0
  355. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_role_team.py +0 -0
  356. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_secret.py +0 -0
  357. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_variable.py +0 -0
  358. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token_access.py +0 -0
  359. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/projected_enterprise_team.py +0 -0
  360. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repo_role_assignment.py +0 -0
  361. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository_role.py +0 -0
  362. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository_secret.py +0 -0
  363. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository_variable.py +0 -0
  364. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/runner.py +0 -0
  365. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
  366. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_helpers.py +0 -0
  367. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_issuer.py +0 -0
  368. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_provider.py +0 -0
  369. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_service_provider.py +0 -0
  370. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/scim_user.py +0 -0
  371. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/secret_scanning_alert.py +0 -0
  372. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/team.py +0 -0
  373. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/team_member.py +0 -0
  374. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/team_role.py +0 -0
  375. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/user.py +0 -0
  376. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow_reference.py +0 -0
  377. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow_step.py +0 -0
  378. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/resources/__init__.py +0 -0
  379. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/resources/enterprise.py +0 -0
  380. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/runner_ids.py +0 -0
  381. {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/source.py +0 -0
  382. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_app_auth.py +0 -0
  383. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_branch_collection_gate.py +0 -0
  384. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_branch_protection_traversability.py +0 -0
  385. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/actions-permissions.json +0 -0
  386. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/actionsecrets.json +0 -0
  387. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/app.json +0 -0
  388. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/appinstalls.json +0 -0
  389. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/branch-policies.json +0 -0
  390. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/branch-prot-rules.json +0 -0
  391. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/branches.json +0 -0
  392. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/custom-roles.json +0 -0
  393. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/environments.json +0 -0
  394. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-pat-request.json +0 -0
  395. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-pat.json +0 -0
  396. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-role-teams.json +0 -0
  397. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-role-users.json +0 -0
  398. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-roles.json +0 -0
  399. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org.json +0 -0
  400. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/pat-repositories.json +0 -0
  401. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/repo-collaborators.json +0 -0
  402. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/repo-teams.json +0 -0
  403. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/repositories.json +0 -0
  404. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/scimusers.json +0 -0
  405. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/secrets.json +0 -0
  406. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/secretscanningalert.json +0 -0
  407. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/selected-org-secrets.json +0 -0
  408. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/variables.json +0 -0
  409. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/workflows.json +0 -0
  410. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_description_docs.py +0 -0
  411. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_enterprise_capabilities.py +0 -0
  412. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_enterprise_organization.py +0 -0
  413. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_enterprise_resources.py +0 -0
  414. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_environment_model.py +0 -0
  415. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_environment_reviewer_lookup.py +0 -0
  416. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_error_resilience.py +0 -0
  417. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_github_app_retry.py +0 -0
  418. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_github_rest_client.py +0 -0
  419. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_github_retry.py +0 -0
  420. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_helpers.py +0 -0
  421. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_lookup.py +0 -0
  422. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_org_scim_resources.py +0 -0
  423. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_org_secret_models.py +0 -0
  424. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_runner_ids.py +0 -0
  425. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_runner_resources.py +0 -0
  426. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_saml_helpers.py +0 -0
  427. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_saml_models.py +0 -0
  428. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_scim_models.py +0 -0
  429. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_source_endpoints.py +0 -0
  430. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_source_org_canonicalization.py +0 -0
  431. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_team_external_groups.py +0 -0
  432. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_variable_models.py +0 -0
  433. {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_workflow_interception_path.py +0 -0
  434. {openhound_github-0.10.1 → openhound_github-0.12.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhound-github
3
- Version: 0.10.1
3
+ Version: 0.12.0
4
4
  Summary: Github collector for OpenHound
5
5
  Author-email: "jdreijer@specterops.io" <jdreijer@specterops.io>, Jared Atkinson <jatkinson@specterops.io>
6
6
  License-File: LICENSE.md
@@ -2,7 +2,9 @@
2
2
 
3
3
  ## General Information
4
4
 
5
- Represents a GitHub App installed on an organization. App installations have specific permissions and can be scoped to all repositories or a selection of repositories. The permissions granted to the app are captured as a JSON string in the properties.
5
+ Represents a GitHub App installed on an organization. App installations have specific permissions and can be scoped to all repositories or a selection of repositories. The permissions granted to the installation are stored as `scope:access` values such as `contents:write` in the `permissions` property.
6
+
7
+ Unlike fine-grained personal access tokens, GitHub does not expose separate organization and repository permission buckets for app installations, so this property remains a single flat permission list.
6
8
 
7
9
  Each installation is linked to its parent GH_App via a GH_InstalledAs edge. For installations with `repository_selection` set to `all`, GH_CanAccess edges are created to every repository in the organization. For installations with `repository_selection` set to `selected`, repository-level edges cannot be enumerated with a PAT (requires app installation token authentication).
8
10
 
@@ -24,7 +26,7 @@ Each installation is linked to its parent GH_App via a GH_InstalledAs edge. For
24
26
  | `repositories_url` | `string` | API URL to list repositories accessible to this installation. |
25
27
  | `repository_selection` | `string` | Whether the app has access to `all` repositories or `selected` repositories. |
26
28
  | `target_type` | `string` | The target type of the installation (e.g., `Organization`). |
27
- | `permissions` | `string` | JSON string of the permissions granted to the app (e.g., `{"contents": "read", "metadata": "read"}`). |
29
+ | `permissions` | `list[string]` | Permissions granted to the installation in `scope:access` form. |
28
30
  | `events` | `string` | JSON string of the webhook events the app subscribes to. |
29
31
  | `created_at` | `datetime` | When the app was installed. |
30
32
  | `updated_at` | `datetime` | When the installation was last updated. |
@@ -23,8 +23,9 @@ A GitHub Enterprise account that contains organizations, enterprise teams, roles
23
23
  | `created_at` | `string` | When the enterprise was created. |
24
24
  | `updated_at` | `string` | When the enterprise was last updated. |
25
25
  | `billing_email` | `string` | The enterprise billing email. |
26
- | `security_contact_email` | `string` | The enterprise security contact email. |
27
26
  | `viewer_is_admin` | `boolean` | Whether the authenticated viewer is an enterprise admin. |
27
+ | `github_deployment_type` | `string` | The GitHub deployment type, such as `ghec` or `ghes`. |
28
+ | `ghes_version` | `string` | The GitHub Enterprise Server version, when applicable. |
28
29
  | `environment_name` | `string` | The enterprise environment name. |
29
30
  | `query_organizations` | `string` | Query for contained organizations. |
30
31
 
@@ -44,9 +44,6 @@ When the runner is not explicitly marked ephemeral, GH_CanInterceptJob edges ide
44
44
  graph LR
45
45
  n0["GH_EnterpriseRunnerGroup"]
46
46
  n1["GH_EnterpriseRunner"]
47
- n2["GH_WorkflowJob"]
48
47
  n0 -.->|GH_Contains| n1
49
48
  n0 -->|GH_HasRunner| n1
50
- n2 -.->|GH_RunsOn| n1
51
- n1 -->|GH_CanInterceptJob| n2
52
49
  ```
@@ -59,5 +59,4 @@ graph LR
59
59
  n8 -.->|GH_ApprovesDeploymentTo| n1
60
60
  n8 -->|GH_CanDeployToEnvironment| n1
61
61
  n9 -.->|GH_DeploysTo| n1
62
- n9 -->|GH_CanRequestOIDCTokenFor| n1
63
62
  ```
@@ -33,6 +33,7 @@ graph LR
33
33
  n3["GH_WorkflowStep"]
34
34
  n0 -.->|GH_Contains| n1
35
35
  n0 -->|GH_HasSecret| n1
36
+ n2 -->|GH_CanAccessSecret| n1
36
37
  n2 -.->|GH_UsesSecret| n1
37
38
  n3 -.->|GH_UsesSecret| n1
38
39
  ```
@@ -44,9 +44,6 @@ When the runner is not explicitly marked ephemeral, GH_CanInterceptJob edges ide
44
44
  graph LR
45
45
  n0["GH_OrgRunnerGroup"]
46
46
  n1["GH_OrgRunner"]
47
- n2["GH_WorkflowJob"]
48
47
  n0 -.->|GH_Contains| n1
49
48
  n0 -->|GH_HasRunner| n1
50
- n2 -.->|GH_RunsOn| n1
51
- n1 -->|GH_CanInterceptJob| n2
52
49
  ```
@@ -33,6 +33,7 @@ graph LR
33
33
  n0 -->|GH_CanReadSecret| n1
34
34
  n2 -.->|GH_Contains| n1
35
35
  n3 -->|GH_HasSecret| n1
36
+ n4 -->|GH_CanAccessSecret| n1
36
37
  n4 -.->|GH_UsesSecret| n1
37
38
  n5 -.->|GH_UsesSecret| n1
38
39
  ```
@@ -72,6 +72,8 @@ Represents a GitHub organization. This is the root node of the graph and serves
72
72
  | `self_hosted_runners_enabled_repositories` | `string` | Which repositories may use self-hosted runners: `all`, `selected`, or `none`. |
73
73
  | `default_workflow_permissions` | `string` | The default workflow permissions property. |
74
74
  | `can_approve_pull_request_reviews` | `boolean` | The can approve pull request reviews property. |
75
+ | `github_deployment_type` | `string` | The GitHub deployment type, such as `ghec` or `ghes`. |
76
+ | `ghes_version` | `string` | The GitHub Enterprise Server version, when applicable. |
75
77
  | `query_organization_roles` | `string` | Query for organization roles. |
76
78
  | `query_users` | `string` | Query for users. |
77
79
  | `query_teams` | `string` | Query for teams. |
@@ -2,7 +2,9 @@
2
2
 
3
3
  ## General Information
4
4
 
5
- Represents a fine-grained personal access token that has been granted access to organization resources. PATs are linked to their owning user, the organization, and the repositories they can access. The permissions granted to the token are captured as a JSON string in the properties.
5
+ Represents a fine-grained personal access token that has been granted access to organization resources. PATs are linked to their owning user, the organization, and the repositories they can access.
6
+
7
+ The granted permissions are stored separately as `organization_permissions` and `repository_permissions`. Each property is a list of `scope:access` values such as `members:read` or `contents:write`, matching the permission format used on GH_WorkflowJob nodes.
6
8
 
7
9
  ## Properties
8
10
 
@@ -18,9 +20,9 @@ Represents a fine-grained personal access token that has been granted access to
18
20
  | `owner_node_id` | `string` | The GraphQL node ID of the token owner. |
19
21
  | `token_expires_at` | `datetime` | The ISO 8601 timestamp of when the token expires. |
20
22
  | `token_last_used_at` | `datetime` | The ISO 8601 timestamp of when the token was last used. |
21
- | `access_granted_at` | `datetime` | The ISO 8601 timestamp of when the token was granted to the organization. |. |
22
- | `organization_permissions` | `string` | JSON string of the PAT's organization-scoped permissions. |
23
- | `repository_permissions` | `string` | JSON string of the PAT's repository-scoped permissions. |
23
+ | `access_granted_at` | `datetime` | The ISO 8601 timestamp of when the token was granted to the organization. |
24
+ | `organization_permissions` | `list[string]` | Organization-scoped permissions in `scope:access` form. |
25
+ | `repository_permissions` | `list[string]` | Repository-scoped permissions in `scope:access` form. |
24
26
  | `token_name` | `string` | The user-assigned display name of the token. |
25
27
  | `owner_login` | `string` | The login handle of the user who owns the token. |
26
28
  | `repository_selection` | `string` | Whether the token has access to `all`, `subset`, or `none` of the organization's repositories. |
@@ -2,7 +2,9 @@
2
2
 
3
3
  ## General Information
4
4
 
5
- Represents a pending request from an organization member to access organization resources with a fine-grained personal access token. PAT requests are linked to their owning user and the organization. The requested permissions are captured as a JSON string in the properties.
5
+ Represents a pending request from an organization member to access organization resources with a fine-grained personal access token. PAT requests are linked to their owning user and the organization.
6
+
7
+ The requested permissions are stored separately as `organization_permissions` and `repository_permissions`. Each property is a list of `scope:access` values such as `members:read` or `contents:write`, matching the permission format used on GH_WorkflowJob nodes.
6
8
 
7
9
  ## Properties
8
10
 
@@ -18,6 +20,8 @@ Represents a pending request from an organization member to access organization
18
20
  | `repository_selection` | `string` | Whether the request targets `all`, `subset`, or `none` of the organization's repositories. |
19
21
  | `reason` | `string` | The rationale provided by the requester for the access request. |
20
22
  | `org_name` | `string` | The org name property. |
23
+ | `organization_permissions` | `list[string]` | Requested organization-scoped permissions in `scope:access` form. |
24
+ | `repository_permissions` | `list[string]` | Requested repository-scoped permissions in `scope:access` form. |
21
25
  | `query_organization_permissions` | `string` | Query for organization permissions. |
22
26
  | `query_user` | `string` | Query for user. |
23
27
  | `query_repositories` | `string` | Query for repositories. |
@@ -44,9 +44,6 @@ When the runner is not explicitly marked ephemeral, GH_CanInterceptJob edges ide
44
44
  graph LR
45
45
  n0["GH_Repository"]
46
46
  n1["GH_RepoRunner"]
47
- n2["GH_WorkflowJob"]
48
47
  n0 -.->|GH_CanUseRunner| n1
49
48
  n0 -.->|GH_Contains| n1
50
- n2 -.->|GH_RunsOn| n1
51
- n1 -->|GH_CanInterceptJob| n2
52
49
  ```
@@ -31,6 +31,7 @@ graph LR
31
31
  n3["GH_WorkflowStep"]
32
32
  n0 -.->|GH_Contains| n1
33
33
  n0 -->|GH_HasSecret| n1
34
+ n2 -->|GH_CanAccessSecret| n1
34
35
  n2 -.->|GH_UsesSecret| n1
35
36
  n3 -.->|GH_UsesSecret| n1
36
37
  ```
@@ -6,6 +6,8 @@ Represents a GitHub repository within the organization. Repository nodes capture
6
6
 
7
7
  For repositories with active workflows, the collector records the applicable default workflow permissions and whether workflows may approve pull request reviews. These properties preserve the repository-level policy input later used to derive effective GITHUB_TOKEN permissions for GH_WorkflowJob nodes.
8
8
 
9
+ The `branch_count` and `environment_count` properties preserve GitHub-reported totals from the repository GraphQL response. These values can be compared to collected GH_Branch and GH_Environment children to identify incomplete collection before relying on branch- or environment-dependent analysis.
10
+
9
11
  ## Properties
10
12
 
11
13
  | Property | Type | Description |
@@ -39,11 +41,13 @@ For repositories with active workflows, the collector records the applicable def
39
41
  | `environment_name` | `string` | The name of the environment (GitHub organization). |
40
42
  | `actions_enabled` | `boolean` | Whether GitHub Actions is enabled for this repository. |
41
43
  | `self_hosted_runners_enabled` | `boolean` | Whether the repository may use self-hosted runners. |
44
+ | `default_workflow_permissions` | `string` | The repository's applicable default GITHUB_TOKEN workflow permissions. |
45
+ | `can_approve_pull_request_reviews` | `boolean` | Whether workflows may approve pull request reviews. |
42
46
  | `secret_scanning` | `string` | Status of secret scanning (e.g., `enabled`, `disabled`). |
43
47
  | `branch_ruleset_count` | `integer` | Number of branch-targeted rulesets that apply to this repository. |
44
48
  | `has_branch_rulesets` | `boolean` | Whether at least one branch-targeted ruleset applies to this repository. |
45
- | `default_workflow_permissions` | `string` | The repository's applicable default GITHUB_TOKEN workflow permissions. |
46
- | `can_approve_pull_request_reviews` | `boolean` | Whether workflows may approve pull request reviews. |
49
+ | `branch_count` | `integer` | Number of branch refs reported by GitHub for this repository. |
50
+ | `environment_count` | `integer` | Number of deployment environments reported by GitHub for this repository. |
47
51
  | `query_branches` | `string` | Query for branches. |
48
52
  | `query_protected_branches` | `string` | Query for protected branches. |
49
53
  | `query_branch_protection_rules` | `string` | Query for branch protection rules. |
@@ -19,4 +19,7 @@ Generic label applied to GitHub self-hosted runner nodes across enterprise, orga
19
19
  ```mermaid
20
20
  graph LR
21
21
  n0["GH_Runner"]
22
+ n1["GH_WorkflowJob"]
23
+ n0 -->|GH_CanInterceptJob| n1
24
+ n1 -.->|GH_RunsOn| n0
22
25
  ```
@@ -47,32 +47,32 @@ When `runs_on_is_dynamic` is true, runner matching and interception status remai
47
47
 
48
48
  ```mermaid
49
49
  graph LR
50
- n0["GH_Workflow"]
50
+ n0["GH_Runner"]
51
51
  n1["GH_WorkflowJob"]
52
- n2["GH_Environment"]
53
- n3["GH_EnvironmentSecret"]
54
- n4["GH_EnvironmentVariable"]
55
- n5["GH_OrgSecret"]
56
- n6["GH_OrgVariable"]
57
- n7["GH_RepoSecret"]
58
- n8["GH_RepoVariable"]
59
- n9["GH_Runner"]
52
+ n2["GH_Workflow"]
53
+ n3["GH_Environment"]
54
+ n4["GH_EnvironmentSecret"]
55
+ n5["GH_EnvironmentVariable"]
56
+ n6["GH_OrgSecret"]
57
+ n7["GH_OrgVariable"]
58
+ n8["GH_RepoSecret"]
59
+ n9["GH_RepoVariable"]
60
60
  n10["GH_WorkflowStep"]
61
- n0 -.->|GH_Contains| n1
62
- n1 -.->|GH_DeploysTo| n2
63
- n1 -.->|GH_UsesSecret| n3
64
- n1 -.->|GH_UsesVariable| n4
65
- n1 -.->|GH_UsesSecret| n5
66
- n1 -.->|GH_UsesVariable| n6
67
- n1 -.->|GH_UsesSecret| n7
68
- n1 -.->|GH_UsesVariable| n8
69
- n1 -.->|GH_RunsOn| n9
70
- n1 -->|GH_CanAccessSecret| n3
71
- n1 -->|GH_CanAccessSecret| n5
72
- n1 -->|GH_CanAccessSecret| n7
73
- n1 -->|GH_CanRequestOIDCTokenFor| n2
74
- n9 -->|GH_CanInterceptJob| n1
75
- n1 -.->|GH_CallsWorkflow| n0
61
+ n0 -->|GH_CanInterceptJob| n1
62
+ n2 -.->|GH_Contains| n1
63
+ n1 -->|GH_CanRequestOIDCTokenFor| n3
64
+ n1 -.->|GH_DeploysTo| n3
65
+ n1 -->|GH_CanAccessSecret| n4
66
+ n1 -.->|GH_UsesSecret| n4
67
+ n1 -.->|GH_UsesVariable| n5
68
+ n1 -->|GH_CanAccessSecret| n6
69
+ n1 -.->|GH_UsesSecret| n6
70
+ n1 -.->|GH_UsesVariable| n7
71
+ n1 -->|GH_CanAccessSecret| n8
72
+ n1 -.->|GH_UsesSecret| n8
73
+ n1 -.->|GH_UsesVariable| n9
74
+ n1 -.->|GH_RunsOn| n0
75
+ n1 -.->|GH_CallsWorkflow| n2
76
76
  n1 -.->|GH_DependsOn| n1
77
77
  n1 -.->|GH_Contains| n10
78
78
  ```
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "GitHub: Tier Zero App Installations (All Repositories)",
3
+ "description": "GitHub App installations scoped to all repositories in the organization that have repository-control write permissions. A compromised app credential may grant code, workflow, Actions, or administrative control across every repository. Installations with only read or lower-impact write permissions are excluded.",
4
+ "cypher": "MATCH (n:GH_AppInstallation {repository_selection:'all'})\nWHERE ANY(permission IN n.permissions WHERE permission IN ['contents:write', 'administration:write', 'workflows:write', 'actions:write'])\nRETURN n",
5
+ "enabled": true,
6
+ "zone": "Tier Zero",
7
+ "allow_disable": true
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "GitHub: Tier Zero Apps (All-Repository Installations)",
3
+ "description": "GitHub App definitions whose installations have repository-control write permissions across all repositories. The app owner controls the private key that can generate tokens for any installation. Compromise of the app's private key may grant code, workflow, Actions, or administrative control across every repository in organizations where it is installed. Apps whose installations have only read or lower-impact write permissions are excluded.",
4
+ "cypher": "MATCH (n:GH_App)-[:GH_InstalledAs]->(i:GH_AppInstallation {repository_selection:'all'})\nWHERE ANY(permission IN i.permissions WHERE permission IN ['contents:write', 'administration:write', 'workflows:write', 'actions:write'])\nRETURN n",
5
+ "enabled": true,
6
+ "zone": "Tier Zero",
7
+ "allow_disable": true
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "GitHub: Tier Zero PATs (All Repositories)",
3
+ "description": "Fine-grained personal access tokens scoped to all repositories in the organization that have repository-control write permissions. A single compromised token may grant code, workflow, Actions, or administrative control across every repository. PATs with only read or lower-impact write permissions are excluded.",
4
+ "cypher": "MATCH (n:GH_PersonalAccessToken {repository_selection:'all'})\nWHERE ANY(permission IN n.repository_permissions WHERE permission IN ['contents:write', 'administration:write', 'workflows:write', 'actions:write'])\nRETURN n",
5
+ "enabled": true,
6
+ "zone": "Tier Zero",
7
+ "allow_disable": true
8
+ }
@@ -175,7 +175,12 @@ def extract_general_information(path: Path) -> str | None:
175
175
  text = text[match.end() :].strip()
176
176
  else:
177
177
  text = re.sub(r"^# .+?\n+", "", text, count=1).strip()
178
- text = re.split(r"^## Diagram\s*$", text, maxsplit=1, flags=re.MULTILINE)[0].strip()
178
+ text = re.split(
179
+ r"^## (?:Properties|Edge Schema|Diagram)\s*$",
180
+ text,
181
+ maxsplit=1,
182
+ flags=re.MULTILINE,
183
+ )[0].strip()
179
184
  text = re.sub(r"\n```mermaid\n.*?\n```\s*$", "", text, flags=re.DOTALL).strip()
180
185
  return text or None
181
186
 
@@ -271,6 +271,7 @@ query RepoRefs($login: String!, $count: Int!, $after: String) {
271
271
  totalCount
272
272
  }
273
273
  refs(first: 100, refPrefix: "refs/heads/") {
274
+ totalCount
274
275
  nodes {
275
276
  id
276
277
  name
@@ -279,6 +280,9 @@ query RepoRefs($login: String!, $count: Int!, $after: String) {
279
280
  }
280
281
  pageInfo { endCursor hasNextPage }
281
282
  }
283
+ environments(first: 1) {
284
+ totalCount
285
+ }
282
286
  }
283
287
  pageInfo { endCursor hasNextPage }
284
288
  }
@@ -278,6 +278,16 @@ class GithubLookup(LookupManager):
278
278
  if actions_enabled is not True:
279
279
  return []
280
280
 
281
+ org_node_id = self.org_id_for_login(org_login)
282
+ if not org_node_id:
283
+ return [
284
+ (node_id, ephemeral)
285
+ for _source_order, node_id, ephemeral in sorted(
286
+ matching_runners,
287
+ key=lambda runner: (runner[0], runner[1]),
288
+ )
289
+ ]
290
+
281
291
  for (
282
292
  runner_group_id,
283
293
  runner_group_name,
@@ -320,9 +330,6 @@ class GithubLookup(LookupManager):
320
330
  continue
321
331
 
322
332
  if inherited:
323
- org_node_id = self.org_id_for_login(org_login)
324
- if not org_node_id:
325
- continue
326
333
  if (
327
334
  self.enterprise_runner_group_restricted_to_workflows_for_inherited_org_group(
328
335
  org_node_id, runner_group_name
@@ -370,7 +377,7 @@ class GithubLookup(LookupManager):
370
377
  ):
371
378
  add_matching_runner(
372
379
  1,
373
- runner_node_id(self.org_id_for_login(org_login), int(runner_id)),
380
+ runner_node_id(org_node_id, int(runner_id)),
374
381
  raw_labels,
375
382
  ephemeral,
376
383
  )
@@ -595,6 +602,25 @@ class GithubLookup(LookupManager):
595
602
  return None
596
603
  return int(row[0])
597
604
 
605
+ @lru_cache
606
+ def repository_graphql_counts(
607
+ self, repository_node_id: str
608
+ ) -> tuple[int | None, int | None]:
609
+ row = self._find_single_row(
610
+ f"""
611
+ SELECT branch_count, environment_count
612
+ FROM {self.schema}.repositories_graphql
613
+ WHERE id = ?
614
+ """,
615
+ [repository_node_id],
616
+ )
617
+ if row is None:
618
+ return None, None
619
+ return (
620
+ None if row[0] is None else int(row[0]),
621
+ None if row[1] is None else int(row[1]),
622
+ )
623
+
598
624
  @lru_cache
599
625
  def repository_workflow_permissions(
600
626
  self, repository_node_id: str
@@ -12,6 +12,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
12
12
  from openhound_github.kinds import edges as ek
13
13
  from openhound_github.kinds import nodes as nk
14
14
  from openhound_github.main import app
15
+ from openhound_github.models.permissions import normalize_permission_declaration
15
16
 
16
17
 
17
18
  @dataclass
@@ -28,7 +29,7 @@ class GHAppInstallationProperties(GHNodeProperties):
28
29
  repositories_url: API URL to list repositories accessible to this installation.
29
30
  repository_selection: Whether the app has access to `all` repositories or `selected` repositories.
30
31
  target_type: The target type of the installation (e.g., `Organization`).
31
- permissions: JSON string of the permissions granted to the app (e.g., `{"contents": "read", "metadata": "read"}`).
32
+ permissions: Permissions granted to the installation in `scope:access` form.
32
33
  events: JSON string of the webhook events the app subscribes to.
33
34
  created_at: When the app was installed.
34
35
  updated_at: When the installation was last updated.
@@ -47,7 +48,7 @@ class GHAppInstallationProperties(GHNodeProperties):
47
48
  repositories_url: str | None = None
48
49
  repository_selection: str | None = None
49
50
  target_type: str | None = None
50
- permissions: str | None = None
51
+ permissions: list[str] | None = None
51
52
  events: str | None = None
52
53
  created_at: datetime | None = None
53
54
  updated_at: datetime | None = None
@@ -141,7 +142,7 @@ class AppInstallation(BaseAsset):
141
142
  repositories_url=self.repositories_url,
142
143
  repository_selection=self.repository_selection,
143
144
  target_type=self.target_type,
144
- permissions=json.dumps(self.permissions) if self.permissions else None,
145
+ permissions=normalize_permission_declaration(self.permissions),
145
146
  events=json.dumps(self.events) if self.events else None,
146
147
  created_at=self.created_at,
147
148
  updated_at=self.updated_at,
@@ -0,0 +1,18 @@
1
+ from typing import Any
2
+
3
+
4
+ def normalize_permission_declaration(value: Any) -> list[str] | None:
5
+ """Normalize GitHub permission payloads into query-friendly scope:access values."""
6
+ if value is None:
7
+ return None
8
+
9
+ if isinstance(value, str):
10
+ return [value]
11
+
12
+ if isinstance(value, list):
13
+ return [str(item) for item in value]
14
+
15
+ if isinstance(value, dict):
16
+ return [f"{key!s}:{item!s}" for key, item in value.items()]
17
+
18
+ return [str(value)]
@@ -2,7 +2,6 @@ from dataclasses import dataclass
2
2
  from datetime import datetime
3
3
  from typing import ClassVar
4
4
 
5
- from dlt.common import json
6
5
  from dlt.common.libs.pydantic import DltConfig
7
6
  from openhound.core.asset import BaseAsset, EdgeDef, NodeDef
8
7
  from openhound.core.models.entries_dataclass import Edge, EdgePath, EdgeProperties
@@ -12,6 +11,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
12
11
  from openhound_github.kinds import edges as ek
13
12
  from openhound_github.kinds import nodes as nk
14
13
  from openhound_github.main import app
14
+ from openhound_github.models.permissions import normalize_permission_declaration
15
15
 
16
16
 
17
17
  class Permissions(BaseModel):
@@ -35,10 +35,10 @@ class GHPersonalAccessTokenProperties(GHNodeProperties):
35
35
  owner_id: The GitHub ID of the token owner.
36
36
  owner_node_id: The GraphQL node ID of the token owner.
37
37
  token_expires_at: The ISO 8601 timestamp of when the token expires.
38
- organization_permissions: JSON string of the PAT's organization-scoped permissions.
39
- repository_permissions: JSON string of the PAT's repository-scoped permissions.
38
+ organization_permissions: Organization-scoped permissions in `scope:access` form.
39
+ repository_permissions: Repository-scoped permissions in `scope:access` form.
40
40
  token_last_used_at: The ISO 8601 timestamp of when the token was last used.
41
- access_granted_at: The ISO 8601 timestamp of when the token was granted to the organization. |
41
+ access_granted_at: The ISO 8601 timestamp of when the token was granted to the organization.
42
42
  token_name: The user-assigned display name of the token.
43
43
  owner_login: The login handle of the user who owns the token.
44
44
  repository_selection: Whether the token has access to `all`, `subset`, or `none` of the organization's repositories.
@@ -55,8 +55,8 @@ class GHPersonalAccessTokenProperties(GHNodeProperties):
55
55
  token_expires_at: datetime | None = None
56
56
  token_last_used_at: datetime | None = None
57
57
  access_granted_at: datetime | None = None
58
- organization_permissions: str | None = None
59
- repository_permissions: str | None = None
58
+ organization_permissions: list[str] | None = None
59
+ repository_permissions: list[str] | None = None
60
60
  token_name: str | None = None
61
61
  owner_login: str | None = None
62
62
  repository_selection: str | None = None
@@ -144,15 +144,11 @@ class PersonalAccessToken(BaseAsset):
144
144
  environment_name=self.org_login,
145
145
  token_expires_at=self.token_expires_at,
146
146
  owner_id=self.owner.id if self.owner else None,
147
- organization_permissions=(
148
- json.dumps(self.permissions.organization)
149
- if self.permissions and self.permissions.organization
150
- else None
147
+ organization_permissions=normalize_permission_declaration(
148
+ self.permissions.organization if self.permissions else None
151
149
  ),
152
- repository_permissions=(
153
- json.dumps(self.permissions.repository)
154
- if self.permissions and self.permissions.repository
155
- else None
150
+ repository_permissions=normalize_permission_declaration(
151
+ self.permissions.repository if self.permissions else None
156
152
  ),
157
153
  token_last_used_at=self.token_last_used_at,
158
154
  query_organization_permissions=f"MATCH p=(:GH_PersonalAccessToken {{node_id:'{pid}'}})-[:GH_CanAccess]->(:GH_Organization) RETURN p",
@@ -9,6 +9,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
9
9
  from openhound_github.kinds import edges as ek
10
10
  from openhound_github.kinds import nodes as nk
11
11
  from openhound_github.main import app
12
+ from openhound_github.models.permissions import normalize_permission_declaration
12
13
 
13
14
 
14
15
  class Owner(BaseModel):
@@ -29,19 +30,23 @@ class GHPersonalAccessTokenRequestProperties(GHNodeProperties):
29
30
  repository_selection: Whether the request targets `all`, `subset`, or `none` of the organization's repositories.
30
31
  reason: The rationale provided by the requester for the access request.
31
32
  org_name: The org name property.
33
+ organization_permissions: Requested organization-scoped permissions in `scope:access` form.
34
+ repository_permissions: Requested repository-scoped permissions in `scope:access` form.
32
35
  query_organization_permissions: Query for organization permissions.
33
36
  query_user: Query for user.
34
37
  query_repositories: Query for repositories.
35
38
  """
36
39
 
37
40
  # TODO: Check for the following fields
38
- # owner_id, owner_node_id, toke_id, token_expires_at, token_last_used_at, permissions, and environment_name
41
+ # owner_id, owner_node_id, toke_id, token_expires_at, token_last_used_at, and environment_name
39
42
 
40
43
  token_name: str | None = None
41
44
  owner_login: str | None = None
42
45
  repository_selection: str | None = None
43
46
  reason: str | None = None
44
47
  org_name: str | None = None
48
+ organization_permissions: list[str] | None = None
49
+ repository_permissions: list[str] | None = None
45
50
  query_organization_permissions: str | None = None
46
51
  query_user: str | None = None
47
52
  query_repositories: str | None = None
@@ -102,6 +107,7 @@ class PersonalAccessTokenRequest(BaseAsset):
102
107
  @property
103
108
  def as_node(self) -> GHNode:
104
109
  rid = self.node_id
110
+ permissions = self.permissions or {}
105
111
  return GHNode(
106
112
  kinds=[nk.PERSONAL_ACCESS_TOKEN_REQUEST],
107
113
  properties=GHPersonalAccessTokenRequestProperties(
@@ -114,6 +120,12 @@ class PersonalAccessTokenRequest(BaseAsset):
114
120
  repository_selection=self.repository_selection,
115
121
  reason=self.reason,
116
122
  org_name=self.org_login,
123
+ organization_permissions=normalize_permission_declaration(
124
+ permissions.get("organization")
125
+ ),
126
+ repository_permissions=normalize_permission_declaration(
127
+ permissions.get("repository")
128
+ ),
117
129
  query_organization_permissions=f"MATCH p=(:GH_PersonalAccessTokenRequest {{node_id:'{rid}'}})-[:GH_CanAccess]->(:GH_Organization) RETURN p",
118
130
  query_user=f"MATCH p=(:GH_User)-[:GH_HasPersonalAccessTokenRequest]->(:GH_PersonalAccessTokenRequest {{node_id:'{rid}'}}) RETURN p",
119
131
  query_repositories=f"MATCH p=(:GH_PersonalAccessTokenRequest {{node_id:'{rid}'}})-[:GH_CanAccess]->(:GH_Repository) RETURN p LIMIT 1000",
@@ -46,6 +46,8 @@ class GHRepositoryProperties(GHNodeProperties):
46
46
  secret_scanning: Status of secret scanning (e.g., `enabled`, `disabled`).
47
47
  branch_ruleset_count: Number of branch-targeted rulesets that apply to this repository.
48
48
  has_branch_rulesets: Whether at least one branch-targeted ruleset applies to this repository.
49
+ branch_count: Number of branch refs reported by GitHub for this repository.
50
+ environment_count: Number of deployment environments reported by GitHub for this repository.
49
51
  query_branches: Query for branches.
50
52
  query_protected_branches: Query for protected branches.
51
53
  query_branch_protection_rules: Query for branch protection rules.
@@ -94,6 +96,8 @@ class GHRepositoryProperties(GHNodeProperties):
94
96
  secret_scanning: str | None = None
95
97
  branch_ruleset_count: int | None = None
96
98
  has_branch_rulesets: bool | None = None
99
+ branch_count: int | None = None
100
+ environment_count: int | None = None
97
101
  query_branches: str | None = None
98
102
  query_protected_branches: str | None = None
99
103
  query_branch_protection_rules: str | None = None
@@ -149,6 +153,7 @@ class Branch(BaseModel):
149
153
  class Ref(BaseModel):
150
154
  page_info: PageInfo = Field(alias="pageInfo")
151
155
  nodes: list[Branch]
156
+ total_count: int | None = Field(alias="totalCount", default=None)
152
157
 
153
158
 
154
159
  class RepositoryQL(BaseModel):
@@ -158,6 +163,8 @@ class RepositoryQL(BaseModel):
158
163
  name: str
159
164
  refs: Ref
160
165
  branch_ruleset_count: int | None = None
166
+ branch_count: int | None = None
167
+ environment_count: int | None = None
161
168
 
162
169
  # Additional
163
170
  org_login: str
@@ -230,6 +237,7 @@ class Repository(BaseAsset):
230
237
  def as_node(self) -> GHNode:
231
238
  rid = self.node_id
232
239
  branch_ruleset_count = self._lookup.repository_branch_ruleset_count(rid)
240
+ branch_count, environment_count = self._lookup.repository_graphql_counts(rid)
233
241
  workflow_permissions = self._lookup.repository_workflow_permissions(rid)
234
242
  default_workflow_permissions, can_approve_pull_request_reviews = (
235
243
  workflow_permissions if workflow_permissions else (None, None)
@@ -272,6 +280,8 @@ class Repository(BaseAsset):
272
280
  if branch_ruleset_count is not None
273
281
  else None
274
282
  ),
283
+ branch_count=branch_count,
284
+ environment_count=environment_count,
275
285
  # secret_scanning=self.secret_scanning,
276
286
  query_branches=f"MATCH p=(:GH_Repository {{node_id: '{rid}'}})-[:GH_Contains]->(:GH_Branch) RETURN p",
277
287
  query_protected_branches=f"MATCH p=(:GH_Repository {{node_id: '{rid}'}})-[:GH_Contains]->(:GH_Branch)<-[:GH_ProtectedBy]-(:GH_BranchProtectionRule) RETURN p",
@@ -24,6 +24,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
24
24
  from openhound_github.kinds import edges as ek
25
25
  from openhound_github.kinds import nodes as nk
26
26
  from openhound_github.main import app
27
+ from openhound_github.models.permissions import normalize_permission_declaration
27
28
 
28
29
 
29
30
  class GithubActionsLoader(yaml.SafeLoader):
@@ -124,22 +125,6 @@ READ_ONLY_GITHUB_TOKEN_PERMISSION_SCOPES = {"models", "vulnerability-alerts"}
124
125
  WRITE_ONLY_GITHUB_TOKEN_PERMISSION_SCOPES = {"id-token"}
125
126
 
126
127
 
127
- def normalize_permission_declaration(value: Any) -> list[str] | None:
128
- if value is None:
129
- return None
130
-
131
- if isinstance(value, str):
132
- return [value]
133
-
134
- if isinstance(value, list):
135
- return [str(item) for item in value]
136
-
137
- if isinstance(value, dict):
138
- return [f"{key!s}:{item!s}" for key, item in value.items()]
139
-
140
- return [str(value)]
141
-
142
-
143
128
  def _empty_github_token_permissions() -> dict[str, str]:
144
129
  return {scope: "none" for scope in GITHUB_TOKEN_PERMISSION_SCOPES}
145
130