github-agent 2.4.4__tar.gz → 2.4.6__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 (138) hide show
  1. {github_agent-2.4.4 → github_agent-2.4.6}/PKG-INFO +3 -3
  2. {github_agent-2.4.4 → github_agent-2.4.6}/README.md +1 -1
  3. github_agent-2.4.6/github_agent/__init__.py +1 -0
  4. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp_server.py +1 -1
  5. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/github.ttl +3 -0
  6. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent.egg-info/PKG-INFO +3 -3
  7. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent.egg-info/SOURCES.txt +2 -0
  8. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent.egg-info/requires.txt +1 -1
  9. {github_agent-2.4.4 → github_agent-2.4.6}/pyproject.toml +2 -2
  10. github_agent-2.4.6/tests/test_default_content_surfaces.py +43 -0
  11. github_agent-2.4.6/tests/test_ontology_parent_link.py +114 -0
  12. github_agent-2.4.4/github_agent/__init__.py +0 -1
  13. {github_agent-2.4.4 → github_agent-2.4.6}/LICENSE +0 -0
  14. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/__main__.py +0 -0
  15. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/__init__.py +0 -0
  16. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_base.py +0 -0
  17. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_branches.py +0 -0
  18. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_comments.py +0 -0
  19. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_commits.py +0 -0
  20. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_contents.py +0 -0
  21. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_dependabot.py +0 -0
  22. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_issues.py +0 -0
  23. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_orgs.py +0 -0
  24. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_pages.py +0 -0
  25. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_pulls.py +0 -0
  26. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_releases.py +0 -0
  27. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_repos.py +0 -0
  28. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_search.py +0 -0
  29. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api/api_client_workflows.py +0 -0
  30. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/api_client.py +0 -0
  31. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/auth.py +0 -0
  32. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/connectors/__init__.py +0 -0
  33. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/connectors/mcp_source_presets.json +0 -0
  34. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/connectors/tool_schema_fingerprints.json +0 -0
  35. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/github_gql.py +0 -0
  36. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/github_http.py +0 -0
  37. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/github_input_models.py +0 -0
  38. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/github_response_models.py +0 -0
  39. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/kg_ingest.py +0 -0
  40. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/__init__.py +0 -0
  41. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_action.py +0 -0
  42. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_branch.py +0 -0
  43. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_collaborator.py +0 -0
  44. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_commit.py +0 -0
  45. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_content.py +0 -0
  46. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_dependabot.py +0 -0
  47. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_issue.py +0 -0
  48. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_org.py +0 -0
  49. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_pull.py +0 -0
  50. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_release.py +0 -0
  51. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_repo.py +0 -0
  52. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp/mcp_search.py +0 -0
  53. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/mcp_config.json +0 -0
  54. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/__init__.py +0 -0
  55. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/certification.json +0 -0
  56. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/fixtures/records.json +0 -0
  57. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/mappings/source.yaml +0 -0
  58. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/migrations/manifest.json +0 -0
  59. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/ontology/shapes/connector.shacl.ttl +0 -0
  60. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/prompts/__init__.py +0 -0
  61. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/__init__.py +0 -0
  62. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-actions-ci-review/SKILL.md +0 -0
  63. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-actions-ci-review/WORKFLOW.md +0 -0
  64. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-agent-operations/SKILL.md +0 -0
  65. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-agent-operations/agents/openai.yaml +0 -0
  66. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-agent-operations/references/catalog.md +0 -0
  67. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-backlog-planner/SKILL.md +0 -0
  68. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-backlog-planner/WORKFLOW.md +0 -0
  69. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-backlog-planner/references/addressed-heuristics.md +0 -0
  70. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-backlog-planner/scripts/build_plan.py +0 -0
  71. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-ci-failure-sweep/SKILL.md +0 -0
  72. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-ci-failure-sweep/WORKFLOW.md +0 -0
  73. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-ci-failure-sweep/references/actions-tool-cheatsheet.md +0 -0
  74. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-ci-failure-sweep/scripts/summarize_runs.py +0 -0
  75. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-dependabot-review/SKILL.md +0 -0
  76. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-dependabot-review/WORKFLOW.md +0 -0
  77. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-issue-tracking/SKILL.md +0 -0
  78. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-issue-tracking/WORKFLOW.md +0 -0
  79. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-org-remediation-loop/SKILL.md +0 -0
  80. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-org-remediation-loop/WORKFLOW.md +0 -0
  81. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-org-remediation-loop/scripts/classify_fix_risk.py +0 -0
  82. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pr-review-sweep/SKILL.md +0 -0
  83. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pr-review-sweep/WORKFLOW.md +0 -0
  84. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pr-review-sweep/references/pulls-tool-cheatsheet.md +0 -0
  85. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pr-review-sweep/scripts/summarize_prs.py +0 -0
  86. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-project-provisioner/SKILL.md +0 -0
  87. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-project-provisioner/WORKFLOW.md +0 -0
  88. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-project-provisioner/scripts/enable_pages.py +0 -0
  89. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pull-request-create/SKILL.md +0 -0
  90. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pull-request-create/WORKFLOW.md +0 -0
  91. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pull-request-review/SKILL.md +0 -0
  92. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-pull-request-review/WORKFLOW.md +0 -0
  93. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-repository-management/SKILL.md +0 -0
  94. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-repository-management/WORKFLOW.md +0 -0
  95. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-tools/SKILL.md +0 -0
  96. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-tools/WORKFLOW.md +0 -0
  97. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-tools/code-reviewer.md +0 -0
  98. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-tools/scripts/fetch_comments.py +0 -0
  99. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-tools/scripts/inspect_pr_checks.py +0 -0
  100. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-triage-resolver/SKILL.md +0 -0
  101. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-triage-resolver/WORKFLOW.md +0 -0
  102. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-triage-resolver/references/resolution-rules.md +0 -0
  103. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-triage-resolver/scripts/classify_safe.py +0 -0
  104. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent/skills/github-triage-resolver/scripts/gh_write.py +0 -0
  105. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent.egg-info/dependency_links.txt +0 -0
  106. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent.egg-info/entry_points.txt +0 -0
  107. {github_agent-2.4.4 → github_agent-2.4.6}/github_agent.egg-info/top_level.txt +0 -0
  108. {github_agent-2.4.4 → github_agent-2.4.6}/scripts/security_sanitizer.py +0 -0
  109. {github_agent-2.4.4 → github_agent-2.4.6}/scripts/verify_api_integration.py +0 -0
  110. {github_agent-2.4.4 → github_agent-2.4.6}/setup.cfg +0 -0
  111. {github_agent-2.4.4 → github_agent-2.4.6}/tests/conftest.py +0 -0
  112. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_action_discovery.py +0 -0
  113. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_api_client_endpoints.py +0 -0
  114. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_api_validation.py +0 -0
  115. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_auth_client_edge_cases.py +0 -0
  116. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_comment_crud.py +0 -0
  117. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_fleet_name.py +0 -0
  118. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_github_agent_api_brute_force_coverage.py +0 -0
  119. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_github_agent_brute_force_coverage.py +0 -0
  120. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_github_gql.py +0 -0
  121. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_github_http.py +0 -0
  122. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_hardening.py +0 -0
  123. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_init_dynamics.py +0 -0
  124. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_kg_ingest.py +0 -0
  125. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_mcp_coverage.py +0 -0
  126. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_mcp_package_dispatch.py +0 -0
  127. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_model_fields.py +0 -0
  128. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_org_crud.py +0 -0
  129. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_pages.py +0 -0
  130. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_repo_secrets_characterization.py +0 -0
  131. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_backlog_build_plan.py +0 -0
  132. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_ci_failure_sweep_summarize_runs.py +0 -0
  133. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_github_tools_fetch_comments.py +0 -0
  134. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_github_tools_inspect_pr_checks.py +0 -0
  135. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_org_remediation_classify_fix_risk.py +0 -0
  136. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_pr_review_sweep_summarize_prs.py +0 -0
  137. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_skill_triage_resolver_classify_safe.py +0 -0
  138. {github_agent-2.4.4 → github_agent-2.4.6}/tests/test_startup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: github-agent
