@whispering233/ai-editor-tools 0.0.32 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/analysis/conflict.d.ts.map +1 -1
  2. package/dist/analysis/conflict.js +4 -3
  3. package/dist/analysis/conflict.js.map +1 -1
  4. package/dist/analysis/hook.d.ts +16 -8
  5. package/dist/analysis/hook.d.ts.map +1 -1
  6. package/dist/analysis/hook.js +75 -27
  7. package/dist/analysis/hook.js.map +1 -1
  8. package/dist/analysis/utils.d.ts +2 -1
  9. package/dist/analysis/utils.d.ts.map +1 -1
  10. package/dist/analysis/utils.js +9 -2
  11. package/dist/analysis/utils.js.map +1 -1
  12. package/dist/executor/delta.d.ts.map +1 -1
  13. package/dist/executor/delta.js +22 -3
  14. package/dist/executor/delta.js.map +1 -1
  15. package/dist/executor/hook.d.ts.map +1 -1
  16. package/dist/executor/hook.js +45 -33
  17. package/dist/executor/hook.js.map +1 -1
  18. package/dist/executor/index.js +2 -2
  19. package/dist/executor/index.js.map +1 -1
  20. package/dist/executor/relation.d.ts.map +1 -1
  21. package/dist/executor/relation.js +18 -3
  22. package/dist/executor/relation.js.map +1 -1
  23. package/dist/index.js +38 -25
  24. package/dist/index.js.map +1 -1
  25. package/dist/proposal/delta.d.ts +12 -0
  26. package/dist/proposal/delta.d.ts.map +1 -1
  27. package/dist/proposal/delta.js +68 -0
  28. package/dist/proposal/delta.js.map +1 -1
  29. package/dist/proposal/hook.d.ts +3 -3
  30. package/dist/proposal/hook.d.ts.map +1 -1
  31. package/dist/proposal/hook.js +9 -9
  32. package/dist/proposal/hook.js.map +1 -1
  33. package/dist/proposal/relation.d.ts.map +1 -1
  34. package/dist/proposal/relation.js +13 -1
  35. package/dist/proposal/relation.js.map +1 -1
  36. package/dist/proposal/types.d.ts +11 -0
  37. package/dist/proposal/types.d.ts.map +1 -1
  38. package/dist/proposal/types.js +17 -0
  39. package/dist/proposal/types.js.map +1 -1
  40. package/dist/query/delta.d.ts +3 -2
  41. package/dist/query/delta.d.ts.map +1 -1
  42. package/dist/query/delta.js +4 -3
  43. package/dist/query/delta.js.map +1 -1
  44. package/dist/query/entity.d.ts +2 -2
  45. package/dist/query/entity.js +2 -2
  46. package/dist/schemas/delta.d.ts +2 -1
  47. package/dist/schemas/delta.d.ts.map +1 -1
  48. package/dist/schemas/delta.js +2 -1
  49. package/dist/schemas/delta.js.map +1 -1
  50. package/dist/schemas/proposal.d.ts +3 -2
  51. package/dist/schemas/proposal.d.ts.map +1 -1
  52. package/dist/schemas/proposal.js +3 -2
  53. package/dist/schemas/proposal.js.map +1 -1
  54. package/dist/schemas/relation.d.ts +2 -1
  55. package/dist/schemas/relation.d.ts.map +1 -1
  56. package/dist/schemas/relation.js +2 -1
  57. package/dist/schemas/relation.js.map +1 -1
  58. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"conflict.d.ts","sourceRoot":"","sources":["../../src/analysis/conflict.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAwBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CA0FpI"}
1
+ {"version":3,"file":"conflict.d.ts","sourceRoot":"","sources":["../../src/analysis/conflict.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AA0BD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CA0FpI"}
@@ -1,14 +1,15 @@
1
1
  // 分析类工具:detect_conflicts(跨实体设定矛盾检测,S6.4)
2
2
  // 语义:从关系图自动发现设定矛盾(「A↔B 关系缺失导致的不一致」):
3
- // - R1 对称缺失(error):ally/family 为对称关系,单向存在即矛盾(A ally B 但 B 未 ally A)
3
+ // - R1 对称缺失(error):对称关系(注册表 `RELATION_TYPE_META[*].symmetric` = ally/rival/family)单向存在即矛盾
4
4
  // - R2 互斥并存(warning):同一对实体同时互为盟友与对手(ally + rival 并存)
5
5
  // - R3 互杀(error):A kills B 且 B kills A(双方互相击杀)
6
6
  // 数据访问:db 查询层(listEntities 全量非软删实体 + listRelations 全量可见关系)+ 纯函数图分析,无原生 SQL。
7
7
  // signal:全量关系遍历为长任务候选,循环中检查。
8
8
  import { listEntities, listRelations } from "@whispering233/ai-editor-db";
9
+ import { RELATION_TYPES, RELATION_TYPE_META } from "@whispering233/ai-editor-shared";
9
10
  import { isEntityType, throwIfAborted } from "./utils.js";
10
- /** 对称关系类型(R1:单向存在即矛盾) */
11
- const SYMMETRIC_RELATION_TYPES = ["ally", "family"];
11
+ /** 对称关系类型(R1:单向存在即矛盾)= 注册表 `symmetric` 派生(ally/rival/family),禁止手抄 */
12
+ const SYMMETRIC_RELATION_TYPES = RELATION_TYPES.filter((t) => RELATION_TYPE_META[t].symmetric === true);
12
13
  /** 互斥关系对(R2:同一对实体并存即矛盾) */
13
14
  const MUTUALLY_EXCLUSIVE_PAIRS = [["ally", "rival"]];
14
15
  /** 互杀关系类型(R3:双向同时存在即矛盾) */
@@ -1 +1 @@
1
- {"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/analysis/conflict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/analysis/conflict.ts"],"names":[],"mappings":"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"}
@@ -110,9 +110,10 @@ export interface HookPayoffSuggestion {
110
110
  }
