156 Commits

Author SHA1 Message Date
ymq
20395a78b6 feat: /task 命令返回任务树+输入输出 ResourceBrowser 弹窗 2026-08-18 11:57:00 +08:00
ymq
b819a665f6 fix: poller 加 watchdog(wait_for 60s 超时),防连接池/MDL 锁卡死导致停摆
agent_poller 和 pm_poller 的 poll_loop 改为 _poll_once + asyncio.wait_for(timeout=60)
包裹,每轮 poll 卡住超过 60s 就跳过本轮继续,不再因连接池耗尽/MDL 锁等待
(lock_wait_timeout 默认 24h)而永久停摆(2026-08 生产事故:poller 停摆 15.7h)。
2026-08-18 11:14:23 +08:00
ymq
0b75f10731 Revert "fix: 心跳超时从 20 分钟回收重跑改为 10 分钟强制结束标注超时失败"
This reverts commit feb88aca023fdf0859fa1f8dae589acbd14c771c.
2026-08-18 10:59:51 +08:00
ymq
feb88aca02 fix: 心跳超时从 20 分钟回收重跑改为 10 分钟强制结束标注超时失败
running 任务 updated_at 超 10 分钟未更新(进程崩溃/协程挂起僵尸),原逻辑回收回
submitted 重跑,改为 state=failed + last_error=心跳超时。中文 last_error 让
_classify_failure 判 fault 不自动重跑,failed_poller 报故障通知用户。
2026-08-18 10:53:13 +08:00
ymq
7ed0ed9b80 fix(llm_bridge): 网关 200 但无 choices 的响应自动重试,避免 KeyError 打崩角色agent
llmage 网关偶发返回 200 但内容无 choices(错误JSON),llm_call_msgs_native 的 data[choices] 直接 KeyError,导致 role_agent 任务失败并报人工介入。_post_chat_completion 对无 choices 的 200 响应视为可重试异常,重试后仍失败则 raise 带网关原始内容的 ValueError。
2026-08-17 18:43:37 +08:00
ymq
8cfae215e0 fix: 建任务时归一化 role(裸名 design/test → agent.design/agent.test)
会话agent create_task 工具(_h_create_task)和 storage.create_task 把 LLM 传来的
裸角色名原样入库,而角色agent认领时 _claim_task→_normalize_role 用规范名
(agent.{role})匹配,导致裸名任务永远匹配不上、卡 submitted 无人认领
(poller 每10秒空转 dispatch)。统一在建任务入口归一化 role 根治。
2026-08-17 18:13:05 +08:00
ymq
853f3d5082 fix: llm_bridge._decrypt_key 修复 unpassword 参数顺序 + key 默认值兜底,正确解密 confidential_fields 加密的 api_key 2026-08-17 15:28:16 +08:00
ymq
42bf89c0c1 fix: workspace fallback 统一到 WORKSPACE_BASE(/d/pipeline/workspaces),修复通用助手(无项目)仍用旧 /tmp/pipeline_ws 的问题 2026-08-17 15:15:02 +08:00
ymq
bb29d6d634 fix(gateway): resolve_project 改两步查询避免 JOIN 触发 collation 冲突 2026-08-17 13:33:28 +08:00
ymq
286f0cb4dd feat(llm): 个人选择模型(default_llm_id)接入会话agent+org_id改用户机构优先 2026-08-17 13:31:04 +08:00
ymq
791bd88c6d fix(llm): 严格本机构隔离,去掉系统级(org_id='0')兜底 2026-08-17 13:22:25 +08:00
ymq
e9838a3ec6 feat(llm): llm表查询按org_id多租户隔离(本机构+系统级),角色agent与会话agent模型选择统一(RoleSpec.model_name→产线default_model→deepseek-v4-pro) 2026-08-17 12:18:33 +08:00
ymq
3affc4dced feat: 7个SDLC概念能力模块(project/iteration/deliverable/test-plan/test-case/bug/deploy-env状态机CAS+审计) + sdlc_ability接线36工具 2026-08-17 11:00:10 +08:00
ymq
4abe93a8f9 feat: 接线feature工具到sdlc_ability(propose/list/approve/reject/verify 5工具+handler+ID前缀兜底) 2026-08-17 07:31:19 +08:00
ymq
df6f5cce34 feat: feature_capability.py 功能/需求状态机能力(CAS迁移+审计,scope=project_id) 2026-08-17 07:10:28 +08:00
ymq
7fa501d359 feat(audit): question 迁移接 record_audit
raise_problem(raise)/resolve_problem(resolve)/escalate_problem(escalate) 都写审计,
问题流转轨迹 append-only 可追溯(谁+何时+from→to)
2026-08-16 23:55:14 +08:00
ymq
bf819f3b79 refactor(agent_loop): 状态机迁移走 task 能力 + 角色规范化 agent.{role}
- 角色规范: agent 角色 agent.{role}(_normalize_role 补前缀+ROLE_ALIASES/ROLE_CHAIN/SDL_ROLES 改规范名),
  人角色 {orgtype}.{role}(默认 owner.superuser)
