fix: prevent spurious project switch — prompt warns check current, switch returns early if already in project
This commit is contained in:
parent
6900a86782
commit
f82c349cd6
@ -17,7 +17,8 @@ dbname = get_module_dbname('pipeline-sdlc')
|
||||
AGENT_PROMPT = """你是开发产线驾驶舱 Agent。用工具获取数据,用 reply 回复。
|
||||
|
||||
工作流:
|
||||
- 切换项目:先 list_projects 看有哪些项目,再 switch_project
|
||||
- 项目操作:当前项目已在环境信息中。如果已在目标项目,直接操作,不需要切换
|
||||
- 切换项目:仅当需要切换时才 list_projects → switch_project
|
||||
- 创建项目:不存在则 create_project
|
||||
- 删除项目:delete_project → 看到确认提示后,用户回复「确认删除 xxx」→ 再调 _sys_delete_project
|
||||
- 查看进度:list_tasks / task_detail / list_deliverables
|
||||
@ -195,12 +196,14 @@ async def _exec_tool(sor, tool, params, ctx, uid, org_id):
|
||||
return f'OK: 已删除「{name}」及其所有关联数据'
|
||||
elif tool == 'switch_project':
|
||||
proj = await _find_project(sor, p.get('project',''))
|
||||
if proj:
|
||||
await _save_ctx(sor, uid, proj.id)
|
||||
ctx['pid'] = proj.id; ctx['pname'] = proj.name
|
||||
return 'OK: 已切换到「'+proj.name+'」'
|
||||
allp = await sor.sqlExe("SELECT name FROM sd_projects ORDER BY created_at DESC LIMIT 15",{})
|
||||
return 'FAIL: 未找到。可用: '+', '.join([getattr(r,'name','') for r in (allp or [])])
|
||||
if not proj:
|
||||
allp = await sor.sqlExe("SELECT name FROM sd_projects ORDER BY created_at DESC LIMIT 15",{})
|
||||
return 'FAIL: 未找到。可用: '+', '.join([getattr(r,'name','') for r in (allp or [])])
|
||||
if proj.id == ctx['pid']:
|
||||
return f'已在「{proj.name}」项目中,无需切换'
|
||||
await _save_ctx(sor, uid, proj.id)
|
||||
ctx['pid'] = proj.id; ctx['pname'] = proj.name
|
||||
return 'OK: 已切换到「'+proj.name+'」'
|
||||
elif tool == 'create_task':
|
||||
if not ctx['pid']: return 'FAIL: 请先切换到项目'
|
||||
title = p.get('title','')[:100]
|
||||
@ -433,7 +436,7 @@ if action == 'send_message':
|
||||
return
|
||||
|
||||
repos_str = ', '.join([r['n'] for r in ctx['repos']]) or '无'
|
||||
env_text = f"当前项目: {ctx['pname'] or '未选择'}\n工作空间: {ctx['ws'] or '未设置'}\n仓库: {repos_str}"
|
||||
env_text = f"【当前项目: {ctx['pname'] or '未选择'}】\n工作空间: {ctx['ws'] or '未设置'}\n仓库: {repos_str}\n⚠️ 在调用 switch_project 之前,先确认当前项目是否已经是目标项目"
|
||||
system = AGENT_PROMPT.replace('__TOOLS__',TOOLS_TEXT).replace('__ENV__',env_text)
|
||||
msgs = [{"role":"system","content":system}]
|
||||
for h in (await sor.sqlExe("SELECT role,content FROM pipeline_conversations WHERE created_by=${u}$ ORDER BY created_at ASC LIMIT 20",{"u":uid}) or []):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user