openhound-github 0.10.0__tar.gz → 0.11.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 (435) hide show
  1. {openhound_github-0.10.0 → openhound_github-0.11.0}/PKG-INFO +1 -1
  2. openhound_github-0.11.0/descriptions/edges/GH_CanRequestOIDCTokenFor.md +26 -0
  3. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_AppInstallation.md +4 -2
  4. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Enterprise.md +2 -1
  5. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnterpriseRunner.md +0 -3
  6. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Environment.md +3 -0
  7. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnvironmentSecret.md +1 -0
  8. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_OrgRunner.md +0 -3
  9. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_OrgSecret.md +1 -0
  10. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Organization.md +2 -0
  11. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_PersonalAccessToken.md +6 -4
  12. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +5 -1
  13. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_RepoRunner.md +0 -3
  14. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_RepoSecret.md +1 -0
  15. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Runner.md +3 -0
  16. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_WorkflowJob.md +25 -24
  17. openhound_github-0.11.0/extension/privilege_zone_rules/t0-app-installations-all-repos.json +8 -0
  18. openhound_github-0.11.0/extension/privilege_zone_rules/t0-apps-all-repos.json +8 -0
  19. openhound_github-0.11.0/extension/privilege_zone_rules/t0-pats-all-repos.json +8 -0
  20. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/schema.json +5 -0
  21. {openhound_github-0.10.0 → openhound_github-0.11.0}/scripts/generate_gh_description_docs.py +6 -1
  22. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/kinds/edges.py +2 -1
  23. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/lookup.py +30 -8
  24. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/app_installation.py +4 -3
  25. openhound_github-0.11.0/src/openhound_github/models/permissions.py +18 -0
  26. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/personal_access_token.py +10 -14
  27. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/personal_access_token_request.py +13 -1
  28. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/workflow.py +1 -16
  29. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/workflow_job.py +47 -4
  30. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/resources/organization.py +12 -3
  31. openhound_github-0.11.0/tests/test_credential_permission_models.py +112 -0
  32. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_repository_rulesets.py +2 -1
  33. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_runner_models.py +18 -3
  34. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_workflow_interception_path.py +37 -2
  35. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_workflow_model.py +158 -0
  36. openhound_github-0.11.0/tests/test_workflow_resources.py +272 -0
  37. openhound_github-0.10.0/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -8
  38. openhound_github-0.10.0/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -8
  39. openhound_github-0.10.0/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -8
  40. openhound_github-0.10.0/tests/test_workflow_resources.py +0 -98
  41. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/CODE_OF_CONDUCT.md +0 -0
  42. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/CONTRIBUTING.md +0 -0
  43. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GOVERNANCE.md +0 -0
  44. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GitHub-COC-Header.png +0 -0
  45. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GitHub-CONTRIB-Header.png +0 -0
  46. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GitHub-GOV-Header.png +0 -0
  47. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GitHub-Header.png +0 -0
  48. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GitHub-LIC-Header.png +0 -0
  49. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/GitHub-SEC-Header.png +0 -0
  50. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/SECURITY.md +0 -0
  51. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/SO-Dark.svg +0 -0
  52. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/SO-FOSS-Dark.svg +0 -0
  53. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/SO-FOSS-Light.svg +0 -0
  54. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/SO-Light.svg +0 -0
  55. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/workflows/publish.yml +0 -0
  56. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/workflows/release-on-merge.yml +0 -0
  57. {openhound_github-0.10.0 → openhound_github-0.11.0}/.github/workflows/validate-branch.yml +0 -0
  58. {openhound_github-0.10.0 → openhound_github-0.11.0}/.gitignore +0 -0
  59. {openhound_github-0.10.0 → openhound_github-0.11.0}/.gitmodules +0 -0
  60. {openhound_github-0.10.0 → openhound_github-0.11.0}/.pre-commit-config.yaml +0 -0
  61. {openhound_github-0.10.0 → openhound_github-0.11.0}/LICENSE.md +0 -0
  62. {openhound_github-0.10.0 → openhound_github-0.11.0}/README.md +0 -0
  63. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_AddAssignee.md +0 -0
  64. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_AddCollaborator.md +0 -0
  65. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_AddLabel.md +0 -0
  66. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_AddMember.md +0 -0
  67. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_AdminTo.md +0 -0
  68. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
  69. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_AssignedTo.md +0 -0
  70. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
  71. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
  72. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CallsWorkflow.md +0 -0
  73. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanAccess.md +0 -0
  74. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanAccessSecret.md +0 -0
  75. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
  76. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreateBranch.md +0 -0
  77. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
  78. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreateInternalRepositories.md +0 -0
  79. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreatePrivateRepositories.md +0 -0
  80. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreatePublicRepositories.md +0 -0
  81. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreateRepositories.md +0 -0
  82. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
  83. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
  84. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
  85. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanEditProtection.md +0 -0
  86. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanInterceptJob.md +0 -0
  87. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanPwnRequest.md +0 -0
  88. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanReadSecret.md +0 -0
  89. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
  90. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanUseRunner.md +0 -0
  91. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CanWriteBranch.md +0 -0
  92. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CloseDiscussion.md +0 -0
  93. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CloseIssue.md +0 -0
  94. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ClosePullRequest.md +0 -0
  95. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_Contains.md +0 -0
  96. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
  97. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
  98. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CreateEnterpriseOrganizations.md +0 -0
  99. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CreateRepository.md +0 -0
  100. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
  101. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CreateTag.md +0 -0
  102. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_CreateTeam.md +0 -0
  103. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
  104. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
  105. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
  106. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DeleteIssue.md +0 -0
  107. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DeleteTag.md +0 -0
  108. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DependsOn.md +0 -0
  109. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_DeploysTo.md +0 -0
  110. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
  111. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
  112. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
  113. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditEnterpriseCustomPropertiesForOrganizations.md +0 -0
  114. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
  115. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
  116. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
  117. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_EditRepoProtections.md +0 -0
  118. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasBaseRole.md +0 -0
  119. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
  120. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasMember.md +0 -0
  121. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
  122. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
  123. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasRole.md +0 -0
  124. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasRunner.md +0 -0
  125. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
  126. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasSecret.md +0 -0
  127. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_HasVariable.md +0 -0
  128. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_InheritedFrom.md +0 -0
  129. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_InstalledAs.md +0 -0
  130. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_InviteMember.md +0 -0
  131. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_IsEligibleFor.md +0 -0
  132. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
  133. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
  134. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
  135. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseAdmins.md +0 -0
  136. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseIdentityProvider.md +0 -0
  137. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseMembers.md +0 -0
  138. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseOrganizationAdmins.md +0 -0
  139. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseOrganizations.md +0 -0
  140. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseReferrals.md +0 -0
  141. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageEnterpriseTeams.md +0 -0
  142. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
  143. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
  144. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
  145. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
  146. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
  147. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
  148. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
  149. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageTopics.md +0 -0
  150. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ManageWebhooks.md +0 -0
  151. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_MapsToUser.md +0 -0
  152. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
  153. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
  154. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_MemberOf.md +0 -0
  155. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
  156. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
  157. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
  158. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
  159. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_Owns.md +0 -0
  160. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ProtectedBy.md +0 -0
  161. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
  162. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
  163. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadEnterpriseAuditLog.md +0 -0
  164. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadEnterpriseDomainVerification.md +0 -0
  165. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadEnterpriseMembers.md +0 -0
  166. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadEnterpriseOrgProjects.md +0 -0
  167. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadEnterpriseOrganizationAdmin.md +0 -0
  168. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
  169. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
  170. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
  171. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReadRepoContents.md +0 -0
  172. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_RemoveAssignee.md +0 -0
  173. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_RemoveLabel.md +0 -0
  174. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
  175. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReopenIssue.md +0 -0
  176. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
  177. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_RequestPrReview.md +0 -0
  178. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
  179. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
  180. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
  181. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_RunOrgMigration.md +0 -0
  182. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_RunsOn.md +0 -0
  183. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_SetEnterpriseInteractionLimits.md +0 -0
  184. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
  185. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_SetIssueType.md +0 -0
  186. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_SetMilestone.md +0 -0
  187. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_SetSocialPreview.md +0 -0
  188. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_SyncedTo.md +0 -0
  189. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
  190. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
  191. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_TransferRepository.md +0 -0
  192. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_UsesSecret.md +0 -0
  193. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_UsesVariable.md +0 -0
  194. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ValidToken.md +0 -0
  195. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
  196. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ViewEnterpriseActionsUsageMetrics.md +0 -0
  197. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ViewEnterpriseBilling.md +0 -0
  198. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ViewEnterpriseSecretScanningAlerts.md +0 -0
  199. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
  200. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
  201. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteEnterpriseActionsPolicies.md +0 -0
  202. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteEnterpriseBilling.md +0 -0
  203. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteEnterprisePersonalAccessTokenPolicies.md +0 -0
  204. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteEnterpriseSso.md +0 -0
  205. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteEnterpriseTeamMembers.md +0 -0
  206. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
  207. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
  208. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
  209. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
  210. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
  211. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
  212. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteRepoContents.md +0 -0
  213. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
  214. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_App.md +0 -0
  215. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Branch.md +0 -0
  216. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
  217. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnterpriseManagedUser.md +0 -0
  218. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnterpriseRole.md +0 -0
  219. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
  220. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnterpriseTeam.md +0 -0
  221. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
  222. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
  223. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
  224. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_OrgRole.md +0 -0
  225. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
  226. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_OrgVariable.md +0 -0
  227. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_RepoRole.md +0 -0
  228. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_RepoVariable.md +0 -0
  229. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Repository.md +2 -2
  230. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_RunnerGroup.md +0 -0
  231. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
  232. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Secret.md +0 -0
  233. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
  234. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Team.md +0 -0
  235. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_TeamRole.md +0 -0
  236. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_User.md +0 -0
  237. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Variable.md +0 -0
  238. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_Workflow.md +1 -1
  239. {openhound_github-0.10.0 → openhound_github-0.11.0}/descriptions/nodes/GH_WorkflowStep.md +0 -0
  240. {openhound_github-0.10.0 → openhound_github-0.11.0}/docs/og-docs.json +0 -0
  241. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
  242. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-enterprise-owners-role.json +0 -0
  243. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
  244. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-organizations.json +0 -0
  245. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
  246. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
  247. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
  248. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
  249. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
  250. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/README.md +0 -0
  251. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
  252. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/active-leaked-secrets.json +0 -0
  253. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
  254. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/all-actions-allowed.json +0 -0
  255. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/app-installations-all-repos.json +0 -0
  256. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
  257. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
  258. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
  259. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
  260. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
  261. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
  262. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-self-approval.json +0 -0
  263. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
  264. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/bypass-pr-requirements.json +0 -0
  265. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/dangerous-branch-perms.json +0 -0
  266. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/default-repository-permissions.json +0 -0
  267. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
  268. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
  269. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
  270. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
  271. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/environments-admin-bypass.json +0 -0
  272. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/expired-pats.json +0 -0
  273. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/external-identities-without-scim.json +0 -0
  274. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/github-to-azure-identity.json +0 -0
  275. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/global-repo-perms.json +0 -0
  276. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/hybrid-identities.json +0 -0
  277. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
  278. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/members-can-create-pages.json +0 -0
  279. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/members-can-create-public-repos.json +0 -0
  280. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/members-can-delete-repos.json +0 -0
  281. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
  282. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
  283. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/org-owners.json +0 -0
  284. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/orgs-without-2fa.json +0 -0
  285. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/pats-all-repo-access.json +0 -0
  286. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/pending-pat-requests.json +0 -0
  287. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
  288. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
  289. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
  290. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/public-repos.json +0 -0
  291. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
  292. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/push-to-protected-branches.json +0 -0
  293. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
  294. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
  295. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/repository-workflows.json +0 -0
  296. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/saml-configuration.json +0 -0
  297. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/secret-scanning-alerts.json +0 -0
  298. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
  299. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
  300. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/self-hosted-runners-can-intercept-broad-token-jobs.json +0 -0
  301. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/shared-self-hosted-runners-can-intercept-secret-bearing-jobs.json +0 -0
  302. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/team-membership-admin.json +0 -0
  303. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/team-structure.json +0 -0
  304. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/unprotected-branches.json +0 -0
  305. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
  306. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/unprotected-default-branches.json +0 -0
  307. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
  308. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/workflow-jobs-interceptable-by-self-hosted-runners.json +0 -0
  309. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/workflow-jobs-with-broad-token-write-permissions.json +0 -0
  310. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/workflow-jobs-with-id-token-write-on-self-hosted-runners.json +0 -0
  311. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/workflow-jobs-with-id-token-write.json +0 -0
  312. {openhound_github-0.10.0 → openhound_github-0.11.0}/extension/saved_searches/workflow-jobs-with-observed-oidc-auth-steps.json +0 -0
  313. {openhound_github-0.10.0 → openhound_github-0.11.0}/justfile +0 -0
  314. {openhound_github-0.10.0 → openhound_github-0.11.0}/pyproject.toml +0 -0
  315. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/main.py +0 -0
  316. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/__init__.py +0 -0
  317. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/auth.py +0 -0
  318. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/extension.yaml +0 -0
  319. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/github_rest_client.py +0 -0
  320. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/github_retry.py +0 -0
  321. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/graph.py +0 -0
  322. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/graphql.py +0 -0
  323. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/helpers.py +0 -0
  324. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/kinds/nodes.py +0 -0
  325. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/main.py +0 -0
  326. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/__init__.py +0 -0
  327. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/actions_permission.py +0 -0
  328. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/branch.py +0 -0
  329. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
  330. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/branch_protection_rule.py +0 -0
  331. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/branch_push_allowance.py +0 -0
  332. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise.py +0 -0
  333. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_admin.py +0 -0
  334. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_helpers.py +0 -0
  335. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_managed_user.py +0 -0
  336. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_member.py +0 -0
  337. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_organization.py +0 -0
  338. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_role.py +0 -0
  339. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_role_team.py +0 -0
  340. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_role_user.py +0 -0
  341. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_team.py +0 -0
  342. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_team_member.py +0 -0
  343. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_team_organization.py +0 -0
  344. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_team_role.py +0 -0
  345. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/enterprise_user.py +0 -0
  346. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/env_secret.py +0 -0
  347. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/env_variable.py +0 -0
  348. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/environment.py +0 -0
  349. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/environment_branch_policy.py +0 -0
  350. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/external_identity.py +0 -0
  351. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/org.py +0 -0
  352. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/org_role.py +0 -0
  353. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/org_role_member.py +0 -0
  354. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/org_role_team.py +0 -0
  355. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/org_secret.py +0 -0
  356. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/org_variable.py +0 -0
  357. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/personal_access_token_access.py +0 -0
  358. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/projected_enterprise_team.py +0 -0
  359. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/repo_role_assignment.py +0 -0
  360. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/repository.py +0 -0
  361. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/repository_role.py +0 -0
  362. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/repository_secret.py +0 -0
  363. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/repository_variable.py +0 -0
  364. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/runner.py +0 -0
  365. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
  366. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/saml_helpers.py +0 -0
  367. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/saml_issuer.py +0 -0
  368. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/saml_provider.py +0 -0
  369. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/saml_service_provider.py +0 -0
  370. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/scim_user.py +0 -0
  371. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/secret_scanning_alert.py +0 -0
  372. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/team.py +0 -0
  373. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/team_member.py +0 -0
  374. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/team_role.py +0 -0
  375. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/user.py +0 -0
  376. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/workflow_reference.py +0 -0
  377. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/models/workflow_step.py +0 -0
  378. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/resources/__init__.py +0 -0
  379. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/resources/enterprise.py +0 -0
  380. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/runner_ids.py +0 -0
  381. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/source.py +0 -0
  382. {openhound_github-0.10.0 → openhound_github-0.11.0}/src/openhound_github/transforms.py +0 -0
  383. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_app_auth.py +0 -0
  384. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_branch_collection_gate.py +0 -0
  385. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_branch_protection_traversability.py +0 -0
  386. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/actions-permissions.json +0 -0
  387. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/actionsecrets.json +0 -0
  388. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/app.json +0 -0
  389. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/appinstalls.json +0 -0
  390. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/branch-policies.json +0 -0
  391. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/branch-prot-rules.json +0 -0
  392. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/branches.json +0 -0
  393. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/custom-roles.json +0 -0
  394. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/environments.json +0 -0
  395. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/org-pat-request.json +0 -0
  396. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/org-pat.json +0 -0
  397. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/org-role-teams.json +0 -0
  398. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/org-role-users.json +0 -0
  399. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/org-roles.json +0 -0
  400. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/org.json +0 -0
  401. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/pat-repositories.json +0 -0
  402. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/repo-collaborators.json +0 -0
  403. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/repo-teams.json +0 -0
  404. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/repositories.json +0 -0
  405. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/scimusers.json +0 -0
  406. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/secrets.json +0 -0
  407. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/secretscanningalert.json +0 -0
  408. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/selected-org-secrets.json +0 -0
  409. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/variables.json +0 -0
  410. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_data/api/workflows.json +0 -0
  411. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_description_docs.py +0 -0
  412. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_enterprise_capabilities.py +0 -0
  413. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_enterprise_organization.py +0 -0
  414. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_enterprise_resources.py +0 -0
  415. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_environment_model.py +0 -0
  416. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_environment_resources.py +0 -0
  417. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_environment_reviewer_lookup.py +0 -0
  418. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_error_resilience.py +0 -0
  419. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_github_app_retry.py +0 -0
  420. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_github_rest_client.py +0 -0
  421. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_github_retry.py +0 -0
  422. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_helpers.py +0 -0
  423. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_lookup.py +0 -0
  424. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_org_scim_resources.py +0 -0
  425. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_org_secret_models.py +0 -0
  426. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_runner_ids.py +0 -0
  427. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_runner_resources.py +0 -0
  428. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_saml_helpers.py +0 -0
  429. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_saml_models.py +0 -0
  430. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_scim_models.py +0 -0
  431. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_source_endpoints.py +0 -0
  432. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_source_org_canonicalization.py +0 -0
  433. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_team_external_groups.py +0 -0
  434. {openhound_github-0.10.0 → openhound_github-0.11.0}/tests/test_variable_models.py +0 -0
  435. {openhound_github-0.10.0 → openhound_github-0.11.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhound-github
3
- Version: 0.10.0
3
+ Version: 0.11.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
@@ -0,0 +1,26 @@
1
+ # GH_CanRequestOIDCTokenFor
2
+
3
+ ## General Information
4
+
5
+ The traversable GH_CanRequestOIDCTokenFor edge represents a static upper-bound capability: based on the collected workflow configuration, a GitHub Actions workflow job execution context may be able to request a GitHub-signed OIDC token containing claims for its associated GitHub Environment.
6
+
7
+ This edge is derived from the existing GH_DeploysTo relationship and the job's calculated `effective_github_token_permissions`. The collector emits it only when the job targets a statically resolved environment and its effective permissions include `id-token:write`.
8
+
9
+ This is a capability edge, not evidence that the workflow has historically requested a token or contains an explicit OIDC-related step. Code executing in a job with `id-token:write` can request the token directly.
10
+
11
+ The edge does not model run-specific permission recalculation. In particular, a `pull_request` run originating from a fork may receive downgraded `GITHUB_TOKEN` permissions at runtime and therefore may not be able to request an OIDC token even when this edge exists. The edge should not be interpreted as proof that every execution of the job can request OIDC.
12
+
13
+ ## Edge Schema
14
+
15
+ | Source | Destination | Traversable |
16
+ | --- | --- | --- |
17
+ | `GH_WorkflowJob` | `GH_Environment` | `true` |
18
+
19
+ ## Diagram
20
+
21
+ ```mermaid
22
+ graph LR
23
+ n0["GH_WorkflowJob"]
24
+ n1["GH_Environment"]
25
+ n0 -->|GH_CanRequestOIDCTokenFor| n1
26
+ ```
@@ -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
  ```
@@ -6,6 +6,8 @@ Represents a GitHub Actions deployment environment configured on a repository. E
6
6
 
7
7
  Repositories always contain their environments. When custom branch policies are configured, the environment also contains one or more GH_EnvironmentBranchPolicy nodes that describe which branches are allowed to deploy. Environment-scoped secrets and variables are modeled as child nodes of the environment and become available to workflow jobs that reference it.
8
8
 
9
+ GH_CanRequestOIDCTokenFor edges from GH_WorkflowJob nodes identify jobs with a static upper-bound capability to request a GitHub-signed OIDC token for this environment because their effective `GITHUB_TOKEN` permissions include `id-token:write`. Runtime permission recalculation, such as forked `pull_request` permission downgrades, may prevent a specific execution from requesting OIDC even when this edge exists.
10
+
9
11
  ## Properties
10
12
 
11
13
  | Property | Type | Description |
@@ -57,4 +59,5 @@ graph LR
57
59
  n8 -.->|GH_ApprovesDeploymentTo| n1
58
60
  n8 -->|GH_CanDeployToEnvironment| n1
59
61
  n9 -.->|GH_DeploysTo| n1
62
+ n9 -->|GH_CanRequestOIDCTokenFor| n1
60
63
  ```
@@ -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
  ```
@@ -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
  ```
@@ -8,7 +8,7 @@ When the job has a statically resolvable self-hosted `runs-on` selector, GH_Runs
8
8
 
9
9
  When present, `job_permissions` captures the job-level `permissions` declaration from the workflow YAML. `effective_github_token_permissions` captures the calculated static `GITHUB_TOKEN` permissions after applying the repository default, workflow-level declaration, and job-level declaration.
10
10
 
11
- GH_CanAccessSecret edges identify secrets statically referenced by the job's modeled steps or job-level `env` block that the job execution context can access. GH_CanInterceptJob edges from GH_Runner nodes not explicitly marked ephemeral identify jobs whose future execution context may be exposed if that runner is controlled.
11
+ GH_CanAccessSecret edges identify secrets statically referenced by the job's modeled steps or job-level `env` block that the job execution context can access. GH_CanInterceptJob edges from GH_Runner nodes not explicitly marked ephemeral identify jobs whose future execution context may be exposed if that runner is controlled. When a job targets an environment and its effective permissions include `id-token:write`, GH_CanRequestOIDCTokenFor identifies a static upper-bound OIDC capability for that environment. Runtime permission recalculation, such as forked `pull_request` permission downgrades, may prevent a specific execution from requesting OIDC even when this edge exists.
12
12
 
13
13
  When `runs_on_is_dynamic` is true, runner matching and interception status remain unresolved: the collector does not emit GH_CanInterceptJob edges for the job, so `query_interceptable_jobs` cannot match it and the absence of an edge must not be treated as evidence that the job is definitively non-interceptable.
14
14
 
@@ -47,31 +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
- n9 -->|GH_CanInterceptJob| n1
74
- 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
75
76
  n1 -.->|GH_DependsOn| n1
76
77
  n1 -.->|GH_Contains| n10
77
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
+ }
@@ -1055,6 +1055,11 @@
1055
1055
  "description": "[Computed] Workflow job execution context can access a statically referenced secret — GH_WorkflowJob → GH_RepoSecret / GH_OrgSecret / GH_EnvironmentSecret",
