honeycomb-api 0.1.0__py3-none-any.whl

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 (453) hide show
  1. honeycomb/__init__.py +217 -0
  2. honeycomb/_generated/__init__.py +8 -0
  3. honeycomb/_generated/api/__init__.py +1 -0
  4. honeycomb/_generated/api/auth/__init__.py +0 -0
  5. honeycomb/_generated/api/auth/get_auth.py +172 -0
  6. honeycomb/_generated/api/auth/get_v2_auth.py +168 -0
  7. honeycomb/_generated/api/boards/__init__.py +0 -0
  8. honeycomb/_generated/api/boards/create_board.py +217 -0
  9. honeycomb/_generated/api/boards/create_board_view.py +237 -0
  10. honeycomb/_generated/api/boards/delete_board.py +191 -0
  11. honeycomb/_generated/api/boards/delete_board_view.py +210 -0
  12. honeycomb/_generated/api/boards/get_board.py +208 -0
  13. honeycomb/_generated/api/boards/get_board_view.py +214 -0
  14. honeycomb/_generated/api/boards/list_board_views.py +206 -0
  15. honeycomb/_generated/api/boards/list_boards.py +177 -0
  16. honeycomb/_generated/api/boards/update_board.py +238 -0
  17. honeycomb/_generated/api/boards/update_board_view.py +250 -0
  18. honeycomb/_generated/api/burn_alerts/__init__.py +0 -0
  19. honeycomb/_generated/api/burn_alerts/create_burn_alert.py +224 -0
  20. honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +204 -0
  21. honeycomb/_generated/api/burn_alerts/get_burn_alert.py +208 -0
  22. honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +220 -0
  23. honeycomb/_generated/api/calculated_fields/__init__.py +0 -0
  24. honeycomb/_generated/api/calculated_fields/create_calculated_field.py +239 -0
  25. honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +225 -0
  26. honeycomb/_generated/api/calculated_fields/get_calculated_field.py +207 -0
  27. honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +252 -0
  28. honeycomb/_generated/api/calculated_fields/update_calculated_field.py +242 -0
  29. honeycomb/_generated/api/columns/__init__.py +0 -0
  30. honeycomb/_generated/api/columns/create_column.py +241 -0
  31. honeycomb/_generated/api/columns/delete_column.py +221 -0
  32. honeycomb/_generated/api/columns/get_column.py +206 -0
  33. honeycomb/_generated/api/columns/list_columns.py +256 -0
  34. honeycomb/_generated/api/columns/update_column.py +242 -0
  35. honeycomb/_generated/api/dataset_definitions/__init__.py +0 -0
  36. honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +193 -0
  37. honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +235 -0
  38. honeycomb/_generated/api/datasets/__init__.py +0 -0
  39. honeycomb/_generated/api/datasets/create_dataset.py +227 -0
  40. honeycomb/_generated/api/datasets/delete_dataset.py +251 -0
  41. honeycomb/_generated/api/datasets/get_dataset.py +195 -0
  42. honeycomb/_generated/api/datasets/list_datasets.py +177 -0
  43. honeycomb/_generated/api/datasets/update_dataset.py +217 -0
  44. honeycomb/_generated/api/enhance/__init__.py +0 -0
  45. honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +231 -0
  46. honeycomb/_generated/api/environments/__init__.py +0 -0
  47. honeycomb/_generated/api/environments/create_environment.py +247 -0
  48. honeycomb/_generated/api/environments/delete_environment.py +245 -0
  49. honeycomb/_generated/api/environments/get_environment.py +213 -0
  50. honeycomb/_generated/api/environments/list_environments.py +245 -0
  51. honeycomb/_generated/api/environments/update_environment.py +254 -0
  52. honeycomb/_generated/api/events/__init__.py +0 -0
  53. honeycomb/_generated/api/events/create_event.py +269 -0
  54. honeycomb/_generated/api/events/create_events.py +314 -0
  55. honeycomb/_generated/api/key_management/__init__.py +0 -0
  56. honeycomb/_generated/api/key_management/create_api_key.py +286 -0
  57. honeycomb/_generated/api/key_management/delete_api_key.py +223 -0
  58. honeycomb/_generated/api/key_management/get_api_key.py +225 -0
  59. honeycomb/_generated/api/key_management/list_api_keys.py +281 -0
  60. honeycomb/_generated/api/key_management/update_api_key.py +270 -0
  61. honeycomb/_generated/api/kinesis_events/__init__.py +0 -0
  62. honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +220 -0
  63. honeycomb/_generated/api/marker_settings/__init__.py +0 -0
  64. honeycomb/_generated/api/marker_settings/create_marker_setting.py +209 -0
  65. honeycomb/_generated/api/marker_settings/delete_marker_settings.py +194 -0
  66. honeycomb/_generated/api/marker_settings/list_marker_settings.py +186 -0
  67. honeycomb/_generated/api/marker_settings/update_marker_settings.py +230 -0
  68. honeycomb/_generated/api/markers/__init__.py +0 -0
  69. honeycomb/_generated/api/markers/create_marker.py +220 -0
  70. honeycomb/_generated/api/markers/create_marker_v2.py +253 -0
  71. honeycomb/_generated/api/markers/delete_marker.py +200 -0
  72. honeycomb/_generated/api/markers/get_marker.py +194 -0
  73. honeycomb/_generated/api/markers/update_marker.py +233 -0
  74. honeycomb/_generated/api/markers/update_marker_v2.py +262 -0
  75. honeycomb/_generated/api/pipelines/__init__.py +0 -0
  76. honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +306 -0
  77. honeycomb/_generated/api/pipelines/record_pipeline_usage.py +244 -0
  78. honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +261 -0
  79. honeycomb/_generated/api/queries/__init__.py +0 -0
  80. honeycomb/_generated/api/queries/create_query.py +224 -0
  81. honeycomb/_generated/api/queries/get_query.py +208 -0
  82. honeycomb/_generated/api/query_annotations/__init__.py +0 -0
  83. honeycomb/_generated/api/query_annotations/create_query_annotation.py +226 -0
  84. honeycomb/_generated/api/query_annotations/delete_query_annotation.py +198 -0
  85. honeycomb/_generated/api/query_annotations/get_query_annotation.py +202 -0
  86. honeycomb/_generated/api/query_annotations/list_query_annotations.py +217 -0
  87. honeycomb/_generated/api/query_annotations/update_query_annotation.py +237 -0
  88. honeycomb/_generated/api/query_data/__init__.py +0 -0
  89. honeycomb/_generated/api/query_data/create_query_result.py +247 -0
  90. honeycomb/_generated/api/query_data/get_query_result.py +208 -0
  91. honeycomb/_generated/api/recipients/__init__.py +0 -0
  92. honeycomb/_generated/api/recipients/create_recipient.py +317 -0
  93. honeycomb/_generated/api/recipients/delete_recipient.py +199 -0
  94. honeycomb/_generated/api/recipients/get_recipient.py +252 -0
  95. honeycomb/_generated/api/recipients/list_recipients.py +230 -0
  96. honeycomb/_generated/api/recipients/update_recipient.py +323 -0
  97. honeycomb/_generated/api/reporting/__init__.py +0 -0
  98. honeycomb/_generated/api/reporting/get_slo_history.py +218 -0
  99. honeycomb/_generated/api/service_maps/__init__.py +0 -0
  100. honeycomb/_generated/api/service_maps/create_map_dependency_request.py +252 -0
  101. honeycomb/_generated/api/service_maps/get_map_dependencies.py +265 -0
  102. honeycomb/_generated/api/sl_os/__init__.py +0 -0
  103. honeycomb/_generated/api/sl_os/create_slo.py +229 -0
  104. honeycomb/_generated/api/sl_os/delete_slo.py +210 -0
  105. honeycomb/_generated/api/sl_os/get_slo.py +256 -0
  106. honeycomb/_generated/api/sl_os/list_slos.py +210 -0
  107. honeycomb/_generated/api/sl_os/update_slo.py +242 -0
  108. honeycomb/_generated/api/triggers/__init__.py +0 -0
  109. honeycomb/_generated/api/triggers/create_trigger.py +250 -0
  110. honeycomb/_generated/api/triggers/delete_trigger.py +204 -0
  111. honeycomb/_generated/api/triggers/get_trigger.py +214 -0
  112. honeycomb/_generated/api/triggers/list_triggers.py +206 -0
  113. honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +208 -0
  114. honeycomb/_generated/api/triggers/update_trigger.py +248 -0
  115. honeycomb/_generated/client.py +271 -0
  116. honeycomb/_generated/errors.py +14 -0
  117. honeycomb/_generated/models/__init__.py +561 -0
  118. honeycomb/_generated/models/api_key_create_request.py +78 -0
  119. honeycomb/_generated/models/api_key_create_request_data.py +130 -0
  120. honeycomb/_generated/models/api_key_create_request_data_relationships.py +78 -0
  121. honeycomb/_generated/models/api_key_create_request_data_type.py +7 -0
  122. honeycomb/_generated/models/api_key_list_response.py +112 -0
  123. honeycomb/_generated/models/api_key_object.py +189 -0
  124. honeycomb/_generated/models/api_key_object_links.py +74 -0
  125. honeycomb/_generated/models/api_key_object_relationships.py +150 -0
  126. honeycomb/_generated/models/api_key_object_type.py +7 -0
  127. honeycomb/_generated/models/api_key_response.py +78 -0
  128. honeycomb/_generated/models/api_key_update_request.py +104 -0
  129. honeycomb/_generated/models/auth.py +140 -0
  130. honeycomb/_generated/models/auth_api_key_access.py +154 -0
  131. honeycomb/_generated/models/auth_environment.py +82 -0
  132. honeycomb/_generated/models/auth_team.py +82 -0
  133. honeycomb/_generated/models/auth_type.py +8 -0
  134. honeycomb/_generated/models/auth_v2_response.py +108 -0
  135. honeycomb/_generated/models/auth_v2_response_data.py +122 -0
  136. honeycomb/_generated/models/auth_v2_response_data_attributes.py +141 -0
  137. honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +7 -0
  138. honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +107 -0
  139. honeycomb/_generated/models/auth_v2_response_data_relationships.py +59 -0
  140. honeycomb/_generated/models/auth_v2_response_data_type.py +7 -0
  141. honeycomb/_generated/models/base_trigger.py +367 -0
  142. honeycomb/_generated/models/base_trigger_alert_type.py +8 -0
  143. honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +92 -0
  144. honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +10 -0
  145. honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +8 -0
  146. honeycomb/_generated/models/base_trigger_evaluation_schedule.py +83 -0
  147. honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +8 -0
  148. honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +103 -0
  149. honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +13 -0
  150. honeycomb/_generated/models/base_trigger_threshold.py +95 -0
  151. honeycomb/_generated/models/base_trigger_threshold_op.py +10 -0
  152. honeycomb/_generated/models/batch_event.py +110 -0
  153. honeycomb/_generated/models/board.py +276 -0
  154. honeycomb/_generated/models/board_layout_generation.py +8 -0
  155. honeycomb/_generated/models/board_links.py +74 -0
  156. honeycomb/_generated/models/board_panel_position.py +104 -0
  157. honeycomb/_generated/models/board_query_visualization_settings.py +141 -0
  158. honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +113 -0
  159. honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +13 -0
  160. honeycomb/_generated/models/board_type.py +7 -0
  161. honeycomb/_generated/models/board_view_filter.py +93 -0
  162. honeycomb/_generated/models/board_view_filter_operation.py +22 -0
  163. honeycomb/_generated/models/board_view_response.py +111 -0
  164. honeycomb/_generated/models/budget_rate.py +189 -0
  165. honeycomb/_generated/models/budget_rate_alert_type.py +8 -0
  166. honeycomb/_generated/models/burn_alert_shared_params.py +136 -0
  167. honeycomb/_generated/models/calculated_field.py +117 -0
  168. honeycomb/_generated/models/configuration_key_attributes.py +140 -0
  169. honeycomb/_generated/models/configuration_key_attributes_key_type.py +7 -0
  170. honeycomb/_generated/models/configuration_key_attributes_timestamps.py +107 -0
  171. honeycomb/_generated/models/create_board_view_request.py +96 -0
  172. honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +232 -0
  173. honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +74 -0
  174. honeycomb/_generated/models/create_column.py +149 -0
  175. honeycomb/_generated/models/create_column_type.py +11 -0
  176. honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +78 -0
  177. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +90 -0
  178. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +97 -0
  179. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +88 -0
  180. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
  181. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
  182. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
  183. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
  184. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -0
  185. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +105 -0
  186. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +87 -0
  187. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +73 -0
  188. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +7 -0
  189. honeycomb/_generated/models/create_environment_request.py +78 -0
  190. honeycomb/_generated/models/create_environment_request_data.py +90 -0
  191. honeycomb/_generated/models/create_environment_request_data_attributes.py +102 -0
  192. honeycomb/_generated/models/create_environment_request_data_type.py +7 -0
  193. honeycomb/_generated/models/create_events_content_encoding.py +8 -0
  194. honeycomb/_generated/models/create_events_response_200_item.py +82 -0
  195. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +217 -0
  196. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +74 -0
  197. honeycomb/_generated/models/create_map_dependencies_request.py +128 -0
  198. honeycomb/_generated/models/create_map_dependencies_response.py +97 -0
  199. honeycomb/_generated/models/create_map_dependencies_response_status.py +9 -0
  200. honeycomb/_generated/models/create_pipeline_health_record_request.py +78 -0
  201. honeycomb/_generated/models/create_pipeline_health_record_request_data.py +98 -0
  202. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +88 -0
  203. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +88 -0
  204. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
  205. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
  206. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
  207. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
  208. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -0
  209. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +105 -0
  210. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +87 -0
  211. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +73 -0
  212. honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +7 -0
  213. honeycomb/_generated/models/create_query_result_request.py +118 -0
  214. honeycomb/_generated/models/dataset.py +183 -0
  215. honeycomb/_generated/models/dataset_creation_payload.py +93 -0
  216. honeycomb/_generated/models/dataset_definition_type_1.py +96 -0
  217. honeycomb/_generated/models/dataset_definition_type_1_column_type.py +8 -0
  218. honeycomb/_generated/models/dataset_definitions.py +599 -0
  219. honeycomb/_generated/models/dataset_relationship.py +79 -0
  220. honeycomb/_generated/models/dataset_relationship_data.py +82 -0
  221. honeycomb/_generated/models/dataset_relationship_data_type.py +7 -0
  222. honeycomb/_generated/models/dataset_settings.py +73 -0
  223. honeycomb/_generated/models/dataset_update_payload.py +105 -0
  224. honeycomb/_generated/models/dataset_update_payload_settings.py +73 -0
  225. honeycomb/_generated/models/detailed_error.py +115 -0
  226. honeycomb/_generated/models/email_recipient.py +160 -0
  227. honeycomb/_generated/models/email_recipient_details.py +71 -0
  228. honeycomb/_generated/models/email_recipient_type.py +7 -0
  229. honeycomb/_generated/models/environment.py +112 -0
  230. honeycomb/_generated/models/environment_attributes.py +140 -0
  231. honeycomb/_generated/models/environment_attributes_color_type_1.py +7 -0
  232. honeycomb/_generated/models/environment_attributes_settings.py +70 -0
  233. honeycomb/_generated/models/environment_color.py +16 -0
  234. honeycomb/_generated/models/environment_links.py +70 -0
  235. honeycomb/_generated/models/environment_list_response.py +112 -0
  236. honeycomb/_generated/models/environment_relationship.py +79 -0
  237. honeycomb/_generated/models/environment_relationship_data.py +82 -0
  238. honeycomb/_generated/models/environment_relationship_data_type.py +7 -0
  239. honeycomb/_generated/models/environment_response.py +78 -0
  240. honeycomb/_generated/models/environment_type.py +7 -0
  241. honeycomb/_generated/models/error.py +74 -0
  242. honeycomb/_generated/models/event.py +71 -0
  243. honeycomb/_generated/models/exhaustion_time.py +174 -0
  244. honeycomb/_generated/models/exhaustion_time_alert_type.py +8 -0
  245. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +198 -0
  246. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +77 -0
  247. honeycomb/_generated/models/filter_op.py +22 -0
  248. honeycomb/_generated/models/get_map_dependencies_response.py +169 -0
  249. honeycomb/_generated/models/get_map_dependencies_response_status.py +9 -0
  250. honeycomb/_generated/models/having_calculate_op.py +29 -0
  251. honeycomb/_generated/models/having_op.py +12 -0
  252. honeycomb/_generated/models/included_resource.py +106 -0
  253. honeycomb/_generated/models/included_resource_attributes.py +62 -0
  254. honeycomb/_generated/models/ingest_key_attributes.py +153 -0
  255. honeycomb/_generated/models/ingest_key_attributes_key_type.py +7 -0
  256. honeycomb/_generated/models/ingest_key_attributes_permissions.py +74 -0
  257. honeycomb/_generated/models/ingest_key_attributes_timestamps.py +107 -0
  258. honeycomb/_generated/models/ingest_key_type.py +90 -0
  259. honeycomb/_generated/models/ingest_key_type_key_type.py +7 -0
  260. honeycomb/_generated/models/jsonapi_error_source.py +92 -0
  261. honeycomb/_generated/models/kinesis_event.py +111 -0
  262. honeycomb/_generated/models/kinesis_event_record.py +73 -0
  263. honeycomb/_generated/models/kinesis_response.py +91 -0
  264. honeycomb/_generated/models/list_api_keys_filtertype.py +8 -0
  265. honeycomb/_generated/models/map_dependency.py +118 -0
  266. honeycomb/_generated/models/map_node.py +97 -0
  267. honeycomb/_generated/models/map_node_type.py +7 -0
  268. honeycomb/_generated/models/marker.py +151 -0
  269. honeycomb/_generated/models/marker_create_request.py +78 -0
  270. honeycomb/_generated/models/marker_create_request_data.py +104 -0
  271. honeycomb/_generated/models/marker_create_request_data_attributes.py +110 -0
  272. honeycomb/_generated/models/marker_create_request_data_relationships.py +92 -0
  273. honeycomb/_generated/models/marker_create_request_data_type.py +7 -0
  274. honeycomb/_generated/models/marker_object.py +136 -0
  275. honeycomb/_generated/models/marker_object_attributes.py +146 -0
  276. honeycomb/_generated/models/marker_object_attributes_timestamps.py +107 -0
  277. honeycomb/_generated/models/marker_object_links.py +74 -0
  278. honeycomb/_generated/models/marker_object_relationships.py +111 -0
  279. honeycomb/_generated/models/marker_object_relationships_dataset.py +104 -0
  280. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +94 -0
  281. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +7 -0
  282. honeycomb/_generated/models/marker_object_type.py +7 -0
  283. honeycomb/_generated/models/marker_response.py +78 -0
  284. honeycomb/_generated/models/marker_setting.py +125 -0
  285. honeycomb/_generated/models/marker_update_request.py +78 -0
  286. honeycomb/_generated/models/marker_update_request_data.py +104 -0
  287. honeycomb/_generated/models/marker_update_request_data_attributes.py +111 -0
  288. honeycomb/_generated/models/marker_update_request_data_relationships.py +92 -0
  289. honeycomb/_generated/models/marker_update_request_data_type.py +7 -0
  290. honeycomb/_generated/models/ms_teams_recipient.py +161 -0
  291. honeycomb/_generated/models/ms_teams_recipient_details.py +80 -0
  292. honeycomb/_generated/models/ms_teams_recipient_type.py +7 -0
  293. honeycomb/_generated/models/ms_teams_workflow_recipient.py +161 -0
  294. honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +80 -0
  295. honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +7 -0
  296. honeycomb/_generated/models/notification_recipient.py +131 -0
  297. honeycomb/_generated/models/notification_recipient_details.py +117 -0
  298. honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +10 -0
  299. honeycomb/_generated/models/notification_recipient_details_variables_item.py +81 -0
  300. honeycomb/_generated/models/pager_duty_recipient.py +160 -0
  301. honeycomb/_generated/models/pager_duty_recipient_details.py +79 -0
  302. honeycomb/_generated/models/pager_duty_recipient_type.py +7 -0
  303. honeycomb/_generated/models/pagination_links.py +80 -0
  304. honeycomb/_generated/models/payload_template.py +73 -0
  305. honeycomb/_generated/models/pipeline_configuration_response.py +112 -0
  306. honeycomb/_generated/models/pipeline_configuration_response_attributes.py +101 -0
  307. honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +85 -0
  308. honeycomb/_generated/models/pipeline_configuration_response_links.py +73 -0
  309. honeycomb/_generated/models/pipeline_configuration_response_type.py +7 -0
  310. honeycomb/_generated/models/pipeline_configuration_rollout.py +112 -0
  311. honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +75 -0
  312. honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +12 -0
  313. honeycomb/_generated/models/pipeline_configuration_rollout_links.py +73 -0
  314. honeycomb/_generated/models/pipeline_configuration_rollout_type.py +7 -0
  315. honeycomb/_generated/models/preset_filter.py +78 -0
  316. honeycomb/_generated/models/query.py +346 -0
  317. honeycomb/_generated/models/query_annotation.py +166 -0
  318. honeycomb/_generated/models/query_annotation_source.py +8 -0
  319. honeycomb/_generated/models/query_calculated_fields_item.py +80 -0
  320. honeycomb/_generated/models/query_calculations_item.py +98 -0
  321. honeycomb/_generated/models/query_compare_time_offset_seconds.py +14 -0
  322. honeycomb/_generated/models/query_filter_combination.py +8 -0
  323. honeycomb/_generated/models/query_filters_item.py +126 -0
  324. honeycomb/_generated/models/query_havings_item.py +128 -0
  325. honeycomb/_generated/models/query_op.py +30 -0
  326. honeycomb/_generated/models/query_orders_item.py +115 -0
  327. honeycomb/_generated/models/query_orders_item_order.py +8 -0
  328. honeycomb/_generated/models/query_panel.py +114 -0
  329. honeycomb/_generated/models/query_panel_query_panel.py +143 -0
  330. honeycomb/_generated/models/query_panel_query_panel_query_style.py +9 -0
  331. honeycomb/_generated/models/query_result.py +130 -0
  332. honeycomb/_generated/models/query_result_details.py +156 -0
  333. honeycomb/_generated/models/query_result_details_data.py +188 -0
  334. honeycomb/_generated/models/query_result_details_links.py +85 -0
  335. honeycomb/_generated/models/query_result_links.py +85 -0
  336. honeycomb/_generated/models/query_results_data.py +89 -0
  337. honeycomb/_generated/models/query_results_data_data.py +71 -0
  338. honeycomb/_generated/models/query_results_series.py +97 -0
  339. honeycomb/_generated/models/recipient_properties.py +137 -0
  340. honeycomb/_generated/models/recipient_type.py +12 -0
  341. honeycomb/_generated/models/slack_recipient.py +160 -0
  342. honeycomb/_generated/models/slack_recipient_details.py +71 -0
  343. honeycomb/_generated/models/slack_recipient_type.py +7 -0
  344. honeycomb/_generated/models/slo.py +245 -0
  345. honeycomb/_generated/models/slo_create.py +245 -0
  346. honeycomb/_generated/models/slo_create_sli.py +75 -0
  347. honeycomb/_generated/models/slo_detailed_response.py +312 -0
  348. honeycomb/_generated/models/slo_detailed_response_status.py +10 -0
  349. honeycomb/_generated/models/slo_history.py +94 -0
  350. honeycomb/_generated/models/slo_history_request.py +93 -0
  351. honeycomb/_generated/models/slo_history_response.py +91 -0
  352. honeycomb/_generated/models/slo_panel.py +114 -0
  353. honeycomb/_generated/models/slo_panel_slo_panel.py +75 -0
  354. honeycomb/_generated/models/slo_sli.py +74 -0
  355. honeycomb/_generated/models/tag.py +79 -0
  356. honeycomb/_generated/models/team_relationship.py +78 -0
  357. honeycomb/_generated/models/team_relationship_team.py +78 -0
  358. honeycomb/_generated/models/team_relationship_team_data.py +82 -0
  359. honeycomb/_generated/models/team_relationship_team_data_type.py +7 -0
  360. honeycomb/_generated/models/template_variable_definition.py +81 -0
  361. honeycomb/_generated/models/text_panel.py +114 -0
  362. honeycomb/_generated/models/text_panel_text_panel.py +71 -0
  363. honeycomb/_generated/models/trigger_response.py +399 -0
  364. honeycomb/_generated/models/trigger_with_inline_query.py +390 -0
  365. honeycomb/_generated/models/trigger_with_inline_query_query.py +60 -0
  366. honeycomb/_generated/models/trigger_with_query_reference.py +376 -0
  367. honeycomb/_generated/models/update_board_view_request.py +107 -0
  368. honeycomb/_generated/models/update_environment_request.py +78 -0
  369. honeycomb/_generated/models/update_environment_request_data.py +98 -0
  370. honeycomb/_generated/models/update_environment_request_data_attributes.py +118 -0
  371. honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +73 -0
  372. honeycomb/_generated/models/update_environment_request_data_type.py +7 -0
  373. honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +202 -0
  374. honeycomb/_generated/models/update_pipeline_configuration_rollout.py +98 -0
  375. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +75 -0
  376. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +12 -0
  377. honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +78 -0
  378. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +98 -0
  379. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +75 -0
  380. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +12 -0
  381. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +7 -0
  382. honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +78 -0
  383. honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +7 -0
  384. honeycomb/_generated/models/user_relationship.py +78 -0
  385. honeycomb/_generated/models/user_relationship_data.py +82 -0
  386. honeycomb/_generated/models/user_relationship_data_type.py +7 -0
  387. honeycomb/_generated/models/validation_error.py +145 -0
  388. honeycomb/_generated/models/validation_error_type_detail_item.py +103 -0
  389. honeycomb/_generated/models/validation_error_type_detail_item_code.py +10 -0
  390. honeycomb/_generated/models/webhook_header.py +81 -0
  391. honeycomb/_generated/models/webhook_recipient.py +160 -0
  392. honeycomb/_generated/models/webhook_recipient_details.py +142 -0
  393. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +117 -0
  394. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +126 -0
  395. honeycomb/_generated/models/webhook_recipient_type.py +7 -0
  396. honeycomb/_generated/py.typed +1 -0
  397. honeycomb/_generated/types.py +46 -0
  398. honeycomb/auth.py +152 -0
  399. honeycomb/client.py +736 -0
  400. honeycomb/exceptions.py +236 -0
  401. honeycomb/models/__init__.py +157 -0
  402. honeycomb/models/api_keys.py +81 -0
  403. honeycomb/models/board_builder.py +387 -0
  404. honeycomb/models/boards.py +86 -0
  405. honeycomb/models/burn_alerts.py +124 -0
  406. honeycomb/models/columns.py +59 -0
  407. honeycomb/models/datasets.py +51 -0
  408. honeycomb/models/derived_columns.py +107 -0
  409. honeycomb/models/environments.py +106 -0
  410. honeycomb/models/events.py +35 -0
  411. honeycomb/models/marker_builder.py +136 -0
  412. honeycomb/models/markers.py +73 -0
  413. honeycomb/models/queries.py +210 -0
  414. honeycomb/models/query_annotations.py +63 -0
  415. honeycomb/models/query_builder.py +840 -0
  416. honeycomb/models/recipient_builder.py +248 -0
  417. honeycomb/models/recipients.py +43 -0
  418. honeycomb/models/service_map_dependencies.py +126 -0
  419. honeycomb/models/slo_builder.py +463 -0
  420. honeycomb/models/slos.py +66 -0
  421. honeycomb/models/tags_mixin.py +79 -0
  422. honeycomb/models/trigger_builder.py +561 -0
  423. honeycomb/models/triggers.py +208 -0
  424. honeycomb/resources/__init__.py +35 -0
  425. honeycomb/resources/_recipient_utils.py +156 -0
  426. honeycomb/resources/api_keys.py +303 -0
  427. honeycomb/resources/base.py +142 -0
  428. honeycomb/resources/boards.py +350 -0
  429. honeycomb/resources/burn_alerts.py +205 -0
  430. honeycomb/resources/columns.py +185 -0
  431. honeycomb/resources/datasets.py +163 -0
  432. honeycomb/resources/derived_columns.py +233 -0
  433. honeycomb/resources/environments.py +295 -0
  434. honeycomb/resources/events.py +156 -0
  435. honeycomb/resources/markers.py +334 -0
  436. honeycomb/resources/queries.py +256 -0
  437. honeycomb/resources/query_annotations.py +207 -0
  438. honeycomb/resources/query_results.py +886 -0
  439. honeycomb/resources/recipients.py +202 -0
  440. honeycomb/resources/service_map_dependencies.py +389 -0
  441. honeycomb/resources/slos.py +353 -0
  442. honeycomb/resources/triggers.py +284 -0
  443. honeycomb/tools/__init__.py +85 -0
  444. honeycomb/tools/__main__.py +204 -0
  445. honeycomb/tools/builders.py +512 -0
  446. honeycomb/tools/descriptions.py +523 -0
  447. honeycomb/tools/executor.py +860 -0
  448. honeycomb/tools/generator.py +2386 -0
  449. honeycomb/tools/schemas.py +184 -0
  450. honeycomb_api-0.1.0.dist-info/METADATA +451 -0
  451. honeycomb_api-0.1.0.dist-info/RECORD +453 -0
  452. honeycomb_api-0.1.0.dist-info/WHEEL +4 -0
  453. honeycomb_api-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,860 @@