3
- Version: 2.4.4
3
+ Version: 2.4.6
4
4
  Summary: GitHub Agent for MCP
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -13,7 +13,7 @@ Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
15
  Requires-Dist: requests>=2.34.2
16
- Requires-Dist: agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.13
16
+ Requires-Dist: agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.18
17
17
  Provides-Extra: mcp
18
18
  Provides-Extra: all
19
19
  Provides-Extra: test
@@ -44,7 +44,7 @@ Dynamic: license-file
44
44
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/github-agent)
45
45
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/github-agent)
46
46
 
47
- *Version: 2.4.4*
47
+ *Version: 2.4.6*
48
48
 
49
49
  > **Documentation** — Installation, deployment, and usage across the MCP, API, and
50
50
  > [official documentation](https://knuckles-team.github.io/github-agent/).
@@ -20,7 +20,7 @@
20
20
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/github-agent)
21
21
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/github-agent)
22
22
 
23
- *Version: 2.4.4*
23
+ *Version: 2.4.6*
24
24
 
25
25
  > **Documentation** — Installation, deployment, and usage across the MCP, API, and
26
26
  > [official documentation](https://knuckles-team.github.io/github-agent/).
@@ -0,0 +1 @@
1
+ __version__ = "2.4.6"
@@ -39,7 +39,7 @@ from github_agent.auth import (
39
39
  )
40
40
  from github_agent.github_response_models import PagesAlreadyEnabled, PagesNotEnabled
41
41
 
42
- __version__ = "2.4.4"
42
+ __version__ = "2.4.6"
43
43
  logger = get_logger("GithubMCPServer")
44
44
  logger.setLevel(logging.INFO)
45
45
 
@@ -18,6 +18,7 @@
18
18
  rdfs:comment "A GitHub organization that owns repositories and members (github_orgs)." .
19
19
 
20
20
  :Repository a owl:Class ;
21
+ rdfs:subClassOf :SoftwareProject ;
21
22
  rdfs:label "Repository" ;
22
23
  rdfs:comment "A GitHub repository / codebase (github_repos)." .
23
24
 
@@ -26,6 +27,7 @@
26
27
  rdfs:comment "A proposed change under review, from a head to a base branch (github_pulls)." .
27
28
 
28
29
  :Issue a owl:Class ;
30
+ rdfs:subClassOf :WorkItem ;
29
31
  rdfs:label "Issue" ;
30
32
  rdfs:comment "A tracked work item, bug, or discussion in a repository (github_issues)." .
31
33
 
@@ -46,6 +48,7 @@
46
48
  rdfs:comment "A GitHub Actions CI/CD workflow definition (github_actions)." .
47
49
 
48
50
  :WorkflowRun a owl:Class ;
51
+ rdfs:subClassOf :PipelineRun ;
49
52
  rdfs:label "Workflow Run" ;
50
53
  rdfs:comment "A single execution of a GitHub Actions workflow for a ref/commit (github_actions)." .
51
54
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: github-agent
3
- Version: 2.4.4
3
+ Version: 2.4.6
4
4
  Summary: GitHub Agent for MCP
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -13,7 +13,7 @@ Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
15
  Requires-Dist: requests>=2.34.2
16
- Requires-Dist: agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.13
16
+ Requires-Dist: agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.18
17
17
  Provides-Extra: mcp
18
18
  Provides-Extra: all
19
19
  Provides-Extra: test
@@ -44,7 +44,7 @@ Dynamic: license-file
44
44
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/github-agent)
45
45
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/github-agent)
46
46
 
