debuganything 1.0.0__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {debuganything-1.0.0 → debuganything-1.1.0}/.gitignore +3 -2
- {debuganything-1.0.0 → debuganything-1.1.0}/LICENSE +1 -1
- {debuganything-1.0.0 → debuganything-1.1.0}/PKG-INFO +10 -10
- {debuganything-1.0.0 → debuganything-1.1.0}/README.md +9 -9
- {debuganything-1.0.0 → debuganything-1.1.0}/debuganything/__init__.py +4 -4
- {debuganything-1.0.0 → debuganything-1.1.0}/debuganything/crewai.py +4 -4
- {debuganything-1.0.0 → debuganything-1.1.0}/debuganything/langchain.py +4 -4
- {debuganything-1.0.0 → debuganything-1.1.0}/debuganything/llamaindex.py +4 -4
- {debuganything-1.0.0 → debuganything-1.1.0}/pyproject.toml +1 -1
- {debuganything-1.0.0 → debuganything-1.1.0}/debuganything/_specs.py +0 -0
- {debuganything-1.0.0 → debuganything-1.1.0}/tests/test_client.py +0 -0
|
@@ -8,8 +8,8 @@ examples/**/__pycache__/
|
|
|
8
8
|
*.pcap
|
|
9
9
|
*.heapsnapshot
|
|
10
10
|
.vhs-out/
|
|
11
|
-
.lab-
|
|
12
|
-
.lab-
|
|
11
|
+
.lab-debuganything/
|
|
12
|
+
.lab-debuganything/
|
|
13
13
|
python/dist/
|
|
14
14
|
python/**/__pycache__/
|
|
15
15
|
python/*.egg-info/
|
|
@@ -19,3 +19,4 @@ _site/
|
|
|
19
19
|
|
|
20
20
|
# fixtures are real captured tool output; never ignore them
|
|
21
21
|
!tests/fixtures/**
|
|
22
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026 Shreyas Sawant and
|
|
3
|
+
Copyright (c) 2026 Shreyas Sawant and Debug Anything contributors
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: debuganything
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Debug Anything from Python agents: observe running processes (strace, py-spy, perf, lsof, tcpdump, gdb/lldb, heap snapshots) and get evidence-backed findings. Wraps the Debug Anything CLI/MCP server; tool adapters for LangChain, LlamaIndex and CrewAI.
|
|
5
5
|
Project-URL: Homepage, https://github.com/shreyassaw5394/debuganything
|
|
6
6
|
Project-URL: Documentation, https://github.com/shreyassaw5394/debuganything/tree/main/docs
|
|
@@ -49,7 +49,7 @@ pip install 'debuganything[crewai]' # + CrewAI BaseTools
|
|
|
49
49
|
```python
|
|
50
50
|
from debuganything import DebugAnything
|
|
51
51
|
|
|
52
|
-
debuganything =
|
|
52
|
+
debuganything = DebugAnything() # uses `debuganything` if installed, else `npx -y debuganything@1.1.0`
|
|
53
53
|
print(da.readiness()["findings"])
|
|
54
54
|
s = da.attach(12345) # pid, "my-container", "ns/pod", or a command
|
|
55
55
|
before = da.snapshot_memory(s)
|
|
@@ -69,36 +69,36 @@ Every call returns the Debug Anything `ToolResult` dict (`ok`, `findings`, `evid
|
|
|
69
69
|
## LangChain
|
|
70
70
|
|
|
71
71
|
```python
|
|
72
|
-
from debuganything.langchain import
|
|
72
|
+
from debuganything.langchain import debuganything_tools
|
|
73
73
|
from langgraph.prebuilt import create_react_agent
|
|
74
74
|
|
|
75
|
-
agent = create_react_agent(llm,
|
|
75
|
+
agent = create_react_agent(llm, debuganything_tools())
|
|
76
76
|
agent.invoke({"messages": [("user", "pid 12345 is slow — attach and tell me why, with evidence")]})
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
## LlamaIndex
|
|
80
80
|
|
|
81
81
|
```python
|
|
82
|
-
from debuganything.llamaindex import
|
|
82
|
+
from debuganything.llamaindex import debuganything_tools
|
|
83
83
|
from llama_index.core.agent import ReActAgent
|
|
84
84
|
|
|
85
|
-
agent = ReActAgent.from_tools(
|
|
85
|
+
agent = ReActAgent.from_tools(debuganything_tools(), llm=llm, verbose=True)
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
## CrewAI
|
|
89
89
|
|
|
90
90
|
```python
|
|
91
|
-
from debuganything.crewai import
|
|
91
|
+
from debuganything.crewai import debuganything_tools
|
|
92
92
|
from crewai import Agent
|
|
93
93
|
|
|
94
|
-
sre = Agent(role="SRE", goal="Diagnose the hung worker with evidence, never guess", tools=
|
|
94
|
+
sre = Agent(role="SRE", goal="Diagnose the hung worker with evidence, never guess", tools=debuganything_tools(), llm=llm)
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
## Or just use MCP
|
|
98
98
|
|
|
99
99
|
Any framework with MCP support (LangChain `langchain-mcp-adapters`, LlamaIndex
|
|
100
100
|
`McpToolSpec`, CrewAI `MCPServerAdapter`, Claude Code, Codex, Cursor…) can run
|
|
101
|
-
Debug Anything directly: `{"command": "npx", "args": ["-y", "debuganything@
|
|
101
|
+
Debug Anything directly: `{"command": "npx", "args": ["-y", "debuganything@1.1.0", "serve"]}`.
|
|
102
102
|
Same 14 tools, same ToolResult, plus the guided prompts.
|
|
103
103
|
|
|
104
104
|
## Safety
|
|
@@ -109,4 +109,4 @@ what it returns, and keeps raw artifacts under `~/.debuganything/sessions/`. See
|
|
|
109
109
|
|
|
110
110
|
## License and disclaimer
|
|
111
111
|
|
|
112
|
-
MIT. Provided "as is", without warranty of any kind; the authors accept no liability for any damage arising from use. Only observe systems you own or are explicitly authorized to debug — you are solely responsible for authorization and legal compliance. Findings are automated diagnostics, not professional advice. See the full [DISCLAIMER](https://github.com/shreyassaw5394/debuganything/blob/main/DISCLAIMER.md).
|
|
112
|
+
MIT. Debug Anything is a free, non-commercial passion project by an independent developer. Provided "as is", without warranty of any kind; the authors accept no liability for any damage arising from use. Only observe systems you own or are explicitly authorized to debug — you are solely responsible for authorization and legal compliance. Findings are automated diagnostics, not professional advice. See the full [DISCLAIMER](https://github.com/shreyassaw5394/debuganything/blob/main/DISCLAIMER.md).
|
|
@@ -21,7 +21,7 @@ pip install 'debuganything[crewai]' # + CrewAI BaseTools
|
|
|
21
21
|
```python
|
|
22
22
|
from debuganything import DebugAnything
|
|
23
23
|
|
|
24
|
-
debuganything =
|
|
24
|
+
debuganything = DebugAnything() # uses `debuganything` if installed, else `npx -y debuganything@1.1.0`
|
|
25
25
|
print(da.readiness()["findings"])
|
|
26
26
|
s = da.attach(12345) # pid, "my-container", "ns/pod", or a command
|
|
27
27
|
before = da.snapshot_memory(s)
|
|
@@ -41,36 +41,36 @@ Every call returns the Debug Anything `ToolResult` dict (`ok`, `findings`, `evid
|
|
|
41
41
|
## LangChain
|
|
42
42
|
|
|
43
43
|
```python
|
|
44
|
-
from debuganything.langchain import
|
|
44
|
+
from debuganything.langchain import debuganything_tools
|
|
45
45
|
from langgraph.prebuilt import create_react_agent
|
|
46
46
|
|
|
47
|
-
agent = create_react_agent(llm,
|
|
47
|
+
agent = create_react_agent(llm, debuganything_tools())
|
|
48
48
|
agent.invoke({"messages": [("user", "pid 12345 is slow — attach and tell me why, with evidence")]})
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
## LlamaIndex
|
|
52
52
|
|
|
53
53
|
```python
|
|
54
|
-
from debuganything.llamaindex import
|
|
54
|
+
from debuganything.llamaindex import debuganything_tools
|
|
55
55
|
from llama_index.core.agent import ReActAgent
|
|
56
56
|
|
|
57
|
-
agent = ReActAgent.from_tools(
|
|
57
|
+
agent = ReActAgent.from_tools(debuganything_tools(), llm=llm, verbose=True)
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
## CrewAI
|
|
61
61
|
|
|
62
62
|
```python
|
|
63
|
-
from debuganything.crewai import
|
|
63
|
+
from debuganything.crewai import debuganything_tools
|
|
64
64
|
from crewai import Agent
|
|
65
65
|
|
|
66
|
-
sre = Agent(role="SRE", goal="Diagnose the hung worker with evidence, never guess", tools=
|
|
66
|
+
sre = Agent(role="SRE", goal="Diagnose the hung worker with evidence, never guess", tools=debuganything_tools(), llm=llm)
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
## Or just use MCP
|
|
70
70
|
|
|
71
71
|
Any framework with MCP support (LangChain `langchain-mcp-adapters`, LlamaIndex
|
|
72
72
|
`McpToolSpec`, CrewAI `MCPServerAdapter`, Claude Code, Codex, Cursor…) can run
|
|
73
|
-
Debug Anything directly: `{"command": "npx", "args": ["-y", "debuganything@
|
|
73
|
+
Debug Anything directly: `{"command": "npx", "args": ["-y", "debuganything@1.1.0", "serve"]}`.
|
|
74
74
|
Same 14 tools, same ToolResult, plus the guided prompts.
|
|
75
75
|
|
|
76
76
|
## Safety
|
|
@@ -81,4 +81,4 @@ what it returns, and keeps raw artifacts under `~/.debuganything/sessions/`. See
|
|
|
81
81
|
|
|
82
82
|
## License and disclaimer
|
|
83
83
|
|
|
84
|
-
MIT. Provided "as is", without warranty of any kind; the authors accept no liability for any damage arising from use. Only observe systems you own or are explicitly authorized to debug — you are solely responsible for authorization and legal compliance. Findings are automated diagnostics, not professional advice. See the full [DISCLAIMER](https://github.com/shreyassaw5394/debuganything/blob/main/DISCLAIMER.md).
|
|
84
|
+
MIT. Debug Anything is a free, non-commercial passion project by an independent developer. Provided "as is", without warranty of any kind; the authors accept no liability for any damage arising from use. Only observe systems you own or are explicitly authorized to debug — you are solely responsible for authorization and legal compliance. Findings are automated diagnostics, not professional advice. See the full [DISCLAIMER](https://github.com/shreyassaw5394/debuganything/blob/main/DISCLAIMER.md).
|
|
@@ -6,7 +6,7 @@ method returns the Debug Anything ``ToolResult`` dict: ``findings`` cite ``evide
|
|
|
6
6
|
files under ``~/.debuganything/sessions/<id>/``.
|
|
7
7
|
|
|
8
8
|
from debuganything import DebugAnything
|
|
9
|
-
debuganything =
|
|
9
|
+
debuganything = DebugAnything()
|
|
10
10
|
s = da.attach(12345)
|
|
11
11
|
print(da.profile_cpu(s, duration_s=10)["findings"])
|
|
12
12
|
da.detach(s)
|
|
@@ -23,7 +23,7 @@ import shutil
|
|
|
23
23
|
import subprocess
|
|
24
24
|
from typing import Any, Dict, List, Optional, Sequence
|
|
25
25
|
|
|
26
|
-
__version__ = "
|
|
26
|
+
__version__ = "1.1.0"
|
|
27
27
|
__all__ = ["DebugAnything", "DebugAnythingError", "TOOLS", "ToolResult"]
|
|
28
28
|
|
|
29
29
|
ToolResult = Dict[str, Any]
|
|
@@ -55,7 +55,7 @@ class DebugAnything:
|
|
|
55
55
|
"""Client for the Debug Anything CLI.
|
|
56
56
|
|
|
57
57
|
Args:
|
|
58
|
-
command: how to invoke DebugAnything. Defaults to ``["npx", "-y", "debuganything@
|
|
58
|
+
command: how to invoke DebugAnything. Defaults to ``["npx", "-y", "debuganything@1.1.0"]``;
|
|
59
59
|
pass ``["debuganything"]`` if installed globally. ``DEA_COMMAND`` env var (shell-split) overrides.
|
|
60
60
|
timeout: subprocess timeout in seconds (Debug Anything itself caps tools at 60 s).
|
|
61
61
|
raise_on_error: raise ``DebugAnythingError`` when ``ok`` is false instead of returning the result.
|
|
@@ -66,7 +66,7 @@ class DebugAnything:
|
|
|
66
66
|
if command is None and env_cmd:
|
|
67
67
|
command = env_cmd.split()
|
|
68
68
|
if command is None:
|
|
69
|
-
command = ["debuganything"] if shutil.which("debuganything") else ["npx", "-y", "debuganything@
|
|
69
|
+
command = ["debuganything"] if shutil.which("debuganything") else ["npx", "-y", "debuganything@1.1.0"]
|
|
70
70
|
self.command: List[str] = list(command)
|
|
71
71
|
self.timeout = timeout
|
|
72
72
|
self.raise_on_error = raise_on_error
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""CrewAI tools for DebugAnything.
|
|
2
2
|
|
|
3
|
-
from debuganything.crewai import
|
|
4
|
-
agent = Agent(role="SRE", goal="diagnose the slow API with evidence", tools=
|
|
3
|
+
from debuganything.crewai import debuganything_tools
|
|
4
|
+
agent = Agent(role="SRE", goal="diagnose the slow API with evidence", tools=debuganything_tools(), ...)
|
|
5
5
|
|
|
6
6
|
Requires ``pip install debuganything[crewai]``.
|
|
7
7
|
"""
|
|
@@ -31,8 +31,8 @@ def _model(tool: str) -> Type[BaseModel]:
|
|
|
31
31
|
return create_model(f"Dea{tool.title().replace('_', '')}Args", **fields) # type: ignore[call-overload]
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
def
|
|
35
|
-
debuganything = client or
|
|
34
|
+
def debuganything_tools(client: Optional[DebugAnything] = None, include: Optional[List[str]] = None) -> List["BaseTool"]:
|
|
35
|
+
debuganything = client or DebugAnything()
|
|
36
36
|
out: List[BaseTool] = []
|
|
37
37
|
for tool_name, desc in TOOLS.items():
|
|
38
38
|
if include and tool_name not in include:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""LangChain tools for DebugAnything.
|
|
2
2
|
|
|
3
|
-
from debuganything.langchain import
|
|
4
|
-
tools =
|
|
3
|
+
from debuganything.langchain import debuganything_tools
|
|
4
|
+
tools = debuganything_tools() # 14 StructuredTools, one per Debug Anything tool
|
|
5
5
|
agent = create_react_agent(llm, tools)
|
|
6
6
|
|
|
7
7
|
Each tool returns the ToolResult as a JSON string. Requires ``pip install debuganything[langchain]``.
|
|
@@ -33,9 +33,9 @@ def _model(tool: str) -> Type[BaseModel]:
|
|
|
33
33
|
return create_model(f"Dea{tool.title().replace('_', '')}Args", **fields) # type: ignore[call-overload]
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
def
|
|
36
|
+
def debuganything_tools(client: Optional[DebugAnything] = None, include: Optional[List[str]] = None) -> List["StructuredTool"]:
|
|
37
37
|
"""Build one LangChain StructuredTool per Debug Anything tool."""
|
|
38
|
-
debuganything = client or
|
|
38
|
+
debuganything = client or DebugAnything()
|
|
39
39
|
out: List[StructuredTool] = []
|
|
40
40
|
for name, desc in TOOLS.items():
|
|
41
41
|
if include and name not in include:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""LlamaIndex FunctionTools for DebugAnything.
|
|
2
2
|
|
|
3
|
-
from debuganything.llamaindex import
|
|
4
|
-
agent = ReActAgent.from_tools(
|
|
3
|
+
from debuganything.llamaindex import debuganything_tools
|
|
4
|
+
agent = ReActAgent.from_tools(debuganything_tools(), llm=llm)
|
|
5
5
|
|
|
6
6
|
Requires ``pip install debuganything[llamaindex]``.
|
|
7
7
|
"""
|
|
@@ -18,8 +18,8 @@ except ImportError as e: # pragma: no cover
|
|
|
18
18
|
raise ImportError("pip install 'debuganything[llamaindex]'") from e
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def
|
|
22
|
-
debuganything = client or
|
|
21
|
+
def debuganything_tools(client: Optional[DebugAnything] = None, include: Optional[List[str]] = None) -> List["FunctionTool"]:
|
|
22
|
+
debuganything = client or DebugAnything()
|
|
23
23
|
out: List[FunctionTool] = []
|
|
24
24
|
for name, desc in TOOLS.items():
|
|
25
25
|
if include and name not in include:
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "debuganything"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.1.0"
|
|
8
8
|
description = "Debug Anything from Python agents: observe running processes (strace, py-spy, perf, lsof, tcpdump, gdb/lldb, heap snapshots) and get evidence-backed findings. Wraps the Debug Anything CLI/MCP server; tool adapters for LangChain, LlamaIndex and CrewAI."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
File without changes
|
|
File without changes
|