glean-agent-toolkit 0.4.0__tar.gz → 0.6.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 (188) hide show
  1. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.cz.toml +1 -2
  2. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.github/workflows/publish.yml +27 -8
  3. glean_agent_toolkit-0.6.0/CHANGELOG.md +68 -0
  4. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/CONTRIBUTING.md +1 -2
  5. glean_agent_toolkit-0.4.0/README.md → glean_agent_toolkit-0.6.0/PKG-INFO +161 -40
  6. glean_agent_toolkit-0.4.0/PKG-INFO → glean_agent_toolkit-0.6.0/README.md +111 -83
  7. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/docs/prerequisites.md +5 -0
  8. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/pyproject.toml +18 -10
  9. glean_agent_toolkit-0.6.0/skills/glean-agent-toolkit-builder/SKILL.md +406 -0
  10. glean_agent_toolkit-0.6.0/skills/glean-agent-toolkit-guide/SKILL.md +294 -0
  11. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-01.py +4 -4
  12. glean_agent_toolkit-0.6.0/snippets/readme/snippet-03.bash +1 -0
  13. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-04.py +2 -0
  14. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/__init__.py +114 -0
  15. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/adapters/__init__.py +34 -0
  16. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/adapters/adk.py +262 -0
  17. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/adapters/base.py +120 -0
  18. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/adapters/crewai.py +35 -44
  19. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/adapters/langchain.py +170 -0
  20. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/adapters/openai.py +67 -17
  21. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/context.py +149 -0
  22. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/decorators.py +74 -3
  23. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/registry.py +4 -0
  24. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/spec.py +3 -1
  25. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/tools/__init__.py +5 -0
  26. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/tools/_common.py +200 -0
  27. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/tools/_compat.py +70 -0
  28. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/tools/calendar_search.py +21 -10
  29. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/tools/chat.py +106 -0
  30. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/tools/code_search.py +21 -12
  31. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/tools/employee_search.py +21 -18
  32. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/tools/gmail_search.py +21 -9
  33. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/tools/outlook_search.py +21 -9
  34. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/tools/read_document.py +96 -0
  35. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/tools/search.py +117 -0
  36. glean_agent_toolkit-0.6.0/src/glean/agent_toolkit/tools/web_search.py +58 -0
  37. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/conftest.py +21 -5
  38. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/test_adapters.py +17 -4
  39. glean_agent_toolkit-0.6.0/tests/test_adk_invocation.py +153 -0
  40. glean_agent_toolkit-0.6.0/tests/test_async.py +103 -0
  41. glean_agent_toolkit-0.6.0/tests/test_client_lifecycle.py +92 -0
  42. glean_agent_toolkit-0.6.0/tests/test_common.py +183 -0
  43. glean_agent_toolkit-0.6.0/tests/test_crewai_invocation.py +110 -0
  44. glean_agent_toolkit-0.6.0/tests/test_field_types.py +155 -0
  45. glean_agent_toolkit-0.6.0/tests/test_get_tools.py +86 -0
  46. glean_agent_toolkit-0.6.0/tests/test_langchain_invocation.py +101 -0
  47. glean_agent_toolkit-0.6.0/tests/test_openai_invocation.py +160 -0
  48. glean_agent_toolkit-0.6.0/tests/tools/test_api_compat.py +70 -0
  49. glean_agent_toolkit-0.6.0/tests/tools/test_calendar_search.py +61 -0
  50. glean_agent_toolkit-0.6.0/tests/tools/test_chat.py +118 -0
  51. glean_agent_toolkit-0.6.0/tests/tools/test_code_search.py +69 -0
  52. glean_agent_toolkit-0.6.0/tests/tools/test_common.py +131 -0
  53. glean_agent_toolkit-0.6.0/tests/tools/test_employee_search.py +61 -0
  54. glean_agent_toolkit-0.6.0/tests/tools/test_gmail_search.py +79 -0
  55. glean_agent_toolkit-0.6.0/tests/tools/test_outlook_search.py +61 -0
  56. glean_agent_toolkit-0.6.0/tests/tools/test_read_document.py +107 -0
  57. glean_agent_toolkit-0.6.0/tests/tools/test_search.py +103 -0
  58. glean_agent_toolkit-0.6.0/tests/tools/test_web_search.py +61 -0
  59. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/uv.lock +1587 -1471
  60. glean_agent_toolkit-0.4.0/CHANGELOG.md +0 -16
  61. glean_agent_toolkit-0.4.0/snippets/readme/snippet-03.bash +0 -1
  62. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/__init__.py +0 -30
  63. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/adapters/__init__.py +0 -24
  64. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/adapters/adk.py +0 -82
  65. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/adapters/base.py +0 -29
  66. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/adapters/langchain.py +0 -159
  67. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/tools/_common.py +0 -123
  68. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/tools/read_document.py +0 -89
  69. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/tools/search.py +0 -50
  70. glean_agent_toolkit-0.4.0/src/glean/agent_toolkit/tools/web_search.py +0 -58
  71. glean_agent_toolkit-0.4.0/tests/test_common.py +0 -205
  72. glean_agent_toolkit-0.4.0/tests/tools/test_calendar_search.py +0 -69
  73. glean_agent_toolkit-0.4.0/tests/tools/test_code_search.py +0 -64
  74. glean_agent_toolkit-0.4.0/tests/tools/test_employee_search.py +0 -71
  75. glean_agent_toolkit-0.4.0/tests/tools/test_gmail_search.py +0 -66
  76. glean_agent_toolkit-0.4.0/tests/tools/test_outlook_search.py +0 -62
  77. glean_agent_toolkit-0.4.0/tests/tools/test_read_document.py +0 -70
  78. glean_agent_toolkit-0.4.0/tests/tools/test_search.py +0 -29
  79. glean_agent_toolkit-0.4.0/tests/tools/test_web_search.py +0 -69
  80. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.env.template +0 -0
  81. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.github/workflows/ci.yml +0 -0
  82. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.gitignore +0 -0
  83. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.markdown-coderc.json +0 -0
  84. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.pre-commit-config.yaml +0 -0
  85. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/.vscode/settings.json +0 -0
  86. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/AGENTS.md +0 -0
  87. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/CODEOWNERS +0 -0
  88. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/COMMIT_LINTING.md +0 -0
  89. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/LICENSE +0 -0
  90. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/RELEASE.md +0 -0
  91. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/mise.toml +0 -0
  92. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/pyrightconfig.json +0 -0
  93. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-01.bash +0 -0
  94. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-02.bash +0 -0
  95. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-02.py +0 -0
  96. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-03.py +0 -0
  97. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-04.bash +0 -0
  98. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-05.bash +0 -0
  99. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-05.py +0 -0
  100. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-06.bash +0 -0
  101. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-06.py +0 -0
  102. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-07.bash +0 -0
  103. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-07.py +0 -0
  104. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-08.py +0 -0
  105. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-09.py +0 -0
  106. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/snippets/readme/snippet-10.py +0 -0
  107. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/src/glean/agent_toolkit/py.typed +0 -0
  108. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/__init__.py +0 -0
  109. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_api_error.yaml +0 -0
  110. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_complex_query.yaml +0 -0
  111. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_no_results.yaml +0 -0
  112. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_success.yaml +0 -0
  113. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_various_queries[blockchain applications].yaml +0 -0
  114. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_various_queries[cloud computing trends].yaml +0 -0
  115. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_various_queries[cybersecurity best practices].yaml +0 -0
  116. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_various_queries[machine learning frameworks 2025].yaml +0 -0
  117. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_ai_web_search_various_queries[sustainable technology solutions].yaml +0 -0
  118. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_api_error.yaml +0 -0
  119. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_by_attendee.yaml +0 -0
  120. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_by_date_range.yaml +0 -0
  121. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_no_results.yaml +0 -0
  122. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_success.yaml +0 -0
  123. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_various_queries[client demo presentation].yaml +0 -0
  124. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_various_queries[conference room bookings].yaml +0 -0
  125. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_various_queries[one-on-one meetings].yaml +0 -0
  126. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_various_queries[quarterly business review].yaml +0 -0
  127. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_calendar_search_various_queries[sprint planning meeting].yaml +0 -0
  128. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_api_error.yaml +0 -0
  129. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_complex_query.yaml +0 -0
  130. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_empty_query.yaml +0 -0
  131. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_success.yaml +0 -0
  132. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_various_queries[API endpoint security].yaml +0 -0
  133. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_various_queries[class UserManager].yaml +0 -0
  134. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_various_queries[database connection pool].yaml +0 -0
  135. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_various_queries[error handling middleware].yaml +0 -0
  136. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_code_search_various_queries[function login validation].yaml +0 -0
  137. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_api_error.yaml +0 -0
  138. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_by_department.yaml +0 -0
  139. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_by_role.yaml +0 -0
  140. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_no_results.yaml +0 -0
  141. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_success.yaml +0 -0
  142. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_various_queries[Sarah Johnson product manager].yaml +0 -0
  143. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_various_queries[UX designer mobile apps].yaml +0 -0
  144. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_various_queries[data scientist machine learning].yaml +0 -0
  145. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_various_queries[frontend developer React].yaml +0 -0
  146. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_employee_search_various_queries[security engineer DevOps].yaml +0 -0
  147. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_glean_search_api_error.yaml +0 -0
  148. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_glean_search_success.yaml +0 -0
  149. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_api_error.yaml +0 -0
  150. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_no_emails_found.yaml +0 -0
  151. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_success.yaml +0 -0
  152. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_various_queries[invoice from vendor].yaml +0 -0
  153. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_various_queries[meeting invitations].yaml +0 -0
  154. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_various_queries[password reset emails].yaml +0 -0
  155. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_various_queries[security alerts].yaml +0 -0
  156. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_various_queries[urgent emails from manager].yaml +0 -0
  157. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_with_filters[before:2025/01/01].yaml +0 -0
  158. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_with_filters[from:boss@company.com].yaml +0 -0
  159. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_with_filters[has:attachment].yaml +0 -0
  160. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_with_filters[label:important].yaml +0 -0
  161. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_gmail_search_with_filters[subject:urgent].yaml +0 -0
  162. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_api_error.yaml +0 -0
  163. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_calendar_events.yaml +0 -0
  164. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_no_results.yaml +0 -0
  165. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_success.yaml +0 -0
  166. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_various_queries[all-hands meeting].yaml +0 -0
  167. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_various_queries[budget review meeting].yaml +0 -0
  168. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_various_queries[client presentation tomorrow].yaml +0 -0
  169. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_various_queries[project deadline reminder].yaml +0 -0
  170. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_outlook_search_various_queries[team standup calendar].yaml +0 -0
  171. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_search_api_error.yaml +0 -0
  172. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_search_success.yaml +0 -0
  173. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_api_error.yaml +0 -0
  174. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_news_query.yaml +0 -0
  175. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_no_results.yaml +0 -0
  176. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_specific_domain.yaml +0 -0
  177. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_success.yaml +0 -0
  178. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_various_queries[API design patterns].yaml +0 -0
  179. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_various_queries[Docker container deployment].yaml +0 -0
  180. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_various_queries[JavaScript frameworks comparison].yaml +0 -0
  181. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_various_queries[database optimization techniques].yaml +0 -0
  182. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/cassettes/test_web_search_various_queries[mobile app development].yaml +0 -0
  183. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/test_decorators.py +0 -0
  184. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/test_enhanced_schemas.py +0 -0
  185. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/test_registry.py +0 -0
  186. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/test_schema_generation.py +0 -0
  187. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/test_toolspec.py +0 -0
  188. {glean_agent_toolkit-0.4.0 → glean_agent_toolkit-0.6.0}/tests/tools/__init__.py +0 -0
