chore: fix preview routes, MarkdownRenderer, update opencode config
- _preview_routes.py: fix preview endpoint params for multi-language - MarkdownRenderer.svelte: renderer fixes for assistant messages - speckit.analyze.md: update opencode command for spec analysis - opencode.jsonc: config alignment
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# #region TranslatePreviewRoutesModule [C:3] [TYPE Module] [SEMANTICS fastapi, translate, preview, review, api, search]
|
||||
# #region TranslatePreviewRoutesModule [C:3] [TYPE Module] [SEMANTICS fastapi, translate, preview, api]
|
||||
# @defgroup Api Module group.
|
||||
# @BRIEF Translation Preview session management routes.
|
||||
# @BRIEF Translation Preview session management routes — generate preview, fetch records.
|
||||
# @LAYER API
|
||||
|
||||
|
||||
@@ -13,11 +13,7 @@ from ....core.logger import logger
|
||||
from ....dependencies import get_config_manager, get_current_user, has_permission
|
||||
from ....plugins.translate.preview import TranslationPreview
|
||||
from ....schemas.auth import User
|
||||
from ....schemas.translate import (
|
||||
PreviewRequest,
|
||||
PreviewRow,
|
||||
PreviewRowUpdate,
|
||||
)
|
||||
from ....schemas.translate import PreviewRequest, PreviewRow
|
||||
from ._router import router
|
||||
|
||||
# ============================================================
|
||||
@@ -61,92 +57,6 @@ async def preview_translation(
|
||||
# #endregion preview_translation
|
||||
|
||||
|
||||
# #region update_preview_row [C:4] [TYPE Function]
|
||||
# @ingroup Api
|
||||
# @BRIEF Approve, edit, or reject a preview row (optionally per language).
|
||||
# @PRE User has translate.job.execute permission.
|
||||
# @POST Preview row status is updated.
|
||||
@router.put("/jobs/{job_id}/preview/rows/{row_key}")
|
||||
async def update_preview_row(
|
||||
job_id: str,
|
||||
row_key: str,
|
||||
payload: PreviewRowUpdate,
|
||||
current_user: User = Depends(get_current_user),
|
||||
_ = Depends(has_permission("translate.job", "EXECUTE")),
|
||||
db: Session = Depends(get_db),
|
||||
config_manager: ConfigManager = Depends(get_config_manager),
|
||||
):
|
||||
"""Approve, edit, or reject a preview row (optionally per language)."""
|
||||
logger.reason(f"update_preview_row — Job: {job_id}, Row: {row_key}, Action: {payload.action}, Lang: {payload.language_code}", extra={"src": "translate_routes"})
|
||||
try:
|
||||
preview_service = TranslationPreview(db, config_manager, current_user.username)
|
||||
result = preview_service.update_preview_row(
|
||||
job_id=job_id,
|
||||
row_id=row_key,
|
||||
action=payload.action,
|
||||
translation=payload.translation,
|
||||
feedback=payload.feedback,
|
||||
language_code=payload.language_code,
|
||||
)
|
||||
return result
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))
|
||||
# #endregion update_preview_row
|
||||
|
||||
|
||||
# #region accept_preview_session [C:4] [TYPE Function]
|
||||
# @ingroup Api
|
||||
# @BRIEF Accept a preview session, marking it as the quality gate for full execution.
|
||||
# @PRE User has translate.job.execute permission. Job has an ACTIVE preview session.
|
||||
# @POST Preview session is marked as APPLIED; full execution can proceed.
|
||||
@router.post("/jobs/{job_id}/preview/accept")
|
||||
async def accept_preview_session(
|
||||
job_id: str,
|
||||
current_user: User = Depends(get_current_user),
|
||||
_ = Depends(has_permission("translate.job", "EXECUTE")),
|
||||
db: Session = Depends(get_db),
|
||||
config_manager: ConfigManager = Depends(get_config_manager),
|
||||
):
|
||||
"""Accept a preview session, enabling full translation execution."""
|
||||
logger.reason(f"accept_preview_session — Job: {job_id}, User: {current_user.username}", extra={"src": "translate_routes"})
|
||||
try:
|
||||
preview_service = TranslationPreview(db, config_manager, current_user.username)
|
||||
result = preview_service.accept_preview_session(job_id=job_id)
|
||||
return result
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))
|
||||
# #endregion accept_preview_session
|
||||
|
||||
|
||||
# #region apply_preview [C:4] [TYPE Function]
|
||||
# @ingroup Api
|
||||
# @BRIEF Apply a preview session (alias for accept when accepting at session level).
|
||||
# @PRE User has translate.job.execute permission.
|
||||
# @POST Preview is applied.
|
||||
@router.post("/preview/{session_id}/apply")
|
||||
async def apply_preview(
|
||||
session_id: str,
|
||||
current_user: User = Depends(get_current_user),
|
||||
_ = Depends(has_permission("translate.job", "EXECUTE")),
|
||||
db: Session = Depends(get_db),
|
||||
config_manager: ConfigManager = Depends(get_config_manager),
|
||||
):
|
||||
"""Apply a preview session by session ID."""
|
||||
logger.reason(f"apply_preview — Session: {session_id}, User: {current_user.username}", extra={"src": "translate_routes"})
|
||||
# Find job_id from session
|
||||
from ....models.translate import TranslationPreviewSession
|
||||
session = db.query(TranslationPreviewSession).filter(TranslationPreviewSession.id == session_id).first()
|
||||
if not session:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Preview session '{session_id}' not found")
|
||||
try:
|
||||
preview_service = TranslationPreview(db, config_manager, current_user.username)
|
||||
result = preview_service.accept_preview_session(job_id=session.job_id)
|
||||
return result
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))
|
||||
# #endregion apply_preview
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Preview Records
|
||||
# ============================================================
|
||||
@@ -156,7 +66,6 @@ async def apply_preview(
|
||||
# @BRIEF Get records for a preview session.
|
||||
# @PRE User has translate.job.view permission.
|
||||
# @POST Returns list of preview records.
|
||||
# @COMPLEXITY 4
|
||||
|
||||
@router.get("/preview/{session_id}/records", response_model=list[PreviewRow])
|
||||
async def get_preview_records(
|
||||
|
||||
Reference in New Issue
Block a user