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
@@ -0,0 +1,630 @@
1
+ """Tool input models for Claude Code integration.
2
+
3
+ These models are specifically designed for tool validation with strict schema constraints:
4
+ - All models use extra="forbid" to reject unknown fields
5
+ - All enum fields use strict enum types (no | str unions)
6
+ - All models generate JSON schemas with additionalProperties: false
7
+
8
+ These models are used by:
9
+ 1. Tool schema generation (generator.py)
10
+ 2. Tool input validation (builders.py)
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from typing import Any, Literal
16
+
17
+ from pydantic import BaseModel, ConfigDict, Field
18
+
19
+ from honeycomb.models.query_builder import (
20
+ Calculation,
21
+ Filter,
22
+ FilterCombination,
23
+ FilterOp,
24
+ Having,
25
+ Order,
26
+ )
27
+
28
+ # =============================================================================
29
+ # Position & Layout
30
+ # =============================================================================
31
+
32
+
33
+ class PositionInput(BaseModel):
34
+ """Panel position on the board grid (API-native structure).
35
+
36
+ Note: This uses the API's named field structure instead of tuples.
37
+ Board grid is 24 units wide, panels can be 1-24 units in width/height.
38
+ """
39
+
40
+ model_config = ConfigDict(extra="forbid")
41
+
42
+ x_coordinate: int = Field(ge=0, description="X position on grid (0-based)")
43
+ y_coordinate: int = Field(ge=0, description="Y position on grid (0-based)")
44
+ width: int = Field(ge=1, le=24, description="Panel width in grid units (1-24)")
45
+ height: int = Field(ge=1, le=24, description="Panel height in grid units (1-24)")
46
+
47
+
48
+ # =============================================================================
49
+ # Visualization Settings
50
+ # =============================================================================
51
+
52
+
53
+ class ChartSettingsInput(BaseModel):
54
+ """Individual chart visualization settings within a query panel.
55
+
56
+ Each calculation in a query can have its own chart settings.
57
+ Use chart_index to target specific calculations (0-based).
58
+ """
59
+
60
+ model_config = ConfigDict(extra="forbid")
61
+
62
+ chart_index: int = Field(
63
+ default=0,
64
+ ge=0,
65
+ description="Chart index (0-based, for queries with multiple calculations)",
66
+ )
67
+ chart_type: Literal["default", "line", "stacked", "stat", "tsbar", "cbar", "cpie"] = Field(
68
+ default="default",
69
+ description="Chart type: default (auto), line (time series), stacked (stacked area), "
70
+ "stat (single value), tsbar (time series bar), cbar (categorical bar), cpie (pie)",
71
+ )
72
+ log_scale: bool = Field(default=False, description="Use logarithmic Y-axis scale")
73
+ omit_missing_values: bool = Field(
74
+ default=False, description="Skip gaps in data instead of interpolating"
75
+ )
76
+
77
+
78
+ class VisualizationSettingsInput(BaseModel):
79
+ """Visualization settings for board query panels.
80
+
81
+ Controls how the query results are displayed on the board.
82
+ """
83
+
84
+ model_config = ConfigDict(extra="forbid")
85
+
86
+ hide_compare: bool = Field(default=False, description="Hide comparison time range overlay")
87
+ hide_hovers: bool = Field(default=False, description="Disable hover tooltips on data points")
88
+ hide_markers: bool = Field(default=False, description="Hide markers on data points")
89
+ utc_xaxis: bool = Field(default=False, description="Show X-axis timestamps in UTC timezone")
90
+ overlaid_charts: bool = Field(
91
+ default=False, description="Overlay multiple calculations on same chart"
92
+ )
93
+ charts: list[ChartSettingsInput] | None = Field(
94
+ default=None,
95
+ description="Per-chart settings (one entry per calculation). If omitted, defaults apply.",
96
+ )
97
+
98
+
99
+ # =============================================================================
100
+ # Calculated Fields
101
+ # =============================================================================
102
+
103
+
104
+ class CalculatedFieldInput(BaseModel):
105
+ """Inline calculated field (derived column) for queries.
106
+
107
+ Creates a computed column available only within this query.
108
+ For reusable derived columns, use the Derived Columns API instead.
109
+
110
+ Example expressions:
111
+ - "MULTIPLY($duration_ms, 1000)" - convert ms to microseconds
112
+ - "IF(LT($status_code, 400), 1, 0)" - success indicator
113
+ - "CONCAT($service, '/', $endpoint)" - combine strings
114
+ """
115
+
116
+ model_config = ConfigDict(extra="forbid")
117
+
118
+ name: str = Field(description="Field name/alias to reference in calculations and breakdowns")
119
+ expression: str = Field(
120
+ description="Formula expression using $column_name syntax. "
121
+ "See https://docs.honeycomb.io/reference/derived-column-formula/"
122
+ )
123
+
124
+
125
+ # =============================================================================
126
+ # Query Panel
127
+ # =============================================================================
128
+
129
+
130
+ class QueryPanelInput(BaseModel):
131
+ """Query panel specification for board tool input.
132
+
133
+ This model represents a complete query panel with FLAT structure.
134
+ Query fields are at the top level, not nested under a 'query' object.
135
+
136
+ Example (simple with chart_type shorthand):
137
+ {
138
+ "name": "CPU Usage",
139
+ "dataset": "metrics",
140
+ "time_range": 3600,
141
+ "calculations": [{"op": "AVG", "column": "cpu_percent"}],
142
+ "chart_type": "line"
143
+ }
144
+
145
+ Example (with full visualization settings):
146
+ {
147
+ "name": "Error Rate",
148
+ "dataset": "api-logs",
149
+ "time_range": 3600,
150
+ "calculations": [{"op": "COUNT"}],
151
+ "visualization": {
152
+ "utc_xaxis": true,
153
+ "charts": [{"chart_type": "stacked", "log_scale": true}]
154
+ }
155
+ }
156
+ """
157
+
158
+ model_config = ConfigDict(extra="forbid")
159
+
160
+ # Panel metadata
161
+ name: str = Field(description="Panel/query name")
162
+ description: str | None = Field(default=None, description="Panel description")
163
+ style: Literal["graph", "table", "combo"] = Field(
164
+ default="graph", description="Panel display style"
165
+ )
166
+ visualization: VisualizationSettingsInput | None = Field(
167
+ default=None,
168
+ description="Full visualization settings. For simple cases, use chart_type instead.",
169
+ )
170
+ chart_type: Literal["default", "line", "stacked", "stat", "tsbar", "cbar", "cpie"] | None = (
171
+ Field(
172
+ default=None,
173
+ description="Shorthand for visualization.charts[0].chart_type. "
174
+ "Use for simple single-calculation panels. "
175
+ "Values: line (time series), stacked (stacked area), stat (single number), "
176
+ "tsbar (time series bar), cbar (categorical bar), cpie (pie chart)",
177
+ )
178
+ )
179
+ position: PositionInput | None = Field(
180
+ default=None,
181
+ description="Panel position for manual layout (required if layout_generation=manual)",
182
+ )
183
+
184
+ # Query specification (FLAT, not nested)
185
+ dataset: str | None = Field(
186
+ default=None, description="Dataset slug (None = environment-wide query)"
187
+ )
188
+ time_range: int | None = Field(
189
+ default=None, description="Time range in seconds (relative time)"
190
+ )
191
+ start_time: int | None = Field(
192
+ default=None, description="Absolute start time (Unix timestamp, use with end_time)"
193
+ )
194
+ end_time: int | None = Field(
195
+ default=None, description="Absolute end time (Unix timestamp, use with start_time)"
196
+ )
197
+ granularity: int | None = Field(default=None, description="Time granularity in seconds")
198
+ calculations: list[Calculation] | None = Field(
199
+ default=None, description="Calculations to perform (e.g., COUNT, AVG, P99)"
200
+ )
201
+ filters: list[Filter] | None = Field(default=None, description="Query filters")
202
+ breakdowns: list[str] | None = Field(default=None, description="Columns to group by")
203
+ filter_combination: FilterCombination | None = Field(
204
+ default=None, description="How to combine filters (AND or OR)"
205
+ )
206
+ orders: list[Order] | None = Field(default=None, description="Result ordering")
207
+ limit: int | None = Field(default=None, description="Result limit (max 1000)")
208
+ havings: list[Having] | None = Field(
209
+ default=None, description="Having clauses for post-aggregation filtering"
210
+ )
211
+ calculated_fields: list[CalculatedFieldInput] | None = Field(
212
+ default=None,
213
+ description="Inline calculated fields (derived columns) for this query only",
214
+ )
215
+ compare_time_offset_seconds: (
216
+ Literal[1800, 3600, 7200, 28800, 86400, 604800, 2419200, 15724800] | None
217
+ ) = Field(
218
+ default=None,
219
+ description="Compare against historical data offset by N seconds. "
220
+ "Values: 1800 (30min), 3600 (1hr), 7200 (2hr), 28800 (8hr), "
221
+ "86400 (24hr), 604800 (7d), 2419200 (28d), 15724800 (6mo)",
222
+ )
223
+
224
+
225
+ # =============================================================================
226
+ # SLO Components
227
+ # =============================================================================
228
+
229
+
230
+ class SLIInput(BaseModel):
231
+ """SLI (Service Level Indicator) specification for tool input.
232
+
233
+ An SLI can either reference an existing column by alias, or create
234
+ a new derived column inline by providing an expression.
235
+ """
236
+
237
+ model_config = ConfigDict(extra="forbid")
238
+
239
+ alias: str = Field(description="Column alias for the SLI (e.g., 'success_rate')")
240
+ expression: str | None = Field(
241
+ default=None,
242
+ description="Derived column expression (creates column if provided, e.g., 'LTE($duration_ms, 500)')",
243
+ )
244
+ description: str | None = Field(default=None, description="SLI description")
245
+
246
+
247
+ class RecipientInput(BaseModel):
248
+ """Recipient specification (shared across triggers, SLOs, burn alerts).
249
+
250
+ Either reference an existing recipient by ID, OR create a new one inline
251
+ by providing type and target.
252
+
253
+ Note: Only 'email' and 'webhook' types are testable without external integrations.
254
+ Other types ('slack', 'pagerduty', 'msteams') require service configuration.
255
+ """
256
+
257
+ model_config = ConfigDict(extra="forbid")
258
+
259
+ # Either reference existing recipient by ID...
260
+ id: str | None = Field(default=None, description="Existing recipient ID")
261
+
262
+ # ...OR create inline with type + target
263
+ type: Literal["email", "webhook", "slack", "pagerduty", "msteams"] | None = Field(
264
+ default=None, description="Recipient type (for inline creation)"
265
+ )
266
+ target: str | None = Field(
267
+ default=None, description="Recipient target (email address, webhook URL, or integration ID)"
268
+ )
269
+
270
+
271
+ class BurnAlertInput(BaseModel):
272
+ """Burn alert specification for inline creation with SLOs.
273
+
274
+ Two alert types:
275
+ - exhaustion_time: Alert when budget will be exhausted in N minutes
276
+ - budget_rate: Alert when budget is decreasing faster than threshold
277
+ """
278
+
279
+ model_config = ConfigDict(extra="forbid")
280
+
281
+ alert_type: Literal["exhaustion_time", "budget_rate"] = Field(description="Alert type")
282
+ description: str | None = Field(default=None, description="Alert description")
283
+
284
+ # For exhaustion_time alerts
285
+ exhaustion_minutes: int | None = Field(
286
+ default=None, description="Minutes until budget exhaustion (required for exhaustion_time)"
287
+ )
288
+
289
+ # For budget_rate alerts
290
+ budget_rate_window_minutes: int | None = Field(
291
+ default=None, description="Window size in minutes (required for budget_rate)"
292
+ )
293
+ budget_rate_decrease_threshold_per_million: int | None = Field(
294
+ default=None, description="Threshold in per-million units (required for budget_rate)"
295
+ )
296
+
297
+ # Recipients (optional)
298
+ recipients: list[RecipientInput] | None = Field(default=None, description="Alert recipients")
299
+
300
+
301
+ class SLOToolInput(BaseModel):
302
+ """Complete SLO tool input for creating SLOs.
303
+
304
+ Note: Only target_percentage is exposed to tools (most intuitive format).
305
+ The target_nines format has been removed entirely.
306
+ """
307
+
308
+ model_config = ConfigDict(extra="forbid")
309
+
310
+ # Required
311
+ name: str = Field(description="SLO name")
312
+ sli: SLIInput = Field(description="SLI specification")
313
+
314
+ # Optional metadata
315
+ description: str | None = Field(default=None, description="SLO description")
316
+
317
+ # Dataset(s) - always a list, even for single dataset
318
+ datasets: list[str] = Field(
319
+ min_length=1,
320
+ description="Dataset slug(s). Use single-element list for one dataset, multiple for environment-wide SLO",
321
+ )
322
+
323
+ # Target - only target_percentage exposed
324
+ target_percentage: float = Field(
325
+ description="Target as percentage (e.g., 99.9 for 99.9% success rate)"
326
+ )
327
+
328
+ # Time period
329
+ time_period_days: int = Field(
330
+ default=30, description="SLO time period in days (typically 7, 14, or 30)"
331
+ )
332
+
333
+ # Inline burn alerts
334
+ burn_alerts: list[BurnAlertInput] | None = Field(
335
+ default=None, description="Burn alerts to create with the SLO"
336
+ )
337
+
338
+
339
+ # =============================================================================
340
+ # Recipient Detail Models (for Recipients API)
341
+ # =============================================================================
342
+
343
+
344
+ class EmailRecipientDetailsInput(BaseModel):
345
+ """Email recipient details for tool input."""
346
+
347
+ model_config = ConfigDict(extra="forbid")
348
+
349
+ email_address: str = Field(description="Email address to notify")
350
+
351
+
352
+ class SlackRecipientDetailsInput(BaseModel):
353
+ """Slack recipient details for tool input."""
354
+
355
+ model_config = ConfigDict(extra="forbid")
356
+
357
+ slack_channel: str = Field(description="Slack channel (e.g., '#alerts')")
358
+
359
+
360
+ class PagerDutyRecipientDetailsInput(BaseModel):
361
+ """PagerDuty recipient details for tool input."""
362
+
363
+ model_config = ConfigDict(extra="forbid")
364
+
365
+ pagerduty_integration_key: str = Field(
366
+ min_length=32,
367
+ max_length=32,
368
+ description="PagerDuty integration key (exactly 32 characters)",
369
+ )
370
+ pagerduty_integration_name: str = Field(description="Name for this PagerDuty integration")
371
+
372
+
373
+ class WebhookHeaderInput(BaseModel):
374
+ """HTTP header for webhook recipient."""
375
+
376
+ model_config = ConfigDict(extra="forbid")
377
+
378
+ header: str = Field(max_length=64, description="Header name (e.g., 'Authorization')")
379
+ value: str | None = Field(
380
+ default=None, max_length=750, description="Header value (e.g., 'Bearer token')"
381
+ )
382
+
383
+
384
+ class WebhookTemplateVariableInput(BaseModel):
385
+ """Template variable for webhook payload customization."""
386
+
387
+ model_config = ConfigDict(extra="forbid")
388
+
389
+ name: str = Field(
390
+ max_length=64,
391
+ pattern=r"^[a-z](?:[a-zA-Z0-9]+$)?$",
392
+ description="Variable name (must start with lowercase, alphanumeric only)",
393
+ )
394
+ default_value: str | None = Field(
395
+ default=None, max_length=256, description="Default value for this variable"
396
+ )
397
+
398
+
399
+ class WebhookPayloadTemplateInput(BaseModel):
400
+ """Payload template for specific alert type."""
401
+
402
+ model_config = ConfigDict(extra="forbid")
403
+
404
+ body: str | None = Field(
405
+ default=None, description="JSON template string with {{variable}} placeholders"
406
+ )
407
+
408
+
409
+ class WebhookPayloadTemplatesInput(BaseModel):
410
+ """Payload templates for different alert types.
411
+
412
+ Each alert type (trigger, budget_rate, exhaustion_time) can have a custom
413
+ JSON payload template with variable substitution.
414
+ """
415
+
416
+ model_config = ConfigDict(extra="forbid")
417
+
418
+ trigger: WebhookPayloadTemplateInput | None = Field(
419
+ default=None, description="Payload template for trigger alerts"
420
+ )
421
+ budget_rate: WebhookPayloadTemplateInput | None = Field(
422
+ default=None, description="Payload template for budget rate burn alerts"
423
+ )
424
+ exhaustion_time: WebhookPayloadTemplateInput | None = Field(
425
+ default=None, description="Payload template for exhaustion time burn alerts"
426
+ )
427
+
428
+
429
+ class WebhookPayloadsInput(BaseModel):
430
+ """Webhook payload customization with templates and variables."""
431
+
432
+ model_config = ConfigDict(extra="forbid")
433
+
434
+ template_variables: list[WebhookTemplateVariableInput] | None = Field(
435
+ default=None, description="Template variables for payload substitution (max 10)"
436
+ )
437
+ payload_templates: WebhookPayloadTemplatesInput | None = Field(
438
+ default=None,
439
+ description="Custom payload templates for different alert types (trigger, budget_rate, exhaustion_time)",
440
+ )
441
+
442
+
443
+ class WebhookRecipientDetailsInput(BaseModel):
444
+ """Webhook recipient details for tool input."""
445
+
446
+ model_config = ConfigDict(extra="forbid")
447
+
448
+ webhook_url: str = Field(max_length=2048, description="Webhook URL to POST to")
449
+ webhook_name: str = Field(max_length=255, description="Name for this webhook")
450
+ webhook_secret: str | None = Field(
451
+ default=None, max_length=255, description="Optional secret for webhook signing"
452
+ )
453
+ webhook_headers: list[WebhookHeaderInput] | None = Field(
454
+ default=None, description="Optional HTTP headers for authentication (max 5)"
455
+ )
456
+ webhook_payloads: WebhookPayloadsInput | None = Field(
457
+ default=None,
458
+ description="Optional custom payload templates with template variables",
459
+ )
460
+
461
+
462
+ class MSTeamsRecipientDetailsInput(BaseModel):
463
+ """MS Teams workflow recipient details for tool input."""
464
+
465
+ model_config = ConfigDict(extra="forbid")
466
+
467
+ webhook_url: str = Field(
468
+ max_length=2048, description="Azure Logic Apps workflow URL for MS Teams"
469
+ )
470
+ webhook_name: str = Field(max_length=255, description="Name for this MS Teams recipient")
471
+
472
+
473
+ class RecipientCreateToolInput(BaseModel):
474
+ """Recipient creation specification for Recipients API tools.
475
+
476
+ This model is used for tool schema generation to provide proper validation
477
+ of recipient details. The details schema varies by type - use the appropriate
478
+ typed model for each recipient type.
479
+ """
480
+
481
+ model_config = ConfigDict(extra="forbid")
482
+
483
+ type: Literal["email", "slack", "pagerduty", "webhook", "msteams_workflow"] = Field(
484
+ description="Type of recipient notification"
485
+ )
486
+ details: (
487
+ EmailRecipientDetailsInput
488
+ | SlackRecipientDetailsInput
489
+ | PagerDutyRecipientDetailsInput
490
+ | WebhookRecipientDetailsInput
491
+ | MSTeamsRecipientDetailsInput
492
+ ) = Field(description="Recipient-specific configuration (schema varies by type)")
493
+
494
+
495
+ # =============================================================================
496
+ # Board Panels
497
+ # =============================================================================
498
+
499
+
500
+ class TextPanelInput(BaseModel):
501
+ """Text/markdown panel for boards."""
502
+
503
+ model_config = ConfigDict(extra="forbid")
504
+
505
+ content: str = Field(description="Markdown content for the panel")
506
+ position: PositionInput | None = Field(
507
+ default=None, description="Panel position (required for manual layout)"
508
+ )
509
+
510
+
511
+ class SLOPanelInput(BaseModel):
512
+ """Inline SLO panel for boards.
513
+
514
+ Creates an SLO and adds it to the board in one operation.
515
+ """
516
+
517
+ model_config = ConfigDict(extra="forbid")
518
+
519
+ name: str = Field(description="SLO name")
520
+ description: str | None = Field(default=None, description="SLO description")
521
+ dataset: str = Field(description="Dataset slug")
522
+ sli: SLIInput = Field(description="SLI specification")
523
+ target_percentage: float = Field(description="Target as percentage (e.g., 99.9)")
524
+ time_period_days: int = Field(default=30, description="Time period in days")
525
+ position: PositionInput | None = Field(
526
+ default=None, description="Panel position (required for manual layout)"
527
+ )
528
+
529
+
530
+ # =============================================================================
531
+ # Board Features
532
+ # =============================================================================
533
+
534
+
535
+ class TagInput(BaseModel):
536
+ """Tag for boards."""
537
+
538
+ model_config = ConfigDict(extra="forbid")
539
+
540
+ key: str = Field(description="Tag key")
541
+ value: str = Field(description="Tag value")
542
+
543
+
544
+ class PresetFilterInput(BaseModel):
545
+ """Preset filter column for boards.
546
+
547
+ Preset filters allow users to filter board results by specific columns
548
+ using the board UI controls.
549
+ """
550
+
551
+ model_config = ConfigDict(extra="forbid")
552
+
553
+ column: str = Field(description="Column name to filter on")
554
+ alias: str = Field(description="Display alias for the filter control")
555
+
556
+
557
+ class BoardViewFilter(BaseModel):
558
+ """Filter for board views.
559
+
560
+ Board views allow saved filter configurations that users can switch between.
561
+ """
562
+
563
+ model_config = ConfigDict(extra="forbid")
564
+
565
+ column: str = Field(description="Column name to filter on")
566
+ operation: FilterOp = Field(description="Filter operation")
567
+ value: Any | None = Field(
568
+ default=None, description="Filter value (optional for exists/does-not-exist operations)"
569
+ )
570
+
571
+
572
+ class BoardViewInput(BaseModel):
573
+ """Named view with filters for boards."""
574
+
575
+ model_config = ConfigDict(extra="forbid")
576
+
577
+ name: str = Field(description="View name")
578
+ filters: list[BoardViewFilter] | None = Field(default=None, description="View filters")
579
+
580
+
581
+ # =============================================================================
582
+ # Board Tool Input
583
+ # =============================================================================
584
+
585
+
586
+ class BoardToolInput(BaseModel):
587
+ """Complete board tool input for creating boards.
588
+
589
+ Supports three layout modes:
590
+ - auto: Automatically arranges panels (position not required)
591
+ - manual: User-specified positions (position required for all panels)
592
+
593
+ Panel types:
594
+ - inline_query_panels: Query panels (creates queries inline)
595
+ - inline_slo_panels: SLO panels (creates SLOs inline)
596
+ - text_panels: Markdown/text panels
597
+ - slo_panels: Reference existing SLOs by ID
598
+ """
599
+
600
+ model_config = ConfigDict(extra="forbid")
601
+
602
+ # Board metadata
603
+ name: str = Field(description="Board name")
604
+ description: str | None = Field(default=None, description="Board description")
605
+ layout_generation: Literal["auto", "manual"] = Field(
606
+ default="auto", description="Layout mode (auto or manual)"
607
+ )
608
+
609
+ # Panels
610
+ inline_query_panels: list[QueryPanelInput] | None = Field(
611
+ default=None, description="Query panels to create inline"
612
+ )
613
+ inline_slo_panels: list[SLOPanelInput] | None = Field(
614
+ default=None, description="SLO panels to create inline"
615
+ )
616
+ text_panels: list[TextPanelInput] | None = Field(
617
+ default=None, description="Text/markdown panels"
618
+ )
619
+ slo_panels: list[str] | None = Field(
620
+ default=None, description="Existing SLO IDs to add as panels"
621
+ )
622
+
623
+ # Board features
624
+ tags: list[TagInput] | None = Field(default=None, description="Board tags (key-value pairs)")
625
+ preset_filters: list[PresetFilterInput] | None = Field(
626
+ default=None, description="Preset filter columns for board UI"
627
+ )
628
+ views: list[BoardViewInput] | None = Field(
629
+ default=None, description="Named views with saved filter configurations"
630
+ )