@@ -1,8 +1,7 @@
1
1
  [tool.commitizen]
2
2
  name = "cz_conventional_commits"
3
- version = "0.4.0"
3
+ version = "0.6.0"
4
4
  tag_format = "$version"
5
5
  version_files = [
6
6
  "pyproject.toml:version",
7
- "glean/toolkit/__init__.py:__version__",
8
7
  ]
@@ -3,11 +3,30 @@ name: Publish to PyPI
3
3
  on:
4
4
  push:
5
5
  tags:
6
- - '*.*.*'
6
+ - '[0-9]*.[0-9]*.[0-9]*'
7
7
  workflow_dispatch:
8
8
 
9
9
  jobs:
10
- deploy:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Set up mise
16
+ uses: jdx/mise-action@v2
17
+ with:
18
+ cache: true
19
+ env:
20
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
21
+
22
+ - name: Initialize dev environment
23
+ run: mise run setup
24
+
25
+ - name: Run tests
26
+ run: mise run test
27
+
28
+ build-and-publish:
29
+ needs: test
11
30
  runs-on: ubuntu-latest
12
31
  environment: pypi
13
32
  permissions:
@@ -18,14 +37,14 @@ jobs:
18
37
  - uses: actions/checkout@v4
19
38
  with:
20
39
  fetch-depth: 0 # Needed for changelog generation
