kin: KIN-020 UI для manual_task эскалации из auto_resolve_pending_actions

This commit is contained in:
Gros Frumos 2026-03-16 07:14:32 +02:00
parent a0b0976d8d
commit 77ed68c2b5
3 changed files with 57 additions and 3 deletions

View file

@ -138,12 +138,13 @@ class ProjectCreate(BaseModel):
class ProjectPatch(BaseModel):
execution_mode: str | None = None
autocommit_enabled: bool | None = None
obsidian_vault_path: str | None = None
@app.patch("/api/projects/{project_id}")
def patch_project(project_id: str, body: ProjectPatch):
if body.execution_mode is None and body.autocommit_enabled is None:
raise HTTPException(400, "Nothing to update. Provide execution_mode or autocommit_enabled.")
if body.execution_mode is None and body.autocommit_enabled is None and body.obsidian_vault_path is None:
raise HTTPException(400, "Nothing to update. Provide execution_mode, autocommit_enabled, or obsidian_vault_path.")
if body.execution_mode is not None and body.execution_mode not in VALID_EXECUTION_MODES:
raise HTTPException(400, f"Invalid execution_mode '{body.execution_mode}'. Must be one of: {', '.join(VALID_EXECUTION_MODES)}")
conn = get_conn()
@ -156,12 +157,32 @@ def patch_project(project_id: str, body: ProjectPatch):
fields["execution_mode"] = body.execution_mode
if body.autocommit_enabled is not None:
fields["autocommit_enabled"] = int(body.autocommit_enabled)
if body.obsidian_vault_path is not None:
fields["obsidian_vault_path"] = body.obsidian_vault_path
models.update_project(conn, project_id, **fields)
p = models.get_project(conn, project_id)
conn.close()
return p
@app.post("/api/projects/{project_id}/sync/obsidian")
def sync_obsidian_endpoint(project_id: str):
"""Запускает двусторонний Obsidian sync для проекта."""
from core.obsidian_sync import sync_obsidian
conn = get_conn()
p = models.get_project(conn, project_id)
if not p:
conn.close()
raise HTTPException(404, f"Project '{project_id}' not found")
if not p.get("obsidian_vault_path"):
conn.close()
raise HTTPException(400, "obsidian_vault_path not set for this project")
result = sync_obsidian(conn, project_id)
conn.close()
return result
@app.post("/api/projects")
def create_project(body: ProjectCreate):
conn = get_conn()