honeycomb-api 0.1.0__py3-none-any.whl → 0.5.3__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 (443) hide show
  1. honeycomb/__init__.py +9 -0
  2. honeycomb/_generated/api/auth/get_auth.py +2 -5
  3. honeycomb/_generated/api/auth/get_v2_auth.py +2 -5
  4. honeycomb/_generated/api/boards/create_board.py +6 -5
  5. honeycomb/_generated/api/boards/create_board_view.py +14 -9
  6. honeycomb/_generated/api/boards/delete_board.py +2 -5
  7. honeycomb/_generated/api/boards/delete_board_view.py +2 -5
  8. honeycomb/_generated/api/boards/get_board.py +2 -5
  9. honeycomb/_generated/api/boards/get_board_view.py +2 -5
  10. honeycomb/_generated/api/boards/list_board_views.py +10 -9
  11. honeycomb/_generated/api/boards/list_boards.py +2 -5
  12. honeycomb/_generated/api/boards/update_board.py +10 -5
  13. honeycomb/_generated/api/boards/update_board_view.py +2 -5
  14. honeycomb/_generated/api/burn_alerts/create_burn_alert.py +6 -8
  15. honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +2 -5
  16. honeycomb/_generated/api/burn_alerts/get_burn_alert.py +2 -5
  17. honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +2 -5
  18. honeycomb/_generated/api/calculated_fields/create_calculated_field.py +2 -5
  19. honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +2 -5
  20. honeycomb/_generated/api/calculated_fields/get_calculated_field.py +2 -5
  21. honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +2 -8
  22. honeycomb/_generated/api/calculated_fields/update_calculated_field.py +2 -5
  23. honeycomb/_generated/api/columns/create_column.py +2 -5
  24. honeycomb/_generated/api/columns/delete_column.py +2 -5
  25. honeycomb/_generated/api/columns/get_column.py +2 -5
  26. honeycomb/_generated/api/columns/list_columns.py +2 -8
  27. honeycomb/_generated/api/columns/update_column.py +2 -5
  28. honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +2 -5
  29. honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +2 -5
  30. honeycomb/_generated/api/datasets/create_dataset.py +2 -5
  31. honeycomb/_generated/api/datasets/delete_dataset.py +2 -5
  32. honeycomb/_generated/api/datasets/get_dataset.py +2 -5
  33. honeycomb/_generated/api/datasets/list_datasets.py +2 -5
  34. honeycomb/_generated/api/datasets/update_dataset.py +2 -5
  35. honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +4 -6
  36. honeycomb/_generated/api/environments/create_environment.py +2 -5
  37. honeycomb/_generated/api/environments/delete_environment.py +2 -5
  38. honeycomb/_generated/api/environments/get_environment.py +2 -5
  39. honeycomb/_generated/api/environments/list_environments.py +2 -7
  40. honeycomb/_generated/api/environments/update_environment.py +2 -5
  41. honeycomb/_generated/api/events/create_event.py +2 -7
  42. honeycomb/_generated/api/events/create_events.py +7 -11
  43. honeycomb/_generated/api/key_management/create_api_key.py +2 -5
  44. honeycomb/_generated/api/key_management/delete_api_key.py +2 -5
  45. honeycomb/_generated/api/key_management/get_api_key.py +2 -5
  46. honeycomb/_generated/api/key_management/list_api_keys.py +2 -7
  47. honeycomb/_generated/api/key_management/update_api_key.py +2 -5
  48. honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +2 -5
  49. honeycomb/_generated/api/marker_settings/create_marker_setting.py +2 -5
  50. honeycomb/_generated/api/marker_settings/delete_marker_settings.py +2 -5
  51. honeycomb/_generated/api/marker_settings/list_marker_settings.py +2 -5
  52. honeycomb/_generated/api/marker_settings/update_marker_settings.py +2 -5
  53. honeycomb/_generated/api/markers/create_marker.py +2 -5
  54. honeycomb/_generated/api/markers/create_marker_v2.py +2 -5
  55. honeycomb/_generated/api/markers/delete_marker.py +2 -5
  56. honeycomb/_generated/api/markers/get_marker.py +2 -5
  57. honeycomb/_generated/api/markers/update_marker.py +2 -5
  58. honeycomb/_generated/api/markers/update_marker_v2.py +2 -5
  59. honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +4 -8
  60. honeycomb/_generated/api/pipelines/record_pipeline_usage.py +4 -6
  61. honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +6 -7
  62. honeycomb/_generated/api/queries/create_query.py +2 -5
  63. honeycomb/_generated/api/queries/get_query.py +2 -5
  64. honeycomb/_generated/api/query_annotations/create_query_annotation.py +2 -5
  65. honeycomb/_generated/api/query_annotations/delete_query_annotation.py +2 -5
  66. honeycomb/_generated/api/query_annotations/get_query_annotation.py +2 -5
  67. honeycomb/_generated/api/query_annotations/list_query_annotations.py +2 -7
  68. honeycomb/_generated/api/query_annotations/update_query_annotation.py +2 -5
  69. honeycomb/_generated/api/query_data/create_query_result.py +2 -5
  70. honeycomb/_generated/api/query_data/get_query_result.py +2 -5
  71. honeycomb/_generated/api/recipients/create_recipient.py +2 -6
  72. honeycomb/_generated/api/recipients/delete_recipient.py +2 -5
  73. honeycomb/_generated/api/recipients/get_recipient.py +2 -6
  74. honeycomb/_generated/api/recipients/list_recipients.py +2 -6
  75. honeycomb/_generated/api/recipients/update_recipient.py +2 -6
  76. honeycomb/_generated/api/reporting/get_slo_history.py +2 -5
  77. honeycomb/_generated/api/service_maps/create_map_dependency_request.py +6 -9
  78. honeycomb/_generated/api/service_maps/get_map_dependencies.py +2 -7
  79. honeycomb/_generated/api/sl_os/create_slo.py +2 -5
  80. honeycomb/_generated/api/sl_os/delete_slo.py +2 -5
  81. honeycomb/_generated/api/sl_os/get_slo.py +2 -8
  82. honeycomb/_generated/api/sl_os/list_slos.py +2 -5
  83. honeycomb/_generated/api/sl_os/update_slo.py +2 -5
  84. honeycomb/_generated/api/triggers/create_trigger.py +2 -6
  85. honeycomb/_generated/api/triggers/delete_trigger.py +2 -5
  86. honeycomb/_generated/api/triggers/get_trigger.py +2 -5
  87. honeycomb/_generated/api/triggers/list_triggers.py +2 -5
  88. honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +2 -5
  89. honeycomb/_generated/api/triggers/update_trigger.py +2 -5
  90. honeycomb/_generated/client.py +2 -5
  91. honeycomb/_generated/models/__init__.py +195 -88
  92. honeycomb/_generated/models/api_key_create_request.py +6 -5
  93. honeycomb/_generated/models/api_key_create_request_data.py +15 -11
  94. honeycomb/_generated/models/api_key_create_request_data_relationships.py +2 -3
  95. honeycomb/_generated/models/api_key_create_request_data_type.py +1 -0
  96. honeycomb/_generated/models/api_key_list_response.py +2 -5
  97. honeycomb/_generated/models/api_key_object.py +14 -14
  98. honeycomb/_generated/models/api_key_object_links.py +2 -9
  99. honeycomb/_generated/models/api_key_object_relationships.py +5 -9
  100. honeycomb/_generated/models/api_key_object_type.py +1 -0
  101. honeycomb/_generated/models/api_key_response.py +2 -3
  102. honeycomb/_generated/models/api_key_update_request.py +15 -17
  103. honeycomb/_generated/models/auth.py +2 -5
  104. honeycomb/_generated/models/auth_api_key_access.py +2 -9
  105. honeycomb/_generated/models/auth_environment.py +2 -9
  106. honeycomb/_generated/models/auth_team.py +2 -9
  107. honeycomb/_generated/models/auth_type.py +1 -0
  108. honeycomb/_generated/models/auth_v2_response.py +5 -8
  109. honeycomb/_generated/models/auth_v2_response_data.py +14 -11
  110. honeycomb/_generated/models/auth_v2_response_data_attributes.py +10 -9
  111. honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +1 -0
  112. honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +4 -12
  113. honeycomb/_generated/models/auth_v2_response_data_relationships.py +1 -7
  114. honeycomb/_generated/models/auth_v2_response_data_type.py +1 -0
  115. honeycomb/_generated/models/base_trigger.py +21 -18
  116. honeycomb/_generated/models/base_trigger_alert_type.py +1 -0
  117. honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +5 -9
  118. honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +1 -0
  119. honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +1 -0
  120. honeycomb/_generated/models/base_trigger_evaluation_schedule.py +8 -6
  121. honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +1 -0
  122. honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +4 -9
  123. honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +1 -0
  124. honeycomb/_generated/models/base_trigger_threshold.py +2 -9
  125. honeycomb/_generated/models/base_trigger_threshold_op.py +1 -0
  126. honeycomb/_generated/models/batch_event.py +2 -5
  127. honeycomb/_generated/models/board.py +15 -17
  128. honeycomb/_generated/models/board_layout_generation.py +1 -0
  129. honeycomb/_generated/models/board_links.py +2 -9
  130. honeycomb/_generated/models/board_panel_position.py +2 -9
  131. honeycomb/_generated/models/board_query_visualization_settings.py +8 -8
  132. honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +4 -10
  133. honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +1 -0
  134. honeycomb/_generated/models/board_type.py +1 -0
  135. honeycomb/_generated/models/board_view_filter.py +2 -9
  136. honeycomb/_generated/models/board_view_filter_operation.py +1 -0
  137. honeycomb/_generated/models/board_view_response.py +2 -5
  138. honeycomb/_generated/models/budget_rate.py +4 -12
  139. honeycomb/_generated/models/budget_rate_alert_type.py +1 -0
  140. honeycomb/_generated/models/burn_alert_shared_params.py +4 -12
  141. honeycomb/_generated/models/calculated_field.py +2 -9
  142. honeycomb/_generated/models/configuration_key_attributes.py +16 -12
  143. honeycomb/_generated/models/configuration_key_attributes_key_type.py +1 -0
  144. honeycomb/_generated/models/configuration_key_attributes_permissions.py +172 -0
  145. honeycomb/_generated/models/configuration_key_attributes_timestamps.py +4 -12
  146. honeycomb/_generated/models/configuration_key_request.py +101 -0
  147. honeycomb/_generated/models/configuration_key_request_attributes.py +107 -0
  148. honeycomb/_generated/models/configuration_key_request_attributes_permissions.py +168 -0
  149. honeycomb/_generated/models/configuration_key_request_type.py +8 -0
  150. honeycomb/_generated/models/create_board_view_request.py +2 -3
  151. honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +10 -10
  152. honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +1 -7
  153. honeycomb/_generated/models/create_column.py +2 -9
  154. honeycomb/_generated/models/create_column_type.py +1 -0
  155. honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +8 -6
  156. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +10 -7
  157. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +8 -8
  158. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +8 -6
  159. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
  160. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
  161. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
  162. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
  163. 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 +1 -0
  164. 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 +8 -6
  165. 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 +8 -6
  166. 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 +2 -9
  167. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +1 -0
  168. honeycomb/_generated/models/create_environment_request.py +8 -6
  169. honeycomb/_generated/models/create_environment_request_data.py +10 -7
  170. honeycomb/_generated/models/create_environment_request_data_attributes.py +2 -9
  171. honeycomb/_generated/models/create_environment_request_data_type.py +1 -0
  172. honeycomb/_generated/models/create_events_content_encoding.py +1 -0
  173. honeycomb/_generated/models/create_events_response_200_item.py +2 -9
  174. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +10 -10
  175. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +1 -7
  176. honeycomb/_generated/models/create_map_dependencies_request.py +2 -5
  177. honeycomb/_generated/models/create_map_dependencies_response.py +4 -10
  178. honeycomb/_generated/models/create_map_dependencies_response_status.py +1 -0
  179. honeycomb/_generated/models/create_pipeline_health_record_request.py +8 -6
  180. honeycomb/_generated/models/create_pipeline_health_record_request_data.py +10 -7
  181. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +8 -8
  182. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +8 -6
  183. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
  184. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
  185. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
  186. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
  187. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +1 -0
  188. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +8 -6
  189. 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 +8 -6
  190. 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 +2 -9
  191. honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +1 -0
  192. honeycomb/_generated/models/create_query_result_request.py +2 -9
  193. honeycomb/_generated/models/dataset.py +2 -6
  194. honeycomb/_generated/models/dataset_creation_payload.py +2 -9
  195. honeycomb/_generated/models/dataset_definition_type_1.py +4 -10
  196. honeycomb/_generated/models/dataset_definition_type_1_column_type.py +1 -0
  197. honeycomb/_generated/models/dataset_definitions.py +2 -6
  198. honeycomb/_generated/models/dataset_relationship.py +2 -3
  199. honeycomb/_generated/models/dataset_relationship_data.py +2 -8
  200. honeycomb/_generated/models/dataset_relationship_data_type.py +1 -0
  201. honeycomb/_generated/models/dataset_settings.py +2 -9
  202. honeycomb/_generated/models/dataset_update_payload.py +8 -8
  203. honeycomb/_generated/models/dataset_update_payload_settings.py +2 -9
  204. honeycomb/_generated/models/detailed_error.py +2 -9
  205. honeycomb/_generated/models/email_recipient.py +4 -7
  206. honeycomb/_generated/models/email_recipient_details.py +1 -7
  207. honeycomb/_generated/models/email_recipient_type.py +1 -0
  208. honeycomb/_generated/models/environment.py +6 -7
  209. honeycomb/_generated/models/environment_attributes.py +11 -9
  210. honeycomb/_generated/models/environment_attributes_color_type_1.py +1 -0
  211. honeycomb/_generated/models/environment_attributes_settings.py +1 -7
  212. honeycomb/_generated/models/environment_color.py +1 -0
  213. honeycomb/_generated/models/environment_links.py +1 -7
  214. honeycomb/_generated/models/environment_list_response.py +2 -5
  215. honeycomb/_generated/models/environment_relationship.py +8 -6
  216. honeycomb/_generated/models/environment_relationship_data.py +3 -8
  217. honeycomb/_generated/models/environment_relationship_data_type.py +1 -0
  218. honeycomb/_generated/models/environment_response.py +2 -3
  219. honeycomb/_generated/models/environment_type.py +1 -0
  220. honeycomb/_generated/models/error.py +2 -9
  221. honeycomb/_generated/models/event.py +2 -8
  222. honeycomb/_generated/models/exhaustion_time.py +4 -12
  223. honeycomb/_generated/models/exhaustion_time_alert_type.py +1 -0
  224. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +10 -10
  225. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +2 -9
  226. honeycomb/_generated/models/filter_op.py +1 -0
  227. honeycomb/_generated/models/get_map_dependencies_response.py +7 -10
  228. honeycomb/_generated/models/get_map_dependencies_response_status.py +1 -0
  229. honeycomb/_generated/models/having_calculate_op.py +1 -0
  230. honeycomb/_generated/models/having_op.py +1 -0
  231. honeycomb/_generated/models/included_resource.py +6 -7
  232. honeycomb/_generated/models/included_resource_attributes.py +1 -7
  233. honeycomb/_generated/models/ingest_key_attributes.py +14 -11
  234. honeycomb/_generated/models/ingest_key_attributes_key_type.py +1 -0
  235. honeycomb/_generated/models/ingest_key_attributes_permissions.py +2 -9
  236. honeycomb/_generated/models/ingest_key_attributes_timestamps.py +4 -12
  237. honeycomb/_generated/models/ingest_key_request.py +100 -0
  238. honeycomb/_generated/models/ingest_key_request_attributes.py +75 -0
  239. honeycomb/_generated/models/ingest_key_request_type.py +8 -0
  240. honeycomb/_generated/models/ingest_key_type.py +2 -9
  241. honeycomb/_generated/models/ingest_key_type_key_type.py +1 -0
  242. honeycomb/_generated/models/jsonapi_error_source.py +2 -9
  243. honeycomb/_generated/models/kinesis_event.py +2 -5
  244. honeycomb/_generated/models/kinesis_event_record.py +2 -9
  245. honeycomb/_generated/models/kinesis_response.py +2 -9
  246. honeycomb/_generated/models/list_api_keys_filtertype.py +1 -0
  247. honeycomb/_generated/models/map_dependency.py +2 -5
  248. honeycomb/_generated/models/map_node.py +2 -9
  249. honeycomb/_generated/models/map_node_type.py +1 -0
  250. honeycomb/_generated/models/marker.py +2 -9
  251. honeycomb/_generated/models/marker_create_request.py +2 -3
  252. honeycomb/_generated/models/marker_create_request_data.py +16 -10
  253. honeycomb/_generated/models/marker_create_request_data_attributes.py +2 -9
  254. honeycomb/_generated/models/marker_create_request_data_relationships.py +2 -3
  255. honeycomb/_generated/models/marker_create_request_data_type.py +1 -0
  256. honeycomb/_generated/models/marker_object.py +7 -8
  257. honeycomb/_generated/models/marker_object_attributes.py +8 -8
  258. honeycomb/_generated/models/marker_object_attributes_timestamps.py +4 -12
  259. honeycomb/_generated/models/marker_object_links.py +2 -9
  260. honeycomb/_generated/models/marker_object_relationships.py +8 -8
  261. honeycomb/_generated/models/marker_object_relationships_dataset.py +8 -9
  262. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +4 -10
  263. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +1 -0
  264. honeycomb/_generated/models/marker_object_type.py +1 -0
  265. honeycomb/_generated/models/marker_response.py +2 -3
  266. honeycomb/_generated/models/marker_setting.py +2 -10
  267. honeycomb/_generated/models/marker_update_request.py +2 -3
  268. honeycomb/_generated/models/marker_update_request_data.py +16 -10
  269. honeycomb/_generated/models/marker_update_request_data_attributes.py +2 -9
  270. honeycomb/_generated/models/marker_update_request_data_relationships.py +2 -3
  271. honeycomb/_generated/models/marker_update_request_data_type.py +1 -0
  272. honeycomb/_generated/models/ms_teams_recipient.py +4 -7
  273. honeycomb/_generated/models/ms_teams_recipient_details.py +1 -7
  274. honeycomb/_generated/models/ms_teams_recipient_type.py +1 -0
  275. honeycomb/_generated/models/ms_teams_workflow_recipient.py +12 -11
  276. honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +1 -7
  277. honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +1 -0
  278. honeycomb/_generated/models/notification_recipient.py +8 -8
  279. honeycomb/_generated/models/notification_recipient_details.py +10 -9
  280. honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +1 -0
  281. honeycomb/_generated/models/notification_recipient_details_variables_item.py +2 -9
  282. honeycomb/_generated/models/pager_duty_recipient.py +8 -9
  283. honeycomb/_generated/models/pager_duty_recipient_details.py +1 -7
  284. honeycomb/_generated/models/pager_duty_recipient_type.py +1 -0
  285. honeycomb/_generated/models/pagination_links.py +2 -8
  286. honeycomb/_generated/models/payload_template.py +2 -9
  287. honeycomb/_generated/models/pipeline_configuration_response.py +16 -10
  288. honeycomb/_generated/models/pipeline_configuration_response_attributes.py +8 -8
  289. honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +1 -7
  290. honeycomb/_generated/models/pipeline_configuration_response_links.py +2 -9
  291. honeycomb/_generated/models/pipeline_configuration_response_type.py +1 -0
  292. honeycomb/_generated/models/pipeline_configuration_rollout.py +16 -10
  293. honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +3 -8
  294. honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +1 -0
  295. honeycomb/_generated/models/pipeline_configuration_rollout_links.py +2 -9
  296. honeycomb/_generated/models/pipeline_configuration_rollout_type.py +1 -0
  297. honeycomb/_generated/models/preset_filter.py +1 -7
  298. honeycomb/_generated/models/query.py +11 -11
  299. honeycomb/_generated/models/query_annotation.py +4 -12
  300. honeycomb/_generated/models/query_annotation_source.py +1 -0
  301. honeycomb/_generated/models/query_calculated_fields_item.py +1 -7
  302. honeycomb/_generated/models/query_calculations_item.py +2 -10
  303. honeycomb/_generated/models/query_compare_time_offset_seconds.py +1 -0
  304. honeycomb/_generated/models/query_filter_combination.py +1 -0
  305. honeycomb/_generated/models/query_filters_item.py +2 -11
  306. honeycomb/_generated/models/query_havings_item.py +2 -10
  307. honeycomb/_generated/models/query_op.py +1 -0
  308. honeycomb/_generated/models/query_orders_item.py +2 -9
  309. honeycomb/_generated/models/query_orders_item_order.py +1 -0
  310. honeycomb/_generated/models/query_panel.py +2 -6
  311. honeycomb/_generated/models/query_panel_query_panel.py +10 -9
  312. honeycomb/_generated/models/query_panel_query_panel_query_style.py +1 -0
  313. honeycomb/_generated/models/query_result.py +2 -5
  314. honeycomb/_generated/models/query_result_details.py +5 -8
  315. honeycomb/_generated/models/query_result_details_data.py +5 -8
  316. honeycomb/_generated/models/query_result_details_links.py +2 -9
  317. honeycomb/_generated/models/query_result_links.py +2 -9
  318. honeycomb/_generated/models/query_results_data.py +2 -5
  319. honeycomb/_generated/models/query_results_data_data.py +2 -8
  320. honeycomb/_generated/models/query_results_series.py +2 -5
  321. honeycomb/_generated/models/recipient_properties.py +4 -12
  322. honeycomb/_generated/models/recipient_type.py +1 -0
  323. honeycomb/_generated/models/slack_recipient.py +4 -7
  324. honeycomb/_generated/models/slack_recipient_details.py +1 -7
  325. honeycomb/_generated/models/slack_recipient_type.py +1 -0
  326. honeycomb/_generated/models/slo.py +4 -8
  327. honeycomb/_generated/models/slo_create.py +4 -8
  328. honeycomb/_generated/models/slo_create_sli.py +1 -7
  329. honeycomb/_generated/models/slo_detailed_response.py +4 -8
  330. honeycomb/_generated/models/slo_detailed_response_status.py +1 -0
  331. honeycomb/_generated/models/slo_history.py +2 -9
  332. honeycomb/_generated/models/slo_history_request.py +2 -8
  333. honeycomb/_generated/models/slo_history_response.py +2 -3
  334. honeycomb/_generated/models/slo_panel.py +2 -6
  335. honeycomb/_generated/models/slo_panel_slo_panel.py +2 -9
  336. honeycomb/_generated/models/slo_sli.py +1 -7
  337. honeycomb/_generated/models/tag.py +1 -7
  338. honeycomb/_generated/models/team_relationship.py +2 -3
  339. honeycomb/_generated/models/team_relationship_team.py +6 -5
  340. honeycomb/_generated/models/team_relationship_team_data.py +3 -8
  341. honeycomb/_generated/models/team_relationship_team_data_type.py +1 -0
  342. honeycomb/_generated/models/template_variable_definition.py +2 -9
  343. honeycomb/_generated/models/text_panel.py +2 -6
  344. honeycomb/_generated/models/text_panel_text_panel.py +1 -7
  345. honeycomb/_generated/models/trigger_response.py +27 -21
  346. honeycomb/_generated/models/trigger_with_inline_query.py +27 -21
  347. honeycomb/_generated/models/trigger_with_inline_query_query.py +1 -7
  348. honeycomb/_generated/models/trigger_with_query_reference.py +21 -18
  349. honeycomb/_generated/models/update_board_view_request.py +2 -5
  350. honeycomb/_generated/models/update_environment_request.py +8 -6
  351. honeycomb/_generated/models/update_environment_request_data.py +10 -7
  352. honeycomb/_generated/models/update_environment_request_data_attributes.py +8 -8
  353. honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +2 -9
  354. honeycomb/_generated/models/update_environment_request_data_type.py +1 -0
  355. honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +4 -7
  356. honeycomb/_generated/models/update_pipeline_configuration_rollout.py +10 -7
  357. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +3 -8
  358. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +1 -0
  359. honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +8 -6
  360. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +10 -7
  361. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +3 -8
  362. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +1 -0
  363. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +1 -0
  364. honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +8 -6
  365. honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +1 -0
  366. honeycomb/_generated/models/user_relationship.py +2 -3
  367. honeycomb/_generated/models/user_relationship_data.py +2 -8
  368. honeycomb/_generated/models/user_relationship_data_type.py +1 -0
  369. honeycomb/_generated/models/validation_error.py +8 -8
  370. honeycomb/_generated/models/validation_error_type_detail_item.py +4 -10
  371. honeycomb/_generated/models/validation_error_type_detail_item_code.py +1 -0
  372. honeycomb/_generated/models/webhook_header.py +2 -9
  373. honeycomb/_generated/models/webhook_recipient.py +4 -7
  374. honeycomb/_generated/models/webhook_recipient_details.py +8 -8
  375. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +12 -10
  376. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +2 -5
  377. honeycomb/_generated/models/webhook_recipient_type.py +1 -0
  378. honeycomb/_generated/types.py +1 -1
  379. honeycomb/cli/__init__.py +85 -0
  380. honeycomb/cli/api_keys.py +205 -0
  381. honeycomb/cli/auth.py +70 -0
  382. honeycomb/cli/boards.py +203 -0
  383. honeycomb/cli/columns.py +256 -0
  384. honeycomb/cli/config.py +259 -0
  385. honeycomb/cli/datasets.py +186 -0
  386. honeycomb/cli/derived_columns.py +222 -0
  387. honeycomb/cli/environments.py +240 -0
  388. honeycomb/cli/formatters.py +242 -0
  389. honeycomb/cli/markers.py +151 -0
  390. honeycomb/cli/queries.py +380 -0
  391. honeycomb/cli/recipients.py +211 -0
  392. honeycomb/cli/slos.py +338 -0
  393. honeycomb/cli/triggers.py +271 -0
  394. honeycomb/client.py +13 -7
  395. honeycomb/models/__init__.py +18 -3
  396. honeycomb/models/api_keys.py +49 -5
  397. honeycomb/models/auth.py +71 -0
  398. honeycomb/models/board_builder.py +97 -25
  399. honeycomb/models/boards.py +95 -1
  400. honeycomb/models/datasets.py +42 -0
  401. honeycomb/models/queries.py +21 -0
  402. honeycomb/models/query_builder.py +119 -59
  403. honeycomb/models/recipient_builder.py +51 -4
  404. honeycomb/models/slo_builder.py +24 -19
  405. honeycomb/models/slos.py +50 -3
  406. honeycomb/models/tool_inputs.py +630 -0
  407. honeycomb/models/triggers.py +39 -9
  408. honeycomb/resources/__init__.py +2 -0
  409. honeycomb/resources/api_keys.py +66 -29
  410. honeycomb/resources/auth.py +97 -0
  411. honeycomb/resources/boards.py +272 -18
  412. honeycomb/resources/datasets.py +49 -11
  413. honeycomb/resources/environments.py +54 -31
  414. honeycomb/resources/slos.py +87 -61
  415. honeycomb/tools/__main__.py +40 -4
  416. honeycomb/tools/builders.py +235 -150
  417. honeycomb/tools/descriptions.py +175 -7
  418. honeycomb/tools/executor.py +212 -25
  419. honeycomb/tools/generator.py +61 -2264
  420. honeycomb/tools/resources/__init__.py +42 -0
  421. honeycomb/tools/resources/api_keys.py +249 -0
  422. honeycomb/tools/resources/auth.py +98 -0
  423. honeycomb/tools/resources/boards.py +313 -0
  424. honeycomb/tools/resources/burn_alerts.py +278 -0
  425. honeycomb/tools/resources/columns.py +257 -0
  426. honeycomb/tools/resources/datasets.py +215 -0
  427. honeycomb/tools/resources/derived_columns.py +311 -0
  428. honeycomb/tools/resources/environments.py +211 -0
  429. honeycomb/tools/resources/events.py +158 -0
  430. honeycomb/tools/resources/marker_settings.py +216 -0
  431. honeycomb/tools/resources/markers.py +197 -0
  432. honeycomb/tools/resources/queries.py +220 -0
  433. honeycomb/tools/resources/recipients.py +297 -0
  434. honeycomb/tools/resources/service_map.py +110 -0
  435. honeycomb/tools/resources/slos.py +276 -0
  436. honeycomb/tools/resources/triggers.py +328 -0
  437. honeycomb/tools/schemas.py +81 -0
  438. {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/METADATA +33 -8
  439. honeycomb_api-0.5.3.dist-info/RECORD +497 -0
  440. honeycomb_api-0.5.3.dist-info/entry_points.txt +5 -0
  441. honeycomb_api-0.1.0.dist-info/RECORD +0 -453
  442. {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/WHEEL +0 -0
  443. {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/licenses/LICENSE +0 -0
@@ -70,6 +70,9 @@ SLO_DESCRIPTIONS = {
70
70
  "Use this when defining reliability targets for services, such as 99.9% availability or p99 latency targets. "
71
71
  "Requires a dataset, SLO name, target (as percentage, per-million, or nines), time period in days, and an SLI definition. "
72
72
  "For the SLI, provide an alias and optionally an expression - if expression is provided, a new derived column is created inline; if only alias is provided, it uses an existing derived column. "
73
+ "SLI EXPRESSION SYNTAX: Must return boolean (1/0 coerced). Use $ prefix for columns (case-sensitive). "
74
+ "Example: LT($status_code, 500) or AND(LT($status_code, 500), LT($duration_ms, 1000)). "
75
+ "See honeycomb_create_derived_column for full expression syntax (conditionals, comparisons, regex, etc.). "
73
76
  "You can also add burn alerts inline to notify when error budget depletes too quickly. "
74
77
  "Supports both single-dataset and multi-dataset SLOs."
75
78
  ),
@@ -251,6 +254,55 @@ RECIPIENT_DESCRIPTIONS = {
251
254
  # Derived Columns
252
255
  # ==============================================================================
253
256
 
257
+ # Shared syntax reference for derived column descriptions
258
+ _DERIVED_COLUMN_SYNTAX_GUIDE = """
259
+ EXPRESSION SYNTAX REFERENCE:
260
+ - Column refs: $column_name or $"column with spaces" (CASE-SENSITIVE)
261
+ - Strings: double quotes ("value")
262
+ - Regex patterns: backticks (`pattern`)
263
+ - DCs operate on ONE ROW at a time - they are NOT aggregation functions
264
+
265
+ CONDITIONALS:
266
+ - IF(cond, true_val, false_val) - e.g., IF(LT($status, 400), "ok", "error")
267
+ - SWITCH($field, "case1", result1, "case2", result2, default) - string matching
268
+ - COALESCE(a, b, c) - first non-null value
269
+
270
+ COMPARISONS (return bool):
271
+ - LT, LTE, GT, GTE - e.g., LT($duration_ms, 1000)
272
+ - EQUALS($a, $b) - e.g., EQUALS($method, "GET")
273
+ - IN($field, val1, val2, ...) - e.g., IN($status, 200, 201, 204)
274
+
275
+ BOOLEAN:
276
+ - EXISTS($field) - true if field is non-null
277
+ - NOT(cond), AND(a, b, ...), OR(a, b, ...)
278
+
279
+ MATH: MIN, MAX, SUM, SUB, MUL, DIV, MOD, LOG10
280
+
281
+ STRING:
282
+ - CONCAT($a, " ", $b) - join strings
283
+ - STARTS_WITH($str, "prefix"), ENDS_WITH, CONTAINS - return bool
284
+ - TO_LOWER($str), LENGTH($str)
285
+
286
+ REGEX (use backticks for patterns):
287
+ - REG_MATCH($str, `pattern`) - returns bool
288
+ - REG_VALUE($str, `^/api/(.+)`) - extracts first capture group
289
+ - REG_COUNT($str, `pattern`) - count matches
290
+
291
+ TIME:
292
+ - EVENT_TIMESTAMP() - event time as Unix timestamp
293
+ - UNIX_TIMESTAMP($field) - parse field as timestamp
294
+ - FORMAT_TIME("%Y-%m-%d", $timestamp_field) - strftime formatting
295
+
296
+ DATA: BUCKET($val, size) - numeric bucketing
297
+
298
+ TYPE CONVERSION: INT(), FLOAT(), BOOL(), STRING()
299
+
300
+ COMMON PATTERNS:
301
+ - SLI for SLOs (MUST return boolean; 1/0 coerced to true/false): LT($status_code, 500)
302
+ - Root span detection: NOT(EXISTS($trace.parent_id))
303
+ - Error classification: IF(GTE($status, 500), "server_error", IF(GTE($status, 400), "client_error", "success"))
304
+ """
305
+
254
306
  DERIVED_COLUMN_DESCRIPTIONS = {
255
307
  "honeycomb_list_derived_columns": (
256
308
  "Lists all derived columns (calculated fields) in a dataset. "
@@ -268,15 +320,16 @@ DERIVED_COLUMN_DESCRIPTIONS = {
268
320
  "Creates a new standalone derived column that calculates values from event fields using expressions. "
269
321
  "Use this for general-purpose computed metrics, data normalization, or calculations that will be used in multiple queries. "
270
322
  "NOTE: If you are creating a derived column specifically for an SLO, use honeycomb_create_slo instead with an inline SLI expression - it creates both in one operation. "
271
- "Requires the dataset slug (use '__all__' for environment-wide), an alias (the column name), and an expression using Honeycomb's query language. "
272
- "Common expression functions include IF() for conditionals, EQUALS/LT/GT for comparisons, and field references with $ prefix (e.g., $status_code). "
273
- "Optional description parameter documents the column's purpose for team members."
323
+ "Requires the dataset slug (use '__all__' for environment-wide), an alias (the column name), and an expression. "
324
+ "Optional description parameter documents the column's purpose for team members. "
325
+ + _DERIVED_COLUMN_SYNTAX_GUIDE
274
326
  ),
275
327
  "honeycomb_update_derived_column": (
276
328
  "Updates an existing derived column's alias, expression, or description. "
277
329
  "Use this to fix calculation logic, rename computed fields, or improve documentation as your understanding evolves. "
278
330
  "Requires the dataset slug, derived column ID, and the complete updated configuration. "
279
- "Note: Changing the expression only affects new queries - existing query results are not recalculated."
331
+ "Note: Changing the expression only affects new queries - existing query results are not recalculated. "
332
+ + _DERIVED_COLUMN_SYNTAX_GUIDE
280
333
  ),
281
334
  "honeycomb_delete_derived_column": (
282
335
  "Permanently deletes a derived column from a dataset. "
@@ -297,6 +350,7 @@ QUERY_DESCRIPTIONS = {
297
350
  "Requires the dataset slug and query specification including time_range and calculations. "
298
351
  "Optional annotation_name parameter creates the query with a display name for easier identification in the UI. "
299
352
  "The query specification supports multiple calculations (unlike triggers which allow only one), filters, breakdowns, orders, havings, and limits for comprehensive data analysis."
353
+ "Queries can include calculated_fields (derived columns) - see honeycomb_create_derived_column for expression syntax. "
300
354
  ),
301
355
  "honeycomb_get_query": (
302
356
  "Retrieves a saved query's configuration by its ID. "
@@ -331,12 +385,16 @@ BOARD_DESCRIPTIONS = {
331
385
  "Returns the complete board configuration including all panel definitions, layout mode (auto or manual), tags, and links to visualizations."
332
386
  ),
333
387
  "honeycomb_create_board": (
334
- "Creates a new board (dashboard) with inline query panels, SLO panels, and text panels in a single operation. "
388
+ "Creates a new board (dashboard) with inline query panels, SLO panels, text panels, board views, and preset filters in a single operation. "
335
389
  "Use this to build comprehensive dashboards for service monitoring, create SRE views, or consolidate related visualizations. "
336
- "Requires a name and supports inline_query_panels (array of query definitions that will be created automatically), text_panels (markdown content), and slo_panels (SLO IDs). "
390
+ "Requires a name and supports inline_query_panels (array of query definitions that will be created automatically), text_panels (markdown content), slo_panels (SLO IDs), views (filtered perspectives), and preset_filters (dynamic filters). "
337
391
  "Each inline query panel needs a name, dataset, time_range, and calculations - optionally include filters, breakdowns, orders, and limit. "
392
+ "Query panels can include calculated_fields (derived columns) - see honeycomb_create_derived_column for expression syntax. "
393
+ "For inline SLO panels with SLI expressions: must return boolean, use $ prefix for columns. Example: LT($status_code, 500). "
394
+ "Board views allow creating filtered perspectives (max 50 per board): each view has a name and filters array with column, operation (=, !=, >, >=, <, <=, contains, starts-with, ends-with, exists, in), and value. "
395
+ "Preset filters (max 5) allow dynamic filtering of board data: each has column and alias properties. "
338
396
  "Layout defaults to auto-layout (Honeycomb arranges panels) but supports manual layout with explicit positioning. "
339
- "The tool orchestrates: creating all inline queries with annotations, assembling panel configurations, and creating the board with all panels in one API call."
397
+ "The tool orchestrates: creating all inline queries with annotations, inline SLOs, board views, preset filters, assembling panel configurations, and creating the board with all components in one API call."
340
398
  ),
341
399
  "honeycomb_update_board": (
342
400
  "Updates an existing board's name, description, or panel configuration. "
@@ -460,6 +518,113 @@ SERVICE_MAP_DESCRIPTIONS = {
460
518
  ),
461
519
  }
462
520
 
521
+ # ==============================================================================
522
+ # Auth
523
+ # ==============================================================================
524
+
525
+ AUTH_DESCRIPTIONS = {
526
+ "honeycomb_get_auth": (
527
+ "Returns metadata about the API key used to authenticate with Honeycomb. "
528
+ "Use this to verify authentication is working correctly, check key permissions and scopes, "
529
+ "or discover which team and environment the key belongs to. "
530
+ "Automatically detects whether to use the v1 endpoint (for regular API keys) or "
531
+ "v2 endpoint (for management keys) based on the configured credentials. "
532
+ "Set use_v2=true to explicitly request management key information, which includes "
533
+ "scopes and team details. Returns an error if use_v2=true but management credentials "
534
+ "are not configured."
535
+ ),
536
+ }
537
+
538
+ # ==============================================================================
539
+ # API Keys (v2)
540
+ # ==============================================================================
541
+
542
+ API_KEY_DESCRIPTIONS = {
543
+ "honeycomb_list_api_keys": (
544
+ "Lists all API keys for your authenticated team with optional filtering by key type. "
545
+ "Use this to audit team API keys, discover existing keys before creating new ones, or when migrating to management key authentication. "
546
+ "Requires management key authentication. The team is automatically detected from your credentials (no team parameter needed). "
547
+ "Optional key_type parameter filters by 'ingest' or 'configuration' keys. "
548
+ "Returns a list of API key objects with their IDs, names, types, environment associations, and disabled status. "
549
+ "Note: The key secrets are not included in list responses for security."
550
+ ),
551
+ "honeycomb_get_api_key": (
552
+ "Retrieves detailed information about a specific API key by ID. "
553
+ "Use this to inspect an API key's configuration including name, type, environment, and disabled status before updating or deleting it. "
554
+ "Requires only the key ID parameter - the team is automatically detected from your management key credentials. "
555
+ "Returns the complete API key configuration but does NOT include the secret (only shown on creation). "
556
+ "Use this to verify key settings or check which environment a key is associated with."
557
+ ),
558
+ "honeycomb_create_api_key": (
559
+ "Creates a new API key for your authenticated team in a specific environment. "
560
+ "Use this when provisioning new services, creating separate keys for different applications, or rotating credentials. "
561
+ "Requires key name, key_type ('ingest' for data sending or 'configuration' for API access), and environment_id. The team is automatically detected from your management key. "
562
+ "CRITICAL FOR CONFIGURATION KEYS: Must include permissions object with boolean properties. Available permissions: 'create_datasets', 'send_events', 'manage_markers', 'manage_triggers', 'manage_boards', 'run_queries', 'manage_columns', 'manage_slos', 'manage_recipients', 'manage_privateBoards'. "
563
+ "Example for full access: {'create_datasets': true, 'send_events': true, 'manage_markers': true, 'manage_triggers': true, 'manage_boards': true, 'run_queries': true, 'manage_columns': true, 'manage_slos': true, 'manage_recipients': true, 'manage_privateBoards': true}. "
564
+ "Without permissions object, configuration keys will have NO permissions and cannot perform any actions. "
565
+ "Ingest keys have fixed permissions (send events, optionally create datasets implicitly) and don't use permissions object. "
566
+ "CRITICAL: The secret is only returned once during creation - save it immediately. "
567
+ "Returns the created API key object including the secret field (only time it's available)."
568
+ ),
569
+ "honeycomb_update_api_key": (
570
+ "Updates an existing API key's name or disabled status. "
571
+ "Use this to rename keys for clarity, disable compromised keys, or re-enable previously disabled keys. "
572
+ "Requires key ID and at least one of: name (new display name) or disabled (true/false). The team is automatically detected from your credentials. "
573
+ "Note: You cannot change the key type or environment after creation. To rotate the secret, delete and create a new key. "
574
+ "The secret value is never returned in update responses."
575
+ ),
576
+ "honeycomb_delete_api_key": (
577
+ "Permanently deletes an API key from Honeycomb. "
578
+ "Use this when decommissioning services, rotating credentials after a security incident, or cleaning up unused keys. "
579
+ "Requires only the key ID parameter - the team is automatically detected from your management key. "
580
+ "Warning: This action cannot be undone. Any services using this key will immediately lose API access. "
581
+ "The secret cannot be recovered - you must create a new key if deleted accidentally."
582
+ ),
583
+ }
584
+
585
+ # ==============================================================================
586
+ # Environments (v2)
587
+ # ==============================================================================
588
+
589
+ ENVIRONMENT_DESCRIPTIONS = {
590
+ "honeycomb_list_environments": (
591
+ "Lists all environments for your authenticated team. "
592
+ "Use this to discover existing environments, understand team organization, or before creating API keys scoped to specific environments. "
593
+ "Requires management key authentication. The team is automatically detected from your credentials (no team parameter needed). "
594
+ "Returns a list of environment objects with their IDs, names, slugs, colors, descriptions, and delete protection status. "
595
+ "Environments help organize your telemetry data by separating production, staging, development, etc."
596
+ ),
597
+ "honeycomb_get_environment": (
598
+ "Retrieves detailed information about a specific environment by ID, optionally including its datasets. "
599
+ "Use this to inspect an environment's configuration or get a complete view of an environment including all its datasets. "
600
+ "Requires only the environment ID parameter - the team is automatically detected from your management key. "
601
+ "Set with_datasets=true to also return the list of datasets in this environment (useful for understanding environment contents). "
602
+ "Returns the environment configuration plus optionally a datasets array with all datasets in this environment."
603
+ ),
604
+ "honeycomb_create_environment": (
605
+ "Creates a new environment for organizing telemetry data within your authenticated team. "
606
+ "Use this when setting up new deployment stages (production, staging, dev), isolating customer data, or creating test environments. "
607
+ "Requires only the environment name - the team is automatically detected from your management key. "
608
+ "Optional parameters include description for documentation and color (blue, green, gold, red, purple, or light variants) for visual distinction. "
609
+ "The environment slug is auto-generated from the name and used for API operations and dataset scoping. "
610
+ "New environments are delete-protected by default to prevent accidental deletion."
611
+ ),
612
+ "honeycomb_update_environment": (
613
+ "Updates an existing environment's description, color, or delete protection status. "
614
+ "Use this to add documentation, change visual appearance, or enable/disable delete protection for production environments. "
615
+ "Requires environment ID and at least one of: description, color, or delete_protected (boolean). The team is automatically detected from your credentials. "
616
+ "Note: The name and slug cannot be changed after creation. Setting delete_protected=true prevents accidental deletion. "
617
+ "To delete a protected environment, you must first update it with delete_protected=false."
618
+ ),
619
+ "honeycomb_delete_environment": (
620
+ "Permanently deletes an environment from Honeycomb. "
621
+ "Use this when decommissioning deployment stages, cleaning up test environments, or reorganizing team structure. "
622
+ "Requires only the environment ID parameter - the team is automatically detected from your management key. "
623
+ "Warning: This action cannot be undone. The environment must not be delete-protected. "
624
+ "All API keys scoped to this environment will become invalid. Datasets are NOT deleted automatically."
625
+ ),
626
+ }
627
+
463
628
  # Combined mapping of all descriptions
464
629
  ALL_DESCRIPTIONS = {
465
630
  **TRIGGER_DESCRIPTIONS,
@@ -475,6 +640,9 @@ ALL_DESCRIPTIONS = {
475
640
  **MARKER_SETTING_DESCRIPTIONS,
476
641
  **EVENT_DESCRIPTIONS,
477
642
  **SERVICE_MAP_DESCRIPTIONS,
643
+ **AUTH_DESCRIPTIONS,
644
+ **API_KEY_DESCRIPTIONS,
645
+ **ENVIRONMENT_DESCRIPTIONS,
478
646
  }
479
647
 
480
648
 
@@ -13,6 +13,7 @@ from honeycomb.models import (
13
13
  BurnAlertRecipient,
14
14
  ColumnCreate,
15
15
  DatasetCreate,
16
+ DatasetUpdate,
16
17
  DerivedColumnCreate,
17
18
  MarkerCreate,
18
19
  MarkerSettingCreate,
@@ -27,6 +28,28 @@ if TYPE_CHECKING:
27
28
  from honeycomb import HoneycombClient
28
29
 
29
30
 
31
+ # ==============================================================================
32
+ # Metadata Field Handling
33
+ # ==============================================================================
34
+
35
+
36
+ def strip_metadata_fields(tool_input: dict[str, Any]) -> dict[str, Any]:
37
+ """Strip Claude reasoning metadata fields before API execution.
38
+
39
+ These fields are for downstream applications to observe Claude's reasoning
40
+ and are NOT sent to the Honeycomb API.
41
+
42
+ Args:
43
+ tool_input: The tool input dict (will be modified in place)
44
+
45
+ Returns:
46
+ The same dict with metadata fields removed
47
+ """
48
+ tool_input.pop("confidence", None)
49
+ tool_input.pop("notes", None)
50
+ return tool_input
51
+
52
+
30
53
  # ==============================================================================
31
54
  # Main Executor
32
55
  # ==============================================================================
@@ -63,8 +86,36 @@ async def execute_tool(
63
86
  ... )
64
87
  ... print(result) # JSON string
65
88
  """
89
+ # Strip metadata fields before processing
90
+ # These are for Claude's reasoning and not sent to Honeycomb API
91
+ strip_metadata_fields(tool_input)
92
+
66
93
  # Route to appropriate handler
67
- if tool_name == "honeycomb_list_triggers":
94
+ if tool_name == "honeycomb_get_auth":
95
+ return await _execute_get_auth(client, tool_input)
96
+ # API Keys (v2)
97
+ elif tool_name == "honeycomb_list_api_keys":
98
+ return await _execute_list_api_keys(client, tool_input)
99
+ elif tool_name == "honeycomb_get_api_key":
100
+ return await _execute_get_api_key(client, tool_input)
101
+ elif tool_name == "honeycomb_create_api_key":
102
+ return await _execute_create_api_key(client, tool_input)
103
+ elif tool_name == "honeycomb_update_api_key":
104
+ return await _execute_update_api_key(client, tool_input)
105
+ elif tool_name == "honeycomb_delete_api_key":
106
+ return await _execute_delete_api_key(client, tool_input)
107
+ # Environments (v2)
108
+ elif tool_name == "honeycomb_list_environments":
109
+ return await _execute_list_environments(client, tool_input)
110
+ elif tool_name == "honeycomb_get_environment":
111
+ return await _execute_get_environment(client, tool_input)
112
+ elif tool_name == "honeycomb_create_environment":
113
+ return await _execute_create_environment(client, tool_input)
114
+ elif tool_name == "honeycomb_update_environment":
115
+ return await _execute_update_environment(client, tool_input)
116
+ elif tool_name == "honeycomb_delete_environment":
117
+ return await _execute_delete_environment(client, tool_input)
118
+ elif tool_name == "honeycomb_list_triggers":
68
119
  return await _execute_list_triggers(client, tool_input)
69
120
  elif tool_name == "honeycomb_get_trigger":
70
121
  return await _execute_get_trigger(client, tool_input)
@@ -195,6 +246,155 @@ async def execute_tool(
195
246
  )
196
247
 
197
248
 
249
+ # ==============================================================================
250
+ # Auth
251
+ # ==============================================================================
252
+
253
+
254
+ async def _execute_get_auth(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
255
+ """Execute honeycomb_get_auth tool."""
256
+ use_v2 = tool_input.get("use_v2")
257
+ result = await client.auth.get_async(use_v2=use_v2)
258
+ return json.dumps(result.model_dump(), default=str)
259
+
260
+
261
+ # ==============================================================================
262
+ # API Keys (v2)
263
+ # ==============================================================================
264
+
265
+
266
+ async def _execute_list_api_keys(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
267
+ """Execute honeycomb_list_api_keys tool."""
268
+ key_type = tool_input.get("key_type")
269
+ keys = await client.api_keys.list_async(key_type=key_type)
270
+ return json.dumps([k.model_dump() for k in keys], default=str)
271
+
272
+
273
+ async def _execute_get_api_key(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
274
+ """Execute honeycomb_get_api_key tool."""
275
+ key = await client.api_keys.get_async(key_id=tool_input["key_id"])
276
+ return json.dumps(key.model_dump(), default=str)
277
+
278
+
279
+ async def _execute_create_api_key(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
280
+ """Execute honeycomb_create_api_key tool."""
281
+ from honeycomb.models.api_keys import ApiKeyCreate, ApiKeyType
282
+
283
+ api_key = ApiKeyCreate(
284
+ name=tool_input["name"],
285
+ key_type=ApiKeyType(tool_input["key_type"]),
286
+ environment_id=tool_input["environment_id"],
287
+ permissions=tool_input.get("permissions"),
288
+ )
289
+ created = await client.api_keys.create_async(api_key=api_key)
290
+ return json.dumps(created.model_dump(), default=str)
291
+
292
+
293
+ async def _execute_update_api_key(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
294
+ """Execute honeycomb_update_api_key tool."""
295
+ from honeycomb.models.api_keys import ApiKeyUpdate
296
+
297
+ update = ApiKeyUpdate(
298
+ name=tool_input.get("name"),
299
+ disabled=tool_input.get("disabled"),
300
+ )
301
+ updated = await client.api_keys.update_async(
302
+ key_id=tool_input["key_id"],
303
+ api_key=update,
304
+ )
305
+ return json.dumps(updated.model_dump(), default=str)
306
+
307
+
308
+ async def _execute_delete_api_key(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
309
+ """Execute honeycomb_delete_api_key tool."""
310
+ await client.api_keys.delete_async(key_id=tool_input["key_id"])
311
+ return json.dumps({"status": "deleted", "key_id": tool_input["key_id"]})
312
+
313
+
314
+ # ==============================================================================
315
+ # Environments (v2)
316
+ # ==============================================================================
317
+
318
+
319
+ async def _execute_list_environments(client: "HoneycombClient", _tool_input: dict[str, Any]) -> str:
320
+ """Execute honeycomb_list_environments tool."""
321
+ envs = await client.environments.list_async()
322
+ return json.dumps([e.model_dump() for e in envs], default=str)
323
+
324
+
325
+ async def _execute_get_environment(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
326
+ """Execute honeycomb_get_environment tool."""
327
+ env = await client.environments.get_async(env_id=tool_input["env_id"])
328
+ result = env.model_dump()
329
+
330
+ # Optionally include datasets (requires environment-scoped API key)
331
+ if tool_input.get("with_datasets"):
332
+ import os
333
+
334
+ api_key = os.environ.get("HONEYCOMB_API_KEY")
335
+ if not api_key:
336
+ result["datasets_error"] = (
337
+ "Cannot list datasets: No HONEYCOMB_API_KEY found. "
338
+ "Datasets require an environment-scoped API key."
339
+ )
340
+ else:
341
+ # Create temporary client to verify environment match
342
+ from honeycomb import HoneycombClient
343
+
344
+ async with HoneycombClient(api_key=api_key) as api_key_client:
345
+ # Verify the API key is for this environment (force v1 for environment_slug)
346
+ from honeycomb.models.auth import AuthInfo
347
+
348
+ auth_info = await api_key_client.auth.get_async(use_v2=False)
349
+ assert isinstance(auth_info, AuthInfo) # use_v2=False always returns AuthInfo
350
+ if auth_info.environment_slug != result["slug"]:
351
+ result["datasets_error"] = (
352
+ f"Cannot list datasets: HONEYCOMB_API_KEY is for environment "
353
+ f"'{auth_info.environment_slug}' but requested '{result['slug']}'"
354
+ )
355
+ else:
356
+ # Environment matches - list datasets
357
+ datasets = await api_key_client.datasets.list_async()
358
+ result["datasets"] = [d.model_dump() for d in datasets]
359
+
360
+ return json.dumps(result, default=str)
361
+
362
+
363
+ async def _execute_create_environment(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
364
+ """Execute honeycomb_create_environment tool."""
365
+ from honeycomb.models.environments import EnvironmentColor, EnvironmentCreate
366
+
367
+ environment = EnvironmentCreate(
368
+ name=tool_input["name"],
369
+ description=tool_input.get("description"),
370
+ color=EnvironmentColor(tool_input["color"]) if tool_input.get("color") else None,
371
+ )
372
+ created = await client.environments.create_async(environment=environment)
373
+ return json.dumps(created.model_dump(), default=str)
374
+
375
+
376
+ async def _execute_update_environment(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
377
+ """Execute honeycomb_update_environment tool."""
378
+ from honeycomb.models.environments import EnvironmentColor, EnvironmentUpdate
379
+
380
+ environment = EnvironmentUpdate(
381
+ description=tool_input.get("description"),
382
+ color=EnvironmentColor(tool_input["color"]) if tool_input.get("color") else None,
383
+ delete_protected=tool_input.get("delete_protected"),
384
+ )
385
+ updated = await client.environments.update_async(
386
+ env_id=tool_input["env_id"],
387
+ environment=environment,
388
+ )
389
+ return json.dumps(updated.model_dump(), default=str)
390
+
391
+
392
+ async def _execute_delete_environment(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
393
+ """Execute honeycomb_delete_environment tool."""
394
+ await client.environments.delete_async(env_id=tool_input["env_id"])
395
+ return json.dumps({"status": "deleted", "env_id": tool_input["env_id"]})
396
+
397
+
198
398
  # ==============================================================================
199
399
  # Triggers
200
400
  # ==============================================================================
@@ -281,32 +481,19 @@ async def _execute_get_slo(client: "HoneycombClient", tool_input: dict[str, Any]
281
481
  async def _execute_create_slo(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
282
482
  """Execute honeycomb_create_slo.
283
483
 
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.
484
+ Always uses SLOBuilder with Pydantic validation and automatic target_percentage conversion.
485
+ Handles SLI expressions, burn alerts, and dataset list processing transparently.
286
486
  """
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()
487
+ # Validate and build (tool_input now contains datasets: list[str])
488
+ builder = _build_slo(tool_input)
489
+ bundle = builder.build()
298
490
 
299
- # Create via bundle (handles derived columns + burn alerts)
300
- created_slos = await client.slos.create_from_bundle_async(bundle)
491
+ # Create via bundle (handles derived columns, burn alerts, and all conversions)
492
+ created_slos = await client.slos.create_from_bundle_async(bundle)
301
493
 
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)
494
+ # Return the main SLO (first one created)
495
+ main_slo = list(created_slos.values())[0]
496
+ return json.dumps(main_slo.model_dump(), default=str)
310
497
 
311
498
 
312
499
  async def _execute_update_slo(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
@@ -431,7 +618,7 @@ async def _execute_create_dataset(client: "HoneycombClient", tool_input: dict[st
431
618
  async def _execute_update_dataset(client: "HoneycombClient", tool_input: dict[str, Any]) -> str:
432
619
  """Execute honeycomb_update_dataset."""
433
620
  slug = tool_input.pop("slug")
434
- dataset = DatasetCreate(**tool_input)
621
+ dataset = DatasetUpdate(**tool_input)
435
622
  updated = await client.datasets.update_async(slug=slug, dataset=dataset)
436
623
  return json.dumps(updated.model_dump(), default=str)
437
624