ymq
|
ea17307a6c
|
fix(role): agent.deploy 前缀形态也加入 aliases——存量脏数据可解析
|
2026-08-28 21:13:41 +08:00 |
|
ymq
|
1bdc90f7f0
|
fix(role): deploy别名归一到agent.deploy_test——LLM写deploy导致approve后任务链断裂(_get_next_role查不到spec)
|
2026-08-28 21:12:21 +08:00 |
|
ymq
|
d9827c391b
|
fix(orchestration): 元景三问题根治——task_title归位+问题通道统一冒泡+依赖启动策略+确认去重
问题1(部署早于开发启动):
- _check_orchestration_gaps 重构为结构化缺口(kind/fingerprint/task_id/fix_ids)
- 缺口不再只打日志:派发后当场回给PM + 持久化pipeline_pm_notices注入PM下回合上下文
- 新增 update_task_deps 原语:PM核实缺口后补依赖(修正是LLM决策,代码只查漏)
问题2(env补齐后waiting不唤醒):
- _bubble_deploy_env_missing 从自建人工任务死胡同迁移到统一问题通道(raise_problem)
- owner在待办回答→resolve_problem自动唤醒任务→QA注入agent prompt,信息真正交给LLM
问题3(task_title错位+重复确认):
- SDL_ROLES task_title 各归其位(需求分析/架构设计/脚手架开发/部署测试/功能测试)
- 确认去重:同迭代已确认且非回退重做→跳过重复确认直接派发
- _create_next_task 单例阶段幂等:requirement/design复用同迭代任意活跃任务
机制增强:
- 依赖启动策略 params.dep_policy: all(默认)/any/at_least{n},纯函数_eval_deps_policy
- init.py poller 手写依赖求值收敛到同一纯函数(消除两处语义漂移)
|
2026-08-27 22:52:27 +08:00 |
|
ymq
|
8eeb196515
|
fix(delete_project)+feat(cleanup_orphans): 删除项目补 task_id 级联(sd_deliverables/artifacts/task_steps/human_tasks)+sd_project_role_models;新增孤儿清扫能力(指向已删项目/迭代/任务的残留,dry_run可先统计)
|
2026-08-26 15:17:48 +08:00 |
|
ymq
|
8862d72a60
|
fix(sdlc): 根治任务名继承 bug(design 任务名不再跟需求名一样)
根因:_create_next_task 用 new_title=f'{title}({next_role}阶段)' 直接继承上一任务
title + 追加角色后缀。导致 design 任务名变成「需求规格说明书(agent.design阶段)」
跟需求名混同;回退重做后更叠加成「...(回退重做)(agent.develop阶段)
(agent.deploy_test阶段)」越叠越长。
修:title 改按 next_role 的声明式 task_title 生成语义标题(项目名 + 阶段语义),
阶段模板由 RoleSpec.task_title 声明(design=应用架构与模块设计 / develop=应用脚手架开发 /
deploy_test=部署测试 / test=功能测试),代码不硬编码。
|
2026-08-25 17:01:19 +08:00 |
|
ymq
|
2659284e05
|
chore(prompt): AGENT/QC prompt 及工具描述里 repos/ 旧表述改 projects/apps/modules 新路径
|
2026-08-24 17:42:47 +08:00 |
|
ymq
|
ccf08bb631
|
feat(workspace): repos 逻辑迁到机构工作空间 projects/apps/modules——项目目录=项目过程仓库(git init)、应用/模块仓库按 _app 后缀分流 clone、commit/状态/解析扫 apps+modules+projects、交付件落 projects/{项目}/deliverables、PM/QC 工具路径基准改 space_dir
|
2026-08-24 17:39:30 +08:00 |
|
ymq
|
5ffbf94b72
|
feat: 生产部署需人工指令——test 通过后不自动派发 deploy_prod
test 的 next_role 从 agent.deploy_prod 改为空,test 通过后流程即止,
生产部署(deploy_prod)不再自动执行,由用户明确指令触发派发。
|
2026-08-22 20:14:32 +08:00 |
|
ymq
|
69a0b50f76
|
refactor: SDL_ROLES 各角色 system_prompt 精简为角色定位+引导加载技能
不再写死职责/流程/产出路径/审核方式/部署方案(这些都在角色技能 role/SKILL.md
和规范技能里,通过技能目录注入+load_skill 加载)。system_prompt 只保留:
'你是XX工程师。先 load_skill 加载 role 技能,按其中的职责与应遵守规范执行任务。'
同时删除了 deploy_test/deploy_prod 写死的 Dockerfile/docker-compose 错误部署方案。
|
2026-08-22 18:51:57 +08:00 |
|
ymq
|
145024506b
|
revert: 回退 develop system_prompt 的「应用级/模块级任务」规范
规范不应写在 system_prompt(SDL_ROLES),应只写在角色技能 agent.develop/role/SKILL.md
(已含应用级/模块级职责区分)。回退 system_prompt 到原样。
|
2026-08-22 18:42:06 +08:00 |
|
ymq
|
a9145ee3a4
|
feat: develop 角色区分应用级/模块级两类任务——应用级产出应用脚手架
应用级任务(标题含应用架构/应用脚手架)产出 repos/{应用名}_app:app/{应用名}.py
(唯一入口+get_module_dbname挂ServerEnv+load模块)、conf/config.json、build.sh。
模块级任务产出 Python 包(无独立 app.py,取库名用 ServerEnv().get_module_dbname())。
修复应用脚手架无人产出、导致应用级 deploy_test 部署失败(找不到 app.py)的缺口。
|
2026-08-22 18:35:22 +08:00 |
|
ymq
|
2eb70a3480
|
feat: 模型配置菜单入口(⚙️ 模型配置 → sd_project_role_models/index.ui)
|
2026-08-22 11:18:14 +08:00 |
|
ymq
|
14dca0cc43
|
feat: 项目-角色-模型配置 + 角色agent模型解析链
- sd_projects 加 default_model 字段(项目缺省模型=创建时的会话模型)
- _t_create_project 记录 created_by + default_model
- _resolve_llm_context 解析链:显式→项目-角色-模型(sd_project_role_models)
→项目缺省模型(default_model)→RoleSpec→pipelines.default_model→deepseek-v4-pro
- 新增工具 list_role_models / set_role_model(项目设置界面后端)
|
2026-08-22 10:19:50 +08:00 |
|
ymq
|
8eedff7af9
|
feat(sdlc): approve_task/complete_task 对齐 PM 行为推进任务链
- approve_task: 解决 pending review_reject + git 提交 + _get_next_role→迭代边界→_create_next_task 推进链
- complete_task: 同步交付件 review_status 标记 approved,避免任务 completed 但交付件仍 pending 不一致
- 会话 agent 手动 approve 不再断链(下一角色任务照常自动创建)
|
2026-08-21 23:39:15 +08:00 |
|
ymq
|
3c34eedb04
|
fix: 统一项目过程仓库命名 repos/{项目名}_pc(修复与 project-directory-spec 的路径错位)
- PROJECT_REPO_NAME 保留为回退默认值,_ensure_project_repo 改为按 {项目名}_pc 命名
- _setup_repos/role_agent_run 查项目名并注入 __PROJECT_NAME__ 占位符
- SDL_ROLES 6 个角色 prompt 的 repos/project/ 全部改为 repos/__PROJECT_NAME___pc/
- 根因:角色 prompt 硬编码旧名 repos/project,与 project-directory-spec(权威规范) 要求 {项目名}_pc 不一致,导致首次产出必被 QC 驳回
|
2026-08-21 23:35:57 +08:00 |
|
ymq
|
78b84c710e
|
feat(sdlc): 会话agent加任务流转工具 approve_task/complete_task/cancel_task(PM权限)
- task_capability 新增 cancel_task 原语(CAS+审计+终态守护)
- sdlc_ability 加 3 个 ToolDefinition + handler,who=agent.pm 记录 PM 权限操作
- _resolve_task_id 租户隔离前缀兜底
- SDL_PROMPT 补任务流转典型场景
- _pm_cancel_task 委托新原语,去掉重复 SQL
|
2026-08-21 22:43:11 +08:00 |
|
ymq
|
9c4f3deea6
|
feat(sdlc): 判断粒度落到迭代——create_task 迭代级查重 + diagnose_project 迭代级诊断 + prompt 迭代约束
1. _h_create_task:创建 requirement 任务前查「当前迭代」是否已有非 cancelled 的
requirement 任务(迭代的初始任务),有则拒绝重复创建,避免人事项目2 那种
需求分析完成后又重复启动需求分析。
2. _h_diagnose_project:诊断单位从「项目」改为「当前迭代」(in_progress),
按 iteration_id 过滤统计/列出任务,避免多迭代并存时诊断结果混在一起。
3. SDL_PROMPT:加「迭代粒度」约束——每个迭代独立初始任务+任务链,
创建 requirement 前先查重、诊断/派发/推进都以当前迭代为单位。
|
2026-08-21 13:04:58 +08:00 |
|
ymq
|
ca0cfc29de
|
feat(sdlc): 迭代级 requirement 任务查重——同一迭代不重复创建需求分析任务
|
2026-08-21 13:03:17 +08:00 |
|
ymq
|
d97c1442fa
|
fix: 模块仓库本地 git 化——develop git_commit_push 自动 init+本地提交作为产出证据,QC 改查实际文件不再要求远程推送
根因:设计阶段模块仓库URL是规划占位地址(git@code.local),develop 的 git_clone 失败后
代码直接 write_file 到 repos/<模块>/ 但从未 git init,导致模块仓库无 .git;加上上一轮
「审核后统一提交」让 develop 连本地提交都不做,QC 找不到 git 提交证据 → qc_reject 死循环。
修复:_git_commit_push 非 git 目录自动 init;develop 提示词改为本地 git init + git_commit_push
提交模块仓库;QC 提示词改为 list_files/read_file 核验真实文件 + 本地提交,不因无远程推送退回。
|
2026-08-20 23:44:51 +08:00 |
|
ymq
|
38e47be4db
|
feat: git 提交改为审核通过后统一提交——role agent 不再每次产出提交(移除 auto-commit + 角色提示词 git_commit_push),PM approve 后统一 commit 项目过程仓库+应用/模块仓库,减少并发锁与远端 push 频率
|
2026-08-20 21:45:07 +08:00 |
|
ymq
|
7b03f37ed3
|
fix(menus): 产线功能菜单指向真 CRUD 页面而非 xls2crud stub
menus url 原指向 sd_*_list/index.ui(xls2crud 占位页,无数据),改为
sd_projects/sd_bugs/sd_test_cases/sd_iterations(xls2ui 生成的真实 CRUD 页面)。
|
2026-08-20 15:54:12 +08:00 |
|
ymq
|
c319cb74df
|
feat: repos目录规范——项目过程仓库(阶段/QC/PM文档)+应用仓库+模块仓库; 阶段文档产出到repos/project并git commit; 临时文件不进仓库
|
2026-08-20 00:38:50 +08:00 |
|
ymq
|
0702f2570e
|
fix: 同步SDL_ROLES能力包角色提示词——requirement不划模块/design两层产出+模块划分+依赖/develop基础模块复用(此前只改了agent_loop硬编码,能力包会覆盖)
|
2026-08-19 23:24:15 +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
|
b341a43ad6
|
Revert "feat(task): 新增 cancel_task 工具,会话 agent 可取消单个任务"
This reverts commit fa5b5dc8e0f6fcd97c9ac72b364d1632d3d1fc67.
|
2026-08-19 19:53:07 +08:00 |
|
ymq
|
fa5b5dc8e0
|
feat(task): 新增 cancel_task 工具,会话 agent 可取消单个任务
背景:会话 agent 报告"没有终止运行中任务"的工具,只能靠驳回+附作废意见兜底。
核对:现有工具只有项目级(pause_project)/迭代级(start_next_iteration 的
_cancel_active_tasks、cancel_iteration)的停止能力,task_capability 连 S_CANCELLED
常量都没有,缺"取消单个任务"的任务级工具。
改动:
- task_capability.py: 加 S_CANCELLED 常量 + cancel_task()(任意非终态→cancelled+清
claimed_by,CAS 只动非终态,附 audit)
- sdlc_ability.py: 加 cancel_task ToolDefinition + _h_cancel_task handler(前缀解析
截断ID)+ SDL_HANDLERS 注册
|
2026-08-19 19:06:22 +08:00 |
|
ymq
|
ccc7baafbd
|
feat(iteration): start_next_iteration 二次确认——当前迭代有未完成任务时须 confirm=true 才作废
当前迭代存在活跃任务时,start_next_iteration 不带 confirm 返回 CONFIRM 提示
("还有 N 个未完成任务,确认作废并启动下一迭代?"),用户确认后 agent 传 confirm=true 才执行。
无活跃任务时无需确认直接推进。抽 _active_task_ids 供计数与作废复用。
|
2026-08-19 17:17:32 +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
|
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
|
ac85ee67f1
|
fix: create_task 的 iteration_id 归一化为迭代名(agent 传迭代 ID 时反查名称),修复任务树按名匹配计数为 0 的矛盾
|
2026-08-18 17:35:38 +08:00 |
|
ymq
|
8108d7d902
|
feat: 新增 /download slash 命令——实时打包项目tgz并生成下载链接
|
2026-08-18 16:03:59 +08:00 |
|
ymq
|
06ae6bb1ac
|
feat: 项目删除前确认+归档备份——delete_project(confirm二次确认)删除前自动备份tgz到机构工作目录_archive/,含工作目录+全关联表数据记录
|
2026-08-18 15:47: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
|
7ec0fb611f
|
fix: create_task 默认归当前迭代(最新迭代);_resolve_iteration_id 取当前迭代而非第一个
|
2026-08-18 14:05:20 +08:00 |
|
ymq
|
6add7ff4fa
|
fix: /task 弹窗 widget url 用 base_url 拼完整绝对路径(前端 absurl 需完整 URL)
|
2026-08-18 12:53:55 +08:00 |
|
ymq
|
20395a78b6
|
feat: /task 命令返回任务树+输入输出 ResourceBrowser 弹窗
|
2026-08-18 11:57:00 +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
|
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
|
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
|
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
|
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
|
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 |
|