111
111
  /**
112
112
  * 回收建议(suggest_hook_payoff(hook_id)):
113
- * 候选 = 大纲中**当前章节之后**(含当前章)的场景节点(非软删),排除已回收节点;
113
+ * 候选 = 大纲中**当前章节之后**(含当前章)的**章**节点(非软删),排除已回收节点
114
+ * (卡片 1.3:锚点仅章——候选从场景改为章,与 REST/提案层 plants·advances·resolves 口径一致);
114
115
  * 理想回收点 = 埋设章 + 半衰期(节奏匹配);按与理想点距离升序取 top 3。
115
- * hook 不存在/已软删 → null;无埋设记录或大纲无候选场景 → 空建议。
116
+ * hook 不存在/已软删 → null;无埋设记录或大纲无候选章 → 空建议。
116
117
  */
117
118
  export declare function runSuggestHookPayoff(ctx: ToolContext, args: SuggestHookPayoffArgs, signal?: AbortSignal): {
118
119
  suggestions: HookPayoffSuggestion[];
@@ -124,12 +125,19 @@ export interface HookOpportunity {
124
125
  }
125
126
  /**
126
127
  * 埋设机会发现(find_hook_opportunities(outline_node_id)):
127
- * 基于节点叙事特征建议适合的伏笔类别(每类别至多一条,规则表驱动):
128
- * - R1 无伏笔埋设(无 plants 关系)→ mystery(悬念/谜团)
129
- * - R2 角色在场 ≥ 2(appears_in 目标)→ relationship(人物关系)
130
- * - R3 scene 冲突含外部层面(extra_personal)→ world_building(世界观)
131
- * - R4 scene 价值转向(value_from value_to 且均非空)→ character_growth(角色成长)
132
- * 节点不存在/已软删 null。
128
+ * **输入为章节点(卡片 1.3)**——卷/场景 → 抛错(输入类型错误,与 propose_add_delta 非章拒绝同口径);
129
+ * 章不存在/已软删 null。章级叙事特征 = 本章自身与其下场景**聚合**(锚点仅章后,
130
+ * 埋设/在场/麦基字段可能落在章或其场景上,各规则按子树口径判定):
131
+ * - R1 无伏笔埋设(章或其场景无 plants 关系)→ mystery(悬念/谜团)
132
+ * - R2 角色在场 2(appears_in 目标为章或其场景,按角色去重)→ relationship(人物关系)
133
+ * - R3 任一场景冲突含外部层面(extra_personal)→ world_building(世界观)
134
+ * - R4 任一场景价值转向(value_from ≠ value_to 且均非空)→ character_growth(角色成长)
135
+ * R3/R4 的 reason 带「命中计数 / 本章场景总数 + 最典型场景名」——章级聚合后单点信息会丢,
136
+ * 而麦基口径下 R4 在成熟大纲里近乎恒真(「没有不转折的场景」),计数是判别信息的兜底(卡片 1.7)。
137
+ * **「最典型」判据 = 子树先序遍历第一个命中场景**(确定性;不做「冲突层最多」这类启发式猜测)。
138
+ * **可见性(卡片 1.8)**:软删节点**及其整棵子树**不参与任何规则(R1/R2 的 `subtreeIds`、
139
+ * R3/R4 的命中集/分母/最典型均只算未软删节点)——同 `suggest_hook_payoff` 的 `node.deleted` 过滤
140
+ * 与「查询类工具默认过滤软删对象」契约。
133
141
  */
134
142
  export declare function runFindHookOpportunities(ctx: ToolContext, args: FindHookOpportunitiesArgs, signal?: AbortSignal): {
135
143
  opportunities: HookOpportunity[];
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/analysis/hook.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAmB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAI7B,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IACnB,yCAAyC;IACxC,MAAM,EAAE,cAAc,EAAE,CAAC;IAC1B,uBAAuB;IACtB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC5B,uBAAuB;IACtB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC5B,kDAAkD;IACjD,SAAS,EAAE,cAAc,EAAE,CAAC;IAC7B,2DAA2D;IAC1D,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC;AAqCD,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IAC1B,2CAA2C;IAC1C,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,6DAA6D;IAC5D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uCAAuC;IACtC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,sCAAsC;IACrC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC1E,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,kCAAkC;IACjC,OAAO,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACtB,gDAAgD;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAUrE;AAYD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,UAAU,CA6CZ;AAID,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IAClC,0CAA0C;IACzC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0CAA0C;IACzC,YAAY,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IACjB,wBAAwB;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IACnB,6BAA6B;IAC5B,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC3D,wCAAwC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,kBAAkB,CAqC7H;AAID,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IAClB,0BAA0B;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,mBAAmB;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,yCAAyC;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8CAA8C;IAC7C,cAAc,EAAE;QAAE,MAAM,EAAE,CAAC,aAAa,GAAG;YAAE,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;SAAE,CAAC,EAAE,CAAA;KAAE,CAAC;CAC3F;AAOD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,IAAI,CAgChI;AAID,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAAG,IAAI,CA8CxJ;AAID,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,aAAa,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG,IAAI,CAkC7J;AAID,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,SAAS,EAAE,YAAY,EAAE,CAAA;CAAE,CA+D5I"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/analysis/hook.ts"],"names":[],"mappings":"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"}
@@ -223,9 +223,10 @@ export function runTraceHookLifecycle(ctx, args, signal) {
223
223
  }