21
-
40
+
22
41
  - name: Set up mise
23
42
  uses: jdx/mise-action@v2
24
43
  with:
25
44
  cache: true
26
45
  env:
27
46
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28
-
47
+
29
48
  - name: Build package
30
49
  run: uv build
31
50
 
@@ -34,10 +53,10 @@ jobs:
34
53
  run: |
35
54
  # Get latest tag for both push and manual triggers
36
55
  LATEST_TAG=$(git describe --tags --abbrev=0)
37
-
56
+
38
57
  echo "LATEST_TAG=${LATEST_TAG}" >> $GITHUB_OUTPUT
39
58
  echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
40
-
59
+
41
60
  # Try to get previous tag
42
61
  if PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null); then
43
62
  # If we have a previous tag, show changes between tags
@@ -47,12 +66,12 @@ jobs:
47
66
  uvx --from commitizen cz changelog --dry-run >> $GITHUB_OUTPUT
48
67
  fi
49
68
  echo "EOF" >> $GITHUB_OUTPUT
50
-
69
+
51
70
  - name: Create GitHub Release
52
71
  uses: softprops/action-gh-release@v1
53
72
  with:
54
73
  tag_name: ${{ steps.CHANGELOG.outputs.LATEST_TAG }}
55
74
  body: ${{ steps.CHANGELOG.outputs.CHANGELOG }}
