feat(backend): 整章再沟通/重写 SSE 端点——喂当前草稿+意见+完整记忆注入流式重写一版
WFW-8 整章级再沟通(后端)。新增 POST /projects/{id}/chapters/{no}/rewrite(SSE):
- rewrite.md 教条(品类无关内核,非 SPEC,仿 write_craft 经 load_prompt 读盘);
- rewrite_node:build_rewrite_request 纯函数(system=[rewrite教条,stable_core] cache 前缀;
input=近况+当前草稿+作者意见,断点后不入缓存前缀——守不变量 #9)+ stream_chapter_rewrite;
- RewriteStreamRequest{feedback,prior_draft}(带 max_length 上界);端点复用 assemble 记忆注入
+ normalize_deltas SSE,只读不写库(HITL,新版停前端接受才落,不变量 #3),是工具非写节点
(不破坏 章=f(outline,state) 纯函数,不变量 #7),项目不存在触网关前 404。
门禁绿:ruff / mypy 224 files / pytest(新增 test_rewrite_node 5 例 + 更新 doctrine 一一对应)/
alembic 无漂移。OpenAPI 含新路径 + schema(前端待 gen:api)。
This commit is contained in:
@@ -120,6 +120,23 @@ class DraftStreamRequest(BaseModel):
|
||||
directive: str | None = None
|
||||
|
||||
|
||||
# 整章重写输入上界(守 DoS/成本,CR-H9 方向):意见短、整章草稿大。
|
||||
_REWRITE_FEEDBACK_MAX = 4000
|
||||
_REWRITE_DRAFT_MAX = 200_000
|
||||
|
||||
|
||||
class RewriteStreamRequest(BaseModel):
|
||||
"""POST /projects/:id/chapters/:no/rewrite:整章再沟通/重写。
|
||||
|
||||
`feedback` = 作者对本章的修改意见;`prior_draft` = 当前整章草稿(前端传入,据此 + 记忆
|
||||
注入流式重写一版)。临时输入、不持久化、无迁移;只入 volatile(守缓存前缀不变量 #9)。
|
||||
新版停前端/草稿,接受才落库(HITL,不变量 #3)。
|
||||
"""
|
||||
|
||||
feedback: str = Field(min_length=1, max_length=_REWRITE_FEEDBACK_MAX)
|
||||
prior_draft: str = Field(min_length=1, max_length=_REWRITE_DRAFT_MAX)
|
||||
|
||||
|
||||
class DraftSaveRequest(BaseModel):
|
||||
"""PUT /projects/:id/chapters/:no/draft:自动保存草稿正文。"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user