127 Commits

Author SHA1 Message Date
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
ymq
07383a9dd5 fix: switch_project/create_project 持久化当前项目 + auto-inject 新需求识别
- _persist_project 持久化 current_project_id 到 pipeline_agent_settings(只改内存字段导致下一轮回退旧项目)
- auto-inject 兜底识别新需求描述 → create_task 而非 diagnose/list_tasks
2026-08-14 13:59:54 +08:00
ymq
92ee88d1f4 refactor: 审计逻辑迁移到独立模块 app_audit
- 移除 pipeline_service/audit_service.py(迁移到 app_audit)
- __init__.py 移除 audit import,init.py 移除 sd_audit_logs/owner.audit DDL
2026-08-14 12:20:36 +08:00
ymq
c7bb13c17d fix: 审计删除排除 audit_delete 留痕(防自删) 2026-08-14 12:12:29 +08:00
ymq
eaaf5fad26 feat: 审计日志全局模块(append-only,查看/备份/删除仅 owner.audit)
- audit_service.py: audit_log 写入 + is_audit_role + list/backup/delete
- sd_audit_logs 表 + owner.audit 角色 DDL
- 审计独立性:owner.superuser 也无权查看审计日志
2026-08-14 12:10:57 +08:00
ymq
939fd252ec security: 机构独立 SSH key + host key 校验(accept-new 防 MITM)
- ensure_org_key: 每机构独立 ed25519 key pair(~/.ssh/org_keys/<org_id>/),防单点泄露
- org 级远程模式自动用机构 key,不允许指定任意 key
- StrictHostKeyChecking=no → accept-new,首次记录后严格校验 host key 防 MITM
2026-08-14 11:58:48 +08:00
p
d35800a100 fix: git commit 不依赖 files_written,遍历 repos/ 下所有仓库自动提交 2026-08-14 11:36:22 +08:00
ymq
4fe5f17490 fix: remote_dir 根目录绕过(rstrip 后空串检查) 2026-08-14 11:27:45 +08:00
p
b3ddb59e2e fix: 角色agent轮数15→30 + read_file截断8000→30000(减少分段读浪费) 2026-08-14 11:27:02 +08:00
ymq
8371d95101 security: 工作环境远程配置安全校验 + 迁移顺序修正
- _validate_remote: host/user/port/dir/key 校验,防注入与防 rsync --delete 删系统目录
- remote_key_path 限制 ~/.ssh/ 下,防读任意私钥
- remote_dir 禁止系统目录(含 migrate_work_dir 纵深防御)
- 先迁移成功再写 DB,迁移失败不回写 mode(状态一致)
2026-08-14 11:26:34 +08:00
ymq
17b90c8c12 fix: 远程→本地迁移用旧环境远程配置(而非空的新data) 2026-08-14 11:16:12 +08:00
ymq
7e0a3d1d93 fix: 远程沙箱 bwrap 路径探测(PATH 优先回退 ~/bin/bwrap) 2026-08-14 11:15:03 +08:00
p
edd0a946a4 fix: role_agent_run 切原生 function calling(deliver/ask 作工具 + tool_calls 循环) 2026-08-14 11:14:25 +08:00
ymq
262d678e2a feat: 工作环境管理(沙箱本地/远程切换 + 目录迁移)
- work_env.py: get/set_work_env(用户/机构维度,缺省local)、rsync目录迁移、远程SSH+bwrap沙箱、远程bwrap部署
- run_in_work_env: 按mode分发本地bwrap/远程SSH+bwrap
- sd_work_envs 表 DDL
2026-08-14 11:12:54 +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
011dd9cb95 fix: bwrap 多路径检测(环境变量+已知位置兜底) 2026-08-13 18:07:16 +08:00