merge: chore/cleanup-remove-bloat-and-secrets into main
This commit is contained in:
commit
bde2f3a97d
1173 changed files with 437609 additions and 0 deletions
157
app/domain/x402/tools/__init__.py
Normal file
157
app/domain/x402/tools/__init__.py
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
"""x402 tools registry - main entry point for x402 tool implementations.
|
||||
|
||||
Per v4.0 §T26. Provides a unified interface to all x402-powered tools.
|
||||
Tools are delegated to domain/x402/tools/*.py for organization.
|
||||
|
||||
Registry shape:
|
||||
tools = {
|
||||
"tool_name": {
|
||||
"function": async function,
|
||||
"free_tier": bool,
|
||||
"pro_cents": int | None,
|
||||
"ent_cents": int | None,
|
||||
"description": str,
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
from app.domain.x402.tools.label_tools import get_entity_labels, get_wallet_labels
|
||||
from app.domain.x402.tools.market_tools import get_market_overview, get_trending
|
||||
from app.domain.x402.tools.news_tools import get_news, get_news_sentiment
|
||||
from app.domain.x402.tools.report_tools import generate_report, get_report
|
||||
from app.domain.x402.tools.scanner_tools import get_scan_result, run_scan
|
||||
from app.domain.x402.tools.token_tools import get_token_info, get_token_risk
|
||||
from app.domain.x402.tools.wallet_tools import get_wallet_analysis, get_wallet_history
|
||||
|
||||
# Tool registry
|
||||
TOOLS = {
|
||||
"get_token_risk": {
|
||||
"function": get_token_risk,
|
||||
"free_tier": True,
|
||||
"pro_cents": 50,
|
||||
"ent_cents": 40,
|
||||
"description": "Analyze token for rug pull indicators, honeypots, mintability",
|
||||
},
|
||||
"get_token_info": {
|
||||
"function": get_token_info,
|
||||
"free_tier": True,
|
||||
"pro_cents": 10,
|
||||
"ent_cents": 8,
|
||||
"description": "Get basic token metadata (name, symbol, supply, holders)",
|
||||
},
|
||||
"get_wallet_analysis": {
|
||||
"function": get_wallet_analysis,
|
||||
"free_tier": False,
|
||||
"pro_cents": 200,
|
||||
"ent_cents": 150,
|
||||
"description": "Deep wallet behavior analysis (PnL, trading patterns, personas)",
|
||||
},
|
||||
"get_wallet_history": {
|
||||
"function": get_wallet_history,
|
||||
"free_tier": False,
|
||||
"pro_cents": 100,
|
||||
"ent_cents": 80,
|
||||
"description": "Get transaction history for a wallet",
|
||||
},
|
||||
"get_market_overview": {
|
||||
"function": get_market_overview,
|
||||
"free_tier": True,
|
||||
"pro_cents": 50,
|
||||
"ent_cents": 40,
|
||||
"description": "Market overview for a chain (top tokens, volume, trend)",
|
||||
},
|
||||
"get_trending": {
|
||||
"function": get_trending,
|
||||
"free_tier": True,
|
||||
"pro_cents": 30,
|
||||
"ent_cents": 25,
|
||||
"description": "Get trending tokens on a chain",
|
||||
},
|
||||
"run_scan": {
|
||||
"function": run_scan,
|
||||
"free_tier": True,
|
||||
"pro_cents": 100,
|
||||
"ent_cents": 80,
|
||||
"description": "Run full SENTINEL scan on a token",
|
||||
},
|
||||
"get_scan_result": {
|
||||
"function": get_scan_result,
|
||||
"free_tier": False,
|
||||
"pro_cents": 50,
|
||||
"ent_cents": 40,
|
||||
"description": "Get scan result for a token",
|
||||
},
|
||||
"generate_report": {
|
||||
"function": generate_report,
|
||||
"free_tier": False,
|
||||
"pro_cents": 500,
|
||||
"ent_cents": 400,
|
||||
"description": "Full AI research report (7 sections, $5)",
|
||||
},
|
||||
"get_report": {
|
||||
"function": get_report,
|
||||
"free_tier": False,
|
||||
"pro_cents": 200,
|
||||
"ent_cents": 150,
|
||||
"description": "Get previously generated report",
|
||||
},
|
||||
"get_news": {
|
||||
"function": get_news,
|
||||
"free_tier": True,
|
||||
"pro_cents": 30,
|
||||
"ent_cents": 25,
|
||||
"description": "Get news mentions for a token/wallet",
|
||||
},
|
||||
"get_news_sentiment": {
|
||||
"function": get_news_sentiment,
|
||||
"free_tier": True,
|
||||
"pro_cents": 50,
|
||||
"ent_cents": 40,
|
||||
"description": "Get news sentiment analysis",
|
||||
},
|
||||
"get_wallet_labels": {
|
||||
"function": get_wallet_labels,
|
||||
"free_tier": True,
|
||||
"pro_cents": 20,
|
||||
"ent_cents": 15,
|
||||
"description": "Get labels for a wallet address",
|
||||
},
|
||||
"get_entity_labels": {
|
||||
"function": get_entity_labels,
|
||||
"free_tier": False,
|
||||
"pro_cents": 50,
|
||||
"ent_cents": 40,
|
||||
"description": "Get entity labels from Neo4j graph",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def list_tools() -> list[dict]:
|
||||
"""List all available x402 tools."""
|
||||
return [
|
||||
{
|
||||
"tool_id": name,
|
||||
"description": info["description"],
|
||||
"free_tier": info["free_tier"],
|
||||
"pro_cents": info.get("pro_cents"),
|
||||
"ent_cents": info.get("ent_cents"),
|
||||
}
|
||||
for name, info in TOOLS.items()
|
||||
]
|
||||
|
||||
|
||||
def get_tool(tool_id: str) -> dict | None:
|
||||
"""Get a tool by ID."""
|
||||
return TOOLS.get(tool_id)
|
||||
|
||||
|
||||
async def call_tool(tool_id: str, **kwargs) -> dict:
|
||||
"""Call a tool by ID with arguments."""
|
||||
tool = TOOLS.get(tool_id)
|
||||
if not tool:
|
||||
return {"error": f"Unknown tool: {tool_id}"}
|
||||
try:
|
||||
result = await tool["function"](**kwargs)
|
||||
return {"tool_id": tool_id, "result": result}
|
||||
except Exception as e:
|
||||
return {"error": str(e)}
|
||||
Loading…
Add table
Add a link
Reference in a new issue