holmesgpt 0.14.2__py3-none-any.whl → 0.14.4a0__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.

Potentially problematic release.


This version of holmesgpt might be problematic. Click here for more details.

Files changed (68) hide show
  1. holmes/__init__.py +1 -1
  2. holmes/common/env_vars.py +6 -0
  3. holmes/config.py +3 -6
  4. holmes/core/conversations.py +12 -2
  5. holmes/core/feedback.py +191 -0
  6. holmes/core/llm.py +16 -12
  7. holmes/core/models.py +101 -1
  8. holmes/core/supabase_dal.py +23 -9
  9. holmes/core/tool_calling_llm.py +197 -15
  10. holmes/core/tools.py +20 -7
  11. holmes/core/tools_utils/token_counting.py +13 -0
  12. holmes/core/tools_utils/tool_context_window_limiter.py +45 -23
  13. holmes/core/tools_utils/tool_executor.py +11 -6
  14. holmes/core/toolset_manager.py +5 -1
  15. holmes/core/truncation/dal_truncation_utils.py +23 -0
  16. holmes/interactive.py +146 -14
  17. holmes/plugins/prompts/_fetch_logs.jinja2 +3 -0
  18. holmes/plugins/runbooks/__init__.py +6 -1
  19. holmes/plugins/toolsets/__init__.py +11 -4
  20. holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py +9 -20
  21. holmes/plugins/toolsets/azure_sql/tools/analyze_connection_failures.py +2 -3
  22. holmes/plugins/toolsets/azure_sql/tools/analyze_database_connections.py +2 -3
  23. holmes/plugins/toolsets/azure_sql/tools/analyze_database_health_status.py +6 -4
  24. holmes/plugins/toolsets/azure_sql/tools/analyze_database_performance.py +6 -4
  25. holmes/plugins/toolsets/azure_sql/tools/analyze_database_storage.py +2 -3
  26. holmes/plugins/toolsets/azure_sql/tools/get_active_alerts.py +6 -4
  27. holmes/plugins/toolsets/azure_sql/tools/get_slow_queries.py +2 -3
  28. holmes/plugins/toolsets/azure_sql/tools/get_top_cpu_queries.py +2 -3
  29. holmes/plugins/toolsets/azure_sql/tools/get_top_data_io_queries.py +2 -3
  30. holmes/plugins/toolsets/azure_sql/tools/get_top_log_io_queries.py +2 -3
  31. holmes/plugins/toolsets/bash/bash_toolset.py +4 -7
  32. holmes/plugins/toolsets/cilium.yaml +284 -0
  33. holmes/plugins/toolsets/datadog/toolset_datadog_general.py +5 -10
  34. holmes/plugins/toolsets/datadog/toolset_datadog_logs.py +1 -1
  35. holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py +6 -13
  36. holmes/plugins/toolsets/datadog/toolset_datadog_rds.py +3 -6
  37. holmes/plugins/toolsets/datadog/toolset_datadog_traces.py +4 -9
  38. holmes/plugins/toolsets/git.py +14 -12
  39. holmes/plugins/toolsets/grafana/grafana_tempo_api.py +23 -42
  40. holmes/plugins/toolsets/grafana/toolset_grafana.py +2 -3
  41. holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py +18 -36
  42. holmes/plugins/toolsets/internet/internet.py +2 -3
  43. holmes/plugins/toolsets/internet/notion.py +2 -3
  44. holmes/plugins/toolsets/investigator/core_investigation.py +7 -9
  45. holmes/plugins/toolsets/kafka.py +7 -18
  46. holmes/plugins/toolsets/logging_utils/logging_api.py +79 -3
  47. holmes/plugins/toolsets/mcp/toolset_mcp.py +2 -3
  48. holmes/plugins/toolsets/newrelic/__init__.py +0 -0
  49. holmes/plugins/toolsets/newrelic/new_relic_api.py +125 -0
  50. holmes/plugins/toolsets/newrelic/newrelic.jinja2 +41 -0
  51. holmes/plugins/toolsets/newrelic/newrelic.py +211 -0
  52. holmes/plugins/toolsets/opensearch/opensearch.py +5 -12
  53. holmes/plugins/toolsets/opensearch/opensearch_traces.py +3 -6
  54. holmes/plugins/toolsets/prometheus/prometheus.py +135 -98
  55. holmes/plugins/toolsets/rabbitmq/toolset_rabbitmq.py +3 -6
  56. holmes/plugins/toolsets/robusta/robusta.py +4 -9
  57. holmes/plugins/toolsets/runbook/runbook_fetcher.py +93 -13
  58. holmes/plugins/toolsets/servicenow/servicenow.py +5 -10
  59. holmes/utils/sentry_helper.py +1 -1
  60. holmes/utils/stream.py +22 -7
  61. holmes/version.py +34 -14
  62. {holmesgpt-0.14.2.dist-info → holmesgpt-0.14.4a0.dist-info}/METADATA +6 -8
  63. {holmesgpt-0.14.2.dist-info → holmesgpt-0.14.4a0.dist-info}/RECORD +66 -60
  64. holmes/core/tools_utils/data_types.py +0 -81
  65. holmes/plugins/toolsets/newrelic.py +0 -231
  66. {holmesgpt-0.14.2.dist-info → holmesgpt-0.14.4a0.dist-info}/LICENSE.txt +0 -0
  67. {holmesgpt-0.14.2.dist-info → holmesgpt-0.14.4a0.dist-info}/WHEEL +0 -0
  68. {holmesgpt-0.14.2.dist-info → holmesgpt-0.14.4a0.dist-info}/entry_points.txt +0 -0
