吸收数字员工周期调度闭环
This commit is contained in:
@@ -9,6 +9,8 @@ const packageRoot = path.resolve(__dirname, "..");
|
||||
const requiredDigitalTables = [
|
||||
"digital_plans",
|
||||
"digital_plan_steps",
|
||||
"digital_schedules",
|
||||
"digital_schedule_runs",
|
||||
"digital_tasks",
|
||||
"digital_runs",
|
||||
"digital_events",
|
||||
@@ -20,6 +22,7 @@ const requiredDigitalTables = [
|
||||
|
||||
const testFiles = [
|
||||
"src/main/services/digitalEmployee/stateService.test.ts",
|
||||
"src/main/services/digitalEmployee/schedulerService.test.ts",
|
||||
"src/main/ipc/eventForwarders.test.ts",
|
||||
"src/main/services/digitalEmployee/syncService.test.ts",
|
||||
"src/main/services/digitalEmployee/skillCatalogService.test.ts",
|
||||
@@ -46,6 +49,64 @@ const selfHealingDigitalSchemaSql = `
|
||||
);
|
||||
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);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS digital_schedules (
|
||||
id TEXT PRIMARY KEY,
|
||||
remote_id TEXT,
|
||||
plan_id TEXT,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
cron_expr TEXT NOT NULL,
|
||||
timezone TEXT NOT NULL DEFAULT 'system',
|
||||
status TEXT NOT NULL DEFAULT 'enabled',
|
||||
enabled INTEGER NOT NULL DEFAULT 1,
|
||||
prompt TEXT,
|
||||
command TEXT,
|
||||
payload TEXT NOT NULL DEFAULT '{}',
|
||||
next_run_at TEXT,
|
||||
last_run_at TEXT,
|
||||
catch_up_on_startup INTEGER NOT NULL DEFAULT 1,
|
||||
max_catch_up_runs INTEGER NOT NULL DEFAULT 5,
|
||||
max_run_history INTEGER NOT NULL DEFAULT 100,
|
||||
failure_count INTEGER NOT NULL DEFAULT 0,
|
||||
last_error TEXT,
|
||||
sync_status TEXT NOT NULL DEFAULT 'pending',
|
||||
last_synced_at TEXT,
|
||||
sync_error TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
deleted_at TEXT,
|
||||
FOREIGN KEY(plan_id) REFERENCES digital_plans(id)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS digital_schedule_runs (
|
||||
id TEXT PRIMARY KEY,
|
||||
remote_id TEXT,
|
||||
schedule_id TEXT NOT NULL,
|
||||
plan_id TEXT,
|
||||
run_id TEXT,
|
||||
due_at TEXT NOT NULL,
|
||||
started_at TEXT,
|
||||
finished_at TEXT,
|
||||
status TEXT NOT NULL,
|
||||
attempt_no INTEGER NOT NULL DEFAULT 1,
|
||||
trigger_kind TEXT NOT NULL DEFAULT 'scheduled',
|
||||
error TEXT,
|
||||
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(schedule_id) REFERENCES digital_schedules(id),
|
||||
FOREIGN KEY(plan_id) REFERENCES digital_plans(id),
|
||||
FOREIGN KEY(run_id) REFERENCES digital_runs(id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_schedules_due ON digital_schedules(enabled, status, next_run_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_schedules_plan ON digital_schedules(plan_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_schedules_sync ON digital_schedules(sync_status);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_schedule_runs_schedule ON digital_schedule_runs(schedule_id, due_at);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_digital_schedule_runs_attempt ON digital_schedule_runs(schedule_id, due_at, attempt_no);
|
||||
CREATE INDEX IF NOT EXISTS idx_digital_schedule_runs_sync ON digital_schedule_runs(sync_status);
|
||||
`;
|
||||
|
||||
function runStep(title, command, args, options = {}) {
|
||||
|
||||
Reference in New Issue
Block a user