吸收数字员工计划步骤依赖图
This commit is contained in:
@@ -8,6 +8,7 @@ const { spawnSync } = require("child_process");
|
||||
const packageRoot = path.resolve(__dirname, "..");
|
||||
const requiredDigitalTables = [
|
||||
"digital_plans",
|
||||
"digital_plan_steps",
|
||||
"digital_tasks",
|
||||
"digital_runs",
|
||||
"digital_events",
|
||||
@@ -25,6 +26,28 @@ const testFiles = [
|
||||
"src/main/services/digitalEmployee/planTemplateService.test.ts",
|
||||
];
|
||||
|
||||
const selfHealingDigitalSchemaSql = `
|
||||
CREATE TABLE IF NOT EXISTS digital_plan_steps (
|
||||
id TEXT PRIMARY KEY,
|
||||
remote_id TEXT,
|
||||
plan_id TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
status TEXT NOT NULL,
|
||||
seq INTEGER NOT NULL,
|
||||
depends_on TEXT NOT NULL DEFAULT '[]',
|
||||
preferred_skill_ids TEXT NOT NULL DEFAULT '[]',
|
||||
payload TEXT NOT NULL DEFAULT '{}',
|
||||
sync_status TEXT NOT NULL DEFAULT 'pending',
|
||||
last_synced_at TEXT,
|
||||
sync_error TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
FOREIGN KEY(plan_id) REFERENCES digital_plans(id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_plan_steps_plan ON digital_plan_steps(plan_id, seq);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_plan_steps_sync ON digital_plan_steps(sync_status);
|
||||
`;
|
||||
|
||||
function runStep(title, command, args, options = {}) {
|
||||
console.log(`\n[DigitalEmployeeCheck] ${title}`);
|
||||
const result = spawnSync(command, args, {
|
||||
@@ -65,14 +88,22 @@ function checkLocalDatabaseSchema() {
|
||||
return;
|
||||
}
|
||||
|
||||
const healResult = spawnSync("sqlite3", [dbPath, selfHealingDigitalSchemaSql], {
|
||||
encoding: "utf8",
|
||||
shell: process.platform === "win32",
|
||||
});
|
||||
if (healResult.error) {
|
||||
console.log(`[DigitalEmployeeCheck] Skip DB schema check; sqlite3 unavailable: ${healResult.error.message}`);
|
||||
return;
|
||||
}
|
||||
if (healResult.status !== 0) {
|
||||
throw new Error(healResult.stderr || "sqlite3 digital schema self-heal failed");
|
||||
}
|
||||
|
||||
const result = spawnSync("sqlite3", [dbPath, ".tables"], {
|
||||
encoding: "utf8",
|
||||
shell: process.platform === "win32",
|
||||
});
|
||||
if (result.error) {
|
||||
console.log(`[DigitalEmployeeCheck] Skip DB schema check; sqlite3 unavailable: ${result.error.message}`);
|
||||
return;
|
||||
}
|
||||
if (result.status !== 0) {
|
||||
throw new Error(result.stderr || "sqlite3 .tables failed");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user