ymq
|
7596f76605
|
feat(ctx): _build_ctx补org_id——能力工具handler可取当前用户机构(供应商自动归属需要)
|
2026-09-03 16:22:00 +08:00 |
|
ymq
|
19c7d05105
|
fix: load_skill支持file_path子文件加载
v2引擎_t_load_skill只返回主文档,参考文件无法读取(内部agent实测反馈)
- file_path走Skill.read_linked_file(已带路径穿越防护)
- 主文档加载时列出可用子文件
- 子文件加载失败时提示可用子文件清单
|
2026-09-02 17:56:10 +08:00 |
|
ymq
|
7bb18d8839
|
fix(项目管理): 确认死循环根治四件套
- fix1 _load_history: ASC LIMIT取最旧N条→DESC LIMIT取最新N条再倒回正序(会话超历史上限后LLM看不到用户刚答的确认,复读旧回复)
- fix2 delete_project描述: 去掉'先复述确认再调用'指令(平台确认门已弹窗给用户,LLM再问=死循环),改为直接confirm=true调用
- fix3 pause/resume跨产线状态兼容: 进行中不硬编码active(S_ACTIVE_LIKE含in_progress);暂停前原状态记审计detail,恢复时还原原状态(投标项目不会被改成状态机外的active)
- fix4 owner门禁降级: created_by='agent.*'的项目无人类字面owner→降级同机构人类可操作(否则永久拒绝)
|
2026-09-01 15:29:59 +08:00 |
|
ymq
|
52550c9e69
|
fix(workspace): 项目目录统一机制——创建时定死目录写库,解析只读库不推导
根因:4个创建入口只有1个写workspace_dir,其余靠解析时推导且口径不一
(上传落盘走旧平铺{space}/{名},角色agent走新结构{space}/projects/{名}),
导致AgentIO上传文件与项目工作目录错位,文件在工作控件里找不到。
- workspace.py: 新增 alloc_project_dir(统一分配,用名字不用id,重名加短id避让)
- workspace.py: get_project_dir_by_id/get_workspace_dir 兜底改新结构口径
- project_capability.create_project: 创建时写 workspace_dir+directory_name
- agent_loop_v2.create_project: 改用 alloc_project_dir(原自拼slug逻辑收敛)
|
2026-09-01 11:54:58 +08:00 |
|
ymq
|
2dcd771533
|
feat(项目管理): 会话agent项目终止/删除能力+人类owner代码层门禁
- agent_loop_v2: GENERAL_TOOLS新增project_info/list_my_projects/pause/resume/delete_project 5工具+handler(_resolve_owned_project代码层校验owner, 不靠prompt)
- sdlc_ability: 8个项目生命周期handler(start/complete/archive/reopen/pause/resume/backup/delete)全加_require_project_owner门禁——能力层优先于通用层分发,不加则绕过校验;审计who记登录用户
- 别名归一化防LLM编造工具名;_needs_confirmation同步归一防别名绕过确认门
- pause/resume/delete标requires_confirmation(会话确认→代码校验双重门)
|
2026-09-01 11:51:48 +08:00 |
|
ymq
|
a7d522b15f
|
fix(session): 跨产线会话串扰根治——历史/项目上下文按产线隔离
根因: 各产线页面默认tab共用session_id='default', 对话历史只按session_id过滤
(写入未存pipeline_id), 投标页加载了开发页历史导致LLM答错产线。
- _save_turn: 写入pipeline_id(generic存空串防污染开发产线)
- _load_history: session级读取加pipeline_id过滤
- get_session_project_id: 加pipeline_id参数, 跨产线项目不生效(不删记录)
|
2026-08-31 22:03:46 +08:00 |
|
ymq
|
2d913c1d12
|
fix(read_file): 截断显式告知+offset分段读——根治静默截断同类病
|
2026-08-31 22:01:26 +08:00 |
|
ymq
|
06130bcbef
|
fix(workspace): switch_project后刷新工作目录——根治切项目后list_files仍列旧目录
|
2026-08-31 19:31:48 +08:00 |
|
ymq
|
947398c9ef
|
fix(upload): get_project_dir_by_id+copy_uploads_to_project;agent工作目录对空workspace_dir项目兜底解析(与落盘同一函数)
|
2026-08-31 17:54:29 +08:00 |
|
ymq
|
38d9897a78
|
fix(skills): load_skill走resolve_skill容错匹配+未命中提示裸名规范(根治'技能[产线]bid-workflow不存在')
|
2026-08-31 16:24:05 +08:00 |
|
ymq
|
7023742880
|
fix(llm): 模型不可用报真实错误+name/model_id双匹配+org语义对齐
- _no_llm_error: 错误写明模型名/原因/行动指引,禁止笼统No LLM API configured
- _get_model_config: name/model_id 双匹配(与gateway解析语义一致),org过滤含系统级共享
- agent_loop_v2 run(): LLM调用异常捕获→yield error事件,前端显示真实错误不再卡死思考中
|
2026-08-30 15:07:34 +08:00 |
|
ymq
|
c510ef14a9
|
fix: list_projects产线隔离——产线会话只列本产线项目(投标不串开发产线);all=true可跨产线
|
2026-08-29 08:33:54 +08:00 |
|
ymq
|
58d773b6ad
|
fix(workspace): 会话创建项目改用新结构目录 + 写入 directory_name
根因:_t_create_project 用旧结构 build_workspace_path({space}/{项目名}),不写
directory_name;而工作空间读取端已迁到新结构 {space}/projects/{英文slug},
导致会话新建的项目显示「项目目录(不可用)」。
修复:
- 改用 build_space_path 拼 {space}/projects/{slug} 并 os.makedirs
- slug 保留 [A-Za-z0-9_-],须含字母(避免纯数字如'7'),否则兑底 proj_{短ID}
- 写入 directory_name 字段(工作空间读路径依据)
- 同 slug 冲突追加短 ID
|
2026-08-27 16:11:43 +08:00 |
|
ymq
|
09f8b85f66
|
feat(gateway): run_message/AgentExecutor 支持 default_pipeline_id
无当前项目时按入口指定产线装载能力(替代硬回退 sdlc_general)。
投标产线会话入口传 bidding_general 即可复用通用 agent 多 session 界面。
|
2026-08-27 13:12:34 +08:00 |
|
ymq
|
f8fef7a7d5
|
feat(session): 当前项目按会话隔离(session_id),多tab各自项目互不覆盖
- workspace.get_session_project_id: 按 session_id 读 pipeline_session_settings,回退全局
- get_workspace_dir/get_workspace_path 支持 session_id 参数
- gateway.resolve_project 按会话解析 pid(default_llm 仍按用户全局)
- _persist_project: 有 session_id 时写 pipeline_session_settings + 全局兜底
|
2026-08-24 16:40:42 +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
|
6dbb574862
|
refactor(sdlc): 技能 base_dir 改全局 skills/(单一技能树,去掉机构副本路径)
- agent_loop: _build_role_skills_block/_load_skill_by_name 改 get_skills_base()
- agent_loop_v2: _resolve_skills_base_dir 改返回 get_skills_base()
|
2026-08-21 19:18:51 +08:00 |
|
ymq
|
8bc1b4e571
|
feat(session): gateway/executor 支持 session_id 多会话隔离
web 多 tab 独立会话:run_message 加 session_id,会话 key 从 channel:user_id
扩展为 channel:user_id:session_id(空则向后兼容单会话);AgentExecutor 历史
加载/保存按 session_id 隔离,空则回退 project 级隔离。
|
2026-08-20 17:38:18 +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
|
41232c8295
|
feat: 危险命令确认改为会话级——保留单次确认,新增「全部确认」选项(approve_all)授权后本会话不再询问
|
2026-08-19 14:09:27 +08:00 |
|
ymq
|
bda9f31a1b
|
feat: 关闭 agent 会话危险命令确认——自动理解和接受全部确认,不再打断用户
|
2026-08-19 13:52:23 +08:00 |
|
ymq
|
7787898456
|
feat(project-space): 项目空间隔离——通用助手('general')与专业产线(pipeline_id)项目空间不共享
- workspace.build_workspace_path: {base}/{org}/{space}/{name},重名追加短ID
- get_workspace_dir 兜底路径加空间段
- AgentExecutor 加 generic 标志派生 self.space;create_project/switch_project 按空间过滤
- gateway 传 generic
|
2026-08-19 11:38:23 +08:00 |
|
ymq
|
6add7ff4fa
|
fix: /task 弹窗 widget url 用 base_url 拼完整绝对路径(前端 absurl 需完整 URL)
|
2026-08-18 12:53:55 +08:00 |
|
ymq
|
42bf89c0c1
|
fix: workspace fallback 统一到 WORKSPACE_BASE(/d/pipeline/workspaces),修复通用助手(无项目)仍用旧 /tmp/pipeline_ws 的问题
|
2026-08-17 15:15:02 +08:00 |
|
ymq
|
286f0cb4dd
|
feat(llm): 个人选择模型(default_llm_id)接入会话agent+org_id改用户机构优先
|
2026-08-17 13:31:04 +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
|
3f9ae7a08f
|
feat: agent加propose_skill自省handler(提skill化建议写提议表)
|
2026-08-16 19:16:53 +08:00 |
|
ymq
|
47dcd3c11e
|
fix: run_command只对危险命令确认(普通命令自动执行),避免confirm卡死
|
2026-08-16 18:52:51 +08:00 |
|
ymq
|
2fe0f3ef29
|
feat: list_packs/install_pack handler+/skills限前20个
|
2026-08-16 18:19:40 +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
|
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
|
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
|
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 |
|
p
|
d89ec3c784
|
fix: git 版本管理链路跑通 — role agent clone 时机 + git_clone 工具 + repo_dir 兼容
|
2026-08-13 18:57:06 +08:00 |
|
ymq
|
49338b4fc7
|
fix: 修复 answer_question/add_bug/list_questions/diagnose 的 DB 列名错误
- answer_question: answered=1 → status='answered'(表无answered列)
- list_questions: answered IS NULL → status='pending'
- diagnose_project: 问题计数 answered IS NULL → status='pending'
- add_bug: 补 iteration_id(查项目默认迭代)
|
2026-08-13 17:27:41 +08:00 |
|