fix: 工作台任务补 workspace_scope=workspace,修复会话落「未分组任务」

根因:工作台直接写宿主 automations 表时漏了 workspace_scope 字段。
对比取证:走正规 automation 工具创建的任务该字段为 'workspace'(36 条)→ 会话 is_playground=0 → 正常进工作区分组;
工作台写的为 null(当天 5 条)→ is_playground=1 → 会话落「未分组任务」。
修复:server.js 两处 INSERT INTO automations(createOnceAutomation / /api/run)补该列并填 'workspace'。
实测:新任务 scope=workspace、新会话 is_playground=0;对照组仍为 1。
排除的假因:改 cwd 无效;登记 workspaces 表无效。
This commit is contained in:
maogeigei committed 2026-10-08 17:09:58 +08:00
1 parent a4b2cb1d4f
commit a3ca08eabd
2 files changed
+52 -6

No files matched your search

@@ -404,9 +404,11 @@ function createOnceAutomation(name, prompt, skillsArr, connectorIdsArr) {
const ownerUserId = uidRow ? uidRow.user_id : '';
const modelRow = db.prepare(`SELECT model FROM sessions WHERE deleted_at IS NULL AND COALESCE(is_background_automation,0)=0 AND model IS NOT NULL AND model <> '' ORDER BY COALESCE(last_activity_at, updated_at) DESC LIMIT 1`).get();
const modelId = (modelRow && modelRow.model) ? modelRow.model : 'auto';
db.prepare(`INSERT INTO automations (id,name,prompt,status,schedule_type,scheduled_at,next_run_at,rrule,cwds,created_at,updated_at,skills_json,connector_ids_json,model_id,permission_mode,owner_user_id,owner_status)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
.run(id, name, prompt, 'ACTIVE', 'once', scheduledAt, nextRunAt, '', JSON.stringify([cwd]), now, now, JSON.stringify(Array.isArray(skillsArr) ? skillsArr : []), JSON.stringify(Array.isArray(connectorIdsArr) ? connectorIdsArr : []), modelId, 'fullAccess', ownerUserId, 'confirmed');
// 10-08 修复:必须带 workspace_scope='workspace'。走正规 automation 工具创建的任务都带该值(库里 36 条如此),
// 工作台直接写库时漏了它 ⇒ 会话被视为"自动生成的空间"、落进「未分组任务」。
db.prepare(`INSERT INTO automations (id,name,prompt,status,schedule_type,scheduled_at,next_run_at,rrule,cwds,created_at,updated_at,skills_json,connector_ids_json,model_id,permission_mode,owner_user_id,owner_status,workspace_scope)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
.run(id, name, prompt, 'ACTIVE', 'once', scheduledAt, nextRunAt, '', JSON.stringify([cwd]), now, now, JSON.stringify(Array.isArray(skillsArr) ? skillsArr : []), JSON.stringify(Array.isArray(connectorIdsArr) ? connectorIdsArr : []), modelId, 'fullAccess', ownerUserId, 'confirmed', 'workspace');
return { id };
} finally {
db.close();
@@ -874,9 +876,10 @@ const server = http.createServer((req, res) => {
// 无手动会话记录时兜底 'auto'(自动路由)。实证:调度接受 'auto' 与具体模型 ID('deepseek-v4-pro' 曾成功)
const modelRow = db.prepare(`SELECT model FROM sessions WHERE deleted_at IS NULL AND COALESCE(is_background_automation,0)=0 AND model IS NOT NULL AND model <> '' ORDER BY COALESCE(last_activity_at, updated_at) DESC LIMIT 1`).get();
const modelId = (modelRow && modelRow.model) ? modelRow.model : 'auto';
db.prepare(`INSERT INTO automations (id,name,prompt,status,schedule_type,scheduled_at,next_run_at,rrule,cwds,created_at,updated_at,skills_json,connector_ids_json,model_id,permission_mode,owner_user_id,owner_status)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
.run(id, name || '工作台任务', finalPrompt, 'ACTIVE', 'once', scheduledAt, nextRunAt, '', JSON.stringify([cwd]), now, now, JSON.stringify(skillsArr), JSON.stringify(connArr), modelId, 'fullAccess', ownerUserId, 'confirmed');
// 10-08 修复:与 createOnceAutomation 同理,必须带 workspace_scope='workspace',否则会话落「未分组任务」
db.prepare(`INSERT INTO automations (id,name,prompt,status,schedule_type,scheduled_at,next_run_at,rrule,cwds,created_at,updated_at,skills_json,connector_ids_json,model_id,permission_mode,owner_user_id,owner_status,workspace_scope)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
.run(id, name || '工作台任务', finalPrompt, 'ACTIVE', 'once', scheduledAt, nextRunAt, '', JSON.stringify([cwd]), now, now, JSON.stringify(skillsArr), JSON.stringify(connArr), modelId, 'fullAccess', ownerUserId, 'confirmed', 'workspace');
db.close();
log('已提交 AI 任务: ' + id + (name ? ' (' + name + ')' : ''));
return sendJSON(200, { ok: true, id, message: '任务已提交,请在左侧会话栏查看执行' });