1
+ """Tool execution handler for Claude API tool calls.
2
+
3
+ This module executes Claude tool calls against the Honeycomb API,
4
+ converting tool inputs to API operations and returning JSON results.
5
+ """
6
+
7
+ import json
8
+ from typing import TYPE_CHECKING, Any
9
+
10
+ from honeycomb.models import (
11
+ BatchEvent,
12
+ BurnAlertCreate,
13
+ BurnAlertRecipient,
14
+ ColumnCreate,
15
+ DatasetCreate,
16
+ DerivedColumnCreate,
17
+ MarkerCreate,
18
+ MarkerSettingCreate,
19
+ QuerySpec,
20
+ RecipientCreate,
21
+ ServiceMapDependencyRequestCreate,
22
+ SLOCreate,
23
+ )
24
+ from honeycomb.tools.builders import _build_board, _build_slo, _build_trigger
25
+
26
+ if TYPE_CHECKING:
27
+ from honeycomb import HoneycombClient
28
+
29
+
30
+ # ==============================================================================
31
+ # Main Executor
32
+ # ==============================================================================
33
+
34
+
35
+ async def execute_tool(
36
+ client: "HoneycombClient",
37
+ tool_name: str,
38
+ tool_input: dict[str, Any],
39
+ ) -> str:
40
+ """Execute a Honeycomb tool and return the result as JSON string.
41
+
42
+ Args:
43
+ client: HoneycombClient instance (must be async-capable)
44
+ tool_name: Name of the tool to execute (e.g., "honeycomb_create_trigger")
45
+ tool_input: Tool input parameters as dict
46
+
47
+ Returns:
48
+ JSON-serialized result string
49
+
50
+ Raises:
51
+ ValueError: If tool name is unknown
52
+ HoneycombAPIError: If API call fails
53
+
54
+ Example:
55
+ >>> from honeycomb import HoneycombClient
56
+ >>> from honeycomb.tools import execute_tool
57
+ >>>
58
+ >>> async with HoneycombClient(api_key="...") as client:
59
+ ... result = await execute_tool(
60
+ ... client,
61
+ ... "honeycomb_list_triggers",
62
+ ... {"dataset": "api-logs"}
63
+ ... )
64
+ ... print(result) # JSON string
65
+ """
66
+ # Route to appropriate handler
67
+ if tool_name == "honeycomb_list_triggers":
68
+ return await _execute_list_triggers(client, tool_input)
69
+ elif tool_name == "honeycomb_get_trigger":
70
+ return await _execute_get_trigger(client, tool_input)
71
+ elif tool_name == "honeycomb_create_trigger":
72
+ return await _execute_create_trigger(client, tool_input)
73
+ elif tool_name == "honeycomb_update_trigger":
74
+ return await _execute_update_trigger(client, tool_input)
75
+ elif tool_name == "honeycomb_delete_trigger":
76
+ return await _execute_delete_trigger(client, tool_input)
77
+ elif tool_name == "honeycomb_list_slos":
78
+ return await _execute_list_slos(client, tool_input)
79
+ elif tool_name == "honeycomb_get_slo":
80
+ return await _execute_get_slo(client, tool_input)
81
+ elif tool_name == "honeycomb_create_slo":
82
+ return await _execute_create_slo(client, tool_input)
83
+ elif tool_name == "honeycomb_update_slo":
84
+ return await _execute_update_slo(client, tool_input)
85
+ elif tool_name == "honeycomb_delete_slo":
86
+ return await _execute_delete_slo(client, tool_input)
87
+ elif tool_name == "honeycomb_list_burn_alerts":
88
+ return await _execute_list_burn_alerts(client, tool_input)
89
+ elif tool_name == "honeycomb_get_burn_alert":
90
+ return await _execute_get_burn_alert(client, tool_input)
91
+ elif tool_name == "honeycomb_create_burn_alert":
92
+ return await _execute_create_burn_alert(client, tool_input)
93
+ elif tool_name == "honeycomb_update_burn_alert":
94
+ return await _execute_update_burn_alert(client, tool_input)
95
+ elif tool_name == "honeycomb_delete_burn_alert":
96
+ return await _execute_delete_burn_alert(client, tool_input)
97
+ # Datasets
98
+ elif tool_name == "honeycomb_list_datasets":
99
+ return await _execute_list_datasets(client, tool_input)
100
+ elif tool_name == "honeycomb_get_dataset":
101
+ return await _execute_get_dataset(client, tool_input)
102
+ elif tool_name == "honeycomb_create_dataset":
103
+ return await _execute_create_dataset(client, tool_input)
104
+ elif tool_name == "honeycomb_update_dataset":
105
+ return await _execute_update_dataset(client, tool_input)
106
+ elif tool_name == "honeycomb_delete_dataset":
107
+ return await _execute_delete_dataset(client, tool_input)
108
+ # Columns
109
+ elif tool_name == "honeycomb_list_columns":
110
+ return await _execute_list_columns(client, tool_input)
111
+ elif tool_name == "honeycomb_get_column":
112
+ return await _execute_get_column(client, tool_input)
113
+ elif tool_name == "honeycomb_create_column":
114
+ return await _execute_create_column(client, tool_input)
115
+ elif tool_name == "honeycomb_update_column":
116
+ return await _execute_update_column(client, tool_input)
117
+ elif tool_name == "honeycomb_delete_column":
118
+ return await _execute_delete_column(client, tool_input)
119
+ # Recipients
120
+ elif tool_name == "honeycomb_list_recipients":
121
+ return await _execute_list_recipients(client, tool_input)
122
+ elif tool_name == "honeycomb_get_recipient":
123
+ return await _execute_get_recipient(client, tool_input)
124
+ elif tool_name == "honeycomb_create_recipient":
125
+ return await _execute_create_recipient(client, tool_input)
126
+ elif tool_name == "honeycomb_update_recipient":
127
+ return await _execute_update_recipient(client, tool_input)
128
+ elif tool_name == "honeycomb_delete_recipient":
129
+ return await _execute_delete_recipient(client, tool_input)
130
+ elif tool_name == "honeycomb_get_recipient_triggers":
131
+ return await _execute_get_recipient_triggers(client, tool_input)
132
+ # Derived Columns
133
+ elif tool_name == "honeycomb_list_derived_columns":
134
+ return await _execute_list_derived_columns(client, tool_input)
135
+ elif tool_name == "honeycomb_get_derived_column":
136
+ return await _execute_get_derived_column(client, tool_input)
137
+ elif tool_name == "honeycomb_create_derived_column":
138
+ return await _execute_create_derived_column(client, tool_input)
139
+ elif tool_name == "honeycomb_update_derived_column":
140
+ return await _execute_update_derived_column(client, tool_input)
141
+ elif tool_name == "honeycomb_delete_derived_column":
142
+ return await _execute_delete_derived_column(client, tool_input)
143
+ # Queries
144
+ elif tool_name == "honeycomb_create_query":
145
+ return await _execute_create_query(client, tool_input)
146
+ elif tool_name == "honeycomb_get_query":
147
+ return await _execute_get_query(client, tool_input)
148
+ elif tool_name == "honeycomb_run_query":
149
+ return await _execute_run_query(client, tool_input)
150
+ # Boards
151
+ elif tool_name == "honeycomb_list_boards":
152
+ return await _execute_list_boards(client, tool_input)
153
+ elif tool_name == "honeycomb_get_board":
154
+ return await _execute_get_board(client, tool_input)
155
+ elif tool_name == "honeycomb_create_board":
156
+ return await _execute_create_board(client, tool_input)
157
+ elif tool_name == "honeycomb_update_board":
158
+ return await _execute_update_board(client, tool_input)
159
+ elif tool_name == "honeycomb_delete_board":
160
+ return await _execute_delete_board(client, tool_input)
161
+ # Markers
162
+ elif tool_name == "honeycomb_list_markers":
163
+ return await _execute_list_markers(client, tool_input)
164
+ elif tool_name == "honeycomb_create_marker":
165
+ return await _execute_create_marker(client, tool_input)
166
+ elif tool_name == "honeycomb_update_marker":
167
+ return await _execute_update_marker(client, tool_input)
168
+ elif tool_name == "honeycomb_delete_marker":
169
+ return await _execute_delete_marker(client, tool_input)
170
+ # Marker Settings
171
+ elif tool_name == "honeycomb_list_marker_settings":
172
+ return await _execute_list_marker_settings(client, tool_input)
173
+ elif tool_name == "honeycomb_get_marker_setting":
174
+ return await _execute_get_marker_setting(client, tool_input)
175
+ elif tool_name == "honeycomb_create_marker_setting":
176
+ return await _execute_create_marker_setting(client, tool_input)
177
+ elif tool_name == "honeycomb_update_marker_setting":
178
+ return await _execute_update_marker_setting(client, tool_input)
179
+ elif tool_name == "honeycomb_delete_marker_setting":
180
+ return await _execute_delete_marker_setting(client, tool_input)
181
+ # Events
182
+ elif tool_name == "honeycomb_send_event":
183
+ return await _execute_send_event(client, tool_input)
184
+ elif tool_name == "honeycomb_send_batch_events":
185
+ return await _execute_send_batch_events(client, tool_input)
186
+ # Service Map
187
+ elif tool_name == "honeycomb_query_service_map":
188
+ return await _execute_query_service_map(client, tool_input)
189
+ else:
190
+ raise ValueError(
191
+ f"Unknown tool: {tool_name}. "
192
+ "Valid tools: triggers (5), slos (5), burn_alerts (5), datasets (5), columns (5), "
193
+ "recipients (6), derived_columns (5), queries (3), boards (5), markers (4), "
194
+ "marker_settings (5), events (2), service_map (1)"
195
+ )
196
+
197
+
198
+ # ==============================================================================
199
+ # Triggers
200
+ # ==============================================================================
201
+
202
+
203
+ async def _execute_list_triggers(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
204
+ """Execute honeycomb_list_triggers."""
205
+ triggers = await client.triggers.list_async(dataset=tool_input["dataset"])
206
+ return json.dumps([t.model_dump() for t in triggers], default=str)
207
+
208
+
209
+ async def _execute_get_trigger(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
210
+ """Execute honeycomb_get_trigger."""
211
+ trigger = await client.triggers.get_async(
212
+ dataset=tool_input["dataset"],
213
+ trigger_id=tool_input["trigger_id"],
214
+ )
215
+ return json.dumps(trigger.model_dump(), default=str)
216
+
217
+
218
+ async def _execute_create_trigger(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
219
+ """Execute honeycomb_create_trigger using bundle orchestration.
220
+
221
+ The bundle handles inline recipient creation with idempotent logic:
222
+ - Checks if recipient already exists (by type + target)
223
+ - Reuses existing ID if found
224
+ - Creates new recipient if not found
225
+ """
226
+ # Build bundle from tool input (includes dataset)
227
+ builder = _build_trigger(tool_input)
228
+ bundle = builder.build()
229
+
230
+ # Create via bundle (handles recipient orchestration)
231
+ created = await client.triggers.create_from_bundle_async(bundle)
232
+ return json.dumps(created.model_dump(), default=str)
233
+
234
+
235
+ async def _execute_update_trigger(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
236
+ """Execute honeycomb_update_trigger."""
237
+ trigger_id = tool_input.pop("trigger_id")
238
+
239
+ # Use builder to construct updated trigger
240
+ builder = _build_trigger(tool_input)
241
+ bundle = builder.build()
242
+
243
+ # Update via API (use trigger from bundle)
244
+ updated = await client.triggers.update_async(
245
+ dataset=bundle.dataset,
246
+ trigger_id=trigger_id,
247
+ trigger=bundle.trigger,
248
+ )
249
+ return json.dumps(updated.model_dump(), default=str)
250
+
251
+
252
+ async def _execute_delete_trigger(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
253
+ """Execute honeycomb_delete_trigger."""
254
+ await client.triggers.delete_async(
255
+ dataset=tool_input["dataset"],
256
+ trigger_id=tool_input["trigger_id"],
257
+ )
258
+ return json.dumps({"success": True, "message": "Trigger deleted"})
259
+
260
+
261
+ # ==============================================================================
262
+ # SLOs
263
+ # ==============================================================================
264
+
265
+
266
+ async def _execute_list_slos(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
267
+ """Execute honeycomb_list_slos."""
268
+ slos = await client.slos.list_async(dataset=tool_input["dataset"])
269
+ return json.dumps([s.model_dump() for s in slos], default=str)
270
+
271
+
272
+ async def _execute_get_slo(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
273
+ """Execute honeycomb_get_slo."""
274
+ slo = await client.slos.get_async(
275
+ dataset=tool_input["dataset"],
276
+ slo_id=tool_input["slo_id"],
277
+ )
278
+ return json.dumps(slo.model_dump(), default=str)
279
+
280
+
281
+ async def _execute_create_slo(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
282
+ """Execute honeycomb_create_slo.
283
+
284
+ If SLI expression is provided or burn_alerts are included, uses SLOBuilder
285
+ and create_from_bundle_async for orchestration. Otherwise uses simple create_async.
286
+ """
287
+ dataset = tool_input.pop("dataset")
288
+
289
+ # Check if we need bundle orchestration
290
+ sli = tool_input.get("sli", {})
291
+ burn_alerts = tool_input.get("burn_alerts", [])
292
+ needs_bundle = ("expression" in sli) or burn_alerts
293
+
294
+ if needs_bundle:
295
+ # Use builder for orchestration
296
+ builder = _build_slo({"dataset": dataset, **tool_input})
297
+ bundle = builder.build()
298
+
299
+ # Create via bundle (handles derived columns + burn alerts)
300
+ created_slos = await client.slos.create_from_bundle_async(bundle)
301
+
302
+ # Return the main SLO (first one created)
303
+ main_slo = list(created_slos.values())[0]
304
+ return json.dumps(main_slo.model_dump(), default=str)
305
+ else:
306
+ # Simple SLO creation (existing derived column, no burn alerts)
307
+ slo = SLOCreate(**tool_input)
308
+ created = await client.slos.create_async(dataset=dataset, slo=slo)
309
+ return json.dumps(created.model_dump(), default=str)
310
+
311
+
312
+ async def _execute_update_slo(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
313
+ """Execute honeycomb_update_slo."""
314
+ dataset = tool_input.pop("dataset")
315
+ slo_id = tool_input.pop("slo_id")
316
+
317
+ slo = SLOCreate(**tool_input)
318
+ updated = await client.slos.update_async(
319
+ dataset=dataset,
320
+ slo_id=slo_id,
321
+ slo=slo,
322
+ )
323
+ return json.dumps(updated.model_dump(), default=str)
324
+
325
+
326
+ async def _execute_delete_slo(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
327
+ """Execute honeycomb_delete_slo."""
328
+ await client.slos.delete_async(
329
+ dataset=tool_input["dataset"],
330
+ slo_id=tool_input["slo_id"],
331
+ )
332
+ return json.dumps({"success": True, "message": "SLO deleted"})
333
+
334
+
335
+ # ==============================================================================
336
+ # Burn Alerts
337
+ # ==============================================================================
338
+
339
+
340
+ async def _execute_list_burn_alerts(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
341
+ """Execute honeycomb_list_burn_alerts."""
342
+ burn_alerts = await client.burn_alerts.list_async(
343
+ dataset=tool_input["dataset"],
344
+ slo_id=tool_input["slo_id"],
345
+ )
346
+ return json.dumps([ba.model_dump() for ba in burn_alerts], default=str)
347
+
348
+
349
+ async def _execute_get_burn_alert(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
350
+ """Execute honeycomb_get_burn_alert."""
351
+ burn_alert = await client.burn_alerts.get_async(
352
+ dataset=tool_input["dataset"],
353
+ burn_alert_id=tool_input["burn_alert_id"],
354
+ )
355
+ return json.dumps(burn_alert.model_dump(), default=str)
356
+
357
+
358
+ async def _execute_create_burn_alert(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
359
+ """Execute honeycomb_create_burn_alert with inline recipient handling."""
360
+ from honeycomb.resources._recipient_utils import process_inline_recipients
361
+
362
+ dataset = tool_input.pop("dataset")
363
+
364
+ # Process inline recipients with idempotent handling
365
+ recipients_data = tool_input.pop("recipients", [])
366
+ processed = await process_inline_recipients(client, recipients_data)
367
+ recipients = [BurnAlertRecipient(**r) for r in processed]
368
+
369
+ burn_alert = BurnAlertCreate(**tool_input, recipients=recipients)
370
+ created = await client.burn_alerts.create_async(dataset=dataset, burn_alert=burn_alert)
371
+ return json.dumps(created.model_dump(), default=str)
372
+
373
+
374
+ async def _execute_update_burn_alert(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
375
+ """Execute honeycomb_update_burn_alert with inline recipient handling."""
376
+ from honeycomb.resources._recipient_utils import process_inline_recipients
377
+
378
+ dataset = tool_input.pop("dataset")
379
+ burn_alert_id = tool_input.pop("burn_alert_id")
380
+
381
+ # Process inline recipients with idempotent handling
382
+ recipients_data = tool_input.pop("recipients", [])
383
+ processed = await process_inline_recipients(client, recipients_data)
384
+ recipients = [BurnAlertRecipient(**r) for r in processed]
385
+
386
+ burn_alert = BurnAlertCreate(**tool_input, recipients=recipients)
387
+ updated = await client.burn_alerts.update_async(
388
+ dataset=dataset,
389
+ burn_alert_id=burn_alert_id,
390
+ burn_alert=burn_alert,
391
+ )
392
+ return json.dumps(updated.model_dump(), default=str)
393
+
394
+
395
+ async def _execute_delete_burn_alert(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
396
+ """Execute honeycomb_delete_burn_alert."""
397
+ await client.burn_alerts.delete_async(
398
+ dataset=tool_input["dataset"],
399
+ burn_alert_id=tool_input["burn_alert_id"],
400
+ )
401
+ return json.dumps({"success": True, "message": "Burn alert deleted"})
402
+
403
+
404
+ # ==============================================================================
405
+ # Datasets
406
+ # ==============================================================================
407
+
408
+
409
+ async def _execute_list_datasets(
410
+ client: "HoneycombClient",
411
+ tool_input: dict[str, Any], # noqa: ARG001
412
+ ) -> str:
413
+ """Execute honeycomb_list_datasets."""
414
+ datasets = await client.datasets.list_async()
415
+ return json.dumps([d.model_dump() for d in datasets], default=str)
416
+
417
+
418
+ async def _execute_get_dataset(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
419
+ """Execute honeycomb_get_dataset."""
420
+ dataset = await client.datasets.get_async(slug=tool_input["slug"])
421
+ return json.dumps(dataset.model_dump(), default=str)
422
+
423
+
424
+ async def _execute_create_dataset(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
425
+ """Execute honeycomb_create_dataset."""
426
+ dataset = DatasetCreate(**tool_input)
427
+ created = await client.datasets.create_async(dataset=dataset)
428
+ return json.dumps(created.model_dump(), default=str)
429
+
430
+
431
+ async def _execute_update_dataset(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
432
+ """Execute honeycomb_update_dataset."""
433
+ slug = tool_input.pop("slug")
434
+ dataset = DatasetCreate(**tool_input)
435
+ updated = await client.datasets.update_async(slug=slug, dataset=dataset)
436
+ return json.dumps(updated.model_dump(), default=str)
437
+
438
+
439
+ async def _execute_delete_dataset(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
440
+ """Execute honeycomb_delete_dataset."""
441
+ await client.datasets.delete_async(slug=tool_input["slug"])
442
+ return json.dumps({"success": True, "message": "Dataset deleted"})
443
+
444
+
445
+ # ==============================================================================
446
+ # Columns
447
+ # ==============================================================================
448
+
449
+
450
+ async def _execute_list_columns(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
451
+ """Execute honeycomb_list_columns."""
452
+ columns = await client.columns.list_async(dataset=tool_input["dataset"])
453
+ return json.dumps([c.model_dump() for c in columns], default=str)
454
+
455
+
456
+ async def _execute_get_column(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
457
+ """Execute honeycomb_get_column."""
458
+ column = await client.columns.get_async(
459
+ dataset=tool_input["dataset"],
460
+ column_id=tool_input["column_id"],
461
+ )
462
+ return json.dumps(column.model_dump(), default=str)
463
+
464
+
465
+ async def _execute_create_column(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
466
+ """Execute honeycomb_create_column."""
467
+ dataset = tool_input.pop("dataset")
468
+ column = ColumnCreate(**tool_input)
469
+ created = await client.columns.create_async(dataset=dataset, column=column)
470
+ return json.dumps(created.model_dump(), default=str)
471
+
472
+
473
+ async def _execute_update_column(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
474
+ """Execute honeycomb_update_column."""
475
+ dataset = tool_input.pop("dataset")
476
+ column_id = tool_input.pop("column_id")
477
+ column = ColumnCreate(**tool_input)
478
+ updated = await client.columns.update_async(
479
+ dataset=dataset,
480
+ column_id=column_id,
481
+ column=column,
482
+ )
483
+ return json.dumps(updated.model_dump(), default=str)
484
+
485
+
486
+ async def _execute_delete_column(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
487
+ """Execute honeycomb_delete_column."""
488
+ await client.columns.delete_async(
489
+ dataset=tool_input["dataset"],
490
+ column_id=tool_input["column_id"],
491
+ )
492
+ return json.dumps({"success": True, "message": "Column deleted"})
493
+
494
+
495
+ # ==============================================================================
496
+ # Recipients
497
+ # ==============================================================================
498
+
499
+
500
+ async def _execute_list_recipients(
501
+ client: "HoneycombClient",
502
+ tool_input: dict[str, Any], # noqa: ARG001
503
+ ) -> str:
504
+ """Execute honeycomb_list_recipients."""
505
+ recipients = await client.recipients.list_async()
506
+ return json.dumps([r.model_dump() for r in recipients], default=str)
507
+
508
+
509
+ async def _execute_get_recipient(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
510
+ """Execute honeycomb_get_recipient."""
511
+ recipient = await client.recipients.get_async(recipient_id=tool_input["recipient_id"])
512
+ return json.dumps(recipient.model_dump(), default=str)
513
+
514
+
515
+ async def _execute_create_recipient(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
516
+ """Execute honeycomb_create_recipient."""
517
+ recipient = RecipientCreate(**tool_input)
518
+ created = await client.recipients.create_async(recipient=recipient)
519
+ return json.dumps(created.model_dump(), default=str)
520
+
521
+
522
+ async def _execute_update_recipient(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
523
+ """Execute honeycomb_update_recipient."""
524
+ recipient_id = tool_input.pop("recipient_id")
525
+ recipient = RecipientCreate(**tool_input)
526
+ updated = await client.recipients.update_async(recipient_id=recipient_id, recipient=recipient)
527
+ return json.dumps(updated.model_dump(), default=str)
528
+
529
+
530
+ async def _execute_delete_recipient(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
531
+ """Execute honeycomb_delete_recipient."""
532
+ await client.recipients.delete_async(recipient_id=tool_input["recipient_id"])
533
+ return json.dumps({"success": True, "message": "Recipient deleted"})
534
+
535
+
536
+ async def _execute_get_recipient_triggers(
537
+ client: "HoneycombClient", tool_input: dict[str, Any]
538
+ ) -> str:
539
+ """Execute honeycomb_get_recipient_triggers."""
540
+ triggers = await client.recipients.get_triggers_async(recipient_id=tool_input["recipient_id"])
541
+ return json.dumps(triggers, default=str)
542
+
543
+
544
+ # ==============================================================================
545
+ # Derived Columns
546
+ # ==============================================================================
547
+
548
+
549
+ async def _execute_list_derived_columns(
550
+ client: "HoneycombClient", tool_input: dict[str, Any]
551
+ ) -> str:
552
+ """Execute honeycomb_list_derived_columns."""
553
+ derived_columns = await client.derived_columns.list_async(dataset=tool_input["dataset"])
554
+ return json.dumps([dc.model_dump() for dc in derived_columns], default=str)
555
+
556
+
557
+ async def _execute_get_derived_column(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
558
+ """Execute honeycomb_get_derived_column."""
559
+ derived_column = await client.derived_columns.get_async(
560
+ dataset=tool_input["dataset"],
561
+ column_id=tool_input["derived_column_id"],
562
+ )
563
+ return json.dumps(derived_column.model_dump(), default=str)
564
+
565
+
566
+ async def _execute_create_derived_column(
567
+ client: "HoneycombClient", tool_input: dict[str, Any]
568
+ ) -> str:
569
+ """Execute honeycomb_create_derived_column."""
570
+ dataset = tool_input.pop("dataset")
571
+ derived_column = DerivedColumnCreate(**tool_input)
572
+ created = await client.derived_columns.create_async(
573
+ dataset=dataset, derived_column=derived_column
574
+ )
575
+ return json.dumps(created.model_dump(), default=str)
576
+
577
+
578
+ async def _execute_update_derived_column(
579
+ client: "HoneycombClient", tool_input: dict[str, Any]
580
+ ) -> str:
581
+ """Execute honeycomb_update_derived_column."""
582
+ dataset = tool_input.pop("dataset")
583
+ column_id = tool_input.pop("derived_column_id")
584
+ derived_column = DerivedColumnCreate(**tool_input)
585
+ updated = await client.derived_columns.update_async(
586
+ dataset=dataset,
587
+ column_id=column_id,
588
+ derived_column=derived_column,
589
+ )
590
+ return json.dumps(updated.model_dump(), default=str)
591
+
592
+
593
+ async def _execute_delete_derived_column(
594
+ client: "HoneycombClient", tool_input: dict[str, Any]
595
+ ) -> str:
596
+ """Execute honeycomb_delete_derived_column."""
597
+ await client.derived_columns.delete_async(
598
+ dataset=tool_input["dataset"],
599
+ column_id=tool_input["derived_column_id"],
600
+ )
601
+ return json.dumps({"success": True, "message": "Derived column deleted"})
602
+
603
+
604
+ # ==============================================================================
605
+ # Queries
606
+ # ==============================================================================
607
+
608
+
609
+ async def _execute_create_query(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
610
+ """Execute honeycomb_create_query.
611
+
612
+ Note: annotation_name parameter is accepted but currently ignored.
613
+ QueryBuilder integration required for full annotation support.
614
+ """
615
+ dataset = tool_input.pop("dataset")
616
+ tool_input.pop("annotation_name", None) # Remove if present, not yet supported
617
+
618
+ query_spec = QuerySpec(**tool_input)
619
+ query = await client.queries.create_async(spec=query_spec, dataset=dataset)
620
+
621
+ return json.dumps(query.model_dump(), default=str)
622
+
623
+
624
+ async def _execute_get_query(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
625
+ """Execute honeycomb_get_query."""
626
+ query = await client.queries.get_async(
627
+ dataset=tool_input["dataset"],
628
+ query_id=tool_input["query_id"],
629
+ )
630
+ return json.dumps(query.model_dump(), default=str)
631
+
632
+
633
+ async def _execute_run_query(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
634
+ """Execute honeycomb_run_query.
635
+
636
+ Runs ephemeral query with automatic polling.
637
+ Returns the QueryResult (not the tuple).
638
+ """
639
+ dataset = tool_input.pop("dataset")
640
+ query_spec = QuerySpec(**tool_input)
641
+
642
+ # Run query with polling - returns (Query, QueryResult) tuple
643
+ _, result = await client.query_results.create_and_run_async(
644
+ spec=query_spec,
645
+ dataset=dataset,
646
+ )
647
+
648
+ return json.dumps(result.model_dump(), default=str)
649
+
650
+
651
+ # ==============================================================================
652
+ # Boards
653
+ # ==============================================================================
654
+
655
+
656
+ async def _execute_list_boards(
657
+ client: "HoneycombClient",
658
+ tool_input: dict[str, Any], # noqa: ARG001
659
+ ) -> str:
660
+ """Execute honeycomb_list_boards."""
661
+ boards = await client.boards.list_async()
662
+ return json.dumps([b.model_dump() for b in boards], default=str)
663
+
664
+
665
+ async def _execute_get_board(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
666
+ """Execute honeycomb_get_board."""
667
+ board = await client.boards.get_async(board_id=tool_input["board_id"])
668
+ return json.dumps(board.model_dump(), default=str)
669
+
670
+
671
+ async def _execute_create_board(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
672
+ """Execute honeycomb_create_board.
673
+
674
+ Uses BoardBundle orchestration for inline panel creation.
675
+ """
676
+ # Build BoardBuilder and get bundle
677
+ board_builder = _build_board(tool_input)
678
+ bundle = board_builder.build()
679
+
680
+ # Create board with orchestration (creates inline queries, assembles panels)
681
+ board = await client.boards.create_from_bundle_async(bundle)
682
+
683
+ return json.dumps(board.model_dump(), default=str)
684
+
685
+
686
+ async def _execute_update_board(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
687
+ """Execute honeycomb_update_board."""
688
+ board_id = tool_input.pop("board_id")
689
+
690
+ # Simple update (no bundle orchestration for updates)
691
+ from honeycomb.models import BoardCreate
692
+
693
+ board = BoardCreate(**tool_input)
694
+ updated = await client.boards.update_async(board_id=board_id, board=board)
695
+
696
+ return json.dumps(updated.model_dump(), default=str)
697
+
698
+
699
+ async def _execute_delete_board(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
700
+ """Execute honeycomb_delete_board."""
701
+ await client.boards.delete_async(board_id=tool_input["board_id"])
702
+ return json.dumps({"success": True, "message": "Board deleted"})
703
+
704
+
705
+ # ==============================================================================
706
+ # Markers
707
+ # ==============================================================================
708
+
709
+
710
+ async def _execute_list_markers(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
711
+ """Execute honeycomb_list_markers."""
712
+ markers = await client.markers.list_async(dataset=tool_input["dataset"])
713
+ return json.dumps([m.model_dump() for m in markers], default=str)
714
+
715
+
716
+ async def _execute_create_marker(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
717
+ """Execute honeycomb_create_marker."""
718
+ dataset = tool_input.pop("dataset")
719
+ tool_input.pop("color", None) # Color handled by marker settings, not markers directly
720
+
721
+ marker = MarkerCreate(**tool_input)
722
+ created = await client.markers.create_async(dataset=dataset, marker=marker)
723
+ return json.dumps(created.model_dump(), default=str)
724
+
725
+
726
+ async def _execute_update_marker(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
727
+ """Execute honeycomb_update_marker."""
728
+ dataset = tool_input.pop("dataset")
729
+ marker_id = tool_input.pop("marker_id")
730
+
731
+ marker = MarkerCreate(**tool_input)
732
+ updated = await client.markers.update_async(dataset=dataset, marker_id=marker_id, marker=marker)
733
+ return json.dumps(updated.model_dump(), default=str)
734
+
735
+
736
+ async def _execute_delete_marker(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
737
+ """Execute honeycomb_delete_marker."""
738
+ await client.markers.delete_async(
739
+ dataset=tool_input["dataset"], marker_id=tool_input["marker_id"]
740
+ )
741
+ return json.dumps({"success": True, "message": "Marker deleted"})
742
+
743
+
744
+ # ==============================================================================
745
+ # Marker Settings
746
+ # ==============================================================================
747
+
748
+
749
+ async def _execute_list_marker_settings(
750
+ client: "HoneycombClient", tool_input: dict[str, Any]
751
+ ) -> str:
752
+ """Execute honeycomb_list_marker_settings."""
753
+ settings = await client.markers.list_settings_async(dataset=tool_input["dataset"])
754
+ return json.dumps([s.model_dump() for s in settings], default=str)
755
+
756
+
757
+ async def _execute_get_marker_setting(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
758
+ """Execute honeycomb_get_marker_setting."""
759
+ setting = await client.markers.get_setting_async(
760
+ dataset=tool_input["dataset"],
761
+ setting_id=tool_input["setting_id"],
762
+ )
763
+ return json.dumps(setting.model_dump(), default=str)
764
+
765
+
766
+ async def _execute_create_marker_setting(
767
+ client: "HoneycombClient", tool_input: dict[str, Any]
768
+ ) -> str:
769
+ """Execute honeycomb_create_marker_setting."""
770
+ dataset = tool_input.pop("dataset")
771
+ setting = MarkerSettingCreate(**tool_input)
772
+ created = await client.markers.create_setting_async(dataset=dataset, setting=setting)
773
+ return json.dumps(created.model_dump(), default=str)
774
+
775
+
776
+ async def _execute_update_marker_setting(
777
+ client: "HoneycombClient", tool_input: dict[str, Any]
778
+ ) -> str:
779
+ """Execute honeycomb_update_marker_setting."""
780
+ dataset = tool_input.pop("dataset")
781
+ setting_id = tool_input.pop("setting_id")
782
+ setting = MarkerSettingCreate(**tool_input)
783
+ updated = await client.markers.update_setting_async(
784
+ dataset=dataset,
785
+ setting_id=setting_id,
786
+ setting=setting,
787
+ )
788
+ return json.dumps(updated.model_dump(), default=str)
789
+
790
+
791
+ async def _execute_delete_marker_setting(
792
+ client: "HoneycombClient", tool_input: dict[str, Any]
793
+ ) -> str:
794
+ """Execute honeycomb_delete_marker_setting."""
795
+ await client.markers.delete_setting_async(
796
+ dataset=tool_input["dataset"],
797
+ setting_id=tool_input["setting_id"],
798
+ )
799
+ return json.dumps({"success": True, "message": "Marker setting deleted"})
800
+
801
+
802
+ # ==============================================================================
803
+ # Events
804
+ # ==============================================================================
805
+
806
+
807
+ async def _execute_send_event(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
808
+ """Execute honeycomb_send_event."""
809
+ dataset = tool_input.pop("dataset")
810
+ data = tool_input.pop("data")
811
+ timestamp = tool_input.pop("timestamp", None)
812
+ samplerate = tool_input.pop("samplerate", None)
813
+
814
+ await client.events.send_async(
815
+ dataset=dataset, data=data, timestamp=timestamp, samplerate=samplerate
816
+ )
817
+ return json.dumps({"success": True, "message": "Event sent"})
818
+
819
+
820
+ async def _execute_send_batch_events(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
821
+ """Execute honeycomb_send_batch_events."""
822
+ dataset = tool_input.pop("dataset")
823
+ events_data = tool_input.pop("events")
824
+
825
+ # Convert to BatchEvent objects
826
+ events = [BatchEvent(**event) for event in events_data]
827
+
828
+ results = await client.events.send_batch_async(dataset=dataset, events=events)
829
+ return json.dumps([r.model_dump() for r in results], default=str)
830
+
831
+
832
+ # ==============================================================================
833
+ # Service Map Dependencies
834
+ # ==============================================================================
835
+
836
+
837
+ async def _execute_query_service_map(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
838
+ """Execute honeycomb_query_service_map.
839
+
840
+ Performs create + poll + paginate automatically.
841
+ """
842
+ max_pages = tool_input.pop("max_pages", 640)
843
+ request = ServiceMapDependencyRequestCreate(**tool_input)
844
+
845
+ # Query with polling and pagination - returns ServiceMapDependencyResult
846
+ result = await client.service_map_dependencies.get_async(
847
+ request=request,
848
+ max_pages=max_pages,
849
+ )
850
+
851
+ # Return just the dependencies list
852
+ if result.dependencies:
853
+ return json.dumps([d.model_dump() for d in result.dependencies], default=str)
854
+ else:
855
+ return json.dumps([], default=str)
856
+
857
+
858
+ __all__ = [
859
+ "execute_tool",
860
+ ]