1056
1056
  "is_traversable": true
1057
1057
  },
1058
+ {
1059
+ "name": "GH_CanRequestOIDCTokenFor",
1060
+ "description": "[Computed] Workflow job has a static upper-bound capability to request a GitHub OIDC token for its deployment environment — GH_WorkflowJob → GH_Environment",
1061
+ "is_traversable": true
1062
+ },
1058
1063
  {
1059
1064
  "name": "GH_UsesVariable",
1060
1065
  "description": "[Workflow] Job or step references a variable by name — GH_WorkflowJob / GH_WorkflowStep → GH_RepoVariable / GH_OrgVariable / GH_EnvironmentVariable (scope match)",
@@ -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
 
@@ -20,7 +20,8 @@ CAN_ACCESS = "GH_CanAccess"
20
20
  CAN_USE_RUNNER = "GH_CanUseRunner"
21
21
  RUNS_ON = "GH_RunsOn"
22
22
  CAN_INTERCEPT_JOB = "GH_CanInterceptJob"
23
- CAN_ACCESS_SECRET = "GH_CanAccessSecret"
23
+ CAN_ACCESS_SECRET = "GH_CanAccessSecret" # noqa: S105 - OpenGraph edge kind
24
+ CAN_REQUEST_OIDC_TOKEN_FOR = "GH_CanRequestOIDCTokenFor" # noqa: S105 - OpenGraph edge kind
24
25
  IS_ELIGIBLE_FOR = "GH_IsEligibleFor"
25
26
  CAN_CREATE_REPOSITORY_WITH_RUNNER_ACCESS = "GH_CanCreateRepositoryWithRunnerAccess"
26
27
  CAN_CREATE_BRANCH = "GH_CanCreateBranch"
@@ -243,18 +243,21 @@ class GithubLookup(LookupManager):
243
243
 
244
244
  repository_visibility, actions_enabled = repository
245
245
  required_labels = {str(label).casefold() for label in labels}
246
- matching_runners: list[tuple[str, bool | None]] = []
246
+ matching_runners: list[tuple[int, str, bool | None]] = []
247
247
  seen_runner_node_ids: set[str] = set()
248
248
 
249
249
  def add_matching_runner(
250
- node_id: str, raw_labels: Any, ephemeral: bool | None
250
+ source_order: int,
251
+ node_id: str,
252
+ raw_labels: Any,
253
+ ephemeral: bool | None,
251
254
  ) -> None:
252
255
  if node_id in seen_runner_node_ids:
253
256
  return
254
257
  if not required_labels.issubset(self._runner_label_names(raw_labels)):
255
258
  return
256
259
  seen_runner_node_ids.add(node_id)
257
- matching_runners.append((node_id, ephemeral))
260
+ matching_runners.append((source_order, node_id, ephemeral))
258
261
 
259
262
  if group_name is None:
260
263
  for runner_id, raw_labels, ephemeral in self._find_all_objects(
@@ -266,6 +269,7 @@ class GithubLookup(LookupManager):
266
269
  [repository_node_id],
267
270
  ):
268
271
  add_matching_runner(
272
+ 0,
269
273
  runner_node_id(repository_node_id, int(runner_id)),
270
274
  raw_labels,
271
275
  ephemeral,
@@ -274,6 +278,16 @@ class GithubLookup(LookupManager):
274
278
  if actions_enabled is not True:
275
279
  return []
276
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
+
277
291
  for (
278
292
  runner_group_id,
279
293
  runner_group_name,
@@ -316,9 +330,6 @@ class GithubLookup(LookupManager):
316
330
  continue
317
331
 
318
332
  if inherited:
319
- org_node_id = self.org_id_for_login(org_login)
320
- if not org_node_id:
321
- continue
322
333
  if (
323
334
  self.enterprise_runner_group_restricted_to_workflows_for_inherited_org_group(
324
335
  org_node_id, runner_group_name
@@ -345,6 +356,7 @@ class GithubLookup(LookupManager):
345
356
  [enterprise_node_id, enterprise_runner_group_id],
346
357
  ):
347
358
  add_matching_runner(
359
+ 2,
348
360
  runner_node_id(enterprise_node_id, int(runner_id)),
349
361
  raw_labels,
350
362
  ephemeral,
@@ -364,12 +376,19 @@ class GithubLookup(LookupManager):
364
376
  [org_login, runner_group_id],
365
377
  ):
366
378
  add_matching_runner(
367
- runner_node_id(self.org_id_for_login(org_login), int(runner_id)),
379
+ 1,
380
+ runner_node_id(org_node_id, int(runner_id)),
368
381
  raw_labels,
369
382
  ephemeral,
370
383
  )
371
384
 
372
- return matching_runners
385
+ return [
386
+ (node_id, ephemeral)
387
+ for _source_order, node_id, ephemeral in sorted(
388
+ matching_runners,
389
+ key=lambda runner: (runner[0], runner[1]),
390
+ )
391
+ ]
373
392
 
374
393
  @lru_cache
375
394
  def workflow_job_runner_node_ids(
@@ -594,6 +613,9 @@ class GithubLookup(LookupManager):
594
613
  repository_can_approve_pull_request_reviews
595
614
  FROM {self.schema}.workflows
596
615
  WHERE repository_node_id = ?
616
+ ORDER BY
617
+ repository_default_workflow_permissions IS NULL,
618
+ repository_can_approve_pull_request_reviews IS NULL
597
619
  LIMIT 1
598
620
  """,
599
621
  [repository_node_id],
@@ -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",