- role_agent_run/pm_review_run/handle_failed_task 硬编码状态 SQL 改 task_capability 工具
  (submit/approve/reject/complete/mark_failed/retry,CAS+审计)
- communication/questions/sdlc_ability 默认 handler 角色规范化(main_agent→agent.main_agent, customer→owner.superuser)
- 通用助手路径(AgentExecutor)不动,保持 hermes 式自由对话
2026-08-16 23:51:55 +08:00
ymq
ec75ee0aad fix(storage/executor): 修复 dir(rec) 取列 bug(DictObject 列名不暴露为实例属性),统一用 dict(rec) 取列
get_task/get_task_steps/list_tasks/list_human_tasks/get_human_task/get_pipeline_steps/_get_task_raw
全部改用 _rec_to_dict(dict(rec)),修复返回 dict 缺列名(如 state)导致 KeyError
2026-08-16 23:45:08 +08:00
ymq
a3a15ae666 fix(audit): created_at 微秒精度,保证 append-only 轨迹可精确排序 2026-08-16 23:43:40 +08:00
ymq
7673a7acdf fix(task_capability): claim_task 查询用原样 role(兼容存量裸名),审计记录用规范名 agent.{role} 2026-08-16 23:40:55 +08:00
ymq
3687270ca7 feat(task-capability): 任务状态机语义化迁移能力 + 通用审计原语
- task_capability.py: claim/submit/approve/reject/complete/mark_failed/retry/suspend/revive/set_task_state
  CAS 原子迁移(防并发/越权覆盖) + tenant 隔离 + record_audit 审计
  定位=状态机语义化操作层,CRUD 复用 storage.py,不遮蔽 storage/executor 同名函数
- audit.py: record_audit append-only 通用审计原语(支持 sor 复用避免嵌套连接)
- models/audit_log.json: 审计日志表(append-only, tenant 隔离)
- init.py: 注册 task_* + record_audit 到 ServerEnv
2026-08-16 23:39:05 +08:00
ymq
b4e5e20ccf fix(communication): _rec_to_dict 用 dict(rec) 取列,修复 DictObject 列名取不到问题
sqlor 返回 DictObject,列名不暴露为实例属性(dir() 只列 dict 方法),
dir(rec)+getattr 会取到 None。改 dict(rec),questions.get_question 同步修复。
2026-08-16 22:14:44 +08:00
ymq
6707cabedc refactor(team-communication): 问题冒泡改为显式路由,规范移交 skill
规范(团队角色/问题类型/冒泡路径)移交 team-communication skill,由 LLM 读 skill 决策;
系统只固化通用问题工具,不读配置表、不存路径快照:
- communication.py: raise/resolve/escalate/list_for 显式路由,
  escalate 显式传 next_handler;current_handler_role/agentid 两列确定性过滤
- questions.py: 向后兼容层适配
- agent_loop.py: need_info/review_reject/fault_report 显式 first_handler_role
- sdlc_ability.py: escalate_question 显式转 customer
- models: 去 escalation_path/pos,加 current_handler_role/agentid
2026-08-16 22:08:00 +08:00
ymq
4f2c6da6cf feat(team-communication): 通用问题冒泡引擎(多agent感知)
- communication.py: raise/resolve/escalate/list_for,问题类型→冒泡路径,处理方=role+agentid
- questions.py: 向后兼容层,委托 communication
- agent_loop.py: 角色提问(need_info)/PM退回(review_reject)/故障(fault_report)走 raise_problem;
  _build_qna_section 按 handler 路由注入;PM approved 只答结 review_reject