@@ -5,6 +5,7 @@ from typing import Any, Dict, Tuple, List
5
5
  from holmes.core.tools import (
6
6
  CallablePrerequisite,
7
7
  Tool,
8
+ ToolInvokeContext,
8
9
  ToolParameter,
9
10
  Toolset,
10
11
  ToolsetTag,
@@ -56,7 +57,7 @@ class ServiceNowToolset(Toolset):
56
57
  self.config: Dict = ServiceNowConfig(**config).model_dump()
57
58
  self._session.headers.update(
58
59
  {
59
- "x-sn-apikey": self.config.get("api_key"),
60
+ "x-sn-apikey": self.config.get("api_key"), # type: ignore
60
61
  }
61
62
  )
62
63
 
@@ -115,9 +116,7 @@ class ReturnChangesInTimerange(ServiceNowBaseTool):
115
116
  start = params.get("start", "last hour")
116
117
  return f"{toolset_name_for_one_liner(self.toolset.name)}: Get Change Requests ({start})"
117
118
 
118
- def _invoke(
119
- self, params: dict, user_approved: bool = False
120
- ) -> StructuredToolResult:
119
+ def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult:
121
120
  parsed_params = {}
122
121
  try:
123
122
  (start, _) = process_timestamps_to_rfc3339(
@@ -160,9 +159,7 @@ class ReturnChange(ServiceNowBaseTool):
160
159
  sys_id = params.get("sys_id", "")
161
160
  return f"{toolset_name_for_one_liner(self.toolset.name)}: Get Change Details ({sys_id})"
162
161
 
163
- def _invoke(
164
- self, params: dict, user_approved: bool = False
165
- ) -> StructuredToolResult:
162
+ def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult:
166
163
  try:
167
164
  url = "https://{instance}.service-now.com/api/now/v2/table/change_request/{sys_id}".format(
168
165
  instance=self.toolset.config.get("instance"),
@@ -194,9 +191,7 @@ class ReturnChangesWithKeyword(ServiceNowBaseTool):
194
191
  keyword = params.get("keyword", "")
195
192
  return f"{toolset_name_for_one_liner(self.toolset.name)}: Search Changes ({keyword})"
196
193
 
197
- def _invoke(
198
- self, params: dict, user_approved: bool = False
199
- ) -> StructuredToolResult:
194
+ def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult:
200
195
  parsed_params = {}
201
196
  try:
202
197
  url = f"https://{self.toolset.config.get('instance')}.service-now.com/api/now/v2/table/change_request"
@@ -1,5 +1,5 @@
1
1
  import sentry_sdk
2
- from holmes.core.tools_utils.data_types import ToolCallResult, TruncationMetadata
2
+ from holmes.core.models import ToolCallResult, TruncationMetadata
3
3
 
4
4
 
5
5
  def capture_tool_truncations(truncations: list[TruncationMetadata]):
holmes/utils/stream.py CHANGED
@@ -14,6 +14,7 @@ class StreamEvents(str, Enum):
14
14
  TOOL_RESULT = "tool_calling_result"
15
15
  ERROR = "error"
16
16
  AI_MESSAGE = "ai_message"
17
+ APPROVAL_REQUIRED = "approval_required"
17
18
 
18
19
 
19
20
  class StreamMessage(BaseModel):
@@ -78,14 +79,28 @@ def stream_chat_formatter(
78
79
  try:
79
80
  for message in call_stream:
80
81
  if message.event == StreamEvents.ANSWER_END:
82
+ response_data = {
83
+ "analysis": message.data.get("content"),
84
+ "conversation_history": message.data.get("messages"),
85
+ "follow_up_actions": followups,
86
+ "metadata": message.data.get("metadata") or {},
87
+ }
88
+
89
+ yield create_sse_message(StreamEvents.ANSWER_END.value, response_data)
90
+ elif message.event == StreamEvents.APPROVAL_REQUIRED:
91
+ response_data = {
92
+ "analysis": message.data.get("content"),
93
+ "conversation_history": message.data.get("messages"),
94
+ "follow_up_actions": followups,
95
+ }
96
+
97
+ response_data["requires_approval"] = True
98
+ response_data["pending_approvals"] = message.data.get(
99
+ "pending_approvals", []
100
+ )
101
+
81
102
  yield create_sse_message(
82
- StreamEvents.ANSWER_END.value,
83
- {
84
- "analysis": message.data.get("content"),
85
- "conversation_history": message.data.get("messages"),
86
- "follow_up_actions": followups,
87
- "metadata": message.data.get("metadata") or {},
88
- },
103
+ StreamEvents.APPROVAL_REQUIRED.value, response_data
89
104
  )
90
105
  else:
91
106
  yield create_sse_message(message.event.value, message.data)
holmes/version.py CHANGED
@@ -57,11 +57,41 @@ def get_version() -> str:
57
57
  return __version__
58
58
 
59
59
  # we are running from an unreleased dev version
60
+ archival_file_path = os.path.join(this_path, ".git_archival.json")
61
+ if os.path.exists(archival_file_path):
62
+ try:
63
+ with open(archival_file_path, "r") as f:
64
+ archival_data = json.load(f)
65
+ refs = archival_data.get("refs", "")
66
+ hash_short = archival_data.get("hash-short", "")
67
+
68
+ # Check if Git substitution didn't happen (placeholders are still present)
69
+ if "$Format:" in refs or "$Format:" in hash_short:
70
+ # Placeholders not substituted, skip to next method
71
+ pass
72
+ else:
73
+ # Valid archival data found
74
+ return f"dev-{refs}-{hash_short}"
75
+ except Exception:
76
+ pass
77
+
78
+ # Now try git commands for development environments
60
79
  try:
80
+ env = os.environ.copy()
81
+ # Set ceiling to prevent walking up beyond the project root
82
+ # We want to allow access to holmes/.git but not beyond holmes
83
+ project_root = os.path.dirname(this_path) # holmes
84
+ env["GIT_CEILING_DIRECTORIES"] = os.path.dirname(
85
+ project_root
86
+ ) # holmes's parent
87
+
61
88
  # Get the latest git tag
62
89
  tag = (
63
90
  subprocess.check_output(
64
- ["git", "describe", "--tags"], stderr=subprocess.STDOUT, cwd=this_path
91
+ ["git", "describe", "--tags"],
92
+ stderr=subprocess.STDOUT,
93
+ cwd=this_path,
94
+ env=env,
65
95
  )
66
96
  .decode()
67
97
  .strip()
@@ -73,6 +103,7 @@ def get_version() -> str:
73
103
  ["git", "rev-parse", "--abbrev-ref", "HEAD"],
74
104
  stderr=subprocess.STDOUT,
75
105
  cwd=this_path,
106
+ env=env,
76
107
  )
77
108
  .decode()
78
109
  .strip()
@@ -84,6 +115,7 @@ def get_version() -> str:
84
115
  ["git", "status", "--porcelain"],
85
116
  stderr=subprocess.STDOUT,
86
117
  cwd=this_path,
118
+ env=env,
87
119
  )
88
120
  .decode()
89
121
  .strip()
@@ -95,19 +127,7 @@ def get_version() -> str:
95
127
  except Exception:
96
128
  pass
97
129
 
98
- # we are running without git history, but we still might have git archival data (e.g. if we were pip installed)
99
- archival_file_path = os.path.join(this_path, ".git_archival.json")
100
- if os.path.exists(archival_file_path):
101
- try:
102
- with open(archival_file_path, "r") as f:
103
- archival_data = json.load(f)
104
- return f"dev-{archival_data['refs']}-{archival_data['hash-short']}"
105
- except Exception:
106
- pass
107
-
108
- return "dev-version"
109
-
110
- return "unknown-version"
130
+ return "dev-unknown"
111
131
 
112
132
 
113
133
  @cache
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: holmesgpt
3
- Version: 0.14.2
3
+ Version: 0.14.4a0
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: natan@robusta.dev
@@ -23,6 +23,7 @@ Requires-Dist: certifi (>=2024.7.4,<2025.0.0)
23
23
  Requires-Dist: colorlog (>=6.8.2,<7.0.0)
24
24
  Requires-Dist: confluent-kafka (>=2.6.1,<3.0.0)
25
25
  Requires-Dist: fastapi (>=0.116,<0.117)
26
+ Requires-Dist: httpx[socks] (<0.28)
26
27
  Requires-Dist: humanize (>=4.9.0,<5.0.0)
27
28
  Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
28
29
  Requires-Dist: kubernetes (>=32.0.1,<33.0.0)
@@ -245,14 +246,11 @@ Distributed under the MIT License. See [LICENSE.txt](https://github.com/robusta-
245
246
 
246
247
  ## Community
247
248
 
248
- Join our community meetings to discuss the HolmesGPT roadmap and share feedback:
249
+ Join our community to discuss the HolmesGPT roadmap and share feedback:
249
250
 
250
- 📅 **First Community Meeting:** Thursday, August 21, 2025
251
- - **Time:** 8:00-9:00 AM PT / 11:00 AM-12:00 PM ET / 8:30-9:30 PM IST
252
- - **Where:** [Google Meet](https://meet.google.com/jxc-ujyf-xwy)
253
- - **Agenda:** [Roadmap discussion](https://github.com/orgs/robusta-dev/projects/2), community feedback, and Q&A
254
-
255
- [📝 Meeting Notes](https://docs.google.com/document/d/1sIHCcTivyzrF5XNvos7ZT_UcxEOqgwfawsTbb9wMJe4/edit?tab=t.0) | [📋 Full Details](https://holmesgpt.dev/community/)
251
+ 📹 **First Community Meetup Recording:** [Watch on YouTube](https://youtu.be/slQRc6nlFQU)
252
+ - **Topics:** Roadmap discussion, community feedback, and Q&A
253
+ - **Resources:** [📝 Meeting Notes](https://docs.google.com/document/d/1sIHCcTivyzrF5XNvos7ZT_UcxEOqgwfawsTbb9wMJe4/edit?tab=t.0) | [📋 Community Page](https://holmesgpt.dev/community/)
256
254
 
257
255
  ## Support
258
256
 
@@ -1,40 +1,42 @@
1
1
  holmes/.git_archival.json,sha256=PbwdO7rNhEJ4ALiO12DPPb81xNAIsVxCA0m8OrVoqsk,182
2
- holmes/__init__.py,sha256=aObdUvtSLEMRLcbzR1BLUnoN1nK0-PV8tAXzjOfEEh8,257
2
+ holmes/__init__.py,sha256=9FiOTz-KGiO83Ov6cuM3i36OTKuSEoscoIUzJoGYFlI,263
3
3
  holmes/clients/robusta_client.py,sha256=rWst1PANJaIsprp3jZ7RV5UpttM_YLBGQ8B5noZqvgg,1532
4
- holmes/common/env_vars.py,sha256=3CKyDmPtEAfYFxWC5wEDq5ppn94BhzDbJA3k9Vtd_WU,3312
4
+ holmes/common/env_vars.py,sha256=p9xO7bDjyPNJr7S4OO-GkMR1RYaj4aWxTtcy5JTzJKU,3521
5
5
  holmes/common/openshift.py,sha256=akbQ0GpnmuzXOqTcotpTDQSDKIROypS9mgPOprUgkCw,407
6
- holmes/config.py,sha256=yu0kQox7tfeKc4kJLESH-eGa6w1-nNC9kxAOtHf_qhQ,21781
6
+ holmes/config.py,sha256=uwSbVxWvXp5B4XRk9GkMMcQG8tgFfrYj7PRex-qn54w,21743
7
7
  holmes/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  holmes/core/config.py,sha256=9QGIXeYff9FPWa91as2OkRO2SupHzfNQZWzfNC4Vl-8,113
9
- holmes/core/conversations.py,sha256=krkcIe5Sl4JIGp5CfQrR74JYLnxis8ifKu09mOA5fAI,21428
9
+ holmes/core/conversations.py,sha256=iSfYBD88fO-irkCKqy3wm7CV1wn8g89e5GxJlpdn1MA,21723
10
+ holmes/core/feedback.py,sha256=Gu69ghRYGSCPDgFA77xOB5RPbVdQX-9Qpv4yVVegL4g,6793
10
11
  holmes/core/investigation.py,sha256=HrRi1-myPF7ndOwwZ4Sv8iUbvPkrd5M02RPhZzln7NM,5900
11
12
  holmes/core/investigation_structured_output.py,sha256=sNxyqmsElQ-B22OlzTOrJtfrlipjyidcTU07idOBO7w,10570
12
13
  holmes/core/issue.py,sha256=dbctGv8KHAXC1SeOMkEP-BudJ50u7kA8jLN5FN_d808,2426
13
- holmes/core/llm.py,sha256=YHrbOlXrb6b18KTYCHrjUa4e83LPyZ2LY-cwSJ5z2IE,22495
14
- holmes/core/models.py,sha256=n3HTxSvm1-JstkRkL8KMZ1mz5zecMqmMzQe2ECmnQ1E,6082
14
+ holmes/core/llm.py,sha256=UQ2Ml4hJS1YDidCaU1Rz6km3qcgycjz-cuuo2coSPxw,22773
15
+ holmes/core/models.py,sha256=xFHFutZWoIaQWSeuq1PiYPw9SGkDrQsQ9qYXuk60EEU,9096
15
16
  holmes/core/openai_formatting.py,sha256=wL0Fq6lDePIKR5viitQz9ZWCQZZkHZHmEUqPIsOoFns,4077
16
17
  holmes/core/performance_timing.py,sha256=MTbTiiX2jjPmW7PuNA2eYON40eWsHPryR1ap_KlwZ_E,2217
17
18
  holmes/core/prompt.py,sha256=YkztY4gsobXys0fHxcwgngZBR2xDtBSYryY7HRnTxCQ,3025
18
19
  holmes/core/resource_instruction.py,sha256=rduue_t8iQi1jbWc3-k3jX867W1Fvc6Tah5uOJk35Mc,483
19
20
  holmes/core/runbooks.py,sha256=Oj5ICmiGgaq57t4erPzQDvHQ0rMGj1nhiiYhl8peH3Q,939
20
21
  holmes/core/safeguards.py,sha256=XrKgmMoJxSROfoSOW6t6QEG2MFppzC20Nyn1HA5G4Go,4935
21
- holmes/core/supabase_dal.py,sha256=cZgvdbmphihzOZrA9bKtVnxyiGqK5XqMeCQC3_uf2fs,21732
22
+ holmes/core/supabase_dal.py,sha256=KSNwGz1v5dZAk_sDme1JCrPTJKc2fwApKQQu_U_r3cM,22433
22
23
  holmes/core/todo_tasks_formatter.py,sha256=USyJZcoX6zoxID1UV-abAKdaWFYLO6QJd-UKryJAurI,1487
23
- holmes/core/tool_calling_llm.py,sha256=WD5a_Rmhn6OOzyHUN4wIXctYS8ZdB7oKPYfWuDDzcb4,42769
24
- holmes/core/tools.py,sha256=YotCnCnmrNYh_SMqD1GFeDOmU_s8kucNJEVRLhfQOqw,31539
24
+ holmes/core/tool_calling_llm.py,sha256=YUUFmoTDw11ERC78gg2jTRZ6t9Dy_ba8wQiyJeJWL0k,50206
25
+ holmes/core/tools.py,sha256=IOBmRdwTKeHvbvxlcT8xYJmBLcNI9CGP_iwrI-WhVio,31786
25
26
  holmes/core/tools_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- holmes/core/tools_utils/data_types.py,sha256=vvY0Vx45xTmLhu-RYI4xVJkhPtdg-W8xhFpsnesOMU0,2534
27
- holmes/core/tools_utils/tool_context_window_limiter.py,sha256=OZBz6lNnEIlCRGVGn_De6fw3tPuxE4UHlE52Z8Ni568,1736
28
- holmes/core/tools_utils/tool_executor.py,sha256=O0oMWSpiOClEMVJhPHi2AaZK9GI_FHq0OeNcAEoPV30,2395
27
+ holmes/core/tools_utils/token_counting.py,sha256=3WTAgi19uK1IbtwivtSibiZWwqdtZeOOgZCVFRxUJG8,406
28
+ holmes/core/tools_utils/tool_context_window_limiter.py,sha256=LoehZXp2C2ptoxbfZzzCe_t02iQOdhz-eM0k159ZIb8,2605
29
+ holmes/core/tools_utils/tool_executor.py,sha256=pUkddbm_kgYdfhR1w5IbnSmwG56kvA4VadzBV8OqG8g,2632
29
30
  holmes/core/tools_utils/toolset_utils.py,sha256=SvWzen8Fg_TB_6Idw1hK0nCPrJL40ueWVMfsv8Kh2RY,2363
30
- holmes/core/toolset_manager.py,sha256=KZQuECzT5CnW7K9yPx-Mp1rmThws0x4c0MMbzdyxU14,25688
31
+ holmes/core/toolset_manager.py,sha256=UqAUfjY09SAGirOHzyQwpOu2wxQUzU0F1STw8w-1abw,25878
31
32
  holmes/core/tracing.py,sha256=o1vTLCbnFvBOVnQKqRaj4HDNYGYAd4ub2IgkV1E3qY4,9130
32
33
  holmes/core/transformers/__init__.py,sha256=kCwmx-IQ6BpGpMpnm563ecl5Ik1nx4lhKb2y3KAKF7I,600
33
34
  holmes/core/transformers/base.py,sha256=FHUocHIS_oUBLWMiibdAuKY0Lpz5xY2ICji6DbmP2Do,1500
34
35
  holmes/core/transformers/llm_summarize.py,sha256=ZEJn3DElzMZLCCHNIzlCozllM2CmQ-JyXiqaGO7dAw4,6407
35
36
  holmes/core/transformers/registry.py,sha256=x8kKRXJvc_tJO2RvNGyoVXt6rFgG4S_ZcTG8p_OXYH0,3771
36
37
  holmes/core/transformers/transformer.py,sha256=rfT84Oq6qJyryevZGFKEbo1VSxinK4FBWUw_HpJ72xE,1028
37
- holmes/interactive.py,sha256=l1kh0ABXO_RWIzkEuLkedM-73k1ezENAvXMrgNeqsKA,41836
38
+ holmes/core/truncation/dal_truncation_utils.py,sha256=I69I7Jac1kTtpxDRMe8O3IPN8Au0bZJqI8gXwW-GMaI,776
39
+ holmes/interactive.py,sha256=bXP9qRsClwW0AlxNDWHJfJTeEwGByAoNUfL4cypJjtg,46767
38
40
  holmes/main.py,sha256=cz3i9YZkvXWTK8pk5O-LfAM5AsYcOcTEKYnbvpVY5ns,35001
39
41
  holmes/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
42
  holmes/plugins/destinations/__init__.py,sha256=vMYwTfA5nQ05us5Rzbaoe0R5C8Navo6ENVZhojtACTk,98
@@ -45,7 +47,7 @@ holmes/plugins/prompts/__init__.py,sha256=sOUHbHFQ6tYX7XWLi-Ak87cOQB1E889X5X8kWJ
45
47
  holmes/plugins/prompts/_ai_safety.jinja2,sha256=IoVdOXHnkGwLaiuUzMczEdoahyrKhkdYvyDmz9Oewxw,2262
46
48
  holmes/plugins/prompts/_current_date_time.jinja2,sha256=KynAvkQFqf_SXjqVY77nB8z4RgN7gti4SBSq1H7moHs,354
47
49
  holmes/plugins/prompts/_default_log_prompt.jinja2,sha256=Tqw8CD2ZMStXIfMdYaoZT_d-FvQ_PMg6-knqag-YEgc,1478
48
- holmes/plugins/prompts/_fetch_logs.jinja2,sha256=vThEjf6auWO6ITD6oMEGA-O7jpGjz1k2iiBfS7GRwJM,4986
50
+ holmes/plugins/prompts/_fetch_logs.jinja2,sha256=penrJcRCfr8geKWNSQc-jdJ52dV-bEb1kxO6QB90dzw,5088
49
51
  holmes/plugins/prompts/_general_instructions.jinja2,sha256=0RB5TFGqhbQ-xNt2_oHXJjvMIBLThuRDusBbbEruy2w,5777
50
52
  holmes/plugins/prompts/_global_instructions.jinja2,sha256=d_c-BtDhU_Rmx637TPAyzlIIim8ZAxy7JK3V4GV8IWI,1359
51
53
  holmes/plugins/prompts/_permission_errors.jinja2,sha256=gIMQx-zaTnuEv7SkQVC_GvxsR5R85fLuDZnJIKWcm5A,480
@@ -63,7 +65,7 @@ holmes/plugins/prompts/kubernetes_workload_ask.jinja2,sha256=C6iclMZ9n64nUvvc28W
63
65
  holmes/plugins/prompts/kubernetes_workload_chat.jinja2,sha256=rjB6mAHk2SDg2cwZp5vp66ihCer17BE6o8Ezr2zGQE4,1770
64
66
  holmes/plugins/runbooks/CLAUDE.md,sha256=WYjf-ZvKmfrShmhTHplLscIpIB1j2TrrG6C_LR63XR0,5511
65
67
  holmes/plugins/runbooks/README.md,sha256=dPrAO4bZGGW1C3FFaUm_adPMrb72DSSmbUkRSwqNK4U,2585
66
- holmes/plugins/runbooks/__init__.py,sha256=2_39h7qZYhh0a7I2-OrvswF0Y8F7nWqI5zD_dgt_wsk,3333
68
+ holmes/plugins/runbooks/__init__.py,sha256=UdOCVYnsjAywI-tVGCjTC8lFbgdyL1KfkFxUq94HsoY,3521
67
69
  holmes/plugins/runbooks/catalog.json,sha256=GvrpVpk0AIm9HZ3dlh6FI_CVzHoCGJPvZggOMaL_WKs,436
68
70
  holmes/plugins/runbooks/jira.yaml,sha256=o24IL7Cb-Mv5X-cAj8Ik4KmEmY7bf98zBkMP5r39ong,777
69
71
  holmes/plugins/runbooks/kube-prometheus-stack.yaml,sha256=adzr0vxvQZHJ_HYzYl5NdmjrTpVByx9h-3abpaFUo-Y,743
@@ -76,12 +78,12 @@ holmes/plugins/sources/pagerduty/__init__.py,sha256=LYoN1dkUg7NCx7g-gdSomTTJhHyB
76
78
  holmes/plugins/sources/prometheus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
79
  holmes/plugins/sources/prometheus/models.py,sha256=9TcDIRLWZQhwjYGfRZFP_2fGweCn4G5xvYrLoXiQZTc,2904
78
80
  holmes/plugins/sources/prometheus/plugin.py,sha256=oBmuOwNM67suy6HmasUnyVOlBq9-mAxLZLlUzRHIggg,5941
79
- holmes/plugins/toolsets/__init__.py,sha256=gBsTeiDyOas213SMERuX2TvLUMvhwivwRXNEC3Eqj_Q,7473
81
+ holmes/plugins/toolsets/__init__.py,sha256=ydF9jawE6cn8lDpyYhqSCxlvj6eAywLyUoo1bI9wDrE,7589
80
82
  holmes/plugins/toolsets/aks-node-health.yaml,sha256=37Dvk4D0ez1GQlt91MQkI0pZ5RLtUEFAOxDXDCVzb-g,5995
81
83
  holmes/plugins/toolsets/aks.yaml,sha256=_XwrMSsghFnCqlbsZvVfwF3qgQFnxi47AC5Oavi2YC0,9532
82
84
  holmes/plugins/toolsets/argocd.yaml,sha256=lbRIooJIkpumNdRgoDRHTjNb9PvFTfjQcT0iWU2x8mg,3932
83
85
  holmes/plugins/toolsets/atlas_mongodb/instructions.jinja2,sha256=iyft4EwvYcImI_YrMte8_BTJZXGV6i0k84g3oKXR23k,988
84
- holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py,sha256=GgHgKO1l0dbonLhuRSW5lp-fzWwRxnrtiCtUdvLY5t8,15713
86
+ holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py,sha256=1FlArSlvS6XobEr5A-4J_VNwCIbmB4ZwFA9O0l4XRK8,15678
85
87
  holmes/plugins/toolsets/aws.yaml,sha256=AM5MizvfHeGFoCRr6kf3Wcd6y_EAhSDqtZajTFrLVfE,4475
86
88
  holmes/plugins/toolsets/azure_sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
89
  holmes/plugins/toolsets/azure_sql/apis/alert_monitoring_api.py,sha256=DSrKzzE6lofynViYr0SGaQrWjePpzbfdt3DcplbFGek,26397
@@ -94,16 +96,16 @@ holmes/plugins/toolsets/azure_sql/azure_sql_instructions.jinja2,sha256=GvuxActao
94
96
  holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py,sha256=l87m6mieP8-uTpj_NDRXbom43YP4b6TzOhnGyvn4r8c,8069
95
97
  holmes/plugins/toolsets/azure_sql/install.md,sha256=eBhdG-OG9HhbrEGvI31aAHRPWwBQne6H95mvBROqZ_s,1585
96
98
  holmes/plugins/toolsets/azure_sql/tools/__init__.py,sha256=lEYFZ5X0mHdqwmi6XXTlM1qA7sBYsuQwVCXmluo-L34,25
97
- holmes/plugins/toolsets/azure_sql/tools/analyze_connection_failures.py,sha256=blboxIOFzT2FtmZyXsipQkIzeuB_sWcl1aqHKdxjf-k,13377
98
- holmes/plugins/toolsets/azure_sql/tools/analyze_database_connections.py,sha256=ZQ-04ZyzK_aJ9KVQecmoVPsPSQumnytxZVh-46J1NSY,10473
99
- holmes/plugins/toolsets/azure_sql/tools/analyze_database_health_status.py,sha256=XqXRZQ-jVkUcl3hUak6_2rjMbhPpOs3esiBxHCVEj60,8313
100
- holmes/plugins/toolsets/azure_sql/tools/analyze_database_performance.py,sha256=VI0PkqUh9myjRuUwMDq-Ukv0rwNFxJjRQ2gx9TUgWBg,10684
101
- holmes/plugins/toolsets/azure_sql/tools/analyze_database_storage.py,sha256=Bxwe7KCobpw7zjz5Xzhb5cXUborbJwbHC0pnnUXneZk,16014
102
- holmes/plugins/toolsets/azure_sql/tools/get_active_alerts.py,sha256=NtymL59uc0svIYUQLtPAggkaJob0ta3pJP6-cEIGeIA,9406
103
- holmes/plugins/toolsets/azure_sql/tools/get_slow_queries.py,sha256=2E61KNt9_Q3jTdl2iuvl1uuG2_fzBxukME_ow_LcLHk,7292
104
- holmes/plugins/toolsets/azure_sql/tools/get_top_cpu_queries.py,sha256=lmFz-r12UaP5CMRAY0z8zt9Ib8cxg2aOQ9Gc3dVb5K0,7243
105
- holmes/plugins/toolsets/azure_sql/tools/get_top_data_io_queries.py,sha256=b3h8S-v3yt4OXIBzm9_YnDE1xaGE5TrvfdRbixtwikM,8269
106
- holmes/plugins/toolsets/azure_sql/tools/get_top_log_io_queries.py,sha256=TridNGm8j2d4Ml7mkXzRKChJJxnwVsdV7kEwrbDiWfE,7644
99
+ holmes/plugins/toolsets/azure_sql/tools/analyze_connection_failures.py,sha256=f_3TPbAjMDNAjqUr6BkoNzbMn4wvG_gQS-6HH3bC4AY,13385
100
+ holmes/plugins/toolsets/azure_sql/tools/analyze_database_connections.py,sha256=84STGBRVQbs_6wrufRsTk0m-aGGKt50O4vO6ShwhBTc,10481
101
+ holmes/plugins/toolsets/azure_sql/tools/analyze_database_health_status.py,sha256=1UIdpo4kouoIsIhhGcZ1z_nMrz8GTm9BdZwQQw-FTGI,8334
102
+ holmes/plugins/toolsets/azure_sql/tools/analyze_database_performance.py,sha256=2E-wloRjNr-PpiVGb-b7DWmqp1wbdz2hQzcsDGXi8QM,10705
103
+ holmes/plugins/toolsets/azure_sql/tools/analyze_database_storage.py,sha256=kGUwWFngJRjI5wlF2lonNZaJir6yZNAptmkwgHh65Tw,16022
104
+ holmes/plugins/toolsets/azure_sql/tools/get_active_alerts.py,sha256=ycmjlBzY0ZvnbWxTLxvYGGhoUb8EKDI4QFGpAHAxk6M,9427
105
+ holmes/plugins/toolsets/azure_sql/tools/get_slow_queries.py,sha256=-J4PKLtjTSfiOEAu28_2TeL233Qbe-1xwD9XBwzumu8,7300
106
+ holmes/plugins/toolsets/azure_sql/tools/get_top_cpu_queries.py,sha256=28x4xCrvyVj0o4Gr9QKo1qPJzUbkBdozcO_DJhiAFEo,7251
107
+ holmes/plugins/toolsets/azure_sql/tools/get_top_data_io_queries.py,sha256=EXWDVat_lZbcGQTcybQrgcLHUXMJYRNwZ1UIJxZZcTg,8277
108
+ holmes/plugins/toolsets/azure_sql/tools/get_top_log_io_queries.py,sha256=LIn1Xjr5PusJeEg24oH80X9kf0V36FIZz7JY7D3RPEs,7652
107
109
  holmes/plugins/toolsets/azure_sql/utils.py,sha256=nN8ZcVpkOa05nocY4W1gf7aaaNhzn2oD-P0STYQK2Ck,2331
108
110
  holmes/plugins/toolsets/bash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
111
  holmes/plugins/toolsets/bash/argocd/__init__.py,sha256=1ck-b82embOjsiiZkvuDChXiFaNYFwl5xW-ysBRB4vA,2186
@@ -113,7 +115,7 @@ holmes/plugins/toolsets/bash/aws/constants.py,sha256=g8IH1CLkAZuV8SQEQrUVjLul7S2
113
115
  holmes/plugins/toolsets/bash/azure/__init__.py,sha256=FsLA_v_otjuo_COEw8Hmiuh5_aQ3RWRIstECeBAS5hg,1863
114
116
  holmes/plugins/toolsets/bash/azure/constants.py,sha256=jz2R8-EiSjGjAPBTtIAbLwfyHOJPVmI117wp-u_e8Kc,10361
115
117
  holmes/plugins/toolsets/bash/bash_instructions.jinja2,sha256=AKVW1DpD6lii8cF582LZzEe9sOh3YJCerXBapwlEKhU,481
116
- holmes/plugins/toolsets/bash/bash_toolset.py,sha256=P1Jz4GdnRTBzPE8jLU48XJ27en9t9YXEsdvXVpqa-IQ,9558
118
+ holmes/plugins/toolsets/bash/bash_toolset.py,sha256=CN05nUsyUtEQbHzs-OnqYXz16-Z0EjYwIIGCpLVANoc,9559
117
119
  holmes/plugins/toolsets/bash/common/bash.py,sha256=EbudJi4ialC5q0Lrdg2d7VkP9faW3pOsuHUszCXp5Fo,1853
118
120
  holmes/plugins/toolsets/bash/common/bash_command.py,sha256=aGlzQnUQHpEK3BNwztESassqzKQ5PFObwvHcFn5GQIY,4570
119
121
  holmes/plugins/toolsets/bash/common/config.py,sha256=dRd_gl16e2jG_gk6_mRVT6o3idiVXJ-8CtBONAx1DOU,285
@@ -144,6 +146,7 @@ holmes/plugins/toolsets/bash/utilities/tail.py,sha256=GGHQoMAos0j5kN0EGSq_oQ63j9
144
146
  holmes/plugins/toolsets/bash/utilities/tr.py,sha256=4X3_816-ur6dDMyuJdS2ZwqdKz9aqqOHzqx-yi2m1cs,2157
145
147
  holmes/plugins/toolsets/bash/utilities/uniq.py,sha256=bod-81lXO7-EQiy73A9aaDnc-RkrclwdBJ4rS_rUyn8,320
146
148
  holmes/plugins/toolsets/bash/utilities/wc.py,sha256=EhhRcKjb9QNI51uUjftyzzHQucCawkTU3AB2cviTV90,287
149
+ holmes/plugins/toolsets/cilium.yaml,sha256=iwd1cTEPJ0672cJsnfndirttnWAC1RaH4c8E9sWntqI,12754
147
150
  holmes/plugins/toolsets/confluence.yaml,sha256=WPflxrGKFA5VTcy5p4t2FY86oFECzoyTHkudUxhAL-k,768
148
151
  holmes/plugins/toolsets/consts.py,sha256=vxzGJBF1XNAE9CDteUFIYNRmOagmJ-ktFEfVEU8tHl0,205
149
152
  holmes/plugins/toolsets/coralogix/api.py,sha256=25ZnTfAvh5ZHzDsjap8As87opjGbMSBMQSSqelw7Tm0,5178
@@ -156,61 +159,64 @@ holmes/plugins/toolsets/datadog/datadog_metrics_instructions.jinja2,sha256=_59Dz
156
159
  holmes/plugins/toolsets/datadog/datadog_rds_instructions.jinja2,sha256=lbI6lkcMjG1CVKeL0XDkq5zl-fRDVxZ_t_CjS-Uh_OM,3119
157
160
  holmes/plugins/toolsets/datadog/datadog_traces_formatter.py,sha256=uTtWTrsbvO9cZcUDskJE9p5sEscieXwhEpxvRKkaiEw,10275
158
161
  holmes/plugins/toolsets/datadog/instructions_datadog_traces.jinja2,sha256=9j3-46UNE35DE2xBDTCRt1EedgNdgRXuC1u-X3yB-9I,1487
159
- holmes/plugins/toolsets/datadog/toolset_datadog_general.py,sha256=MK398E5HduTdhUwojmIcXKflg-1btPueEJL0oiGbwfQ,34718
160
- holmes/plugins/toolsets/datadog/toolset_datadog_logs.py,sha256=8shUARbV8CmUW2nYQmBVDzr_31ACmyTyDuOoMgmZ0qg,17491
161
- holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py,sha256=0KJJZDLBQW9OSS-jGVyGCBQKN0J6NbPHuTjF7U3N-NE,28203
162
- holmes/plugins/toolsets/datadog/toolset_datadog_rds.py,sha256=-Aga-mLnSGvlRyDcUnzKN7PIIRa6KCJ9HgL0GZ0yMKQ,29139
163
- holmes/plugins/toolsets/datadog/toolset_datadog_traces.py,sha256=F7pS2Tpk6k8uvOPFcbft13LQnlfviJ21uvWQcajdFLM,26289
162
+ holmes/plugins/toolsets/datadog/toolset_datadog_general.py,sha256=BYIv4EyhXVvE4pc4RnTlBJfhR-cAQrmG7d_0FY2egLg,34619
163
+ holmes/plugins/toolsets/datadog/toolset_datadog_logs.py,sha256=iF__DdTEQ6bcC3sQtyxp3eXzx955H2d4c0geL7gavxI,17417
164
+ holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py,sha256=rkHeA_gHSTbL1UOy62q9j7lBm9KXP2exEScq4oRBzsY,28089
165
+ holmes/plugins/toolsets/datadog/toolset_datadog_rds.py,sha256=d6IRJXLLutvGvXmRncpaFWEAYlXdyFdZI0ItCc_t5GM,29132
166
+ holmes/plugins/toolsets/datadog/toolset_datadog_traces.py,sha256=VU8s1HFvw3h-NMkjKKasg939RUeowOhvEqEl7bn6MoA,26267
164
167
  holmes/plugins/toolsets/docker.yaml,sha256=O0Q0z0kZS8_QBEhwrUfbXdGUn1nP1K9k0FlQd6EZVJ4,1559
165
- holmes/plugins/toolsets/git.py,sha256=-f_e4jBUeQ0L8z6G2mBu3u8CUMsTMKIZybz0AKg6Wws,32239
168
+ holmes/plugins/toolsets/git.py,sha256=eUpQRolp6CEqUS9nMqCJcL-th0m1c8F4oYdhMv_qcGo,32262
166
169
  holmes/plugins/toolsets/grafana/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
170
  holmes/plugins/toolsets/grafana/base_grafana_toolset.py,sha256=AjvbS4txSo97YqeeFlXUnu95oPFt8rB-CD1Ccf92a04,1760
168
171
  holmes/plugins/toolsets/grafana/common.py,sha256=yYy6knRNUYQmZvgII-Cte9RQJNY8Sj7QlbHB0aCNFYU,2459
169
172
  holmes/plugins/toolsets/grafana/grafana_api.py,sha256=nq7KWoUAfFxp1-3VqKadPNKbTifLTgKUAZOFUH5QWUY,1665
170
- holmes/plugins/toolsets/grafana/grafana_tempo_api.py,sha256=bcCPEwOwm1Og9LYR6PlAtjGgQopvySNjf5nTwILuFt4,15697
173
+ holmes/plugins/toolsets/grafana/grafana_tempo_api.py,sha256=C8XEZzIKzeh9pG-DBQoMW4Qi2Kh3ZoI4TXVGUx2CxUc,14688
171
174
  holmes/plugins/toolsets/grafana/loki_api.py,sha256=f7oTzfhJ1LojsPoAfsKt32ADWffLEywBJQWG9eyfb7I,2529
172
- holmes/plugins/toolsets/grafana/toolset_grafana.py,sha256=_A3DUOyd2624I75BknsZhHpK1mzcf7JfACL7_ET6sPM,4922
175
+ holmes/plugins/toolsets/grafana/toolset_grafana.py,sha256=M10S7CeOsLaSCZqQysjT4vviG7nUPc95QzWCTtPBXXE,4930
173
176
  holmes/plugins/toolsets/grafana/toolset_grafana_loki.py,sha256=MK0mK5h8MZuULwAoQlng3UZS1xtxHzePwhEoJiroJSw,3912
174
177
  holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2,sha256=0HBYUXkGYWZbHwIvfQEF5oL9LFMYzjgcmL1U6RjgPSE,10417
175
- holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py,sha256=4q9FCHZ2kuI4Kng_JOWipkHIUyfkH2zT5zSywnFie18,38419
178
+ holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py,sha256=nnDKUQkJpnmFVWV8Xwdk0OaZF_Nn6hqSrWT4ltx1xDk,37963
176
179
  holmes/plugins/toolsets/grafana/trace_parser.py,sha256=8PjqPGDGo9uB2Z8WWWknMKdhcqlqZEVncQCCkl2F06A,7024
177
180
  holmes/plugins/toolsets/helm.yaml,sha256=-IPDChKMHcxGbzA0z9GKczRshL-mD24cHpBizfNM1jM,1604
178
- holmes/plugins/toolsets/internet/internet.py,sha256=cQi8R2rcttIZ49egSzi2y2UVt4tncqE8medxiXp8II8,7779
179
- holmes/plugins/toolsets/internet/notion.py,sha256=OJ7e3eITLsrv8n31M9HsqwaRp2o4dnh2iAhIsoqbXhw,4787
181
+ holmes/plugins/toolsets/internet/internet.py,sha256=qeV6M9302QWacFcr7bOfsZUc84v9MnlTEF_76oUOSNA,7787
182
+ holmes/plugins/toolsets/internet/notion.py,sha256=ELDtsP8kxdU8rExEL8hq1yV5DEeWDNOljHZEwjnumJc,4795
180
183
  holmes/plugins/toolsets/investigator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
- holmes/plugins/toolsets/investigator/core_investigation.py,sha256=1yEKt8OZC37gCTQGecRDOWI0gzBnmhECe0130Hn9n2c,5263
184
+ holmes/plugins/toolsets/investigator/core_investigation.py,sha256=NqNlPjWGyb3A_bw5JV-ePhWOdJUmAIO4IYwa_WsygJM,5213
182
185
  holmes/plugins/toolsets/investigator/investigator_instructions.jinja2,sha256=C6y6OaJI2dQSLSw7Zq9-D-sWmL5K_40zRItvkzVAdH4,13967
183
186
  holmes/plugins/toolsets/investigator/model.py,sha256=6AE9Iy05GaX3gC9ChTtZQOFGjSUsas_pB9_YyDaJXP0,342
184
- holmes/plugins/toolsets/kafka.py,sha256=QbdHGNFmCP1bgsbD4uix7uU_2Y05uMckVgJv_V9OIHY,24841
187
+ holmes/plugins/toolsets/kafka.py,sha256=kO_CKzdXG__6QmiwaGumZgPkdZbft0f1DpqhNV8ogs8,24774
185
188
  holmes/plugins/toolsets/kubernetes.yaml,sha256=hIyBrdhhMrvadu2EOja_uT1Hn7lzuXLdH3bgsTmpGbc,18535
186
189
  holmes/plugins/toolsets/kubernetes_logs.py,sha256=b84d-yCrGq9ua4B_zeitUy9AqDcUdipRAY71IFe5C7s,32814
187
190
  holmes/plugins/toolsets/kubernetes_logs.yaml,sha256=3AhUKihYMSL57Tm_y5HgEbtyoer6Kpm7oAcRz1GxgDw,4532
188
191
  holmes/plugins/toolsets/logging_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
- holmes/plugins/toolsets/logging_utils/logging_api.py,sha256=p5iisG4kWWh275nKT4wJuJbXWQrbQSydeMDv8f9DPw4,11608
192
+ holmes/plugins/toolsets/logging_utils/logging_api.py,sha256=AG-EJnkzRLq8s4naG3yyuYjl3y_Q2oOwCYvmto8Ydc0,15475
190
193
  holmes/plugins/toolsets/logging_utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
- holmes/plugins/toolsets/mcp/toolset_mcp.py,sha256=4E2-A8EAno5q1ZUNwyMPQdPY-ub5iIAyuEnCn7C0pg0,4914
192
- holmes/plugins/toolsets/newrelic.py,sha256=_bjzIAKbPMQcvv-Z0AV1r-T2fMHDWxnWz9zH_5-40Dg,7956
194
+ holmes/plugins/toolsets/mcp/toolset_mcp.py,sha256=-O0_gOdQRIfJ-5ud_E_mUs6-v4qw-vNF6LN_y8q4uuU,4922
195
+ holmes/plugins/toolsets/newrelic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
+ holmes/plugins/toolsets/newrelic/new_relic_api.py,sha256=i_rxTjwt-qK9MASQSp5lI_C4HoegRJITV5Z5qsBdJ90,4077
197
+ holmes/plugins/toolsets/newrelic/newrelic.jinja2,sha256=O782MgMO17j-C8BnKbZmr0_bGoHn-1JJJX40IiLrKLk,3547
198
+ holmes/plugins/toolsets/newrelic/newrelic.py,sha256=PCV-rN2w8gxYvo3Nq5Fauoq967dsK3incsY0z494bMY,8400
193
199
  holmes/plugins/toolsets/opensearch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
194
- holmes/plugins/toolsets/opensearch/opensearch.py,sha256=wIzRE-w7nuh2jBJdmExarWZu8iFAxfj5UcJZnQ_jvZA,8666
200
+ holmes/plugins/toolsets/opensearch/opensearch.py,sha256=VVyEJnECRfhwNUQqilugi9t0tPymyp7hRFwYQSFDg2E,8629
195
201
  holmes/plugins/toolsets/opensearch/opensearch_logs.py,sha256=_j-JAhLWtxhBPafCveympxtxQ2EalsqKW6jLfaXHG94,5929
196
- holmes/plugins/toolsets/opensearch/opensearch_traces.py,sha256=FjDbkU-oI-spMdra0raSmiHZb6Cfbo_AsS_OKEt9coI,8876
202
+ holmes/plugins/toolsets/opensearch/opensearch_traces.py,sha256=Xd_toAzZikdUrInZG8_oBQ0gI-QCvYrf0w2ZciFC1kU,8869
197
203
  holmes/plugins/toolsets/opensearch/opensearch_traces_instructions.jinja2,sha256=Xn8AW4XCMYV1VkBbF8nNB9fUpKQ1Vbm88iFczj-LQXo,1035
198
204
  holmes/plugins/toolsets/opensearch/opensearch_utils.py,sha256=mh9Wp22tOdJYmA9IaFS7tD3aEENljyeuPOsF-lEe5C0,5097
199
- holmes/plugins/toolsets/prometheus/prometheus.py,sha256=H5sdiwk2nAWrnD23wR-8nkTuRLBOhrCZXc51EOgDqIQ,65832
205
+ holmes/plugins/toolsets/prometheus/prometheus.py,sha256=veoBZRy0ftfNeXUUNfZi8v1B_JsNNXMFucXd-01vQVs,67747
200
206
  holmes/plugins/toolsets/prometheus/prometheus_instructions.jinja2,sha256=taf5C-N9rdp1A7S__hETefcm2OaYHJLjs1ZbuqIsGtE,6383
201
207
  holmes/plugins/toolsets/prometheus/utils.py,sha256=ZenD354dP0sRmm0R-QBuAq1jyn40GjYf4wx15bXIYRc,775
202
208
  holmes/plugins/toolsets/rabbitmq/api.py,sha256=-BtqF7hQWtl_OamnQ521vYHhR8E2n2wcPNYxfI9r4kQ,14307
203
209
  holmes/plugins/toolsets/rabbitmq/rabbitmq_instructions.jinja2,sha256=qetmtJUMkx9LIihr2fSJ2EV9h2J-b-ZdUAvMtopXZYY,3105
204
- holmes/plugins/toolsets/rabbitmq/toolset_rabbitmq.py,sha256=Epy1eMM-Wh_PNH8_E1QJeThfzQxZOhl8I6sLtUVtM_4,9293
210
+ holmes/plugins/toolsets/rabbitmq/toolset_rabbitmq.py,sha256=k1Sq0Iw8f4ygLVdMDSWMXEGqLX5Jq98hTDcAlsjrv6A,9286
205
211
  holmes/plugins/toolsets/robusta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
- holmes/plugins/toolsets/robusta/robusta.py,sha256=hERm8ZpXncr6xBFY55mge1-cCisZwc-yyqdZrmIPU9E,8963
212
+ holmes/plugins/toolsets/robusta/robusta.py,sha256=jRNxoIUoJkvCTZZnKpFFhLA3ip0l1c3JKc9J-lOIlgw,8941
207
213
  holmes/plugins/toolsets/robusta/robusta_instructions.jinja2,sha256=E3UxlbyoNx96Fsk6d1laBTrnca1nLreWGMWnGPD2KbI,2060
208
214
  holmes/plugins/toolsets/runbook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
- holmes/plugins/toolsets/runbook/runbook_fetcher.py,sha256=l8PRVfmjqtvYCMDzASQXfVROKQqXTiPx5UCzJ8u-V8Y,6763
215
+ holmes/plugins/toolsets/runbook/runbook_fetcher.py,sha256=0WN_-T55M5CASGGf9uyUclhALazF8m7xYLk5-kKcHf0,10271
210
216
  holmes/plugins/toolsets/service_discovery.py,sha256=QVrCCVcTE7APqyr0C44MGmJyCW9Ft-Ac-Wr4XfFBfjA,3268
211
217
  holmes/plugins/toolsets/servicenow/install.md,sha256=UeL069Qd2e4wC3kmc54wk62AoSpyeizKWV6NB1jUYVM,1217
212
218
  holmes/plugins/toolsets/servicenow/instructions.jinja2,sha256=koA2vJ1tOkGi2T5aGjmk9oTZPrt7WdoMSuVyxfO5-k4,491
213
- holmes/plugins/toolsets/servicenow/servicenow.py,sha256=18jpxu9Vi32GbrDEVfh2hVaBPR5r41JussICSoKTVVM,8566
219
+ holmes/plugins/toolsets/servicenow/servicenow.py,sha256=Cb3gcrnaj-GEjoTPQJd4Tb18KwJ8hyLvHekjgs8POs8,8560
214
220
  holmes/plugins/toolsets/slab.yaml,sha256=1Pz0Rzs0B6-TnJiiN2w8qJ9E_bh2haQn0mfhTszaZE0,677
215
221
  holmes/plugins/toolsets/utils.py,sha256=EZqPEBJcnMZliWMiN82XOQstr_NwanEqnzsd6incEFk,6891
216
222
  holmes/plugins/utils.py,sha256=Wn_UxZMB4V2_UiJDNy0pifGnIGS_zUwRhUlmttCywnY,372
@@ -233,12 +239,12 @@ holmes/utils/keygen_utils.py,sha256=qZ0aIAqItsoX1egAJ2TFiHjaARLYAIid94-VgMq_bB0,
233
239
  holmes/utils/llms.py,sha256=YLqq54I84wW7Kp7Z7CPVTxAFPb-Sq6xkdmVGzVf60jI,629
234
240
  holmes/utils/markdown_utils.py,sha256=_yDc_IRB5zkj9THUlZ6nzir44VfirTjPccC_DrFrBkc,1507
235
241
  holmes/utils/pydantic_utils.py,sha256=g0e0jLTa8Je8JKrhEP4N5sMxj0_hhPOqFZr0Vpd67sg,1649
236
- holmes/utils/sentry_helper.py,sha256=_IbxqlqbsNb_ncvpZ-B5XxcauQphJStcwaVxRj18RpU,1344
237
- holmes/utils/stream.py,sha256=L4vlu1xX5Ihtn-D0Mfml_HuQRfLhHFSkWNojcAJLi9g,3252
242
+ holmes/utils/sentry_helper.py,sha256=BPkyMs7Yo_0b7QLMmAQ3mKZyXTmxkgVRjr3kikr5ZX8,1328
243
+ holmes/utils/stream.py,sha256=B0PigMm2_KBwFKeVu0IxxR07gR65Eq3mJ5FntdVTNTo,3894
238
244
  holmes/utils/tags.py,sha256=SU4EZMBtLlIb7OlHsSpguFaypczRzOcuHYxDSanV3sQ,3364
239
- holmes/version.py,sha256=uDRPOvVaHreROj_9HPe81RVpTzHcG8ojpGTsnJIlQOM,5220
240
- holmesgpt-0.14.2.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
241
- holmesgpt-0.14.2.dist-info/METADATA,sha256=_-DXRD2oFoAqxL5uMxMeds-RItenYjrE2aRKnmV0DHQ,16184
242
- holmesgpt-0.14.2.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
243
- holmesgpt-0.14.2.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
244
- holmesgpt-0.14.2.dist-info/RECORD,,
245
+ holmes/version.py,sha256=5-3__IY_2hcIC4WQyTqcdyX1QF-e2VfkYKrI4BIrq0Q,5992
246
+ holmesgpt-0.14.4a0.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
247
+ holmesgpt-0.14.4a0.dist-info/METADATA,sha256=sTDKlYJOK5I5hnc2sTIzsNDsKw_usivdEzdoupLYMH8,16078
248
+ holmesgpt-0.14.4a0.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
249
+ holmesgpt-0.14.4a0.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
250
+ holmesgpt-0.14.4a0.dist-info/RECORD,,
@@ -1,81 +0,0 @@
1
- import json
2
- from typing import Optional
3
- from pydantic import BaseModel
4
-
5
- from holmes.core.tools import StructuredToolResult, StructuredToolResultStatus
6
-
7
-
8
- class TruncationMetadata(BaseModel):
9
- tool_call_id: str
10
- start_index: int
11
- end_index: int
12
- tool_name: str
13
- original_token_count: int
14
-
15
-
16
- class TruncationResult(BaseModel):
17
- truncated_messages: list[dict]
18
- truncations: list[TruncationMetadata]
19
-
20
-
21
- def format_tool_result_data(tool_result: StructuredToolResult) -> str:
22
- tool_response = tool_result.data
23
- if isinstance(tool_result.data, str):
24
- tool_response = tool_result.data
25
- else:
26
- try:
27
- if isinstance(tool_result.data, BaseModel):
28
- tool_response = tool_result.data.model_dump_json(indent=2)
29
- else:
30
- tool_response = json.dumps(tool_result.data, indent=2)
31
- except Exception:
32
- tool_response = str(tool_result.data)
33
- if tool_result.status == StructuredToolResultStatus.ERROR:
34
- tool_response = f"{tool_result.error or 'Tool execution failed'}:\n\n{tool_result.data or ''}".strip()
35
- return tool_response
36
-
37
-
38
- class ToolCallResult(BaseModel):
39
- tool_call_id: str
40
- tool_name: str
41
- description: str
42
- result: StructuredToolResult
43
- size: Optional[int] = None
44
-
45
- def as_tool_call_message(self):
46
- content = format_tool_result_data(self.result)
47
- if self.result.params:
48
- content = (
49
- f"Params used for the tool call: {json.dumps(self.result.params)}. The tool call output follows on the next line.\n"
50
- + content
51
- )
52
- return {
53
- "tool_call_id": self.tool_call_id,
54
- "role": "tool",
55
- "name": self.tool_name,
56
- "content": content,
57
- }
58
-
59
- def as_tool_result_response(self):
60
- result_dump = self.result.model_dump()
61
- result_dump["data"] = self.result.get_stringified_data()
62
-
63
- return {
64
- "tool_call_id": self.tool_call_id,
65
- "tool_name": self.tool_name,
66
- "description": self.description,
67
- "role": "tool",
68
- "result": result_dump,
69
- }
70
-
71
- def as_streaming_tool_result_response(self):
72
- result_dump = self.result.model_dump()
73
- result_dump["data"] = self.result.get_stringified_data()
74
-
75
- return {
76
- "tool_call_id": self.tool_call_id,
77
- "role": "tool",
78
- "description": self.description,
79
- "name": self.tool_name,
80
- "result": result_dump,
81
- }