224
224
  /**
225
225
  * 回收建议(suggest_hook_payoff(hook_id)):
226
- * 候选 = 大纲中**当前章节之后**(含当前章)的场景节点(非软删),排除已回收节点;
226
+ * 候选 = 大纲中**当前章节之后**(含当前章)的**章**节点(非软删),排除已回收节点
227
+ * (卡片 1.3:锚点仅章——候选从场景改为章,与 REST/提案层 plants·advances·resolves 口径一致);
227
228
  * 理想回收点 = 埋设章 + 半衰期(节奏匹配);按与理想点距离升序取 top 3。
228
- * hook 不存在/已软删 → null;无埋设记录或大纲无候选场景 → 空建议。
229
+ * hook 不存在/已软删 → null;无埋设记录或大纲无候选章 → 空建议。
229
230
  */
230
231
  export function runSuggestHookPayoff(ctx, args, signal) {
231
232
  const entity = getEntity(ctx.db, args.hook_id);
@@ -246,7 +247,7 @@ export function runSuggestHookPayoff(ctx, args, signal) {
246
247
  const candidates = [];
247
248
  const visit = (nodes) => {
248
249
  for (const node of nodes) {
249
- if (node.type === "scene" && node.deleted !== true && !resolvedNodes.has(node.id)) {
250
+ if (node.type === "chapter" && node.deleted !== true && !resolvedNodes.has(node.id)) {
250
251
  const chapter = chapterIndex.chapterOf(node.id);
251
252
  if (chapter !== null && (chapterIndex.currentChapter === null || chapter >= chapterIndex.currentChapter)) {
252
253
  candidates.push({ nodeId: node.id, nodeName: node.title, chapter });
@@ -267,12 +268,19 @@ export function runSuggestHookPayoff(ctx, args, signal) {
267
268
  }
268
269
  /**
269
270
  * 埋设机会发现(find_hook_opportunities(outline_node_id)):
270
- * 基于节点叙事特征建议适合的伏笔类别(每类别至多一条,规则表驱动):
271
- * - R1 无伏笔埋设(无 plants 关系)→ mystery(悬念/谜团)
272
- * - R2 角色在场 ≥ 2(appears_in 目标)→ relationship(人物关系)
273
- * - R3 scene 冲突含外部层面(extra_personal)→ world_building(世界观)
274
- * - R4 scene 价值转向(value_from value_to 且均非空)→ character_growth(角色成长)
275
- * 节点不存在/已软删 null。
271
+ * **输入为章节点(卡片 1.3)**——卷/场景 → 抛错(输入类型错误,与 propose_add_delta 非章拒绝同口径);
272
+ * 章不存在/已软删 null。章级叙事特征 = 本章自身与其下场景**聚合**(锚点仅章后,
273
+ * 埋设/在场/麦基字段可能落在章或其场景上,各规则按子树口径判定):
274
+ * - R1 无伏笔埋设(章或其场景无 plants 关系)→ mystery(悬念/谜团)
275
+ * - R2 角色在场 2(appears_in 目标为章或其场景,按角色去重)→ relationship(人物关系)
276
+ * - R3 任一场景冲突含外部层面(extra_personal)→ world_building(世界观)
277
+ * - R4 任一场景价值转向(value_from ≠ value_to 且均非空)→ character_growth(角色成长)
278
+ * R3/R4 的 reason 带「命中计数 / 本章场景总数 + 最典型场景名」——章级聚合后单点信息会丢,
279
+ * 而麦基口径下 R4 在成熟大纲里近乎恒真(「没有不转折的场景」),计数是判别信息的兜底(卡片 1.7)。
280
+ * **「最典型」判据 = 子树先序遍历第一个命中场景**(确定性;不做「冲突层最多」这类启发式猜测)。
281
+ * **可见性(卡片 1.8)**:软删节点**及其整棵子树**不参与任何规则(R1/R2 的 `subtreeIds`、
282
+ * R3/R4 的命中集/分母/最典型均只算未软删节点)——同 `suggest_hook_payoff` 的 `node.deleted` 过滤
283
+ * 与「查询类工具默认过滤软删对象」契约。
276
284
  */
277
285
  export function runFindHookOpportunities(ctx, args, signal) {
278
286
  const tree = readOutlineFile(ctx.outlineDir);
@@ -280,28 +288,68 @@ export function runFindHookOpportunities(ctx, args, signal) {
280
288
  if (node === undefined || node.deleted === true)
281
289
  return null;
282
290
  throwIfAborted(signal);
291
+ if (node.type !== "chapter") {
292
+ throw new Error(`埋设机会分析仅支持章节点(卷/场景无章级叙事特征): ${args.outline_node_id}`);
293
+ }
294
+ // 子树节点集合(本章 + 其下场景);场景节点单独收集供 R3/R4 读麦基字段
295
+ // **软删子树整体跳过**(卡片 1.8):软删节点与其后代均不可见(大纲/实体可见性同款口径)——
296
+ // 否则软删场景会被计入 R3/R4 分母、并能当选「最典型」,subtreeIds 也会混入不可见节点
297
+ const subtreeIds = new Set([node.id]);
298
+ const scenes = [];
299
+ const collect = (children) => {
300
+ if (children === undefined)
301
+ return;
302
+ for (const child of children) {
303
+ if (child.deleted === true)
304
+ continue; // 软删节点不可见,其整棵子树一并不可见
305
+ subtreeIds.add(child.id);
306
+ if (child.type === "scene")
307
+ scenes.push(child);
308
+ collect(child.children);
309
+ }
310
+ };
311
+ collect(node.children);
283
312
  const opportunities = [];
284
- // R1:节点尚无伏笔埋设(plants 关系 source = 本节点)
285
- const plantsCount = listRelations(ctx.db, { sourceType: "outline_node", sourceId: args.outline_node_id, relationType: "plants" }, 1, ctx.outlineDir).relations.length;
313
+ // R1:本章(或其场景)尚无伏笔埋设
314
+ const plantsCount = listRelations(ctx.db, { sourceType: "outline_node", relationType: "plants" }, 1, ctx.outlineDir)
315
+ .relations.filter((r) => subtreeIds.has(r.sourceId)).length;
286
316
  if (plantsCount === 0) {
287
- opportunities.push({ category: "mystery", reason: "该节点尚无伏笔埋设,适合设置悬念/谜团类伏笔(mystery)" });
317
+ opportunities.push({ category: "mystery", reason: "本章尚无伏笔埋设,适合设置悬念/谜团类伏笔(mystery)" });
288
318
  }
289
- // R2:在场角色数(appears_in 目标 = 本节点)
290
- const castCount = listRelations(ctx.db, { targetType: "outline_node", targetId: args.outline_node_id, relationType: "appears_in" }, 1, ctx.outlineDir).relations.length;
291
- if (castCount >= 2) {
292
- opportunities.push({ category: "relationship", reason: `节点有 ${castCount} 个角色在场,适合人物关系类伏笔(relationship)` });
319
+ // R2:在场角色数(appears_in 目标 = 本章或其场景;按角色去重)
320
+ const cast = new Set(listRelations(ctx.db, { targetType: "outline_node", relationType: "appears_in" }, 1, ctx.outlineDir)
321
+ .relations.filter((r) => subtreeIds.has(r.targetId))
322
+ .map((r) => r.sourceId));
323
+ if (cast.size >= 2) {
324
+ opportunities.push({ category: "relationship", reason: `本章有 ${cast.size} 个角色在场,适合人物关系类伏笔(relationship)` });
293
325
  }
294
- // R3/R4:scene 叙事特征(麦基字段集)
295
- if (node.type === "scene") {
296
- const conflictLevels = node.data?.conflict_levels;
297
- if (Array.isArray(conflictLevels) && conflictLevels.includes("extra_personal")) {
298
- opportunities.push({ category: "world_building", reason: "场景冲突含外部层面(extra_personal),适合世界观类伏笔(world_building)" });
299
- }
300
- const valueFrom = node.data?.value_from;
301
- const valueTo = node.data?.value_to;
302
- if (typeof valueFrom === "string" && valueFrom !== "" && typeof valueTo === "string" && valueTo !== "" && valueFrom !== valueTo) {
303
- opportunities.push({ category: "character_growth", reason: `场景价值转向(${valueFrom} ${valueTo}),适合角色成长类伏笔(character_growth)` });
304
- }
326
+ // R3:任一场景冲突含外部层面(命中集 + 最典型 = 先序第一个命中)
327
+ const extraPersonalHits = scenes.filter((scene) => {
328
+ const levels = scene.data?.conflict_levels;
329
+ return Array.isArray(levels) && levels.includes("extra_personal");
330
+ });
331
+ const typicalExtraPersonal = extraPersonalHits[0];
332
+ if (typicalExtraPersonal !== undefined) {
333
+ opportunities.push({
334
+ category: "world_building",
335
+ reason: `本章 ${extraPersonalHits.length}/${scenes.length} 个场景冲突含外部层面(extra_personal),` +
336
+ `最典型:${typicalExtraPersonal.title}——适合世界观类伏笔(world_building)`,
337
+ });
338
+ }
339
+ // R4:任一场景价值转向(命中集 + 最典型 = 先序第一个命中)
340
+ const shiftedHits = scenes.filter((scene) => {
341
+ const from = scene.data?.value_from;
342
+ const to = scene.data?.value_to;
343
+ return typeof from === "string" && from !== "" && typeof to === "string" && to !== "" && from !== to;
344
+ });
345
+ const typicalShifted = shiftedHits[0];
346
+ if (typicalShifted !== undefined) {
347
+ opportunities.push({
348
+ category: "character_growth",
349
+ reason: `本章 ${shiftedHits.length}/${scenes.length} 个场景价值转向,最典型:${typicalShifted.title}` +
350
+ `(${String(typicalShifted.data?.value_from)} → ${String(typicalShifted.data?.value_to)}),` +
351
+ `适合角色成长类伏笔(character_growth)`,
352
+ });
305
353
  }
306
354
  return { opportunities };
307
355
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/analysis/hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/analysis/hook.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,8 @@ export interface ChapterIndex {
39
39
  * 当前章节(「当前章节」= project.json 的 current_position 所属章——
40
40
  * 写作进度而非规划终点,与伏笔/孤儿工具口径一致):
41
41
  * 1. current_position 已设置且可推导章号 → 该章序号
42
- * 2. 未设置/节点不存在/无章号 → 退化树末章(合理默认)
42
+ * 2. 未设置/节点不存在/无章号 → 退化**最后一个未软删章**(合理默认;软删章不可作
43
+ * 写作进度基准——章号是位置序含软删章,可见性由本退化分支处理,卡片 2.7)
43
44
  */
44
45
  currentChapter: number | null;
45
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/analysis/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,eAAe,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,SAAqB;CAIzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAIzD;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAiB/F;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAM1E;AAID;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC5B,2EAA2E;IAC1E,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C;;;;;MAKE;IACD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CA6ChE;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/analysis/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,eAAe,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,SAAqB;CAIzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAIzD;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAiB/F;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAM1E;AAID;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC5B,2EAA2E;IAC1E,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C;;;;;;MAME;IACD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAmDhE;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7E"}
@@ -104,14 +104,21 @@ export function buildChapterIndex(ctx) {
104
104
  }
105
105
  return null;
106
106
  };
107
- // 当前章节:current_position 优先,退化树末章
107
+ // 当前章节:current_position 优先,退化**最后一个未软删章**(卡片 2.7:章号是位置序(含
108
+ // 软删章、不重排),可见性必须由退化分支自己处理——否则末章软删后 currentChapter 仍指被
109
+ // 删章的章号,虚报写作进度一章,连带 Hook age/dormancy 与孤儿诊断基准偏移)
108
110
  let currentChapter = null;
109
111
  const config = readProjectFile(ctx.outlineDir);
110
112
  if (config !== null && config.current_position !== null && config.current_position !== "") {
111
113
  currentChapter = chapterOf(config.current_position);
112
114
  }
113
115
  if (currentChapter === null) {
114
- currentChapter = order.length > 0 ? order[order.length - 1].chapterNumber : null;
116
+ for (let i = order.length - 1; i >= 0; i--) {
117
+ if (deletedNodeIds.has(order[i].chapterId))
118
+ continue; // 软删章不可作写作进度基准
119
+ currentChapter = order[i].chapterNumber;
120
+ break;
121
+ }
115
122
  }
116
123
  return { chapterOf, currentChapter };
117
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/analysis/utils.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,yCAAyC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAIpH;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAO,GAAG,kBAAkB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,CAAC;AAC9F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAoC;IACnE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAQ,EAAE;QAC7C,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1B,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;YAAE,SAAS;QACzE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa,CAAI,CAAiB,EAAE,CAAiB;IACnE,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAuBD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAgB;IAChD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAClF,oBAAoB;IACnB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,sCAAsC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,KAAiC,EAAE,QAAgB,EAAQ,EAAE;QAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAI,IAAkD,CAAC,QAAQ,CAAC;YAC9E,IAAI,QAAQ,KAAK,SAAS;gBAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE7B,MAAM,SAAS,GAAG,CAAC,MAAc,EAAiB,EAAE;QAClD,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,UAAU;QAC1D,OAAO;QACJ,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACvC,2CAA2C;QACxC,IAAI,GAAG,GAAuB,MAAM,CAAC;QACrC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACnC,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEH,iCAAiC;IAChC,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,IAAI,MAAM,CAAC,gBAAgB,KAAK,EAAE,EAAE,CAAC;QAC1F,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACvC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,eAAe,CAAC,IAAqB,EAAE,MAAc;IACnE,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/analysis/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/executor/delta.ts"],"names":[],"mappings":"AAUA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1E,0DAA0D;AAC1D,eAAO,MAAM,eAAe,EAAE,UAU7B,CAAC"}
1
+ {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/executor/delta.ts"],"names":[],"mappings":"AAoBA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1E,0DAA0D;AAC1D,eAAO,MAAM,eAAe,EAAE,UAmB7B,CAAC"}
@@ -2,19 +2,38 @@
2
2
  // add_delta
3
3
  //
4
4
  // - node_id / target_type / target_id / changes 已由 S6.6 提案层派生规范化到 args
5
+ // - **锚点仅章(卡片 1.5)**:node_id 经 requireChapterNode 校验(存在 + 未软删 + chapter)——
6
+ // executor 直写 db **绕过 REST 校验**,而卡 1.4 后非章锚点的 Delta **静默不参与累积**
7
+ // (「写了但永远不算」,比报错更难排查);与 REST(server/routes/delta.ts)/ 提案层同口径
8
+ // - **事实字段兜底(卡片 5.4)**:经 `assertFactFieldsSetOnly` 拒非 `set` 的 hook.status 变更——
9
+ // 与锚点兜底同模式(同一事务内、校验先于写入):executor 直写 db 也绕过提案层守卫,
10
+ // 而该字段用 `update`+`from` 重放必然产生假 conflicts(详见 `docs/design/10-data-model.md` §4)
11
+ // - **character 已移除字段兜底(卡片 5.4 / 5.5)**:经 `assertRemovedCharacterFields` 拒 character 的
12
+ // `status`/`abilities`(手工构造 proposal 才可达)——守卫与白名单均与提案层同源(shared 常量)
5
13
  // - description(delta_records NOT NULL):取 **proposal.summary** 作人类可读描述
6
14
  // (S6.6 delta.ts 注释:由执行器取 summary——args 不带 description,提案摘要即变更描述)
7
15
  // - order 由 db 层全局单调生成(insertDelta 事务内 MAX+1),此处无 order 入参
8
16
  import { insertDelta } from "@whispering233/ai-editor-db";
17
+ import { assertFactFieldsSetOnly, assertRemovedCharacterFields } from "../proposal/delta.js";
18
+ import { requireChapterNode } from "../proposal/types.js";
9
19
  import { requireArray, requireString } from "./types.js";
10
20
  /** add_delta(add_delta(node_id, target, changes) → id) */
11
21
  export const executeAddDelta = (ctx, proposal) => {
12
22
  const args = proposal.args;
23
+ const nodeId = requireString(args, "node_id");
24
+ const targetType = requireString(args, "target_type");
25
+ const changes = requireArray(args, "changes"); // 提案层 schema 已校验 deltaChangeSchema
26
+ // 章级兜底:节点存在且未软删 + type === "chapter"(卷/场景拒绝)
27
+ requireChapterNode(ctx, nodeId, "变更记录锚点");
28
+ // 事实字段兜底(卡片 5.4):与提案层共用同一白名单与文案(executor 直写 db 绕过提案层)
29
+ assertFactFieldsSetOnly(targetType, changes);
30
+ // character 已移除字段兜底(卡片 5.4 / 5.5):同源守卫,补齐两层同口径
31
+ assertRemovedCharacterFields(targetType, changes);
13
32
  const row = insertDelta(ctx.db, {
14
- nodeId: requireString(args, "node_id"),
15
- targetType: requireString(args, "target_type"),
33
+ nodeId,
34
+ targetType,
16
35
  targetId: requireString(args, "target_id"),
17
- changes: requireArray(args, "changes"), // 提案层 schema 已校验 deltaChangeSchema
36
+ changes,
18
37
  description: proposal.summary,
19
38
  });
20
39
  return { id: row.id };
@@ -1 +1 @@
1
- {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/executor/delta.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,YAAY;AACZ,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,kEAAkE;AAClE,2DAA2D;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE1E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE;QAC9B,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC;QACtC,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;QAC9C,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,CAAkB,EAAE,mCAAmC;QAC5F,WAAW,EAAE,QAAQ,CAAC,OAAO;KAC9B,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/executor/delta.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,YAAY;AACZ,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,gEAAgE;AAChE,6DAA6D;AAC7D,+EAA+E;AAC/E,kDAAkD;AAClD,gFAAgF;AAChF,uFAAuF;AACvF,oEAAoE;AACpE,uEAAuE;AACvE,kEAAkE;AAClE,2DAA2D;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE1E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAkB,CAAC,CAAC,mCAAmC;IACpG,6CAA6C;IAC5C,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,sDAAsD;IACrD,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,+CAA+C;IAC9C,4BAA4B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE;QAC9B,MAAM;QACN,UAAU;QACV,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,OAAO;QACP,WAAW,EAAE,QAAQ,CAAC,OAAO;KAC9B,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/executor/hook.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAiB,KAAK,UAAU,EAAuB,MAAM,YAAY,CAAC;AAuJjF,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,UACsC,CAAC;AAExE,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,UACmC,CAAC;AAErE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,EAAE,UAC8B,CAAC"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/executor/hook.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAiB,KAAK,UAAU,EAAuB,MAAM,YAAY,CAAC;AAgKjF,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,UACsC,CAAC;AAExE,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,UACmC,CAAC;AAErE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,EAAE,UAC8B,CAAC"}
@@ -13,25 +13,28 @@
13
13
  // findExistingStatusDeltaId——避免 LIKE 误命中其他字段的 to=abandoned)。
14
14
  // **边界**:advance/resolve 幂等只查关系记录,不查 delta——关系被**手动物理删**(
15
15
  // 手动删关系不走回收站、物理删)后重复确认会再写一条 delta + relation(幂等失效但语义
16
- // 自洽:关系已不存在,重写即恢复;delta from 取当前 data.status,链条不破)。
16
+ // 自洽:关系已不存在,重写即恢复;delta op=set 的单点状态,重复写不引入陈旧 from)。
17
17
  //
18
- // 变更形态(「伏笔状态变化」):changes = [{ field: "status", op: "update",
19
- // from: 当前状态, to: 目标状态 }]——from 取 hook.data.status(缺省 planted,
20
- // 状态缺失视为 planted),保证 computeStateupdate 校验正常累积;
21
- // description proposal.args.description(delta_records.description NOT NULL)。
18
+ // 变更形态(「伏笔状态变化」,2026-09 卡 1.9 语义修订 B):changes = [{ field: "status",
19
+ // op: "set", to: 目标状态 }]——**不含 from**:data.status 是物化事实字段(写路径同步最新值),
20
+ // `update` 的「data = 初始值」前提互斥(CAS from 重放时必然对不上 → 每次查询假 conflicts);
21
+ // set 语义与落地方式自洽,from→to 的叙事留在 description(proposal.args.description
22
+ // delta_records.description NOT NULL)。契约:docs/design/10-data-model.md §4
23
+ // 「物化事实字段不用 CAS」、docs/db/schema.md(状态机字段用 set)。
24
+ // **已知边界**:at_node 落在首次转移之前时返回最新值(基座即 data,接受该近似)。
22
25
  // 终态守卫:resolved/abandoned 为生命周期终态,终态伏笔不可再推进/回收/废弃。
23
26
  //
24
27
  // **状态同步(S6.7 修复轮必须改)**:复合写事务内插入 delta 后**同步更新
25
28
  // entities.data.status**(浅合并 + 刷新 updated_at,与 快照比对语义兼容)——
26
- // 终态守卫(assertNotTerminal)、delta 的 from(currentHookStatus)与 S6.5 hookStatuses
27
- // (analysis/hook.ts collectHooks 读 entity.data.status)均以 data.status 为唯一事实来源
28
- //;不同步则 resolved/abandoned 后仍可推进、同 hook 二次推进 from 断裂
29
- // (computeState conflicts)、已回收伏笔仍计 active。**幂等命中路径不更新**(首次执行已同步)。
29
+ // 终态守卫(assertNotTerminal)、列表摘要/面板分组与 S6.5 hookStatuses
30
+ // (analysis/hook.ts collectHooks 读 entity.data.status)均以 data.status 为唯一事实来源;
31
+ // 不同步则 resolved/abandoned 后仍可推进(守卫失效)、已回收伏笔仍计 active。
32
+ // **幂等命中路径不更新**(首次执行已同步)。
30
33
  //
31
34
  // 执行类是短同步事务,不做 signal 检查(长工具才要求执行中检查;入口检查由
32
35
  // S7.5 确认路由承担)。
33
36
  import { createRelation, findOutlineNode, insertDelta, readOutlineFile, readProjectFile, updateEntity, withTransaction } from "@whispering233/ai-editor-db";
34
- import { requireHook, requireOutlineNode } from "../proposal/types.js";
37
+ import { requireChapterNode, requireHook } from "../proposal/types.js";
35
38
  import { requireString } from "./types.js";
36
39
  /** 伏笔生命周期终态(planted → progressing → resolved 或 abandoned) */
37
40
  const TERMINAL_STATUSES = ["resolved", "abandoned"];
@@ -90,24 +93,16 @@ function findExistingStatusDeltaId(db, hookId, toStatus) {
90
93
  return null;
91
94
  }
92
95
  /**
93
- * abandon delta 锚定节点:废弃是主动放弃(无指定节点,propose_abandon_hook 仅 hook_id +
94
- * description)——取 project.json current_position(「当前章节」锚点,存在且未软删);
95
- * 未设置/失效则退化取树末节点(当前写作进度末端);大纲空树 → 抛错(无锚点不可记录)。
96
+ * 树末章:先序遍历最后一个未软删 `chapter`(当前写作进度末端——`project.json current_position` 未设时的退化锚点);
97
+ * 无章 → null(调用方抛错:无锚点不可记录)。卡片 1.3:锚点仅章,故不再取「树末节点」(可能为卷/场景)。
96
98
  */
97
- function anchorNodeForAbandon(ctx) {
98
- const config = readProjectFile(ctx.outlineDir);
99
- if (config !== null && config.current_position !== null && config.current_position !== "") {
100
- const node = findOutlineNode(readOutlineFile(ctx.outlineDir), config.current_position);
101
- if (node !== undefined && node.deleted !== true)
102
- return config.current_position;
103
- }
104
- const tree = readOutlineFile(ctx.outlineDir);
105
- // 树末节点:先序遍历最后一个叶子(卷→章→场景的最深最后节点)
99
+ function lastChapterNodeId(tree) {
106
100
  let last = null;
107
101
  const visit = (node) => {
108
102
  if (node.deleted === true)
109
103
  return;
110
- last = node.id;
104
+ if (node.type === "chapter")
105
+ last = node.id;
111
106
  const kids = node.children;
112
107
  if (kids !== undefined) {
113
108
  for (const kid of kids)
@@ -116,11 +111,28 @@ function anchorNodeForAbandon(ctx) {
116
111
  };
117
112
  for (const child of tree.children)
118
113
  visit(child);
119
- if (last === null) {
120
- throw new Error("大纲无可用节点,无法记录伏笔废弃位置");
121
- }
122
114
  return last;
123
115
  }
116
+ /**
117
+ * abandon 的 delta 锚定节点:废弃是主动放弃(无指定节点,propose_abandon_hook 仅 hook_id +
118
+ * description)——取 project.json current_position(「当前章节」锚点,**须为章**且未软删);
119
+ * 未设置/失效(含存量指向场景/卷)则退化取**树末章**(当前写作进度末端);大纲无章 → 抛错。
120
+ */
121
+ function anchorNodeForAbandon(ctx) {
122
+ const tree = readOutlineFile(ctx.outlineDir);
123
+ const config = readProjectFile(ctx.outlineDir);
124
+ const currentPosition = config?.current_position ?? null;
125
+ if (currentPosition !== null && currentPosition !== "") {
126
+ const node = findOutlineNode(tree, currentPosition);
127
+ if (node !== undefined && node.deleted !== true && node.type === "chapter")
128
+ return currentPosition;
129
+ }
130
+ const lastChapter = lastChapterNodeId(tree);
131
+ if (lastChapter === null) {
132
+ throw new Error("大纲无可用章节,无法记录伏笔废弃位置");
133
+ }
134
+ return lastChapter;
135
+ }
124
136
  /**
125
137
  * 复合写公共骨架(advance/resolve/abandon 共用):
126
138
  * 幂等判重 → 校验(伏笔/节点存在且未软删 + 终态守卫)→ delta 插入 → relation 插入,
@@ -145,14 +157,14 @@ function executeHookTransition(ctx, proposal, relationType, toStatus, actionLabe
145
157
  if (existing !== null)
146
158
  return { id: existing, duplicated: true };
147
159
  }
148
- // 校验:伏笔存在且 type=hook;推进/回收节点存在且未软删
160
+ // 校验:伏笔存在且 type=hook;推进/回收节点存在且未软删且**为章**(卡片 1.3:锚点仅章)
149
161
  const hook = requireHook(ctx, hookId);
150
162
  if (nodeId !== null)
151
- requireOutlineNode(ctx, nodeId);
163
+ requireChapterNode(ctx, nodeId);
152
164
  // 终态守卫(resolved/abandoned 不可再推进/回收;废弃时不可再废弃)
153
165
  assertNotTerminal(hook, actionLabel);
154
- // delta:记 status 变化(from=当前状态,update 语义,computeState 正常累积)
155
- const changes = [{ field: "status", op: "update", from: currentHookStatus(hook), to: toStatus }];
166
+ // delta:记 status 变化(op=set——物化事实字段不声明 from,卡 1.9 裁决 a;见文件头注)
167
+ const changes = [{ field: "status", op: "set", to: toStatus }];
156
168
  const delta = insertDelta(ctx.db, {
157
169
  nodeId: nodeId ?? anchorNodeForAbandon(ctx),
158
170
  targetType: "hook",
@@ -162,9 +174,9 @@ function executeHookTransition(ctx, proposal, relationType, toStatus, actionLabe
162
174
  });
163
175
  // **状态同步(S6.7 修复轮必须改)**:同一事务内浅合并更新 entities.data.status
164
176
  // (updateEntity 内部 withTransaction → 嵌套自动升级 SAVEPOINT,整体仍一次提交):
165
- // 终态守卫 / delta 的 from / S6.5 hookStatuses 均读 data.status——不落地则 resolved 后
166
- // 仍可推进(守卫失效)、同 hook 二次推进 from 断裂(computeState conflicts)、
167
- // 已回收伏笔仍计 active。幂等命中路径(上方 early return)不更新——首次执行已同步。
177
+ // 终态守卫 / 列表摘要与面板分组 / S6.5 hookStatuses 均读 data.status——不落地则
178
+ // resolved 后仍可推进(守卫失效)、已回收伏笔仍计 active。
179
+ // 幂等命中路径(上方 early return)不更新——首次执行已同步。
168
180
  updateEntity(ctx.db, hookId, { data: { status: toStatus } });
169
181
  // relation:advances / resolves(大纲节点 → hook;方向约定)
170
182
  if (relationType !== null) {