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 |
|
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
|
8c0d63efb1
|
fix: LLM 调用加瞬时错误重试(3次) + 超时 180s→300s(connect 30s);心跳回收阈值 10→20 分钟防误杀慢任务
- llm_bridge: 抽出 _post_chat_completion,超时/连接错误/429/5xx 重试3次退避;total=300 connect=30
- init.py: 僵尸回收阈值对齐 LLM 最坏单轮时长(3×300s≈15min),20分钟
- agent_loop_v2: diagnose 心跳超时判定 10→20 分钟
|
2026-08-15 00:46:30 +08:00 |
|
ymq
|
00a7e77629
|
feat: diagnose_project 运行中任务返回 claimed_by+心跳陈旧度,agent 可直接识别僵尸任务
|
2026-08-15 00:27:12 +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 |
|
ymq
|
d2f3caf8a7
|
refactor: workspace 路径解析收敛到 workspace.py,dspy 消除重复
- workspace.py 加 get_workspace_dir/get_workspace_base + load_workspace 注册到 ServerEnv
- 8 个 workspace dspy 内联重复的'读 workspace_base + 查 project 算 ws_dir'改为调 get_workspace_dir
- _t_create_project 复用 get_workspace_base(删掉死代码 _get_param)
- workspace.py 从 untracked 变为已跟踪提交
|
2026-08-14 18:07:33 +08:00 |
|
ymq
|
bd3a9a5abd
|
refactor: workspace_base 从 appbase params 表读(去硬编码,带默认值兜底)
|
2026-08-14 15:59:49 +08:00 |
|
ymq
|
e48cb2c62c
|
fix: create_project workspace_dir 硬编码(workspace.py 未提交,避免 import 依赖)
|
2026-08-14 15:49:05 +08:00 |
|
ymq
|
802143b723
|
fix: create_project 设置 workspace_dir + org_id 并创建项目专属目录
根因:_t_create_project 未设置 workspace_dir,导致 _resolve_workspace 回退到 ~/pipeline_ws/default,所有项目共用同一目录,设计文档互相覆盖;前端 get_workspace_path 又回退到 /d/pipeline/workspaces/<org>/<项目名>,两处不一致导致工作空间浏览器显示'不可用'而文档实际写在 default
|
2026-08-14 15:44:55 +08:00 |
|
ymq
|
e479b347bd
|
fix: remote_host 清理复制粘贴带入的零宽/BOM 不可见字符
|
2026-08-14 14:49:01 +08:00 |
|
ymq
|
70185771d0
|
fix: 远程目录 ~ 展开改用 $HOME(shlex.quote 会把 ~ 包进单引号不展开)
- _resolve_remote_dir → _rel_remote_dir 返回纯相对路径
- rsync 用 :~/,ssh mkdir/bwrap --bind 用 $HOME/rel 让远程 shell 展开
- 加强 remote_dir 安全字符校验(_REL_DIR_RE,防 shell 注入)
|
2026-08-14 14:26:29 +08:00 |
|
ymq
|
cfaf48ed5d
|
fix: 远程迁移前 mkdir -p(相对路径多级目录 rsync 不递归建父目录)
|
2026-08-14 14:22:36 +08:00 |
|
ymq
|
dc4379b235
|
feat: 远程目录 remote_dir 改用相对路径(从远程用户 home 目录开始)
- 新增 _resolve_remote_dir(相对→~/xxx)+ _validate_remote_dir(防绝对路径/..穿越)
- 移除 _FORBIDDEN_DIRS 系统目录黑名单(相对路径天然限制在 home 内)
- rsync 迁移 + bwrap --bind 统一走 _resolve_remote_dir
|
2026-08-14 14:20:47 +08:00 |
|