- sdlc_ability.py: list_questions/answer_question/escalate_question 按 handler 路由
- models: pipeline_agent_questions 加 from_agentid/problem_type/escalation_path/escalation_pos
2026-08-16 21:25:39 +08:00
ymq
1da53a0edd fix: 问题回路修复——(1)角色agent注入PM退回意见(pending问题)而非只查answered (2)review_complete同步交付件approved (3)PM通过后标记pending问题answered避免堆积 2026-08-16 20:47:36 +08:00
ymq
ae7ce87ee2 fix: SDLC 菜单 url 指向旧目录(sd_projects等)→改 _list 新目录
服务器 wwwroot 已迁移到 sd_project_list/sd_bug_list/sd_test_case_list/sd_iteration_list,
menus 仍指向旧的 sd_projects/sd_bugs/sd_test_cases/sd_iterations 导致文件不存在 500。
2026-08-16 19:24:51 +08:00
ymq
3f9ae7a08f feat: agent加propose_skill自省handler(提skill化建议写提议表) 2026-08-16 19:16:53 +08:00
ymq
f4b3994a52 refactor: SDL_PROMPT问题升级链规则抽离到question-escalation技能,只留一句触发引导 2026-08-16 19:02:08 +08:00
ymq
13a8af9d17 feat: SDL_PROMPT补问题升级链引导(主动list_questions→answer_question/ask_user抛客户) 2026-08-16 18:59:50 +08:00
ymq
47dcd3c11e fix: run_command只对危险命令确认(普通命令自动执行),避免confirm卡死 2026-08-16 18:52:51 +08:00
ymq
59426838cb fix: sdlc菜单弹窗尺寸改width/height百分比 2026-08-16 18:41:20 +08:00
ymq
ffcfa5ab7c feat: sdlc菜单加cwidth/cheight控制弹窗大小 2026-08-16 18:34:11 +08:00
ymq
2fe0f3ef29 feat: list_packs/install_pack handler+/skills限前20个 2026-08-16 18:19:40 +08:00
ymq
0bc3587a75 fix: generic模式传generic给load_agent_config(真不装产线能力) 2026-08-16 18:04:28 +08:00
ymq
6e61dbbbb9 feat: gateway.run_message加generic参数(纯通用模式跳过resolve_project+不装产线能力) 2026-08-16 18:02:42 +08:00
ymq
50c9220d2d feat: 技能检索LLM语义匹配+SDLC能力声明功能菜单(项目/Bug/测试/迭代) 2026-08-16 17:19:48 +08:00
ymq
488ba4daa4 feat: skill_loader base_dir动态解析到机构工作目录(多租户隔离) 2026-08-16 15:51:33 +08:00
ymq
4e7157c161 feat: load_skill工具handler(按需加载技能正文) 2026-08-15 19:43:11 +08:00
ymq
2fded1f83c fix: read_file支持解析docx(zipfile提取文本),避免agent读docx报错绕去run_command探测 2026-08-15 19:23:32 +08:00
ymq
2cdd3cb986 feat: gateway服务层(统一消息入口+会话生命周期+通道注册)+AgentIO适配走gateway 2026-08-15 10:02:54 +08:00
ymq
82b0944424 feat: 全局并发agent数限制(max_concurrent_agents params表)+机构工作目录workspace_base动态化(_is_safe_workdir读params表) 2026-08-15 10:00:03 +08:00
ymq
2cc259bc7d feat: SDLC角色迁移到能力包(SDL_ROLES)+role_agent_run从能力包取角色定义+记忆按pipeline/project分域加载 2026-08-15 09:46:42 +08:00
ymq
e6344be8e9 fix: _build_ctx补pipeline_id字段,修复/help列不出产线命令 2026-08-15 09:40:31 +08:00
ymq
c05949d1cf fix: pipeline_id为空时fallback到默认产线,修复产线slash匹配不到 2026-08-15 09:39:43 +08:00
ymq
c87b8d94ed feat: 通用slash命令(/help/status/reset/tools/skills/model)+SDLC产线slash(/tasks/diagnose)+AgentExecutor按role加载技能 2026-08-15 09:38:31 +08:00
ymq
0a90f60315 refactor: SDLC能力迁移到sdlc_ability可插拔能力包——14工具+prompt+handler独立函数,AgentExecutor按pipeline_id动态挂载,删除硬编码SDLC handler 2026-08-15 09:26:01 +08:00
ymq
eaa23d1eff feat: AgentExecutor实现通用工具集——文件读写/搜索/会话搜索/todo/子代理委派+workspace_dir解析 2026-08-15 09:04:49 +08:00
ymq
1860179a39 refactor: 删auto-inject硬编码关键词强制路由,reply/ask_user为合法终止动作,恢复agent诚实降级能力 2026-08-15 08:19:03 +08:00
ymq
099c283562 fix: PM审核循环加auto-inject兜底,最后两轮强制review_*决策,防审核超时死循环 2026-08-15 02:04:41 +08:00
ymq
14a42aac7b fix: SELECT-only 事务显式 COMMIT,修复 MDL 元数据锁泄漏阻塞 DDL
failed poller / handle_failed_task 的 SELECT-only 事务未提交,连接回池后仍持有元数据锁,
导致 ALTER TABLE ADD COLUMN 卡死并阻塞整表。改为 SELECT 后显式 COMMIT 释放锁。
2026-08-15 01:09:05 +08:00