V3.3 AI主管自动开工:新建项目必选AI主管+多选干活团队,创建即自动跑起来

- 新建项目必填 AI 主管(manager_worker_id)+ 干活团队(project_team_workers 多选,默认AI牛/AI马),均可随时更换
- 创建后立即自动开工:AI主管WBS拆解→轮询分派团队→DAG自动执行→全程监控(autostart.py)
- 失败任务由AI主管诊断原因并修订指令重试(最多2次),全程记入 project_logs 动态
- 项目页新增「AI主管动态」面板:状态/最新动态/主管与团队/动态流水,运行中每3秒自动刷新看板
- 支持手动「🚀 AI主管开工」:已有任务跳过规划直接执行存量;换主管/团队后按新配置生效
- 收工自动汇总完成数/失败数/待审核数/总成本,触发交付体系通知送达者
- 老库自动迁移:projects 新增 manager_worker_id/auto_status 等列 + project_team_workers/project_logs 表
This commit is contained in:
2026-08-14 12:35:46 +08:00
parent 8be01b5af7
commit c8cc945b8d
7 changed files with 651 additions and 37 deletions
+45
View File
@@ -23,10 +23,23 @@ CREATE TABLE IF NOT EXISTS projects (
workspace_dir TEXT DEFAULT '', -- 项目工作目录(相对 data/ 的目录名)
demo_url TEXT DEFAULT '', -- 网页交付物 Demo 访问地址
delivered_at INTEGER, -- 最近一次交付/送达时间
manager_worker_id INTEGER, -- V3.3 AI 主管 Worker id(负责拆解/派活/监控)
auto_status TEXT DEFAULT 'none', -- V3.3 自动开工状态 none/running/done/failed
auto_message TEXT DEFAULT '', -- V3.3 自动开工最新动态
auto_started_at INTEGER, -- V3.3 最近一次自动开工时间
auto_finished_at INTEGER, -- V3.3 最近一次自动收尾时间
created_at INTEGER,
updated_at INTEGER
);
-- V3.3 项目干活团队:AI 主管支配的多个 Worker
CREATE TABLE IF NOT EXISTS project_team_workers (
project_id INTEGER NOT NULL,
worker_id INTEGER NOT NULL,
created_at INTEGER,
PRIMARY KEY (project_id, worker_id)
);
CREATE TABLE IF NOT EXISTS workers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
@@ -73,6 +86,15 @@ CREATE TABLE IF NOT EXISTS task_logs (
created_at INTEGER
);
-- V3.3 AI 主管项目级动态(拆解/派活/监控/诊断重试)
CREATE TABLE IF NOT EXISTS project_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
level TEXT DEFAULT 'info',
message TEXT DEFAULT '',
created_at INTEGER
);
CREATE TABLE IF NOT EXISTS cost_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id INTEGER,
@@ -396,6 +418,29 @@ def _migrate():
# V3.2projects 送达者改为用户 id(实时取邮箱)
if 'deliver_user_id' not in pcols:
conn.execute('ALTER TABLE projects ADD COLUMN deliver_user_id INTEGER')
# V3.3projects AI 主管 + 自动开工状态
for col, ddl in (
('manager_worker_id', 'ALTER TABLE projects ADD COLUMN manager_worker_id INTEGER'),
('auto_status', "ALTER TABLE projects ADD COLUMN auto_status TEXT DEFAULT 'none'"),
('auto_message', "ALTER TABLE projects ADD COLUMN auto_message TEXT DEFAULT ''"),
('auto_started_at', 'ALTER TABLE projects ADD COLUMN auto_started_at INTEGER'),
('auto_finished_at', 'ALTER TABLE projects ADD COLUMN auto_finished_at INTEGER'),
):
if col not in pcols:
conn.execute(ddl)
conn.execute('''CREATE TABLE IF NOT EXISTS project_team_workers (
project_id INTEGER NOT NULL,
worker_id INTEGER NOT NULL,
created_at INTEGER,
PRIMARY KEY (project_id, worker_id)
)''')
conn.execute('''CREATE TABLE IF NOT EXISTS project_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
level TEXT DEFAULT 'info',
message TEXT DEFAULT '',
created_at INTEGER
)''')
# V3.2:users 邮箱列 + 存量用户默认邮箱 + 旧项目按邮箱回填送达者用户
ucols = {r['name'] for r in conn.execute('PRAGMA table_info(users)')}
if 'email' not in ucols: