@whispering233/ai-editor-tools 0.0.21 → 0.0.26

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 (122) hide show
  1. package/dist/analysis/conflict.d.ts +3 -3
  2. package/dist/analysis/conflict.d.ts.map +1 -1
  3. package/dist/analysis/conflict.js +3 -4
  4. package/dist/analysis/conflict.js.map +1 -1
  5. package/dist/analysis/consistency.d.ts +3 -3
  6. package/dist/analysis/consistency.d.ts.map +1 -1
  7. package/dist/analysis/consistency.js +7 -8
  8. package/dist/analysis/consistency.js.map +1 -1
  9. package/dist/analysis/hook.d.ts +20 -20
  10. package/dist/analysis/hook.d.ts.map +1 -1
  11. package/dist/analysis/hook.js +26 -26
  12. package/dist/analysis/hook.js.map +1 -1
  13. package/dist/analysis/orphan.d.ts +7 -7
  14. package/dist/analysis/orphan.d.ts.map +1 -1
  15. package/dist/analysis/orphan.js +18 -20
  16. package/dist/analysis/orphan.js.map +1 -1
  17. package/dist/analysis/path.d.ts +4 -4
  18. package/dist/analysis/path.d.ts.map +1 -1
  19. package/dist/analysis/path.js +9 -10
  20. package/dist/analysis/path.js.map +1 -1
  21. package/dist/analysis/suggest.d.ts +3 -3
  22. package/dist/analysis/suggest.d.ts.map +1 -1
  23. package/dist/analysis/suggest.js +5 -6
  24. package/dist/analysis/suggest.js.map +1 -1
  25. package/dist/analysis/utils.d.ts +10 -10
  26. package/dist/analysis/utils.d.ts.map +1 -1
  27. package/dist/analysis/utils.js +6 -6
  28. package/dist/analysis/utils.js.map +1 -1
  29. package/dist/context.d.ts +1 -1
  30. package/dist/context.d.ts.map +1 -1
  31. package/dist/context.js +2 -2
  32. package/dist/context.js.map +1 -1
  33. package/dist/executor/delta.d.ts +1 -1
  34. package/dist/executor/delta.d.ts.map +1 -1
  35. package/dist/executor/delta.js +3 -3
  36. package/dist/executor/delta.js.map +1 -1
  37. package/dist/executor/entity.d.ts +3 -3
  38. package/dist/executor/entity.d.ts.map +1 -1
  39. package/dist/executor/entity.js +10 -10
  40. package/dist/executor/entity.js.map +1 -1
  41. package/dist/executor/hook.d.ts +3 -3
  42. package/dist/executor/hook.d.ts.map +1 -1
  43. package/dist/executor/hook.js +23 -23
  44. package/dist/executor/hook.js.map +1 -1
  45. package/dist/executor/index.d.ts +1 -1
  46. package/dist/executor/index.d.ts.map +1 -1
  47. package/dist/executor/index.js +12 -12
  48. package/dist/executor/index.js.map +1 -1
  49. package/dist/executor/outline.d.ts +3 -3
  50. package/dist/executor/outline.d.ts.map +1 -1
  51. package/dist/executor/outline.js +9 -9
  52. package/dist/executor/outline.js.map +1 -1
  53. package/dist/executor/reference.d.ts +1 -1
  54. package/dist/executor/reference.d.ts.map +1 -1
  55. package/dist/executor/reference.js +3 -3
  56. package/dist/executor/reference.js.map +1 -1
  57. package/dist/executor/relation.d.ts +2 -2
  58. package/dist/executor/relation.d.ts.map +1 -1
  59. package/dist/executor/relation.js +7 -7
  60. package/dist/executor/relation.js.map +1 -1
  61. package/dist/executor/reorder-timepoints.d.ts +1 -1
  62. package/dist/executor/reorder-timepoints.d.ts.map +1 -1
  63. package/dist/executor/reorder-timepoints.js +5 -5
  64. package/dist/executor/reorder-timepoints.js.map +1 -1
  65. package/dist/executor/types.d.ts +2 -2
  66. package/dist/index.js +9 -9
  67. package/dist/index.js.map +1 -1
  68. package/dist/proposal/delta.js +11 -11
  69. package/dist/proposal/delta.js.map +1 -1
  70. package/dist/proposal/entity.d.ts +2 -2
  71. package/dist/proposal/entity.d.ts.map +1 -1
  72. package/dist/proposal/entity.js +6 -6
  73. package/dist/proposal/entity.js.map +1 -1
  74. package/dist/proposal/hook.d.ts +1 -1
  75. package/dist/proposal/hook.d.ts.map +1 -1
  76. package/dist/proposal/hook.js +7 -7
  77. package/dist/proposal/hook.js.map +1 -1
  78. package/dist/proposal/outline.d.ts +4 -4
  79. package/dist/proposal/outline.d.ts.map +1 -1
  80. package/dist/proposal/outline.js +11 -11
  81. package/dist/proposal/outline.js.map +1 -1
  82. package/dist/proposal/reference.d.ts +3 -3
  83. package/dist/proposal/reference.d.ts.map +1 -1
  84. package/dist/proposal/reference.js +6 -6
  85. package/dist/proposal/reference.js.map +1 -1
  86. package/dist/proposal/relation.d.ts +1 -1
  87. package/dist/proposal/relation.d.ts.map +1 -1
  88. package/dist/proposal/relation.js +7 -7
  89. package/dist/proposal/relation.js.map +1 -1
  90. package/dist/proposal/reorder-timepoints.d.ts +3 -3
  91. package/dist/proposal/reorder-timepoints.d.ts.map +1 -1
  92. package/dist/proposal/reorder-timepoints.js +14 -14
  93. package/dist/proposal/reorder-timepoints.js.map +1 -1
  94. package/dist/proposal/types.d.ts +20 -20
  95. package/dist/proposal/types.d.ts.map +1 -1
  96. package/dist/proposal/types.js +18 -18
  97. package/dist/proposal/types.js.map +1 -1
  98. package/dist/query/delta.d.ts +5 -5
  99. package/dist/query/delta.d.ts.map +1 -1
  100. package/dist/query/delta.js +11 -13
  101. package/dist/query/delta.js.map +1 -1
  102. package/dist/query/entity.d.ts +9 -9
  103. package/dist/query/entity.d.ts.map +1 -1
  104. package/dist/query/entity.js +13 -15
  105. package/dist/query/entity.js.map +1 -1
  106. package/dist/query/outline.d.ts +6 -6
  107. package/dist/query/outline.d.ts.map +1 -1
  108. package/dist/query/outline.js +13 -15
  109. package/dist/query/outline.js.map +1 -1
  110. package/dist/query/reference.d.ts +1 -1
  111. package/dist/query/reference.d.ts.map +1 -1
  112. package/dist/query/reference.js +3 -4
  113. package/dist/query/reference.js.map +1 -1
  114. package/dist/query/relation.d.ts +1 -1
  115. package/dist/query/relation.d.ts.map +1 -1
  116. package/dist/query/relation.js +3 -5
  117. package/dist/query/relation.js.map +1 -1
  118. package/dist/registry.d.ts +5 -5
  119. package/dist/registry.d.ts.map +1 -1
  120. package/dist/registry.js +2 -3
  121. package/dist/registry.js.map +1 -1
  122. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"orphan.d.ts","sourceRoot":"","sources":["../../src/analysis/orphan.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,aAAa;AACb,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wCAAwC;IACxC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mDAAmD;AACnD,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IACvC,yBAAyB,EAAE,sBAAsB,EAAE,CAAC;CACrD;AAsED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,oBAAoB,CA8DjI"}
1
+ {"version":3,"file":"orphan.d.ts","sourceRoot":"","sources":["../../src/analysis/orphan.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,aAAa;AACb,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACd,0BAA0B;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACrC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,wCAAwC;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IACvC,yBAAyB,EAAE,sBAAsB,EAAE,CAAC;CACrD;AAsED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,oBAAoB,CA8DjI"}
@@ -1,25 +1,23 @@
1
1
  // 分析类工具:find_orphan_elements(孤立元素诊断,S6.4)
2
- // 契约来源:doc/api/tools.md「孤立元素」→ { unused_characters, unresolved_deltas,
3
- // dangling_relations, inconsistent_soft_deletes }
4
2
  // 语义(四维诊断,全项目扫描):
5
3
  // 1. unused_characters:闲置角色——从未出场(无 appears_in 且无属性变更记录),或
6
- // 最后活跃章序号 < 当前最新章序号(「写到第30章但角色C第10章后就没出现」,决策 21 章序号现推)
4
+ // 最后活跃章序号 < 当前最新章序号(「写到第30章但角色C第10章后就没出现」, 章序号现推)
7
5
  // 2. unresolved_deltas:未解决变更——delta 自身未软删但已不可见(触发节点缺失 /
8
- // 目标端点软删或缺失),永不生效的「幽灵变更」
6
+ // 目标端点软删或缺失),永不生效的「幽灵变更」
9
7
  // 3. dangling_relations:悬空关系——关系自身未软删但端点已物理删除(purge 残留)
10
8
  // 4. inconsistent_soft_deletes:跨存储软删不一致——大纲节点已软删但关联 relation/delta
11
- // 未级联软删(「可见记录指向已软删节点」的幽灵形态;诊断用途,兜底修复由启动一致性校验承担,
12
- // 决策 16 修订——本工具只诊断与引导修复)
9
+ // 未级联软删(「可见记录指向已软删节点」的幽灵形态;诊断用途,兜底修复由启动一致性校验承担,
10
+ // ——本工具只诊断与引导修复)
13
11
  // 数据访问:db 查询层(listEntities/listRelations/listDeltasByTarget/listDanglingDeltas/
14
- // listDanglingRelations/deriveChapterOrder/getChapterNumber)+ 纯函数分析,无原生 SQL。
15
- // signal:多角色 × 多记录的遍历为长任务候选,循环中检查(决策 16 ③)。
12
+ // listDanglingRelations/deriveChapterOrder/getChapterNumber)+ 纯函数分析,无原生 SQL。
13
+ // signal:多角色 × 多记录的遍历为长任务候选,循环中检查。
16
14
  import { listDanglingDeltas, listDanglingRelations, listDeltasByTarget, listEntities, listRelations, } from "@whispering233/ai-editor-db";
17
15
  import { buildChapterIndex, throwIfAborted } from "./utils.js";
18
16
  /**
19
17
  * 角色活跃度:appears_in 目标节点 + Delta 触发节点合并去重(卷级节点无章号,跳过)。
20
18
  * @returns { active, lastChapter }——active=false 表示从未出场;lastChapter 为最后活跃
21
- * 章序号(活跃点均在卷级等无章号节点时为 null,不做宽松猜测)。
22
- * 章序号经共享 ChapterIndex(决策 21 口径,S6.5 与伏笔工具同源)。
19
+ * 章序号(活跃点均在卷级等无章号节点时为 null,不做宽松猜测)。
20
+ * 章序号经共享 ChapterIndexS6.5 与伏笔工具同源)。
23
21
  */
24
22
  function activityOf(ctx, chapterIndex, characterId, appearsIn) {
25
23
  const activeNodeIds = new Set();
@@ -39,11 +37,11 @@ function activityOf(ctx, chapterIndex, characterId, appearsIn) {
39
37
  return { active: true, lastChapter: last };
40
38
  }
41
39
  /**
42
- * 闲置角色诊断(tools.md「写到第30章但角色C第10章后就没出现」):
40
+ * 闲置角色诊断(「写到第30章但角色C第10章后就没出现」):
43
41
  * - 从未出场:无 appears_in 关系且无 Delta 记录
44
42
  * - 掉线角色:最后活跃章 < 当前最新章(「当前最新章」= current_position 所属章,
45
- * 决策 21 口径,经共享 ChapterIndex 推导——规划 40 章只写到 30 章时,活跃于第 35 章
46
- * (未写章节)的角色不算闲置;大纲无章或角色活跃点无章号时不下结论——不做宽松猜测)
43
+ * ,经共享 ChapterIndex 推导——规划 40 章只写到 30 章时,活跃于第 35 章
44
+ * (未写章节)的角色不算闲置;大纲无章或角色活跃点无章号时不下结论——不做宽松猜测)
47
45
  * 输出按 id 升序(稳定排序,跨维度可预测)。
48
46
  */
49
47
  function collectUnusedCharacters(ctx, signal) {
@@ -78,17 +76,17 @@ function collectUnusedCharacters(ctx, signal) {
78
76
  return out;
79
77
  }
80
78
  /**
81
- * 孤立元素诊断(tools.md find_orphan_elements(),无参全项目扫描)。
79
+ * 孤立元素诊断( find_orphan_elements,无参全项目扫描)。
82
80
  * 软删对象(回收站)不计入任何维度(listEntities/listRelations 过滤 + listDangling* 自身
83
- * 未软删的前提,决策 12)。signal:各维度循环中检查(决策 16 ③)。
81
+ * 未软删的前提)。signal:各维度循环中检查。
84
82
  *
85
83
  * **inconsistent_soft_deletes 与 S4.2 启动一致性校验补标范围对齐**(server/consistency.ts,
86
- * 决策 16 修订——本工具诊断、S4.2 兜底修复,两侧口径必须一致):
84
+ * ——本工具诊断、S4.2 兜底修复,两侧口径必须一致):
87
85
  * - S4.2 补标范围:relation 按端点(source_id/target_id 命中软删节点)、delta 按触发节点
88
- * (node_id 命中软删节点)——对应本维度的 relation *_deleted 与 delta trigger_deleted
86
+ * (node_id 命中软删节点)——对应本维度的 relation *_deleted 与 delta trigger_deleted
89
87
  * - **delta 的大纲 target(目标端点为大纲节点且已软删)不在 S4.2 补标范围**(补标不看
90
- * target)——该形态归 unresolved_deltas(reason=target_deleted),不列为本维度;
91
- * 维护者不得将 target_deleted 移入本维度(否则与 S4.2 修复范围脱节)
88
+ * target)——该形态归 unresolved_deltas(reason=target_deleted),不列为本维度;
89
+ * 维护者不得将 target_deleted 移入本维度(否则与 S4.2 修复范围脱节)
92
90
  */
93
91
  export function runFindOrphanElements(ctx, _args, signal) {
94
92
  // 1. 闲置角色
@@ -102,7 +100,7 @@ export function runFindOrphanElements(ctx, _args, signal) {
102
100
  // 3. 悬空关系:端点物理删除
103
101
  const danglingRelationList = [];
104
102
  // 4. 跨存储软删不一致:大纲节点已软删但记录未级联(trigger_deleted / *_deleted;
105
- // 口径见函数头注释——与 S4.2 补标范围对齐,delta 大纲 target 归 unresolved_deltas)
103
+ // 口径见函数头注释——与 S4.2 补标范围对齐,delta 大纲 target 归 unresolved_deltas)
106
104
  const inconsistentSoftDeletes = [];
107
105
  for (const d of danglingDeltas) {
108
106
  throwIfAborted(signal);
@@ -1 +1 @@
1
- {"version":3,"file":"orphan.js","sourceRoot":"","sources":["../../src/analysis/orphan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orphan.js","sourceRoot":"","sources":["../../src/analysis/orphan.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,kBAAkB;AAClB,2DAA2D;AAC3D,kDAAkD;AAClD,wDAAwD;AACxD,yBAAyB;AACzB,wDAAwD;AACxD,mEAAmE;AACnE,gDAAgD;AAChD,iBAAiB;AACjB,gFAAgF;AAChF,6EAA6E;AAC7E,mCAAmC;AAEnC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,aAAa,GACd,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmD/D;;;;;GAKG;AACH,SAAS,UAAU,CACjB,GAAgB,EAChB,YAAkD,EAClD,WAAmB,EACnB,SAAgC;IAEhC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjF,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;QAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7G,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE1E,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,GAAgB,EAAE,MAAoB;IACrE,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;IAClF,qCAAqC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5H,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB;IAC7D,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,CAAC;IAElD,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;YAC5G,SAAS;QACX,CAAC;QACD,IAAI,WAAW,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,IAAI,WAAW,GAAG,aAAa,EAAE,CAAC;YAClF,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,iBAAiB,EAAE,WAAW;gBAC9B,WAAW,EAAE,UAAU,WAAW,YAAY,aAAa,SAAS,aAAa,GAAG,WAAW,OAAO;aACvG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAgB,EAAE,KAA6B,EAAE,MAAoB;IAC1G,UAAU;IACT,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE/D,iDAAiD;IAChD,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACxE,cAAc,CAAC,MAAM,CAAC,CAAC;IAExB,sCAAsC;IACrC,MAAM,gBAAgB,GAAsB,EAAE,CAAC;IAChD,iBAAiB;IAChB,MAAM,oBAAoB,GAAuB,EAAE,CAAC;IACrD,yDAAyD;IACzD,+DAA+D;IAC9D,MAAM,uBAAuB,GAA6B,EAAE,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;YACnC,uBAAuB,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,EAAE;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,SAAS,CAAC,CAAC,WAAW,UAAU,CAAC,CAAC,MAAM,wBAAwB;aAC9E,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC;gBACpB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACnE,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACtI,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3E,uBAAuB,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,CAAC,CAAC,EAAE;gBACd,MAAM,EAAE,IAAI;gBACZ,UAAU;gBACV,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,YAAY,UAAU,oBAAoB;aAC1G,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc;IAE5F,OAAO;QACL,iBAAiB,EAAE,gBAAgB;QACnC,iBAAiB,EAAE,gBAAgB;QACnC,kBAAkB,EAAE,oBAAoB;QACxC,yBAAyB,EAAE,uBAAuB;KACnD,CAAC;AACJ,CAAC"}
@@ -1,21 +1,21 @@
1
1
  import type { ToolContext } from "../context.js";
2
2
  import type { TracePlotPathsArgs } from "@whispering233/ai-editor-shared";
3
- /** 路径节点(tools.md trace_plot_paths paths[].nodes 项;type/id/name 与 relation 路径同构) */
3
+ /** 路径节点( trace_plot_paths paths[].nodes 项;type/id/name 与 relation 路径同构) */
4
4
  export interface PlotPathNode {
5
5
  type: string;
6
6
  id: string;
7
7
  name: string;
8
8
  }
9
- /** 一条剧情路径(tools.md trace_plot_paths paths[] 项) */
9
+ /** 一条剧情路径( trace_plot_paths paths[] 项) */
10
10
  export interface PlotPath {
11
11
  nodes: PlotPathNode[];
12
12
  description: string;
13
13
  risk_factors: string[];
14
14
  }
15
15
  /**
16
- * 剧情路径推演(tools.md trace_plot_paths(from_node_id, to_node_id))。
16
+ * 剧情路径推演( trace_plot_paths(from_node_id, to_node_id))。
17
17
  * 输出 paths(树路径优先,随后连线路径);两节点不存在/已软删 → null(查询无结果)。
18
- * signal:连线路径遍历为长任务候选,循环中检查(决策 16 ③)。
18
+ * signal:连线路径遍历为长任务候选,循环中检查。
19
19
  */
20
20
  export declare function runTracePlotPaths(ctx: ToolContext, args: TracePlotPathsArgs, signal?: AbortSignal): {
21
21
  paths: PlotPath[];
@@ -1 +1 @@
1
- {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/analysis/path.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAsED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG,IAAI,CAwChI"}
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/analysis/path.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAsED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG,IAAI,CAwChI"}
@@ -1,10 +1,9 @@
1
1
  // 分析类工具:trace_plot_paths(剧情路径推演,S6.4)
2
- // 契约来源:doc/api/tools.md「路径分析」→ { paths: [{ nodes: [], description, risk_factors: [] }] }
3
2
  // 语义:从 from_node_id 到 to_node_id 推演可能的剧情路径——两类来源:
4
- // 1. **树路径**:两节点在大纲树同一分支(祖先后裔关系)→ 沿树的直接推进链(决策 19 严格三层下唯一)
5
- // 2. **连线路径**:沿 plot_edge 剧情连线(决策 10 画布连线)从 from 出发的 k 跳路径(depth=3)
3
+ // 1. **树路径**:两节点在大纲树同一分支(祖先后裔关系)→ 沿树的直接推进链( 严格三层下唯一)
4
+ // 2. **连线路径**:沿 plot_edge 剧情连线( 画布连线)从 from 出发的 k 跳路径(depth=3)
6
5
  // 风险因素(risk_factors,从节点属性推导):路径过长(≥5 节点)、途经 scene 缺 goal、
7
- // 途经 chapter 缺 reversal、路径经过软删节点(手改树的不一致形态)。
6
+ // 途经 chapter 缺 reversal、路径经过软删节点(手改树的不一致形态)。
8
7
  // 数据访问:db 查询层(listRelations plot_edge)+ outline.json 读取(树路径),无原生 SQL。
9
8
  import { findOutlineNode, getOutlinePathIds, listRelations, readOutlineFile } from "@whispering233/ai-editor-db";
10
9
  import { throwIfAborted } from "./utils.js";
@@ -44,8 +43,8 @@ function treeSubPath(tree, fromId, toId) {
44
43
  /**
45
44
  * 风险因素收集(树路径与连线路径共用):从节点属性推导推进风险。
46
45
  * - 路径过长(≥4 节点)→ 中段易拖沓(连线路径 3 跳 = depth=3 推演上限,已达全量深度;
47
- * 树路径最多 3 层不触发)
48
- * - scene 缺 data.goal(麦基字段集,决策 23)→ 场景缺乏目标
46
+ * 树路径最多 3 层不触发)
47
+ * - scene 缺 data.goal(麦基字段集)→ 场景缺乏目标
49
48
  * - chapter 缺 data.reversal → 章节缺乏反转
50
49
  * - 途经软删节点(手改 outline.json 的不一致形态)→ 数据不一致
51
50
  */
@@ -73,9 +72,9 @@ function collectRiskFactors(tree, nodes) {
73
72
  return risks;
74
73
  }
75
74
  /**
76
- * 剧情路径推演(tools.md trace_plot_paths(from_node_id, to_node_id))。
75
+ * 剧情路径推演( trace_plot_paths(from_node_id, to_node_id))。
77
76
  * 输出 paths(树路径优先,随后连线路径);两节点不存在/已软删 → null(查询无结果)。
78
- * signal:连线路径遍历为长任务候选,循环中检查(决策 16 ③)。
77
+ * signal:连线路径遍历为长任务候选,循环中检查。
79
78
  */
80
79
  export function runTracePlotPaths(ctx, args, signal) {
81
80
  const tree = readOutlineFile(ctx.outlineDir);
@@ -85,7 +84,7 @@ export function runTracePlotPaths(ctx, args, signal) {
85
84
  return null;
86
85
  throwIfAborted(signal);
87
86
  const paths = [];
88
- // 1. 树路径(唯一性:严格三层下同分支路径唯一,决策 19)
87
+ // 1. 树路径(唯一性:严格三层下同分支路径唯一)
89
88
  const treePath = treeSubPath(tree, args.from_node_id, args.to_node_id);
90
89
  if (treePath !== null) {
91
90
  paths.push({
@@ -96,7 +95,7 @@ export function runTracePlotPaths(ctx, args, signal) {
96
95
  risk_factors: collectRiskFactors(tree, treePath.nodes),
97
96
  });
98
97
  }
99
- // 2. plot_edge 连线路径(决策 10 画布连线;有向 BFS 沿 source→target,depth=3 上限)
98
+ // 2. plot_edge 连线路径( 画布连线;有向 BFS 沿 source→target,depth=3 上限)
100
99
  const edgeResult = listRelations(ctx.db, { relationType: "plot_edge", sourceId: args.from_node_id }, 3, ctx.outlineDir);
101
100
  for (const p of edgeResult.paths ?? []) {
102
101
  throwIfAborted(signal);
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/analysis/path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/analysis/path.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ToolContext } from "../context.js";
2
2
  import type { SuggestConnectionsArgs } from "@whispering233/ai-editor-shared";
3
- /** 潜在关联建议(tools.md suggest_connections 返回项) */
3
+ /** 潜在关联建议( suggest_connections 返回项) */
4
4
  export interface ConnectionSuggestion {
5
5
  target_id: string;
6
6
  /** 建议的关系类型(预定义枚举;用户确认后可建立) */
@@ -8,10 +8,10 @@ export interface ConnectionSuggestion {
8
8
  reason: string;
9
9
  }
10
10
  /**
11
- * 潜在关系发现(tools.md suggest_connections(entity_id))。
11
+ * 潜在关系发现( suggest_connections(entity_id))。
12
12
  * 实体不存在/已软删 → null(查询无结果);同类型无其他实体 → 空建议。
13
13
  * 信号优先级:共享场景(S1)> 共同邻居(S2),每候选最多一条建议(取最强信号);
14
- * 软删对象不可见(查询层默认过滤,决策 12);已有直接关系的候选跳过。
14
+ * 软删对象不可见(查询层默认过滤);已有直接关系的候选跳过。
15
15
  */
16
16
  export declare function runSuggestConnections(ctx: ToolContext, args: SuggestConnectionsArgs, signal?: AbortSignal): {
17
17
  suggestions: ConnectionSuggestion[];
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/analysis/suggest.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,+CAA+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAAG,IAAI,CAyE1J"}
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/analysis/suggest.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,uCAAuC;AACvC,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAAG,IAAI,CAyE1J"}
@@ -1,25 +1,24 @@
1
1
  // 分析类工具:suggest_connections(潜在关系发现,S6.4)
2
- // 契约来源:doc/api/tools.md「关系发现」→ { suggestions: [{ target_id, relation_type, reason }] }
3
2
  // 语义:为指定实体发现与同类型其他实体的潜在关联(启发式信号):
4
3
  // - S1 共享场景(强信号):两角色共同 appears_in 于同一大纲节点(同场戏出现过)
5
4
  // - S2 共同邻居(次信号):两实体在实体关系图中共享直接关联实体(「朋友的朋友」)
6
5
  // 已存在直接关系的候选跳过;建议按信号强度降序取 top 10;relation_type 建议
7
6
  // ally(同场戏相识)/ ally(经中间人相识)。
8
7
  // 数据访问:db 查询层(getEntity/listEntities/listRelations)+ 纯函数图分析,无原生 SQL。
9
- // signal:全量候选 × 信号计算为长任务候选,循环中检查(决策 16 ③)。
8
+ // signal:全量候选 × 信号计算为长任务候选,循环中检查。
10
9
  import { getEntity, listEntities, listRelations } from "@whispering233/ai-editor-db";
11
10
  import { buildEntityGraph, intersectSets, isEntityType, throwIfAborted } from "./utils.js";
12
- /** 建议条数上限(防 token 爆炸,决策 15) */
11
+ /** 建议条数上限(防 token 爆炸) */
13
12
  const SUGGESTION_LIMIT = 10;
14
13
  /** 场景标题映射(outline_node 端点的 targetName 由 listRelations 联表填充) */
15
14
  function sceneTitleOf(relations, sceneId) {
16
15
  return relations.find((r) => r.targetId === sceneId)?.targetName ?? sceneId;
17
16
  }
18
17
  /**
19
- * 潜在关系发现(tools.md suggest_connections(entity_id))。
18
+ * 潜在关系发现( suggest_connections(entity_id))。
20
19
  * 实体不存在/已软删 → null(查询无结果);同类型无其他实体 → 空建议。
21
20
  * 信号优先级:共享场景(S1)> 共同邻居(S2),每候选最多一条建议(取最强信号);
22
- * 软删对象不可见(查询层默认过滤,决策 12);已有直接关系的候选跳过。
21
+ * 软删对象不可见(查询层默认过滤);已有直接关系的候选跳过。
23
22
  */
24
23
  export function runSuggestConnections(ctx, args, signal) {
25
24
  const entity = getEntity(ctx.db, args.entity_id);
@@ -27,7 +26,7 @@ export function runSuggestConnections(ctx, args, signal) {
27
26
  return null;
28
27
  throwIfAborted(signal);
29
28
  // 1. 同类型候选(非软删,排除自身);全量实体名映射(S2 共同邻居可能跨类型——
30
- // 邻居名从全量映射取,避免退化为 id)
29
+ // 邻居名从全量映射取,避免退化为 id)
31
30
  const candidates = listEntities(ctx.db, { type: entity.type, limit: 200 }).items.filter((c) => c.id !== entity.id);
32
31
  const allEntities = listEntities(ctx.db, { limit: 200 }).items;
33
32
  const entityName = new Map(allEntities.map((e) => [e.id, e.name]));
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/analysis/suggest.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,uFAAuF;AACvF,kCAAkC;AAClC,kDAAkD;AAClD,6CAA6C;AAC7C,kDAAkD;AAClD,6BAA6B;AAC7B,qEAAqE;AACrE,2CAA2C;AAE3C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAW3F,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,+DAA+D;AAC/D,SAAS,YAAY,CAAC,SAAmE,EAAE,OAAe;IACxG,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,UAAU,IAAI,OAAO,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAgB,EAAE,IAA4B,EAAE,MAAoB;IACxG,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,4CAA4C;IAC5C,yBAAyB;IACzB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;IACnH,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAExD,mDAAmD;IACnD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;IACzE,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC,CAAC,iBAAiB;IAChE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,sBAAsB;IAChE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACrG,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE;gBAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE;gBAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IASD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,SAAS,CAAC,cAAc;QACtD,kBAAkB;QAClB,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,CAAC,CAAC,EAAE;gBACd,KAAK,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,cAAc;gBAChD,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,UAAU,YAAY,CAAC,MAAM,UAAU,SAAS,eAAe;aACnF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,mBAAmB;QACnB,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;YAC9F,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,CAAC,CAAC,EAAE;gBACd,KAAK,EAAE,eAAe,CAAC,MAAM;gBAC7B,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,MAAM,eAAe,CAAC,MAAM,cAAc,YAAY,cAAc;aACxF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxG,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KACxI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/analysis/suggest.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { OutlineFileTree, RelationRecord } from "@whispering233/ai-editor-shared";
2
2
  import type { ToolContext } from "../context.js";
3
3
  /**
4
- * 工具取消专用错误(决策 16 ③):signal 中止时抛出。
4
+ * 工具取消专用错误:signal 中止时抛出。
5
5
  * name = "AbortError"(与 DOMException 同名约定)——S7.4 executor 据此区分
6
6
  * 「SSE 断开取消」(**不喂回 LLM、不计失败轮**)与「工具执行失败」(结构化喂回 LLM 自纠)。
7
7
  */
@@ -9,7 +9,7 @@ export declare class AbortedError extends Error {
9
9
  constructor(message?: string);
10
10
  }
11
11
  /**
12
- * 中止检查(决策 16 ③「长工具执行中检查 signal」):
12
+ * 中止检查(「长工具执行中检查 signal」):
13
13
  * 分析工具是长任务候选(全量关系/Delta 遍历),在循环中周期性调用——
14
14
  * signal 已中止即抛 AbortedError(executor 捕获后按取消处理,不产生部分结果)。
15
15
  */
@@ -27,24 +27,24 @@ export declare function buildEntityGraph(relations: readonly RelationRecord[]):
27
27
  export declare function intersectSets<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): T[];
28
28
  /**
29
29
  * 章节序索引:一次读树 + 推导章节序,供工具内多次「节点 → 章序号」查询。
30
- * 口径(决策 21):全局**章**序号(跨卷连续累计),root → 卷 → 章先序遍历,
30
+ * 口径:全局**章**序号(跨卷连续累计),root → 卷 → 章先序遍历,
31
31
  * scene 归入所属 chapter 不单独编号;节点 move 后下次构建自动更新(不落库、查询时现推)。
32
- * **软删可见性(决策 12)**:软删节点视为不可见——chapterOf 返回 null(供伏笔指标/
32
+ * **软删可见性**:软删节点视为不可见——chapterOf 返回 null(供伏笔指标/
33
33
  * 活跃度等判定;级联软删保证其子树一并软删,无需逐祖先检查)。
34
34
  */
35
35
  export interface ChapterIndex {
36
36
  /** 节点 id → 全局章序号(scene 归入所属章、chapter 取自身;volume/root/不存在/**软删** → null) */
37
37
  chapterOf(nodeId: string): number | null;
38
38
  /**
39
- * 当前章节(决策 21/hooks.md「当前章节」= project.json 的 current_position 所属章——
40
- * 写作进度而非规划终点,与伏笔/孤儿工具口径一致):
41
- * 1. current_position 已设置且可推导章号 → 该章序号
42
- * 2. 未设置/节点不存在/无章号 → 退化树末章(合理默认)
43
- */
39
+ * 当前章节(「当前章节」= project.json 的 current_position 所属章——
40
+ * 写作进度而非规划终点,与伏笔/孤儿工具口径一致):
41
+ * 1. current_position 已设置且可推导章号 → 该章序号
42
+ * 2. 未设置/节点不存在/无章号 → 退化树末章(合理默认)
43
+ */
44
44
  currentChapter: number | null;
45
45
  }
46
46
  /**
47
- * 构建章节序索引(决策 21)。节点所属章查找:chapter 取自身序号;scene 沿父链
47
+ * 构建章节序索引。节点所属章查找:chapter 取自身序号;scene 沿父链
48
48
  * 向上找最近 chapter(严格三层下即其父)。读一次 outline.json 支撑全量查询,
49
49
  * 避免 N 次文件读取(getChapterNumber 逐次读文件)。
50
50
  */
@@ -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;IAC3B,2EAA2E;IAC3E,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC;;;;;OAKG;IACH,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;;;;;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"}
@@ -2,7 +2,7 @@
2
2
  // 纯函数模块,单一职责:被 analysis/ 各工具与测试复用,不持有状态。
3
3
  import { deriveChapterOrder, findOutlineNode, readOutlineFile, readProjectFile } from "@whispering233/ai-editor-db";
4
4
  /**
5
- * 工具取消专用错误(决策 16 ③):signal 中止时抛出。
5
+ * 工具取消专用错误:signal 中止时抛出。
6
6
  * name = "AbortError"(与 DOMException 同名约定)——S7.4 executor 据此区分
7
7
  * 「SSE 断开取消」(**不喂回 LLM、不计失败轮**)与「工具执行失败」(结构化喂回 LLM 自纠)。
8
8
  */
@@ -13,7 +13,7 @@ export class AbortedError extends Error {
13
13
  }
14
14
  }
15
15
  /**
16
- * 中止检查(决策 16 ③「长工具执行中检查 signal」):
16
+ * 中止检查(「长工具执行中检查 signal」):
17
17
  * 分析工具是长任务候选(全量关系/Delta 遍历),在循环中周期性调用——
18
18
  * signal 已中止即抛 AbortedError(executor 捕获后按取消处理,不产生部分结果)。
19
19
  */
@@ -62,7 +62,7 @@ export function intersectSets(a, b) {
62
62
  return out;
63
63
  }
64
64
  /**
65
- * 构建章节序索引(决策 21)。节点所属章查找:chapter 取自身序号;scene 沿父链
65
+ * 构建章节序索引。节点所属章查找:chapter 取自身序号;scene 沿父链
66
66
  * 向上找最近 chapter(严格三层下即其父)。读一次 outline.json 支撑全量查询,
67
67
  * 避免 N 次文件读取(getChapterNumber 逐次读文件)。
68
68
  */
@@ -70,7 +70,7 @@ export function buildChapterIndex(ctx) {
70
70
  const tree = readOutlineFile(ctx.outlineDir);
71
71
  const order = deriveChapterOrder(ctx.outlineDir);
72
72
  const chapterNumbers = new Map(order.map((c) => [c.chapterId, c.chapterNumber]));
73
- // 软删节点集合(决策 12:不可见 → 无章号)
73
+ // 软删节点集合(不可见 → 无章号)
74
74
  const deletedNodeIds = new Set();
75
75
  // 节点 id → 父节点 id(scene → chapter 归属链)
76
76
  const parentOf = new Map();
@@ -87,7 +87,7 @@ export function buildChapterIndex(ctx) {
87
87
  visit(tree.children, "root");
88
88
  const chapterOf = (nodeId) => {
89
89
  if (deletedNodeIds.has(nodeId))
90
- return null; // 软删节点不可见(决策 12)
90
+ return null; // 软删节点不可见
91
91
  // 自身是章
92
92
  const self = chapterNumbers.get(nodeId);
93
93
  if (self !== undefined)
@@ -104,7 +104,7 @@ export function buildChapterIndex(ctx) {
104
104
  }
105
105
  return null;
106
106
  };
107
- // 当前章节:current_position 优先(决策 21),退化树末章
107
+ // 当前章节:current_position 优先,退化树末章
108
108
  let currentChapter = null;
109
109
  const config = readProjectFile(ctx.outlineDir);
110
110
  if (config !== null && config.current_position !== null && config.current_position !== "") {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/analysis/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/analysis/utils.ts"],"names":[],"mappings":"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"}
package/dist/context.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { Db } from "@whispering233/ai-editor-db";
2
2
  export interface ToolContext {
3
3
  /** 当前项目的 data.db 连接(@whispering233/ai-editor-db openDatabase 返回值) */
4
4
  db: Db;
5
- /** 项目根目录(outline.json 所在目录,决策 8;关系/Delta 端点软删校验读树用) */
5
+ /** 项目根目录(outline.json 所在目录,;关系/Delta 端点软删校验读树用) */
6
6
  outlineDir: string;
7
7
  /** 当前项目 id(proj- 前缀;提案归属绑定,S6.6 使用) */
8
8
  projectId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,EAAE,EAAE,EAAE,CAAC;IACP,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC3B,qEAAqE;IACpE,EAAE,EAAE,EAAE,CAAC;IACR,mDAAmD;IAClD,UAAU,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/dist/context.js CHANGED
@@ -5,7 +5,7 @@
5
5
  //
6
6
  // 注入方职责(S7.4 executor 组装):
7
7
  // - db:当前项目的 data.db 连接(better-sqlite3 同步连接,查询层 API 直接使用)
8
- // - outlineDir:项目根目录(outline.json 所在目录,决策 8)
9
- // - projectId:当前打开项目的 id(决策 22 会话归属项目;提案绑定 project_id)
8
+ // - outlineDir:项目根目录(outline.json 所在目录)
9
+ // - projectId:当前打开项目的 id 会话归属项目;提案绑定 project_id)
10
10
  export {};
11
11
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,8DAA8D;AAC9D,yCAAyC;AACzC,oDAAoD;AACpD,EAAE;AACF,2BAA2B;AAC3B,0DAA0D;AAC1D,6CAA6C;AAC7C,uDAAuD"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,8DAA8D;AAC9D,yCAAyC;AACzC,oDAAoD;AACpD,EAAE;AACF,2BAA2B;AAC3B,0DAA0D;AAC1D,wCAAwC;AACxC,kDAAkD"}
@@ -1,4 +1,4 @@
1
1
  import { type ExecutorFn } from "./types.js";
2
- /** add_delta(tools.md:add_delta(node_id, target, changes) → id) */
2
+ /** add_delta(:add_delta(node_id, target, changes) → id) */
3
3
  export declare const executeAddDelta: ExecutorFn;
4
4
  //# sourceMappingURL=delta.d.ts.map
@@ -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,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAE,UAU7B,CAAC"}
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,2DAA2D;AAC3D,eAAO,MAAM,eAAe,EAAE,UAU7B,CAAC"}
@@ -1,13 +1,13 @@
1
- // 执行类工具:Delta(S6.7,tools.md「执行类」1 个)
1
+ // 执行类工具:Delta(S6.7,「执行类」1 个)
2
2
  // add_delta
3
3
  //
4
4
  // - node_id / target_type / target_id / changes 已由 S6.6 提案层派生规范化到 args
5
5
  // - description(delta_records NOT NULL):取 **proposal.summary** 作人类可读描述
6
- // (S6.6 delta.ts 注释:由执行器取 summary——args 不带 description,提案摘要即变更描述)
6
+ // (S6.6 delta.ts 注释:由执行器取 summary——args 不带 description,提案摘要即变更描述)
7
7
  // - order 由 db 层全局单调生成(insertDelta 事务内 MAX+1),此处无 order 入参
8
8
  import { insertDelta } from "@whispering233/ai-editor-db";
9
9
  import { requireArray, requireString } from "./types.js";
10
- /** add_delta(tools.md:add_delta(node_id, target, changes) → id) */
10
+ /** add_delta(:add_delta(node_id, target, changes) → id) */
11
11
  export const executeAddDelta = (ctx, proposal) => {
12
12
  const args = proposal.args;
13
13
  const row = insertDelta(ctx.db, {
@@ -1 +1 @@
1
- {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/executor/delta.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,YAAY;AACZ,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,2DAA2D;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE1E,mEAAmE;AACnE,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,uEAAuE;AACvE,kEAAkE;AAClE,2DAA2D;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE1E,2DAA2D;AAC3D,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,8 +1,8 @@
1
1
  import { type ExecutorFn } from "./types.js";
2
- /** create_entity(tools.md:create_entity(type, name, data) → id) */
2
+ /** create_entity(:create_entity(type, name, data) → id) */
3
3
  export declare const executeCreateEntity: ExecutorFn;
4
- /** update_entity(tools.md:update_entity(id, patches) → updated;patches 浅合并进 data) */
4
+ /** update_entity(:update_entity(id, patches) → updated;patches 浅合并进 data) */
5
5
  export declare const executeUpdateEntity: ExecutorFn;
6
- /** delete_entity(tools.md:delete_entity(id) → void;软删 + 级联,可回收站还原,决策 12) */
6
+ /** delete_entity(:delete_entity(id) → void;软删 + 级联,可回收站还原) */
7
7
  export declare const executeDeleteEntity: ExecutorFn;
8
8
  //# sourceMappingURL=entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/executor/entity.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3F,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,UAQjC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,UASjC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,UAOjC,CAAC"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/executor/entity.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3F,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,EAAE,UAQjC,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,UASjC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,EAAE,UAOjC,CAAC"}
@@ -1,20 +1,20 @@
1
- // 执行类工具:实体(S6.7,tools.md「执行类」3 个)
1
+ // 执行类工具:实体(S6.7,「执行类」3 个)
2
2
  // create_entity / update_entity / delete_entity
3
3
  //
4
4
  // 与 S6.6 提案工具的核心差异:**直接调 db 写层落库**(唯一写路径,S7.5 确认后由 executor
5
5
  // 门面调用);抛错即失败(事务/单语句失败向上传播,S7.5 转错误响应)。不注册 registry
6
- // (registry 是 LLM 可见工具表;执行类不暴露给 LLM,tools.md「核心设计原则」)。
6
+ // (registry 是 LLM 可见工具表;执行类不暴露给 LLM,「核心设计原则」)。
7
7
  //
8
- // 语义对齐(决策 12/14):
8
+ // 语义对齐:
9
9
  // - create_entity:type/name 必填 + data 可选,id 由 db 层生成(char-/set-/loc-/hook- 前缀)
10
- // - update_entity:patches 为 data **浅合并**字段(未传字段保留,endpoints.md 第 267 行);
11
- // 软删实体不可更新(getEntity 过滤 → null → 抛错)
12
- // - delete_entity:软删 + 级联关系与 Delta(决策 12,本体保留可回收站还原)
10
+ // - update_entity:patches 为 data **浅合并**字段(未传字段保留,);
11
+ // 软删实体不可更新(getEntity 过滤 → null → 抛错)
12
+ // - delete_entity:软删 + 级联关系与 Delta(本体保留可回收站还原)
13
13
  // 参数形态:与 S6.6 proposal.args 对齐(propose_create_entity → { type, name, data? } 等),
14
14
  // 由 executeProposal 按 proposal.type 映射后直接消费。
15
15
  import { createEntity, nowIso, softDeleteEntity, updateEntity } from "@whispering233/ai-editor-db";
16
16
  import { optionalRecord, requireRecord, requireString } from "./types.js";
17
- /** create_entity(tools.md:create_entity(type, name, data) → id) */
17
+ /** create_entity(:create_entity(type, name, data) → id) */
18
18
  export const executeCreateEntity = (ctx, proposal) => {
19
19
  const args = proposal.args;
20
20
  const row = createEntity(ctx.db, {
@@ -24,18 +24,18 @@ export const executeCreateEntity = (ctx, proposal) => {
24
24
  });
25
25
  return { id: row.id };
26
26
  };
27
- /** update_entity(tools.md:update_entity(id, patches) → updated;patches 浅合并进 data) */
27
+ /** update_entity(:update_entity(id, patches) → updated;patches 浅合并进 data) */
28
28
  export const executeUpdateEntity = (ctx, proposal) => {
29
29
  const args = proposal.args;
30
30
  const entityId = requireString(args, "entity_id");
31
31
  const patches = requireRecord(args, "patches");
32
- const row = updateEntity(ctx.db, entityId, { data: patches }); // data 浅合并(决策 23 同语义)
32
+ const row = updateEntity(ctx.db, entityId, { data: patches }); // data 浅合并( 同语义)
33
33
  if (row === null) {
34
34
  throw new Error(`实体不存在或已软删: ${entityId}`);
35
35
  }
36
36
  return { id: row.id, updated: true };
37
37
  };
38
- /** delete_entity(tools.md:delete_entity(id) → void;软删 + 级联,可回收站还原,决策 12) */
38
+ /** delete_entity(:delete_entity(id) → void;软删 + 级联,可回收站还原) */
39
39
  export const executeDeleteEntity = (ctx, proposal) => {
40
40
  const entityId = requireString(proposal.args, "entity_id");
41
41
  const result = softDeleteEntity(ctx.db, entityId, nowIso());