AgentToolStore / server /app /api /v1 /endpoints.py
ToolStore Agent
fix: rename config/index to settings/registry, fix skill execution
ab4accd
Raw
History Blame Contribute Delete
2.12 kB
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlmodel import Session, select
from typing import List, Any
from app.db import get_session
from app.models import Tool, ToolCreate, ToolRead
router = APIRouter()
@router.post("/tools", response_model=ToolRead)
def create_tool(*, session: Session = Depends(get_session), tool: ToolCreate):
db_tool = session.exec(select(Tool).where(Tool.name == tool.name)).first()
if db_tool:
raise HTTPException(status_code=400, detail="Tool with this name already exists")
db_tool = Tool.model_validate(tool)
session.add(db_tool)
session.commit()
session.refresh(db_tool)
return db_tool
@router.get("/tools", response_model=List[ToolRead])
def read_tools(
*,
session: Session = Depends(get_session),
offset: int = 0,
limit: int = Query(default=100, le=100),
):
tools = session.exec(select(Tool).offset(offset).limit(limit)).all()
return tools
@router.get("/tools/{name}", response_model=ToolRead)
def read_tool(*, session: Session = Depends(get_session), name: str):
tool = session.exec(select(Tool).where(Tool.name == name)).first()
if not tool:
raise HTTPException(status_code=404, detail="Tool not found")
return tool
@router.get("/online_index")
def get_online_index(*, session: Session = Depends(get_session)):
"""
Serve the online tool catalogue as JSON.
This matches the format expected by IndexManager in the client.
"""
tools = session.exec(select(Tool)).all()
index_tools = {}
for tool in tools:
# Convert DB model to the JSON schema expected by CLI
tool_dict = tool.model_dump()
# Remap fields if necessary (e.g. schema_data -> schema)
tool_dict["schema"] = tool_dict.pop("schema_data", {})
tool_dict["auth"] = tool_dict.pop("auth_config", {})
index_tools[tool.name] = tool_dict
return {
"meta": {
"version": "1.0",
"count": len(tools),
"last_updated": "2025-11-25" # TODO: Real timestamp
},
"tools": index_tools
}