fix: delete agent 500 error + dynamic personality + deployment guide
- Fix delete agent 500: clean up FK records (agent_llm_logs, permissions, schedules, executions, team_members) and unbind goals/tasks before delete - Remove hardcoded personality templates in Android, replace with dynamic system prompt generation from name + description - Set promptSectionsEnabled=false to bypass PromptComposer for personality - Add Tencent Cloud Linux deployment guide (Docker Compose) - Accumulated backend service updates, frontend UI fixes, Android app changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
76
_check_agents.py
Normal file
76
_check_agents.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import urllib.request
|
||||
import json
|
||||
|
||||
BASE = "http://127.0.0.1:8037/api/v1"
|
||||
|
||||
# Login
|
||||
req = urllib.request.Request(
|
||||
f"{BASE}/auth/login",
|
||||
data=b"username=admin&password=123456",
|
||||
headers={"Content-Type": "application/x-www-form-urlencoded"}
|
||||
)
|
||||
token = json.loads(urllib.request.urlopen(req).read())["access_token"]
|
||||
print(f"Token: {token[:50]}...")
|
||||
|
||||
# Get agents
|
||||
req = urllib.request.Request(
|
||||
f"{BASE}/agents?page_size=50",
|
||||
headers={"Authorization": f"Bearer {token}"}
|
||||
)
|
||||
data = json.loads(urllib.request.urlopen(req).read())
|
||||
agents = data if isinstance(data, list) else data.get("data", [])
|
||||
print(f"\nTotal agents: {len(agents)}")
|
||||
|
||||
# Team members to check
|
||||
team_members = {
|
||||
"architect": "7ae1ace0-d2a6-4e55-855c-678489700b2b",
|
||||
"test_planner": "705811aa-32dd-44fc-ada6-069414ceb25e",
|
||||
"functional_tester": "d271d75f-f2c1-4b5c-94b5-0cdd0bc14d5a",
|
||||
"ux_reviewer": "75b295a7-3031-4e8c-bf61-8299e7e19b56",
|
||||
"edge_explorer": "f7305b12-fb1a-438c-a8fc-08dc5ce4e086",
|
||||
"performance_evaluator": "a3dde5d4-1ae3-4223-bed0-9c9fd7ababf8",
|
||||
}
|
||||
|
||||
for role, aid in team_members.items():
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
f"{BASE}/agents/{aid}",
|
||||
headers={"Authorization": f"Bearer {token}"}
|
||||
)
|
||||
agent = json.loads(urllib.request.urlopen(req).read())
|
||||
if "error" in agent:
|
||||
print(f"\n[{role}] ERROR: {agent.get('message')}")
|
||||
|
||||
# Search by name
|
||||
matching = [a for a in agents if role in a.get("name","").lower() or role in a.get("description","").lower()]
|
||||
if matching:
|
||||
a = matching[0]
|
||||
print(f" Found by search: {a['name']} ({a['id'][:12]}...)")
|
||||
agent = a
|
||||
else:
|
||||
continue
|
||||
|
||||
name = agent.get("name", "?")
|
||||
wc = agent.get("workflow_config")
|
||||
nodes = wc.get("nodes", []) if wc else []
|
||||
llm = [n for n in nodes if n.get("type") == "llm"]
|
||||
if llm:
|
||||
nd = llm[0]["data"]
|
||||
tools = nd.get("selected_tools", [])
|
||||
print(f"\n{'='*60}")
|
||||
print(f"[{role}] {name}")
|
||||
print(f" Model: {nd.get('model')} | Temp: {nd.get('temperature')} | MaxIter: {nd.get('max_iterations')}")
|
||||
print(f" Tools ({len(tools)}): {tools}")
|
||||
prompt = nd.get("prompt", "")
|
||||
print(f" Prompt length: {len(prompt)} chars")
|
||||
# Key instructions
|
||||
for kw in ["file_read", "grep", "scan", "directory", "源码", "Android"]:
|
||||
if kw.lower() in prompt.lower():
|
||||
idx = prompt.lower().find(kw.lower())
|
||||
snippet = prompt[max(0,idx-30):idx+100].replace('\n', ' ')[:130]
|
||||
print(f" [{kw}]: ...{snippet}...")
|
||||
else:
|
||||
print(f"\n[{role}] {name} - No LLM node found")
|
||||
print(f" workflow_config: {json.dumps(wc, ensure_ascii=False)[:300] if wc else 'NONE'}")
|
||||
except Exception as e:
|
||||
print(f"\n[{role}] Exception: {e}")
|
||||
Reference in New Issue
Block a user