fix(frontend): 脚本库与推送调度对齐设计文档

修复 ScriptsPage 执行契约(script_id/command、历史过滤、长任务/凭据)及 SchedulesPage 缺失能力(target_path、next_run、push/script、cron/once、sync_mode);后端补迁移与 schedule_runner 传参。
This commit is contained in:
Nexus Agent
2026-06-08 02:39:18 +08:00
parent f12a0b6a36
commit dfb0ea2d8f
167 changed files with 4182 additions and 227 deletions
@@ -0,0 +1,44 @@
# 2026-06-07 — 推送调度对齐设计文档
## 摘要
修复推送调度 SPA 与后端契约断裂:`target_path` 未持久化、`schedule_runner` 未传递目标路径、`next_run` 恒为空;补全调度类型(push/script)、运行模式(cron/once)、同步模式与脚本调度 UI。
## 动机
- 前端表单有「目标路径」但未提交,DB 无 `target_path` 列,`runNow` 错误默认 `/tmp`
- 设计文档(附录 E.1)要求 source/target + sync_mode 或 script_id,旧版 SPA 仅支持 cron 推送
- 表格「下次运行」无 API 计算,用户无法判断调度是否生效
## 涉及文件
| 层 | 文件 |
|----|------|
| 模型 | `server/domain/models/__init__.py``PushSchedule.target_path` |
| 迁移 | `server/infrastructure/database/migrations.py`, `server/api/install.py` |
| Schema | `server/api/schemas.py``ScheduleCreate/Update.target_path` |
| API | `server/api/settings.py``_schedule_to_dict` + `next_run` |
| Runner | `server/background/schedule_runner.py` — 传 `target_path``compute_schedule_next_run` |
| 前端 | `frontend/src/pages/SchedulesPage.vue`, `frontend/src/types/api.ts` |
| 测试 | `tests/test_schedule_next_run.py` |
## 是否需迁移/重启
- **是**`push_schedules.target_path` 列(启动时 `run_schema_migrations` 自动 ADD
- **需重启 API** 以加载新代码;前端需 `vite build` 后部署
## 验证方式
```bash
bash scripts/local_verify.sh
python -m pytest tests/test_schedule_next_run.py tests/test_schedule_runner_once.py -q
```
- 新建 cron 推送调度,填写可选目标路径 → 列表显示 target_path、next_run
- `runNow` 留空目标路径 → 走各机 `servers.target_path`(与推送页一致)
- 新建 script 调度 → `schedule_runner` 调 ScriptService
## 行为说明
- **目标路径留空**:与推送页相同,各服务器使用「服务器管理」中的 `target_path`;未配置则 sync 引擎 fallback `/tmp/sync`
- **一次性调度**`fire_at` 到期后 runner 执行一次并 `enabled=false`;失败时 rollback 恢复 enabled