Yaojia Wang
|
7babb4854b
|
feat(web): 角色群像按定位配比生成(role_mix 缩减版)
- 契约: CharacterGenerateRequest 加 role_mix{定位:数量},model_validator 归一
count=各值之和(每项≥1、总和≤12),缺省退回单一 role+count
- @llm: build_character_gen_context/run_character_gen 加 role_mix 参并注入配比块
(确定性、无时间戳,守 assemble 纯函数);router 穿参
- character-gen.md 加"按配比严格分配 role"纪律 + regen prompt_hashes 金标准
- 前端: sanitizeRoleMix/roleMixTotal + buildCharacterGenerateRequest 第4参 +
useCharacterGen 穿参 + RoleMixEditor + CharacterGenerator 单一/配比双模
|
2026-07-06 17:24:16 +02:00 |
|
Yaojia Wang
|
72b3c81146
|
feat(review): 人物塑造 advisory 审(第五审,仅建议不阻断验收)
写→审链新增第五审「人物塑造」(灵感③/D2):advisory 单维——仅建议、不阻断
验收(不进 conflicts、不碰 assert_conflicts_resolved、不入 REVIEW_RESERVED_NAMES);
只做人物塑造、不做氛围。
- SPEC characterization_spec(analyst,reads=("characters",),writes=())+
prompts/characterization.md(只读、显式忽略文本长度与辞藻华丽度、引用逐字片段+置信度)
- schema CharacterizationReview{issues[...]}(全字段默认值守解析韧性)+ 注册 catalog
- 计数三处 22→23 + regen prompt_hashes.json(仅加一条)
- DB chapter_reviews 加 characterization JSONB nullable 列(迁移 f6a7b8c9d0e1)
- 接线:graph REVIEW_SPECS 追加 · chain ReviewRecordRepo · collect(extract/record) ·
review_repo(Protocol/Sql/_to_view/ReviewView) · sse(event/factory/section) · normalize 自动纳入
- 契约 ReviewHistoryItem 加 characterization(gen:api 已重生成)
- 前端 sse/history/useReviewStream + CharacterizationPanel(只展示无裁决 UI、置信度降序+低置信折叠)+ ReviewReport 挂面板
- 测试 test_characterization_does_not_block_accept + 计数/golden + collect/normalize + 前端 reducer/normalize/parse
守不变量 #2/#3/#9;依赖 ⑧(motive/appearance 作客观锚点)。
|
2026-07-06 17:08:38 +02:00 |
|
Yaojia Wang
|
02d19019f6
|
feat(web): AI 立项方案生成+预填(种子门控 + 按字段接受)
向导阶段(project 未建)一键推演结构化书级蓝图预填立项向导。
- 新 SPEC project_plan_spec(analyst 档,纯预览 reads/writes=())+ schema
ProjectPlanResult(书名候选 + 时空背景/叙事结构/故事核心/结局设计/基调,
全字段默认值守解析韧性)+ 注册 SCHEMA_CATALOG;计数三处 21→22 + regen golden。
- 端点 POST /skills/project-plan/generate(不带 project 前缀,绕开 toolbox 404):
请求体序列化向导草稿为 project_context,复用 build_brief_context + run_generator;
种子门控(缺 genre/logline→422);请求 schema 加 max_length 上界。
- run_generator/_build_request 的 project_id 放宽 uuid.UUID|None(向导无 project)。
- 前端 wizard.ts 加 mapPlanResultToWizardForm(错配字段折进 premise 不静默丢)+
applyPlanPatch(仅回填空字段、保护已编辑)+ useProjectPlan hook + PlanAssistant。
|
2026-07-06 16:26:08 +02:00 |
|
Yaojia Wang
|
acde715515
|
feat(character): appearance/motive 全栈穿线 + motive/traits 口径重切
打通 appearance/motive 从生成→schema→契约→落库→前端整条穿线
(DB 列早在初始迁移、此前一直 NULL,无新迁移),并原子重切人物
内驱口径。
- @llm: CharacterCard/character-gen.md 加 appearance/motive(给默认值守
解析韧性),重切——动机唯一落 motive、traits 只留核心/表层/阴影三层、
arc 引用 motive;regen prompt_hashes.json 金标准。
- @backend: CharacterCardView + CharacterWriteRepo/SqlCharacterWriteRepo
(create + update backfill 分支)+ CharacterWriteFields + 路由双向形变
与 _existing_characters 带上两字段。
- @frontend: pnpm gen:api 重生成 TS 客户端;CharacterCardItem 展示/编辑
两字段。
- 测试: schema 默认值/解析、动机不双写重切回归、card_to_view 双向、
ingest 透传、list 暴露、SqlCharacterWriteRepo create/backfill 真 pg 集成。
|
2026-07-06 14:36:11 +02:00 |
|
Yaojia Wang
|
bf39f50b2f
|
fix(qa): 实施 4 组设计型 QA 项——规则删除/codex 角色/大纲卷过滤/文风回炉锚点
#5 规则 DELETE + id:暴露 RuleView.id(PK);新增 DELETE /projects/{id}/rules/{rule_id}
(项目/规则不存在→404,成功→204,按 (id,project_id) 限定);rule_repo 加
list_for_project/delete;RulesPage 每条加删除(乐观删+回滚+toast)。assemble 侧
RuleView(缓存前缀)不动,列表另立 RuleListItemView。
#7 codex 角色 relations:写侧本已持久化、读端点 _existing_characters 硬编码 []。
加 _relations_from_jsonb 解析 {name,kind,note},CodexPage 渲染关系 chip。
#8 角色入库幂等:SqlCharacterWriteRepo.create 改 (project_id,name) app 层 upsert——
重复入库改更新而非插入;不加 UNIQUE/迁移(线上已有重复行会让约束迁移失败)。
#1 大纲卷过滤:GET /outline 支持可选 ?volume(无参=全部,向后兼容);OutlineEditor
加「查看:全部/卷N」筛选,与生成目标卷解耦。
H3/#9 文风回炉锚点:StyleDriftSegment 加 text(逐字命中段),style.md 指示审稿输出;
前端按内容锚点定位回炉目标(idx 仅排序),命中失败 → 提示「无法定位该段」而非
静默 no-op。style golden fixture 已重生成。
契约变更已 pnpm gen:api(RuleView.id / DELETE rules / outline ?volume)。无迁移
(alembic 无漂移)。门禁绿:ruff/mypy(210)/alembic/pytest 760 · 前端 tsc/lint/vitest 329。
|
2026-06-25 12:53:03 +02:00 |
|
Yaojia Wang
|
aac8b31b9f
|
refactor(agents): 全量重写 21 个 prompt——任务对齐 + prompt 工程最佳实践
对全部外置 prompt 做激进重写(每条经独立 agent 网络调研 + 重写,再由
另一 agent 交叉验证),让每条更贴合其 agent 任务。纯内容优化,零结构/schema
变更;金标准 fixture 同步重生成。
- 四审(continuity/foreshadow/style/pace):保持只读,强化判定方法——
continuity 证据对子 + 假阳性纪律;pace 0-5 爽点锚点;style 0-100 评分锚点
+ 字数 100 短段豁免/无指纹降级;foreshadow 埋设—回收契约
- 生成器:角色框定 + 落笔前自检 + 示例 + 差异化反雷同(character-gen/opening
黄金三章/blurb/worldbuilder 硬规则/golden-finger/glossary/name/book-title/brainstorm)
- writer:去 AI 腔/机翻腔检查表 + 不改情节/事实约束(refiner 仍纯文本无 JSON、
continue 无缝承接、expand、de-ai)
- 结构类:outliner 逐章蓝图 / fine-outline 分场节拍 / style_extract 先取证后下判 /
teardown 粗拆→细拆
护栏全验:output_schema 契约逐字段保留、无具体 model 名、无占位/format 槽、
中文、≤1 尾 LF、无 BOM。语义锚点(差异化/100/硬规则)保留,3 个措辞耦合用例
无需改即过。门禁绿:ruff/format clean · mypy 209 · pytest 744 passed
(金标准 #5 对齐重生成 fixture;内容无关的 #2/#12 仍绿)。
|
2026-06-24 05:17:15 +02:00 |
|
Yaojia Wang
|
dca4d45d4e
|
refactor(agents): prompt 外置方案A — 21 prompt 散文外迁 .md + SpecResolver
把 21 个内置 agent 的 system_prompt 从 specs.py 的 Python 常量外置为
prompts/<spec.name>.md,import 期由 load_prompt 确定性加载;建立 SPECS 名册
+ SCHEMA_CATALOG(Pydantic 类型留 Python)+ 统一只读解析入口 SpecResolver。
纯重构、零功能/schema 变更,缓存断点前块字节级不变(不变量 #9)。
@llm packages/agents(步骤1-3)
- spec_model.py:抽出 AgentSpec(frozen,字段不变)
- prompt_loader.py:load_prompt = utf-8-sig 去BOM → LF 归一 → NFC → rstrip尾LF,
内存缓存 + fail-fast(PromptNotFoundError),import 期确定性
- schema_catalog.py:SCHEMA_CATALOG[name]→output type 唯一真相源(refiner=None)
- prompts/*.md ×21:取常量「运行时值」程序化外迁(反斜杠折行已塌缩,
物理换行≡运行时换行);文件名按 spec.name 连字符(style.md/character-gen.md 等)
- specs.py:删 21 常量 + AgentSpec 类;system_prompt=load_prompt(name)、
output_schema=SCHEMA_CATALOG[name];建 SPECS + REVIEW_RESERVED_NAMES;
*_spec 兼容期保留且 SPECS[name] is *_spec(同一实例)。804→337 行
- __init__.py:显式 __all__ 重导出(避 F401)
@backend packages/skills(步骤4-5)
- SpecResolver:内置 SPECS(纯内存、零 DB)+ 用户 SkillRegistry 统一 get;
内置 name 永不触发 DB;output_schema_for 精确匹配
- skill_registry:保留命名空间守卫前移至入库校验,拒同名内置 → VALIDATION
- toolbox_registry:GeneratorTool.spec 改走 SPECS[...],删 12 个 *_spec 直接 import
@devops repo-root
- .gitattributes:prompts/*.md text eol=lf(修正:须用完整嵌套路径才匹配)
- packages/agents/pyproject:hatchling artifacts 纳入 prompts/*.md 随 wheel/sdist 分发
- ci.yml:新增 build wheel → 裸装 → import ww_agents.SPECS 冒烟
TDD 全程 mock 网关;门禁绿:ruff/format clean · mypy 209 files · pytest 744 passed
(含金标准 sha256 回归 / md↔spec↔catalog 一一对应 / fail-fast / BOM+NFC /
内置守卫 / 同一实例 / 编排器无回归 / apps/api import-smoke / 打包冒烟)
|
2026-06-24 04:49:44 +02:00 |
|