47
- *Version: 2.4.4*
47
+ *Version: 2.4.6*
48
48
 
49
49
  > **Documentation** — Installation, deployment, and usage across the MCP, API, and
50
50
  > [official documentation](https://knuckles-team.github.io/github-agent/).
@@ -109,6 +109,7 @@ tests/test_api_client_endpoints.py
109
109
  tests/test_api_validation.py
110
110
  tests/test_auth_client_edge_cases.py
111
111
  tests/test_comment_crud.py
112
+ tests/test_default_content_surfaces.py
112
113
  tests/test_fleet_name.py
113
114
  tests/test_github_agent_api_brute_force_coverage.py
114
115
  tests/test_github_agent_brute_force_coverage.py
@@ -120,6 +121,7 @@ tests/test_kg_ingest.py
120
121
  tests/test_mcp_coverage.py
121
122
  tests/test_mcp_package_dispatch.py
122
123
  tests/test_model_fields.py
124
+ tests/test_ontology_parent_link.py
123
125
  tests/test_org_crud.py
124
126
  tests/test_pages.py
125
127
  tests/test_repo_secrets_characterization.py
@@ -1,5 +1,5 @@
1
1
  requests>=2.34.2
2
- agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.13
2
+ agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.18
3
3
 
4
4
  [all]
5
5
 
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "github-agent"
7
- version = "2.4.4"
7
+ version = "2.4.6"
8
8
  readme = "README.md"
9
9
  description = "GitHub Agent for MCP"
10
10
  requires-python = ">=3.12"
11
11
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: Public Domain", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
12
- dependencies = [ "requests>=2.34.2", "agent-connector-sdk[mcp,graphql]>=0.3.13,<1.0.0",]
12
+ dependencies = [ "requests>=2.34.2", "agent-connector-sdk[mcp,graphql]>=0.3.18,<1.0.0",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -0,0 +1,43 @@
1
+ """CONN-GITHUB-AGENT-CONNECTOR-CONTENT-R001: the server lists its packaged skills, ontology and prompts by default."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import importlib
7
+ from pathlib import Path
8
+
9
+ import pytest
10
+ from fastmcp import Client
11
+
12
+ PACKAGE = "github_agent"
13
+ ROOT = Path(list(importlib.import_module(PACKAGE).__path__)[0])
14
+
15
+ pytestmark = pytest.mark.spec("CONN-GITHUB-AGENT-CONNECTOR-CONTENT-R001")
16
+
17
+
18
+ def _server():
19
+ namespace = {"__name__": PACKAGE + ".mcp_server"}
20
+ exec(
21
+ "from agent_connector_sdk.mcp.server import create_mcp_server\n"
22
+ "result = create_mcp_server('github-mcp', version='0', command_args=[])",
23
+ namespace,
24
+ )
25
+ return namespace["result"][1]
26
+
27
+
28
+ async def _listings():
29
+ async with Client(_server()) as client:
30
+ resources = {str(r.uri) for r in await client.list_resources()}
31
+ prompts = {p.name for p in await client.list_prompts()}
32
+ return resources, prompts
33
+
34
+
35
+ def test_default_content_surfaces() -> None:
36
+ resources, prompts = asyncio.run(_listings())
37
+ if list(ROOT.glob("skills/*/SKILL.md")):
38
+ assert any(u.startswith("skill://") for u in resources)
39
+ if list(ROOT.glob("ontology/*.ttl")):
40
+ assert any(u.startswith("ontology://github-mcp/") for u in resources)
41
+ for path in ROOT.glob("prompts/*.json"):
42
+ if not path.name.startswith("_"):
43
+ assert path.stem in prompts
@@ -0,0 +1,114 @@
1
+ """Every class of the packaged ontology reaches an epistemic-graph parent class (CONN-GITHUB-AGENT-CONNECTOR-CONTENT-R002)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+
10
+ pytestmark = pytest.mark.spec("CONN-GITHUB-AGENT-CONNECTOR-CONTENT-R002")
11
+
12
+ PARENT_IRI = "http://knuckles.team/kg"
13
+ ONTOLOGIES = sorted(
14
+ (Path(__file__).resolve().parents[1] / "github_agent" / "ontology").glob("*.ttl")
15
+ )
16
+ OWL = "http://www.w3.org/2002/07/owl#"
17
+ RDF_TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
18
+ SUBCLASS = "http://www.w3.org/2000/01/rdf-schema#subClassOf"
19
+ # Parent classes of the epistemic-graph ontology that this connector links to or redeclares.
20
+ PARENT_CLASSES = frozenset(
21
+ (
22
+ "http://knuckles.team/kg#Commit",
23
+ "http://knuckles.team/kg#Document",
24
+ "http://knuckles.team/kg#Organization",
25
+ "http://knuckles.team/kg#Person",
26
+ "http://knuckles.team/kg#PipelineRun",
27
+ "http://knuckles.team/kg#PullRequest",
28
+ "http://knuckles.team/kg#SoftwareProject",
29
+ "http://knuckles.team/kg#WorkItem",
30
+ "http://knuckles.team/kg#Workflow",
31
+ )
32
+ )
33
+ # Classes for which the parent ontology has no fitting class yet. Each is a candidate for a new
34
+ # parent class (see the orphan mapping report); a class leaves this set when it gains a parent.
35
+ PENDING_NEW_PARENT: frozenset[str] = frozenset(
36
+ (
37
+ "http://knuckles.team/kg#Branch",
38
+ "http://knuckles.team/kg#CheckRun",
39
+ "http://knuckles.team/kg#Release",
40
+ )
41
+ )
42
+
43
+ _STRING = re.compile(r'"""(?:.|\n)*?"""|"(?:[^"\\\n]|\\.)*"')
44
+ _IRI = re.compile(r"<([^<>\s]*)>")
45
+ _PREFIX = re.compile(r"(?im)^\s*@?prefix\s+([A-Za-z][\w.-]*)?:\s+\x00(\d+)\s*\.?")
46
+ _END = re.compile(r"\s\.(?=\s|$)|(?<=[\]>)\w\"'])\.(?=\s|$)")
47
+
48
+
49
+ def _triples(text: str) -> list[tuple[str, str, str]]:
50
+ """Subject, predicate and object of a Turtle file; names are expanded, literals dropped."""
51
+ iris: list[str] = []
52
+
53
+ def keep(match: re.Match[str]) -> str:
54
+ iris.append(match.group(1))
55
+ return f" \x00{len(iris)} "
56
+
57
+ body = re.sub(r"(?m)#[^\n]*$", "", _IRI.sub(keep, _STRING.sub(' "" ', text)))
58
+ prefixes = {
59
+ m.group(1) or "": iris[int(m.group(2)) - 1] for m in _PREFIX.finditer(body)
60
+ }
61
+ body = re.sub(r"\[[^\[\]]*\]", " _:b ", _PREFIX.sub("", body))
62
+
63
+ def expand(token: str) -> str:
64
+ if token.startswith("\x00"):
65
+ return iris[int(token[1:]) - 1]
66
+ prefix, sep, local = token.partition(":")
67
+ return (
68
+ prefixes[prefix] + local
69
+ if sep and prefix in prefixes
70
+ else RDF_TYPE
71
+ if token == "a"
72
+ else token
73
+ )
74
+
75
+ triples: list[tuple[str, str, str]] = []
76
+ for statement in _END.split(body):
77
+ tokens = statement.replace(";", " ; ").replace(",", " , ").split()
78
+ subject, predicate, fresh = "", "", True
79
+ for index, token in enumerate(tokens):
80
+ if index == 0:
81
+ subject = expand(token)
82
+ elif token == ";":
83
+ fresh = True
84
+ elif token != ",":
85
+ if fresh:
86
+ predicate, fresh = expand(token), False
87
+ else:
88
+ triples.append((subject, predicate, expand(token)))
89
+ return triples
90
+
91
+
92
+ def _orphans(triples: list[tuple[str, str, str]]) -> set[str]:
93
+ declared = {s for s, p, o in triples if p == RDF_TYPE and o == OWL + "Class"}
94
+ linked: set[str] = set()
95
+ changed = True
96
+ while changed:
97
+ changed = False
98
+ for cls in declared - linked - PARENT_CLASSES:
99
+ ups = {o for s, p, o in triples if s == cls and p == SUBCLASS}
100
+ if ups & (PARENT_CLASSES | linked):
101
+ linked.add(cls)
102
+ changed = True
103
+ return declared - linked - PARENT_CLASSES
104
+
105
+
106
+ @pytest.mark.parametrize("path", ONTOLOGIES, ids=lambda p: p.name)
107
+ def test_ontology_joins_the_parent_graph(path: Path) -> None:
108
+ triples = _triples(path.read_text(encoding="utf-8"))
109
+ declared = {s for s, p, o in triples if p == RDF_TYPE and o == OWL + "Class"}
110
+ if not declared:
111
+ pytest.skip("declares no classes")
112
+ imports = {o for s, p, o in triples if p == OWL + "imports"}
113
+ assert any(i == PARENT_IRI or i.startswith(PARENT_IRI + "/") for i in imports)
114
+ assert _orphans(triples) == PENDING_NEW_PARENT & declared
@@ -1 +0,0 @@
1
- __version__ = "2.4.4"
File without changes
File without changes