ymq
|
7a2175f363
|
fix(role-agent): LLM 调用加 asyncio.wait_for 硬超时兜底,防挂起无心跳
role_agent_run 的 llm_call_msgs_native 内部 300s×3 重试最坏 15 分钟,
期间心跳不更新(心跳在调用前 touch),观察上像任务挂起/僵尸。
外层 asyncio.wait_for(420s) 硬上限:① 缩短最坏时长到 7 分钟
② 防 aiohttp total 超时因 DNS 等场景失效导致的真正无限挂起。
超时抛异常 → mark_failed → retry+1 → 重新认领,不再无限卡住。
|
2026-08-20 15:21:14 +08:00 |
|
ymq
|
c848dc1d4c
|
refactor(agent_loop): 删除 v1 硬编码角色定义,统一走能力包
- 删 ROLE_SPECIFICS(角色 prompt 硬编码,已被 sdlc_ability.SDL_ROLES 完整覆盖)
- 删 ROLE_CHAIN(任务链硬编码,已被 RoleSpec.next_role 覆盖)
- _resolve_role/_get_next_role 去掉 fallback,只走 get_role_spec
- 删死代码 PM_PROMPT/_is_safe_workdir/_parse_result(0 引用)
- 保留 ROLE_ALIASES:服务 _normalize_role 的 who 规范化(27 处调用点依赖),
与能力包角色 prompt 是不同职责
|
2026-08-20 14:37:14 +08:00 |
|
ymq
|
917eb3eda9
|
feat(role_agent): role_agent_run import role skills
|
2026-08-20 12:02:49 +08:00 |
|
ymq
|
7f05a3b467
|
fix: _ensure_project_repo 在 git init 之后才配置仓库级 user(否则 git config 报 not a git repository 导致初始 commit 失败)
|
2026-08-20 00:45:32 +08:00 |
|
ymq
|
c319cb74df
|
feat: repos目录规范——项目过程仓库(阶段/QC/PM文档)+应用仓库+模块仓库; 阶段文档产出到repos/project并git commit; 临时文件不进仓库
|
2026-08-20 00:38:50 +08:00 |
|
ymq
|
b4bc1a5d1e
|
feat: 新增模块设计模板(design.md+skill/SKILL.md)——统一模块设计结构,design产出用模板保证develop读到一致结构
|
2026-08-19 23:14:38 +08:00 |
|
ymq
|
eb861b2c70
|
refactor: design产出拆两层——应用级(architecture+ui-design风格/主页/交互/弹窗规范),数据设计下沉到各模块(数据/CRUD/处理逻辑/skills)实现模块自包含复用
|
2026-08-19 23:11:38 +08:00 |
|
ymq
|
f78d327853
|
refactor: 模块划分下沉到design阶段——设计师定模块+依赖关系+开发顺序,PM按设计师模块清单派发develop任务
|
2026-08-19 23:02:20 +08:00 |
|
ymq
|
596717a3d6
|
feat: 模块化拆分原则——概念相近功能独立模块+独立仓库+伞仓库,基础模块(apppublic/sqlor/ahserver/accounting/appbase/rbac)可引用不必再开发
|
2026-08-19 22:55:52 +08:00 |
|
ymq
|
d84f68dd7e
|
fix: develop不deliver三修——①限制探索轮数+强制产出 ②实际产出兜底(检测write_file/git) ③巨型任务拆小(粒度控制)
|
2026-08-19 22:46:40 +08:00 |
|
ymq
|
3ffe39e885
|
fix(task-flow): QC/PM 驳回加重试上限,打破「空交付件→驳回→重做」死循环
根因:develop agent 产出空交付件 → QC 驳回(qc_reject)直接 qc_review→submitted,
不递增 retry_count、不检查 task_max_retry 上限 → 无限重做循环;3 个 running 任务
占满 max_concurrent_agents=3 全局名额 → agent poller avail=0 不再派发 6 个 submitted
任务 → 任务整体饿死,只有手动 start_agents(绕过并发限制)才走一步。
修复:
1. task_capability.py 新增 _reject_with_retry_limit:退回时 retry_count+1,超
task_max_retry(默认3)则转 failed(释放并发名额,交 failed poller 报故障给人工)。
qc_reject_task / reject_task 统一走它。
2. agent_loop.py qc_review_run 驳回时感知超限转 failed,跳过建 qc_reject 问题
(failed poller 会报 fault_report),返回 failed 而非 rejected。
|
2026-08-19 18:15:39 +08:00 |
|
ymq
|
d77910ea2e
|
feat(iteration): 迭代状态机改造——显式「当前迭代」+ 序号 seq_no + 启动下一迭代,废除 created_at 推断
背景:用户明确迭代状态机语义——当前迭代唯一(状态 in_progress)、按序号 1,2,3 推进、
需用户指令启动下一迭代、启动下一迭代时若当前未结束则强制完成。
1. iteration_capability.py:
- create_iteration 自动分配 seq_no = 项目内 max(seq_no)+1
- 新增 get_current_iteration(sor, pid):当前迭代 = status='in_progress' 唯一迭代
- 新增 start_next_iteration(pid):强制完成当前迭代 + 作废其活跃任务 + 启动下一个 planning 迭代
- list_iterations 按 seq_no 排序
2. sdlc_ability.py: 4 处 created_at 推断(默认迭代)收口到 get_current_iteration;
新增 start_next_iteration 工具;list_iterations 显示 seq_no + 当前迭代标记
3. agent_loop.py: PM 派发任务默认迭代收口到 get_current_iteration
4. agent_loop_v2.py: create_project 初始迭代 status 从非法的 'active' 改为 'in_progress' + seq_no=1
|
2026-08-19 17:06:31 +08:00 |
|
ymq
|
eb910bc7b8
|
fix(task-chain): PM审核断链三处修复——未识别输出不再默认completed、review_complete仅终结角色可用、迭代边界只认显式completed/cancelled
根因:需求任务验收通过后设计任务未自动创建,项目卡在「无任务运行」的假终态。
1. pm_review_run 的 else 分支把未识别 PM 输出(deliver/纯文本/格式错误)静默当作 review_complete,
任务置 completed 且不创建下一角色任务,任务链断裂。改为追加纠错提示继续下一轮,轮次耗尽兜底 rejected。
2. 新增防御:非终结角色(requirement/design/develop/deploy_test/test)收到 review_complete 时修正为 approved。
3. 迭代边界检查从「非最新迭代即终止」改为「仅迭代状态 completed/cancelled 才终止」,
新建二期迭代不再阻断一期仍在跑的链。
4. PM prompt 澄清 review_complete 仅 deploy_prod 最后阶段使用。
|
2026-08-19 16:15:05 +08:00 |
|
ymq
|
536f51434f
|
feat: 任务最大重复数(task_max_retry)——超限暂停任务链+抛故障给人工,人工处理后reset_task_retry清零重执行
|
2026-08-19 07:29:08 +08:00 |
|
ymq
|
981b58b0d2
|
feat: PM项目推进铁律——默认自动推进(暂停才需指令),加 paused 项目状态 + pause/resume 工具 + PM暂停门控
|
2026-08-19 06:37:16 +08:00 |
|
ymq
|
834505fcfc
|
feat: PM任务分解与编排——父子关系(parent_id)+依赖串行(depends_on)+任务树分层
|
2026-08-19 05:53:28 +08:00 |
|
ymq
|
f542fdad8a
|
feat(pm): 加 cancel_task 工具 + agent 循环取消检测 + create_tasks 重做前自动取消同标题活跃任务
|
2026-08-18 18:26:36 +08:00 |
|
ymq
|
781858b61a
|
feat(worker): git 锁从 flock 升级 DB 锁表(pipeline_git_locks),跨主机多 worker 生效,TTL 180s 崩溃自释放
|
2026-08-18 18:13:50 +08:00 |
|
ymq
|
ff9db3d310
|
refactor(worker): 撤项目级串行,改 git 级串行锁(flock 同 repo),任务其它部分(LLM/写文件)完全并行
|
2026-08-18 17:55:21 +08:00 |
|
ymq
|
8c6e49992c
|
feat(worker): 认领加同项目串行(NOT EXISTS 无同 tenant 活跃任务),避免多 worker 并发写同一 workspace
|
2026-08-18 17:33:17 +08:00 |
|
ymq
|
a00ba32430
|
feat: PM 审核新增 review_rollback 决策——测试 Bug 后按问题内容回退到任一阶段,回退点之后的关联任务全部作废并重做
|
2026-08-18 15:38:55 +08:00 |
|
ymq
|
ab776d0c37
|
feat: 新增 QC 角色(质量门禁)+ 部署拆分为 deploy_test/deploy_prod + requirement 明确部署环境需求
- SDL_ROLES 6 环新链:requirement→design→develop→deploy_test→test→deploy_prod,新增 agent.qc
- 状态机新增 qc_review:角色交付→QC 合规/质量检查→PM 验收→下一环
- qc_review_run + qc poller;不合规退回重做
- requirement 职责增加部署环境需求明确
|
2026-08-18 15:16:43 +08:00 |
|
ymq
|
e26826f924
|
fix: 迭代边界——老迭代任务 approve 后不再自动触发下一角色任务(新迭代创建后老迭代链终止)
|
2026-08-18 14:48:03 +08:00 |
|
ymq
|
dfa441b09b
|
feat(pm): 固化 PM 项目计划/任务分配/任务验收职责,新增 create_tasks 批量派发后续任务,修复里程碑审批后链断
|
2026-08-18 14:23:20 +08:00 |
|
ymq
|
42bf89c0c1
|
fix: workspace fallback 统一到 WORKSPACE_BASE(/d/pipeline/workspaces),修复通用助手(无项目)仍用旧 /tmp/pipeline_ws 的问题
|
2026-08-17 15:15:02 +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
|
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
|
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
|
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
|
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 |
|
ymq
|
aa0dcc9c04
|
feat: 失败任务处理第二层——failed poller 自动重跑(最多3次)+报故障给用户
- pipeline_tasks 加 retry_count/last_error 列(启动时幂等 DDL)
- role/pm agent 失败时记录 last_error(含异常类型)
- handle_failed_task: 瞬时错误(超时/连接/5xx/429)重跑,永久错误或重试>=3次报故障(建问题通知用户,任务置 waiting)
- init.py: 新增 failed poller 每60s扫描 failed 任务,role任务由pm上报、pm任务由cockpit上报
|
2026-08-15 00:57:05 +08:00 |
|
ymq
|
bc5ce2f06d
|
fix: 任务链卡死根治 — 心跳+stale回收+claimed_by僵尸锁清除
- questions.py: agent_ask/answer_question 置 waiting/submitted 时清 claimed_by,否则 poll 器永不重新认领
- agent_loop_v2.py: _t_answer_question 回答后恢复任务 waiting→submitted(此前只标记问题已答,任务永久卡 waiting)
- agent_loop.py: _claim_task 加 claimed_by IS NULL 原子认领 + updated_at 心跳;role/pm 循环心跳 COMMIT;pm 认领保持 review 态
- init.py: role poller 回收僵尸 running 任务、pm poller 回收僵尸 review 任务(心跳超时 10 分钟)
|
2026-08-15 00:11:36 +08:00 |
|
p
|
d35800a100
|
fix: git commit 不依赖 files_written,遍历 repos/ 下所有仓库自动提交
|
2026-08-14 11:36:22 +08:00 |
|
p
|
b3ddb59e2e
|
fix: 角色agent轮数15→30 + read_file截断8000→30000(减少分段读浪费)
|
2026-08-14 11:27:02 +08:00 |
|
p
|
edd0a946a4
|
fix: role_agent_run 切原生 function calling(deliver/ask 作工具 + tool_calls 循环)
|
2026-08-14 11:14:25 +08:00 |
|
p
|
81cc0b3344
|
fix: XML parameter 支持 string="true" 类型属性
|
2026-08-14 11:11:01 +08:00 |
|
p
|
6c878a2abf
|
fix: _parse_agent_action 解析 deepseek XML tool_calls(原生 FC 输出格式)
|
2026-08-14 11:04:03 +08:00 |
|
p
|
d89ec3c784
|
fix: git 版本管理链路跑通 — role agent clone 时机 + git_clone 工具 + repo_dir 兼容
|
2026-08-13 18:57:06 +08:00 |
|
ymq
|
99ebd88100
|
fix: clear claimed_by on PM reject
|
2026-08-11 15:04:46 +08:00 |
|
ymq
|
f9aa6f21c2
|
feat: enforce project has at least one app, each app at least one module
|
2026-08-09 23:54:05 +08:00 |
|
ymq
|
29ae78da32
|
fix: project repo docs-only — source in module repos, modules/ and apps/ for references
|
2026-08-09 23:50:39 +08:00 |
|
ymq
|
07066001fe
|
feat: SDLC repo standard — each role knows exact output paths and deliverable specs
|
2026-08-09 23:46:08 +08:00 |
|
ymq
|
851b2b2066
|
refactor: PM review to LLM tool-loop — can inspect code files before deciding
|
2026-08-09 20:15:09 +08:00 |
|
ymq
|
afa6972903
|
refactor: role agent to LLM tool-loop with read/write/shell/git tools + llm_call_msgs
|
2026-08-09 17:34:36 +08:00 |
|
ymq
|
3b1718783a
|
fix: COMMIT after claim_task to release row lock before LLM call
|
2026-08-08 13:51:52 +08:00 |
|
ymq
|
6b295fc8ca
|
agent: inject skills from params into prompt; skills_dir fixed
|
2026-08-08 11:51:48 +08:00 |
|