56
-
75
+
57
76
  - name: Publish package to PyPI
58
77
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,68 @@
1
+ ## 0.6.0 (2026-07-19)
2
+
3
+ ### Fix
4
+
5
+ - **crewai**: pass args_schema to BaseTool so the LLM sees real parameters (#73)
6
+ - **adk**: expose real typed signatures so declarations and invocation work (#77)
7
+ - **openai**: sanitize strict schemas and isolate per-tool conversion failures (#76)
8
+ - **adapters**: map anyOf/union and array item types correctly in get_field_type (#75)
9
+ - **langchain**: use StructuredTool so converted tools are invocable (#74)
10
+ - **tools**: stop closing shared Glean client on every tool call (#72)
11
+
12
+ ## 0.5.0 (2026-04-07)
13
+
14
+ ### Feat
15
+
16
+ - add installable skills for SDK usage and tool building (#70)
17
+ - search API alignment, chat tool, deprecation path, get_tools, async support, import docs (#66)
18
+ - injectable GleanContext replaces hidden api_client() global (#62) (#65)
19
+ - **deps**: add [all] extra combining all framework adapters (CHK-001) (#27)
20
+
21
+ ### Fix
22
+
23
+ - correct web search tool name from 'Web Browser' to 'Gemini Web Search' (#71)
24
+ - resolve remaining P2 eval items (CHK-111, CHK-115, CHK-118, CHK-119) (#68)
25
+ - resolve eval checklist items — dedup, dead code, error handling, imports (#67)
26
+ - namespace tool names and optimize descriptions for LLM consumption (#58)
27
+ - structured error results and consistent adapter return types (#55)
28
+ - depend on langchain-core instead of langchain to support LangGraph 1.x (#54)
29
+ - Regenerate lockfile
30
+ - align publish workflow tag trigger with commitizen tag format (#39)
31
+ - use is not None checks in read_document validation (#37)
32
+ - export Registry from top-level package (#36)
33
+ - remove pydantic BaseModel from adapters public API (#35)
34
+ - preserve float values in retry backoff config (CHK-002)
35
+ - **release**: correct broken version_files path in .cz.toml (CHK-006) (#31)
36
+
37
+ ## 0.4.0 (2026-03-05)
38
+
39
+ ### Feat
40
+
41
+ - support GLEAN_SERVER_URL with GLEAN_INSTANCE fallback (#26)
42
+ - **api**: Add retry configuration to API client with environment variable controls (#15)
43
+ - **dev**: adopt mise with full task parity and Node 22; move dev docs to CONTRIBUTING; README links to CONTRIBUTING (#12)
44
+
45
+ ### Fix
46
+
47
+ - **adapters**: correct install hints to use glean-agent-toolkit extras
48
+
49
+ ### Refactor
50
+
51
+ - rename glean_search to search across code, tests, docs, and snippets (#19)
52
+
53
+ ## 0.3.0 (2025-07-21)
54
+
55
+ ### Feat
56
+
57
+ - Add enhanced parameter schemas with Field metadata support
58
+
59
+ ### Fix
60
+
61
+ - Adds newline to .cz.toml
62
+ - Fixes type errors during task:lint
63
+
64
+ ## 0.2.0 (2025-06-05)
65
+
66
+ ### Feat
67
+
68
+ - Implements Agent Builder tools as defaults
@@ -14,8 +14,7 @@ src/
14
14
  │ ├─ registry.py
15
15
  │ ├─ spec.py
16
16
  │ ├─ adapters/
17
- ├─ tools/
18
- │ └─ cli.py
17
+ └─ tools/
19
18
  ├─ tests/
20
19
  └─ docs/
21
20
  ```
@@ -1,3 +1,53 @@
1
+ Metadata-Version: 2.4
2
+ Name: glean-agent-toolkit
3
+ Version: 0.6.0
4
+ Summary: AI Agent toolkit for adapting Glean's enterprise tools across multiple frameworks
5
+ Project-URL: Source Code, https://github.com/gleanwork/glean-agent-toolkit
6
+ Author-email: Steve Calvert <steve.calvert@glean.com>
7
+ License: MIT
8
+ License-File: LICENSE
9
+ Requires-Python: <4.0,>=3.10
10
+ Requires-Dist: glean-api-client<1.0,>=0.6.0
11
+ Requires-Dist: pydantic<3.0,>=2.7
12
+ Provides-Extra: adk
13
+ Requires-Dist: google-adk<2.0,>=1.28.1; extra == 'adk'
14
+ Provides-Extra: all
15
+ Requires-Dist: crewai<1.0,>=0.100; extra == 'all'
16
+ Requires-Dist: google-adk<2.0,>=1.28.1; extra == 'all'
17
+ Requires-Dist: langchain-core<2.0,>=0.3; extra == 'all'
18
+ Requires-Dist: openai-agents<1.0,>=0.3; extra == 'all'
19
+ Requires-Dist: openai<2.0,>=1.0.0; extra == 'all'
20
+ Provides-Extra: codespell
21
+ Requires-Dist: codespell<3.0,>=2.2.6; extra == 'codespell'
22
+ Provides-Extra: crewai
23
+ Requires-Dist: crewai<1.0,>=0.100; extra == 'crewai'
24
+ Provides-Extra: dev
25
+ Requires-Dist: commitizen<5.0,>=4.4.1; extra == 'dev'
26
+ Requires-Dist: pip-audit<3.0,>=2.6.0; extra == 'dev'
27
+ Requires-Dist: pre-commit<4.0,>=3.6.0; extra == 'dev'
28
+ Requires-Dist: vcrpy<7.0,>=6.0.2; extra == 'dev'
29
+ Provides-Extra: langchain
30
+ Requires-Dist: langchain-core<2.0,>=0.3; extra == 'langchain'
31
+ Provides-Extra: lint
32
+ Requires-Dist: ruff<1.0,>=0.5; extra == 'lint'
33
+ Provides-Extra: openai
34
+ Requires-Dist: openai-agents<1.0,>=0.3; extra == 'openai'
35
+ Requires-Dist: openai<2.0,>=1.0.0; extra == 'openai'
36
+ Provides-Extra: test
37
+ Requires-Dist: crewai<1.0,>=0.100; extra == 'test'
38
+ Requires-Dist: google-adk<2.0,>=1.28.1; extra == 'test'
39
+ Requires-Dist: langchain-core<2.0,>=0.3; extra == 'test'
40
+ Requires-Dist: openai-agents<1.0,>=0.3; extra == 'test'
41
+ Requires-Dist: openai<2.0,>=1.0.0; extra == 'test'
42
+ Requires-Dist: pytest-asyncio<1.0,>=0.23.2; extra == 'test'
43
+ Requires-Dist: pytest-cov<6.0,>=4.1.0; extra == 'test'
44
+ Requires-Dist: pytest-httpx<1.0,>=0.35.0; extra == 'test'
45
+ Requires-Dist: pytest<9.0,>=7.4.3; extra == 'test'
46
+ Requires-Dist: vcrpy<7.0,>=6.0.2; extra == 'test'
47
+ Provides-Extra: typing
48
+ Requires-Dist: pyright<2.0,>=1.1.370; extra == 'typing'
49
+ Description-Content-Type: text/markdown
50
+
1
51
  # Glean Agent Toolkit
2
52
 
3
53
  The Glean Agent Toolkit makes it easy to integrate Glean's powerful search and knowledge discovery capabilities into your AI agents. Use our pre-built tools with popular agent frameworks like OpenAI Assistants, LangChain, CrewAI, and Google's Agent Development Kit (ADK), or adapt your own custom tools for cross-framework use.
@@ -16,13 +66,12 @@ The Glean Agent Toolkit makes it easy to integrate Glean's powerful search and k
16
66
 
17
67
  ### Retry configuration (env vars)
18
68
 
19
- | Variable | Default | Description | Example |
20
- | --------------------------- | ------- | ------------------------------ | ------- |
21
- | `GLEAN_RETRY_INITIAL` | `1.0` | Initial backoff in seconds | `0.5` |
22
- | `GLEAN_RETRY_MAX` | `50.0` | Maximum backoff in seconds | `8` |
23
- | `GLEAN_RETRY_MULTIPLIER` | `1.1` | Exponential backoff multiplier | `2.0` |
24
- | `GLEAN_RETRY_JITTER_MS` | `100` | Random jitter in milliseconds | `250` |
25
- | `GLEAN_RETRY_ON_RATE_LIMIT` | `true` | Retry on HTTP 429 rate limits | `true` |
69
+ | Variable | Default | Description | Example |
70
+ | ------------------------- | ------- | -------------------------------------------------------- | ------- |
71
+ | `GLEAN_RETRY_INITIAL` | `1.0` | Initial backoff interval in seconds | `0.5` |
72
+ | `GLEAN_RETRY_MAX` | `50.0` | Maximum backoff interval in seconds | `8` |
73
+ | `GLEAN_RETRY_MULTIPLIER` | `1.1` | Backoff multiplier/exponent | `2.0` |
74
+ | `GLEAN_RETRY_MAX_ELAPSED` | `60.0` | Total time limit in seconds before giving up on retries | `30.0` |
26
75
 
27
76
  Retries cover transient failures such as HTTP 429/5xx and connection timeouts. Set these before constructing any Glean client usage.
28
77
 
@@ -31,19 +80,32 @@ Retries cover transient failures such as HTTP 429/5xx and connection timeouts. S
31
80
  export GLEAN_RETRY_INITIAL=0.5
32
81
  export GLEAN_RETRY_MAX=8
33
82
  export GLEAN_RETRY_MULTIPLIER=2.0
34
- export GLEAN_RETRY_JITTER_MS=250
35
- export GLEAN_RETRY_ON_RATE_LIMIT=true
83
+ export GLEAN_RETRY_MAX_ELAPSED=30.0
36
84
  ```
37
85
 
38
86
  ## Installation
39
87
 
40
- Install the base toolkit:
88
+ Install with all framework adapters (recommended):
89
+
90
+ ```bash snippet=readme/snippet-03.bash
91
+ pip install "glean-agent-toolkit[all]"
92
+ ```
93
+
94
+ Or install the base toolkit and add extras as needed:
41
95
 
42
96
  ```bash snippet=readme/snippet-01.bash
43
97
  pip install glean-agent-toolkit
44
98
  ```
45
99
 
46
- To include support for specific agent frameworks, install the relevant extras:
100
+ ### Extras reference
101
+
102
+ | Extra | Installs | Use case |
103
+ | ------------ | ----------------------------- | -------------------------------- |
104
+ | `[openai]` | `openai`, `openai-agents` | OpenAI Agents SDK / Assistants |
105
+ | `[langchain]`| `langchain-core` | LangChain / LangGraph agents |
106
+ | `[crewai]` | `crewai` | CrewAI multi-agent workflows |
107
+ | `[adk]` | `google-adk` | Google Agent Development Kit |
108
+ | `[all]` | All of the above | Full framework support |
47
109
 
48
110
  ```bash snippet=readme/snippet-02.bash
49
111
  pip install glean-agent-toolkit[openai]
@@ -52,12 +114,6 @@ pip install glean-agent-toolkit[langchain]
52
114
  pip install glean-agent-toolkit[crewai]
53
115
  ```
54
116
 
55
- You can also install all extras:
56
-
57
- ```bash snippet=readme/snippet-03.bash
58
- pip install glean-agent-toolkit[all]
59
- ```
60
-
61
117
  Note: The `[openai]` extra installs the standard `openai` Python library, used for direct API interactions like Chat Completions or the Assistants API. The example below for the "OpenAI Agents SDK" uses a separate library, `openai-agents`, which you'll need to install independently: `pip install openai-agents`.
62
118
 
63
119
  ## Prerequisites
@@ -82,9 +138,9 @@ Here's a complete example that demonstrates the power of the Glean Agent Toolkit
82
138
 
83
139
  First, create the project structure:
84
140
 
85
- ```bash snippet=readme/snippet-04.bash
86
- export GLEAN_API_TOKEN="your-api-token"
87
- export GLEAN_SERVER_URL="https://your-company-be.glean.com"
141
+ ```bash snippet=readme/snippet-06.bash
142
+ mkdir company_assistant/
143
+ cd company_assistant/
88
144
  ```
89
145
 
90
146
  ### Step 2: Create the Agent File
@@ -124,10 +180,10 @@ root_agent = Agent(
124
180
  instruction="""You are a helpful company assistant that helps employees find information,
125
181
  people, and resources within the organization. You have access to:
126
182
 
127
- - Company knowledge base and documents (use search)
128
- - Employee directory and contact information (use employee_search)
129
- - Calendar and meeting information (use calendar_search)
130
- - Email search capabilities (use gmail_search)
183
+ - Company knowledge base and documents (use glean_search)
184
+ - Employee directory and contact information (use glean_employee_search)
185
+ - Calendar and meeting information (use glean_calendar_search)
186
+ - Email search capabilities (use glean_gmail_search)
131
187
 
132
188
  Always be helpful, professional, and respect privacy. When searching for people,
133
189
  only share appropriate business contact information.""",
@@ -147,18 +203,26 @@ from . import agent
147
203
 
148
204
  Create `company_assistant/.env` with your credentials:
149
205
 
150
- ```bash snippet=readme/snippet-05.bash
151
- export GLEAN_API_TOKEN="your-api-token"
152
- export GLEAN_SERVER_URL="https://your-company-be.glean.com"
206
+ ```bash snippet=readme/snippet-07.bash
207
+ # company_assistant/.env
208
+
209
+ # Authentication for Google ADK (choose one)
210
+ GOOGLE_API_KEY=your-google-ai-studio-api-key
211
+ # OR for Vertex AI:
212
+ # GOOGLE_CLOUD_PROJECT=your-project-id
213
+ # GOOGLE_CLOUD_LOCATION=us-central1
214
+
215
+ # Glean credentials
216
+ GLEAN_API_TOKEN=your-glean-api-token
217
+ GLEAN_SERVER_URL=https://your-company-be.glean.com
153
218
  ```
154
219
 
155
220
  ### Step 5: Run Your Agent
156
221
 
157
222
  From the parent directory (outside `company_assistant/`), run your Company Assistant:
158
223
 
159
- ```bash snippet=readme/snippet-06.bash
160
- mkdir company_assistant/
161
- cd company_assistant/
224
+ ```bash
225
+ adk web
162
226
  ```
163
227
 
164
228
  ### Real-World Queries You Can Handle
@@ -176,17 +240,46 @@ This type of assistant can dramatically improve employee productivity by making
176
240
 
177
241
  ## Available Tools
178
242
 
179
- The toolkit comes with a suite of production-ready tools that connect to various Glean functionalities:
243
+ | Tool name | Import name | Description |
244
+ | ------------------------ | ------------------- | ---------------------------------------------- |
245
+ | `glean_search` | `search` | Search internal documents and knowledge bases |
246
+ | `glean_chat` | `glean_chat` | Conversational Q&A with Glean Assistant |
247
+ | `glean_read_document` | `read_document` | Read full document content by ID or URL |
248
+ | `glean_web_search` | `web_search` | Search the public web for external information |
249
+ | `glean_calendar_search` | `calendar_search` | Find meetings and calendar events |
250
+ | `glean_employee_search` | `employee_search` | Search employees by name, team, or department |
251
+ | `glean_code_search` | `code_search` | Search source code repositories |
252
+ | `glean_gmail_search` | `gmail_search` | Search Gmail messages and conversations |
253
+ | `glean_outlook_search` | `outlook_search` | Search Outlook mail and calendar items |
254
+
255
+ ### Explicit imports
256
+
257
+ ```python
258
+ from glean.agent_toolkit.tools import search, glean_chat, read_document
259
+ from glean.agent_toolkit.tools import web_search, calendar_search
260
+ from glean.agent_toolkit.tools import employee_search, code_search
261
+ from glean.agent_toolkit.tools import gmail_search, outlook_search
262
+ ```
263
+
264
+ ### Adapter methods
265
+
266
+ Each tool function exposes adapter methods for framework conversion:
267
+
268
+ | Method | Returns | Framework |
269
+ | --------------------- | -------------------------------- | ------------------- |
270
+ | `.as_openai_tool()` | `FunctionTool` or `dict` | OpenAI Agents SDK |
271
+ | `.as_langchain_tool()` | `langchain_core.tools.Tool` | LangChain / LangGraph |
272
+ | `.as_crewai_tool()` | `CrewAI BaseTool` | CrewAI |
273
+ | `.as_adk_tool()` | `google.adk FunctionTool` | Google ADK |
274
+
275
+ You can also use `get_tools()` to get all tools adapted for a framework at once:
180
276
 
181
- - `search`: Search your company's knowledge base for relevant documents and information
182
- - **`read_document`**: Read full content of a specific document by ID or URL (requires
183
- config settings `queryapi.getDocuments.enabled` and `queryapi.getDocuments.content.enabled`)
184
- - **`web_search`**: Search the public web for up-to-date external information
185
- - `calendar_search`: Find meetings and calendar events
186
- - `employee_search`: Search for employees by name, team, department, or expertise
187
- - `code_search`: Search your company's source code repositories
188
- - `gmail_search`: Search Gmail messages and conversations
189
- - `outlook_search`: Search Outlook mail and calendar items
277
+ ```python
278
+ from glean.agent_toolkit import get_tools
279
+
280
+ langchain_tools = get_tools("langchain")
281
+ openai_tools = get_tools("openai", include=["glean_search", "glean_chat"])
282
+ ```
190
283
 
191
284
  ### Web Research with Context
192
285
 
@@ -238,6 +331,8 @@ print(f"Search results: {result.final_output}")
238
331
  ```python snippet=readme/snippet-04.py
239
332
  import os
240
333
 
334
+ # NOTE: AgentExecutor requires the full `langchain` package (not just langchain-core).
335
+ # Install with: pip install langchain
241
336
  from langchain.agents import AgentExecutor, create_react_agent
242
337
  from langchain_core.prompts import ChatPromptTemplate
243
338
  from langchain_openai import ChatOpenAI
@@ -412,6 +507,32 @@ langchain_weather = get_weather.as_langchain_tool()
412
507
  crewai_weather = get_weather.as_crewai_tool()
413
508
  ```
414
509
 
510
+ ## Agent Skills
511
+
512
+ The `skills/` directory contains [Agent Skills](https://agentskills.io) — structured instructions that teach AI coding agents how to use the Glean Agent Toolkit effectively. Skills are supported by Claude Code, Cursor, GitHub Copilot, VS Code, Gemini CLI, OpenAI Codex, Goose, Amp, Roo Code, Junie, and [many others](https://agentskills.io).
513
+
514
+ ### Install
515
+
516
+ Use [`npx skills`](https://github.com/agentskills/agentskills) to install into your agent:
517
+
518
+ ```bash
519
+ # Install all skills at once
520
+ npx skills add https://github.com/gleanwork/glean-agent-toolkit
521
+ ```
522
+
523
+ ```bash
524
+ # Or install individual skills
525
+ npx skills add https://github.com/gleanwork/glean-agent-toolkit/tree/main/skills/glean-agent-toolkit-guide
526
+ npx skills add https://github.com/gleanwork/glean-agent-toolkit/tree/main/skills/glean-agent-toolkit-builder
527
+ ```
528
+
529
+ ### Available Skills
530
+
531
+ | Skill | Description |
532
+ | --- | --- |
533
+ | `glean-agent-toolkit-guide` | How to use the SDK: `get_tools()`, `GleanContext`, adapters, error handling, async |
534
+ | `glean-agent-toolkit-builder` | How to create custom tools with `@tool_spec` |
535
+
415
536
  ## Contributing
416
537
 
417
538
  Interested in contributing? Check out our [Contributing Guide](CONTRIBUTING.md) for instructions on setting up the development environment and submitting changes.