@whispering233/ai-editor-tools 0.0.21 → 0.0.29
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.
- package/dist/analysis/conflict.d.ts +3 -3
- package/dist/analysis/conflict.d.ts.map +1 -1
- package/dist/analysis/conflict.js +3 -4
- package/dist/analysis/conflict.js.map +1 -1
- package/dist/analysis/consistency.d.ts +3 -3
- package/dist/analysis/consistency.d.ts.map +1 -1
- package/dist/analysis/consistency.js +7 -8
- package/dist/analysis/consistency.js.map +1 -1
- package/dist/analysis/hook.d.ts +20 -20
- package/dist/analysis/hook.d.ts.map +1 -1
- package/dist/analysis/hook.js +26 -26
- package/dist/analysis/hook.js.map +1 -1
- package/dist/analysis/orphan.d.ts +7 -7
- package/dist/analysis/orphan.d.ts.map +1 -1
- package/dist/analysis/orphan.js +18 -20
- package/dist/analysis/orphan.js.map +1 -1
- package/dist/analysis/path.d.ts +4 -4
- package/dist/analysis/path.d.ts.map +1 -1
- package/dist/analysis/path.js +9 -10
- package/dist/analysis/path.js.map +1 -1
- package/dist/analysis/suggest.d.ts +3 -3
- package/dist/analysis/suggest.d.ts.map +1 -1
- package/dist/analysis/suggest.js +5 -6
- package/dist/analysis/suggest.js.map +1 -1
- package/dist/analysis/utils.d.ts +10 -10
- package/dist/analysis/utils.d.ts.map +1 -1
- package/dist/analysis/utils.js +6 -6
- package/dist/analysis/utils.js.map +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2 -2
- package/dist/context.js.map +1 -1
- package/dist/executor/delta.d.ts +1 -1
- package/dist/executor/delta.d.ts.map +1 -1
- package/dist/executor/delta.js +3 -3
- package/dist/executor/delta.js.map +1 -1
- package/dist/executor/entity.d.ts +3 -3
- package/dist/executor/entity.d.ts.map +1 -1
- package/dist/executor/entity.js +10 -10
- package/dist/executor/entity.js.map +1 -1
- package/dist/executor/hook.d.ts +3 -3
- package/dist/executor/hook.d.ts.map +1 -1
- package/dist/executor/hook.js +23 -23
- package/dist/executor/hook.js.map +1 -1
- package/dist/executor/index.d.ts +1 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +12 -12
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/outline.d.ts +3 -3
- package/dist/executor/outline.d.ts.map +1 -1
- package/dist/executor/outline.js +9 -9
- package/dist/executor/outline.js.map +1 -1
- package/dist/executor/reference.d.ts +1 -1
- package/dist/executor/reference.d.ts.map +1 -1
- package/dist/executor/reference.js +3 -3
- package/dist/executor/reference.js.map +1 -1
- package/dist/executor/relation.d.ts +2 -2
- package/dist/executor/relation.d.ts.map +1 -1
- package/dist/executor/relation.js +7 -7
- package/dist/executor/relation.js.map +1 -1
- package/dist/executor/reorder-timepoints.d.ts +1 -1
- package/dist/executor/reorder-timepoints.d.ts.map +1 -1
- package/dist/executor/reorder-timepoints.js +5 -5
- package/dist/executor/reorder-timepoints.js.map +1 -1
- package/dist/executor/types.d.ts +2 -2
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/proposal/delta.js +11 -11
- package/dist/proposal/delta.js.map +1 -1
- package/dist/proposal/entity.d.ts +2 -2
- package/dist/proposal/entity.d.ts.map +1 -1
- package/dist/proposal/entity.js +6 -6
- package/dist/proposal/entity.js.map +1 -1
- package/dist/proposal/hook.d.ts +1 -1
- package/dist/proposal/hook.d.ts.map +1 -1
- package/dist/proposal/hook.js +7 -7
- package/dist/proposal/hook.js.map +1 -1
- package/dist/proposal/outline.d.ts +4 -4
- package/dist/proposal/outline.d.ts.map +1 -1
- package/dist/proposal/outline.js +11 -11
- package/dist/proposal/outline.js.map +1 -1
- package/dist/proposal/reference.d.ts +3 -3
- package/dist/proposal/reference.d.ts.map +1 -1
- package/dist/proposal/reference.js +6 -6
- package/dist/proposal/reference.js.map +1 -1
- package/dist/proposal/relation.d.ts +1 -1
- package/dist/proposal/relation.d.ts.map +1 -1
- package/dist/proposal/relation.js +7 -7
- package/dist/proposal/relation.js.map +1 -1
- package/dist/proposal/reorder-timepoints.d.ts +3 -3
- package/dist/proposal/reorder-timepoints.d.ts.map +1 -1
- package/dist/proposal/reorder-timepoints.js +14 -14
- package/dist/proposal/reorder-timepoints.js.map +1 -1
- package/dist/proposal/types.d.ts +20 -20
- package/dist/proposal/types.d.ts.map +1 -1
- package/dist/proposal/types.js +18 -18
- package/dist/proposal/types.js.map +1 -1
- package/dist/query/delta.d.ts +5 -5
- package/dist/query/delta.d.ts.map +1 -1
- package/dist/query/delta.js +11 -13
- package/dist/query/delta.js.map +1 -1
- package/dist/query/entity.d.ts +9 -9
- package/dist/query/entity.d.ts.map +1 -1
- package/dist/query/entity.js +13 -15
- package/dist/query/entity.js.map +1 -1
- package/dist/query/outline.d.ts +6 -6
- package/dist/query/outline.d.ts.map +1 -1
- package/dist/query/outline.js +13 -15
- package/dist/query/outline.js.map +1 -1
- package/dist/query/reference.d.ts +1 -1
- package/dist/query/reference.d.ts.map +1 -1
- package/dist/query/reference.js +3 -4
- package/dist/query/reference.js.map +1 -1
- package/dist/query/relation.d.ts +1 -1
- package/dist/query/relation.d.ts.map +1 -1
- package/dist/query/relation.js +3 -5
- package/dist/query/relation.js.map +1 -1
- package/dist/registry.d.ts +5 -5
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +2 -3
- package/dist/registry.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/executor/entity.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/executor/entity.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,gDAAgD;AAChD,EAAE;AACF,4DAA4D;AAC5D,oDAAoD;AACpD,+CAA+C;AAC/C,EAAE;AACF,QAAQ;AACR,+EAA+E;AAC/E,qDAAqD;AACrD,qCAAqC;AACrC,+CAA+C;AAC/C,iFAAiF;AACjF,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEnG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE3F,2DAA2D;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE;QAC/B,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAe,EAAE,gCAAgC;QACjF,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;QACjC,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;KACnC,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,iBAAiB;IAChF,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC3D,CAAC,CAAC"}
|
package/dist/executor/hook.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ExecutorFn } from "./types.js";
|
|
2
|
-
/** advance_hook
|
|
2
|
+
/** advance_hook(:advance_hook(hook_id, node_id, description) → id) */
|
|
3
3
|
export declare const executeAdvanceHook: ExecutorFn;
|
|
4
|
-
/** resolve_hook
|
|
4
|
+
/** resolve_hook(:resolve_hook(hook_id, node_id, description) → id) */
|
|
5
5
|
export declare const executeResolveHook: ExecutorFn;
|
|
6
|
-
/** abandon_hook
|
|
6
|
+
/** abandon_hook(:abandon_hook(hook_id, description) → id;仅 delta 记 status=abandoned) */
|
|
7
7
|
export declare const executeAbandonHook: ExecutorFn;
|
|
8
8
|
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -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,
|
|
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,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,EAAE,UACsC,CAAC;AAExE,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,EAAE,UACmC,CAAC;AAErE,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,EAAE,UAC8B,CAAC"}
|
package/dist/executor/hook.js
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
// 执行类工具:伏笔生命周期复合写(S6.7
|
|
1
|
+
// 执行类工具:伏笔生命周期复合写(S6.7,「执行类」3 个)
|
|
2
2
|
// advance_hook / resolve_hook / abandon_hook
|
|
3
3
|
//
|
|
4
|
-
// **复合写(2026-08
|
|
4
|
+
// **复合写(2026-08 修订,「复合写说明」)**:确认后封装「delta 插入 + relation 插入」
|
|
5
5
|
// 两步写为**一次提交**(withTransaction),失败整体回滚、不产生半状态。
|
|
6
6
|
// - advance_hook:delta_records 记 status → progressing + relation_records 插 advances
|
|
7
7
|
// - resolve_hook:delta_records 记 status → resolved + relation_records 插 resolves
|
|
8
|
-
// - abandon_hook:仅 delta_records 记 status → abandoned
|
|
8
|
+
// - abandon_hook:仅 delta_records 记 status → abandoned(:无 relation;args 无 node_id)
|
|
9
9
|
//
|
|
10
10
|
// **幂等**:先查 (node_id, hook_id, relation_type) 是否已有未软删记录,存在即返回已有 id
|
|
11
11
|
// (不重复写)——重复确认/重复提案均不重复推进;abandon 无关系可查,改查「已记
|
|
12
12
|
// status=abandoned 的 delta」(同语义:不重复写废弃记录;**JSON 解析精确判定**,见
|
|
13
13
|
// findExistingStatusDeltaId——避免 LIKE 误命中其他字段的 to=abandoned)。
|
|
14
|
-
// **边界**:advance/resolve 幂等只查关系记录,不查 delta
|
|
14
|
+
// **边界**:advance/resolve 幂等只查关系记录,不查 delta——关系被**手动物理删**(
|
|
15
15
|
// 手动删关系不走回收站、物理删)后重复确认会再写一条 delta + relation(幂等失效但语义
|
|
16
16
|
// 自洽:关系已不存在,重写即恢复;delta 的 from 取当前 data.status,链条不破)。
|
|
17
17
|
//
|
|
18
|
-
//
|
|
19
|
-
// from: 当前状态, to: 目标状态 }]——from 取 hook.data.status(缺省 planted
|
|
20
|
-
// 状态缺失视为 planted),保证 computeState 的 update
|
|
18
|
+
// 变更形态(「伏笔状态变化」):changes = [{ field: "status", op: "update",
|
|
19
|
+
// from: 当前状态, to: 目标状态 }]——from 取 hook.data.status(缺省 planted,
|
|
20
|
+
// 状态缺失视为 planted),保证 computeState 的 update 校验正常累积;
|
|
21
21
|
// description 取 proposal.args.description(delta_records.description NOT NULL)。
|
|
22
|
-
// 终态守卫:resolved/abandoned
|
|
22
|
+
// 终态守卫:resolved/abandoned 为生命周期终态(),终态伏笔不可再推进/回收/废弃。
|
|
23
23
|
//
|
|
24
24
|
// **状态同步(S6.7 修复轮必须改)**:复合写事务内插入 delta 后**同步更新
|
|
25
|
-
// entities.data.status**(浅合并 + 刷新 updated_at
|
|
25
|
+
// entities.data.status**(浅合并 + 刷新 updated_at,与 快照比对语义兼容)——
|
|
26
26
|
// 终态守卫(assertNotTerminal)、delta 的 from(currentHookStatus)与 S6.5 hookStatuses
|
|
27
27
|
// (analysis/hook.ts collectHooks 读 entity.data.status)均以 data.status 为唯一事实来源
|
|
28
|
-
//
|
|
28
|
+
// ;不同步则 resolved/abandoned 后仍可推进、同 hook 二次推进 from 断裂
|
|
29
29
|
// (computeState conflicts)、已回收伏笔仍计 active。**幂等命中路径不更新**(首次执行已同步)。
|
|
30
30
|
//
|
|
31
|
-
// 执行类是短同步事务,不做 signal
|
|
31
|
+
// 执行类是短同步事务,不做 signal 检查(长工具才要求执行中检查;入口检查由
|
|
32
32
|
// S7.5 确认路由承担)。
|
|
33
33
|
import { createRelation, findOutlineNode, insertDelta, readOutlineFile, readProjectFile, updateEntity, withTransaction } from "@whispering233/ai-editor-db";
|
|
34
34
|
import { requireHook, requireOutlineNode } from "../proposal/types.js";
|
|
35
35
|
import { requireString } from "./types.js";
|
|
36
|
-
/**
|
|
36
|
+
/** 伏笔生命周期终态(:planted → progressing → resolved 或 abandoned) */
|
|
37
37
|
const TERMINAL_STATUSES = ["resolved", "abandoned"];
|
|
38
|
-
/** 取伏笔当前状态(data.status 缺失/空串 → planted
|
|
38
|
+
/** 取伏笔当前状态(data.status 缺失/空串 → planted——创建即埋设) */
|
|
39
39
|
function currentHookStatus(hook) {
|
|
40
40
|
const status = hook.data.status;
|
|
41
41
|
return typeof status === "string" && status !== "" ? status : "planted";
|
|
42
42
|
}
|
|
43
|
-
/**
|
|
43
|
+
/** 终态守卫:终态伏笔不可再推进/回收/废弃(生命周期语义,) */
|
|
44
44
|
function assertNotTerminal(hook, actionLabel) {
|
|
45
45
|
const status = currentHookStatus(hook);
|
|
46
46
|
if (TERMINAL_STATUSES.includes(status)) {
|
|
@@ -49,7 +49,7 @@ function assertNotTerminal(hook, actionLabel) {
|
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* 幂等查询(advance/resolve):同 (node_id, hook_id, relation_type) 已有**未软删**记录
|
|
52
|
-
* → 返回其 id(
|
|
52
|
+
* → 返回其 id( 复合写说明:重复确认/重复提案均不重复推进;含端点软删后还原的
|
|
53
53
|
* 记录——deleted_at 置 NULL 后仍命中)。
|
|
54
54
|
*/
|
|
55
55
|
function findExistingLifecycleRelation(db, nodeId, hookId, relationType) {
|
|
@@ -91,7 +91,7 @@ function findExistingStatusDeltaId(db, hookId, toStatus) {
|
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
93
|
* abandon 的 delta 锚定节点:废弃是主动放弃(无指定节点,propose_abandon_hook 仅 hook_id +
|
|
94
|
-
* description)——取 project.json current_position
|
|
94
|
+
* description)——取 project.json current_position(「当前章节」锚点,存在且未软删);
|
|
95
95
|
* 未设置/失效则退化取树末节点(当前写作进度末端);大纲空树 → 抛错(无锚点不可记录)。
|
|
96
96
|
*/
|
|
97
97
|
function anchorNodeForAbandon(ctx) {
|
|
@@ -132,7 +132,7 @@ function executeHookTransition(ctx, proposal, relationType, toStatus, actionLabe
|
|
|
132
132
|
const args = proposal.args;
|
|
133
133
|
const hookId = requireString(args, "hook_id");
|
|
134
134
|
const nodeId = relationType === null ? null : requireString(args, "node_id");
|
|
135
|
-
const description = requireString(args, "description"); // delta_records.description NOT NULL
|
|
135
|
+
const description = requireString(args, "description"); // delta_records.description NOT NULL()
|
|
136
136
|
return withTransaction(ctx.db, () => {
|
|
137
137
|
// 幂等(含未软删记录):命中即返回已有 id,不重复写
|
|
138
138
|
if (relationType !== null) {
|
|
@@ -145,13 +145,13 @@ function executeHookTransition(ctx, proposal, relationType, toStatus, actionLabe
|
|
|
145
145
|
if (existing !== null)
|
|
146
146
|
return { id: existing, duplicated: true };
|
|
147
147
|
}
|
|
148
|
-
// 校验:伏笔存在且 type=hook
|
|
148
|
+
// 校验:伏笔存在且 type=hook;推进/回收节点存在且未软删
|
|
149
149
|
const hook = requireHook(ctx, hookId);
|
|
150
150
|
if (nodeId !== null)
|
|
151
151
|
requireOutlineNode(ctx, nodeId);
|
|
152
152
|
// 终态守卫(resolved/abandoned 不可再推进/回收;废弃时不可再废弃)
|
|
153
153
|
assertNotTerminal(hook, actionLabel);
|
|
154
|
-
// delta:记 status 变化(from
|
|
154
|
+
// delta:记 status 变化(from=当前状态, update 语义,computeState 正常累积)
|
|
155
155
|
const changes = [{ field: "status", op: "update", from: currentHookStatus(hook), to: toStatus }];
|
|
156
156
|
const delta = insertDelta(ctx.db, {
|
|
157
157
|
nodeId: nodeId ?? anchorNodeForAbandon(ctx),
|
|
@@ -166,7 +166,7 @@ function executeHookTransition(ctx, proposal, relationType, toStatus, actionLabe
|
|
|
166
166
|
// 仍可推进(守卫失效)、同 hook 二次推进 from 断裂(computeState conflicts)、
|
|
167
167
|
// 已回收伏笔仍计 active。幂等命中路径(上方 early return)不更新——首次执行已同步。
|
|
168
168
|
updateEntity(ctx.db, hookId, { data: { status: toStatus } });
|
|
169
|
-
// relation:advances / resolves(大纲节点 → hook;
|
|
169
|
+
// relation:advances / resolves(大纲节点 → hook; 方向约定)
|
|
170
170
|
if (relationType !== null) {
|
|
171
171
|
const relation = createRelation(ctx.db, { sourceType: "outline_node", sourceId: nodeId, targetType: "hook", targetId: hookId, relationType }, ctx.outlineDir);
|
|
172
172
|
return { id: relation.id };
|
|
@@ -174,10 +174,10 @@ function executeHookTransition(ctx, proposal, relationType, toStatus, actionLabe
|
|
|
174
174
|
return { id: delta.id };
|
|
175
175
|
});
|
|
176
176
|
}
|
|
177
|
-
/** advance_hook
|
|
177
|
+
/** advance_hook(:advance_hook(hook_id, node_id, description) → id) */
|
|
178
178
|
export const executeAdvanceHook = (ctx, proposal) => executeHookTransition(ctx, proposal, "advances", "progressing", "推进");
|
|
179
|
-
/** resolve_hook
|
|
179
|
+
/** resolve_hook(:resolve_hook(hook_id, node_id, description) → id) */
|
|
180
180
|
export const executeResolveHook = (ctx, proposal) => executeHookTransition(ctx, proposal, "resolves", "resolved", "回收");
|
|
181
|
-
/** abandon_hook
|
|
181
|
+
/** abandon_hook(:abandon_hook(hook_id, description) → id;仅 delta 记 status=abandoned) */
|
|
182
182
|
export const executeAbandonHook = (ctx, proposal) => executeHookTransition(ctx, proposal, null, "abandoned", "废弃");
|
|
183
183
|
//# sourceMappingURL=hook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/executor/hook.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/executor/hook.ts"],"names":[],"mappings":"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"}
|
package/dist/executor/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { EXECUTOR_TOOLS, PROPOSAL_TOOLS } from "@whispering233/ai-editor-shared"
|
|
|
2
2
|
import type { ToolContext } from "../context.js";
|
|
3
3
|
import type { Proposal } from "../proposal/types.js";
|
|
4
4
|
import { type ExecutorResult } from "./types.js";
|
|
5
|
-
/** 提案类型字面量联合(15 个,PROPOSAL_TOOLS
|
|
5
|
+
/** 提案类型字面量联合(15 个,PROPOSAL_TOOLS 常量派生——注册表/门面共用) */
|
|
6
6
|
export type ProposalType = (typeof PROPOSAL_TOOLS)[number];
|
|
7
7
|
/** 执行工具名字面量联合(13 个,EXECUTOR_TOOLS 常量派生) */
|
|
8
8
|
export type ExecutorToolName = (typeof EXECUTOR_TOOLS)[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQrD,OAAO,EAAkD,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQrD,OAAO,EAAkD,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjG,oDAAoD;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAwD/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAMpF;AAGD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/executor/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
// executor 门面(S6.7):executeProposal(ctx, proposal)——提案确认后的执行入口
|
|
2
2
|
//
|
|
3
3
|
// 按 proposal.type 映射执行函数(PROPOSAL_TOOLS 名 ↔ EXECUTOR_TOOLS 名):
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
4
|
+
// propose_create_entity → create_entity、propose_add_relation → add_relation、
|
|
5
|
+
// propose_advance_hook → advance_hook 等(15 提案 → 13 执行);
|
|
6
|
+
// propose_create_hook / propose_update_hook 为适配器(hook 即 type=hook 的实体):
|
|
7
|
+
// - propose_create_hook → create_entity 注入 type="hook" + plant_at_node_id 时
|
|
8
|
+
// 同事务补插 plants 关系(提案承诺「确认后建立 plants 关系」, 生命周期「埋下」)
|
|
9
|
+
// - propose_update_hook → update_entity(hook_id 即 entity_id,patches 浅合并进 data)
|
|
10
|
+
// propose_reorder_timepoints → reorder_timepoints(G2:批量重排 sort_order,见 executor/reorder-timepoints.ts,
|
|
11
|
+
// 取代 F9 的 propose_reorder_events——事件不再带 time_label,语义序载体变为时间点实体)
|
|
12
12
|
//
|
|
13
13
|
// **不注册 registry**:执行类是用户确认后由本门面调用的底层写路径,**不暴露给 LLM**
|
|
14
|
-
//
|
|
14
|
+
// (「核心设计原则」——AI 不可以调用执行类工具)。
|
|
15
15
|
// 映射表类型安全:key 为 15 个提案类型字面量联合(Record 缺键编译期报错);
|
|
16
16
|
// 运行时未知 type → 查表 undefined → 抛错(防静默,S7.5 转错误响应)。
|
|
17
|
-
// signal
|
|
17
|
+
// signal:执行类是短同步事务,不做中止检查( 只要求长工具执行中检查;
|
|
18
18
|
// S7.5 确认路由在调用前做取消判定)。
|
|
19
19
|
import { createEntity, createRelation, withTransaction } from "@whispering233/ai-editor-db";
|
|
20
20
|
import { EXECUTOR_TOOLS } from "@whispering233/ai-editor-shared";
|
|
@@ -36,7 +36,7 @@ const executeCreateHook = (ctx, proposal) => {
|
|
|
36
36
|
return withTransaction(ctx.db, () => {
|
|
37
37
|
const row = createEntity(ctx.db, { type: "hook", name, data });
|
|
38
38
|
if (plantAtNodeId !== undefined) {
|
|
39
|
-
requireOutlineNode(ctx, plantAtNodeId); //
|
|
39
|
+
requireOutlineNode(ctx, plantAtNodeId); // 埋设节点存在且未软删(createRelation 亦校验)
|
|
40
40
|
createRelation(ctx.db, { sourceType: "outline_node", sourceId: plantAtNodeId, targetType: "hook", targetId: row.id, relationType: "plants" }, ctx.outlineDir);
|
|
41
41
|
}
|
|
42
42
|
return { id: row.id };
|
|
@@ -72,7 +72,7 @@ const EXECUTE_BY_PROPOSAL_TYPE = {
|
|
|
72
72
|
propose_resolve_hook: executeResolveHook,
|
|
73
73
|
propose_abandon_hook: executeAbandonHook,
|
|
74
74
|
propose_reorder_timepoints: executeReorderTimepoints, // G2:批量重排 sort_order(取代 F9 的 propose_reorder_events)
|
|
75
|
-
propose_create_reference: executeCreateReference, //
|
|
75
|
+
propose_create_reference: executeCreateReference, // 确认后写入参考资料实体(type 缺省 material)
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
78
78
|
* 执行提案(S7.5 确认后调用):按 proposal.type 映射执行函数,args 透传(S6.6 已规范化
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,+DAA+D;AAC/D
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,+DAA+D;AAC/D,6EAA6E;AAC7E,wDAAwD;AACxD,wEAAwE;AACxE,4EAA4E;AAC5E,mDAAmD;AACnD,+EAA+E;AAC/E,uGAAuG;AACvG,iEAAiE;AACjE,EAAE;AACF,sDAAsD;AACtD,6BAA6B;AAC7B,+CAA+C;AAC/C,kDAAkD;AAClD,wCAAwC;AACxC,uBAAuB;AAEvB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAkB,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAwC,MAAM,YAAY,CAAC;AAQjG,iFAAiF;AACjF,MAAM,iBAAiB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAChH,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,iCAAiC;YACzE,cAAc,CACZ,GAAG,CAAC,EAAE,EACN,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,EACrH,GAAG,CAAC,UAAU,CACf,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,iBAAiB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,4DAA4D;IAC5D,oDAAoD;IACnD,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,mBAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,wBAAwB,GAAqC;IACjE,qBAAqB,EAAE,mBAAmB;IAC1C,qBAAqB,EAAE,mBAAmB;IAC1C,qBAAqB,EAAE,mBAAmB;IAC1C,oBAAoB,EAAE,kBAAkB;IACxC,uBAAuB,EAAE,qBAAqB;IAC9C,iBAAiB,EAAE,eAAe;IAClC,oBAAoB,EAAE,wBAAwB;IAC9C,iBAAiB,EAAE,eAAe;IAClC,mBAAmB,EAAE,iBAAiB;IACtC,mBAAmB,EAAE,iBAAiB;IACtC,mBAAmB,EAAE,iBAAiB;IACtC,oBAAoB,EAAE,kBAAkB;IACxC,oBAAoB,EAAE,kBAAkB;IACxC,oBAAoB,EAAE,kBAAkB;IACxC,0BAA0B,EAAE,wBAAwB,EAAE,qDAAqD;IAC3G,wBAAwB,EAAE,sBAAsB,EAAE,gCAAgC;CACnF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAgB,EAAE,QAAkB;IAClE,MAAM,EAAE,GAAG,wBAAwB,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAC;IACnE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAID,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ExecutorFn } from "./types.js";
|
|
2
|
-
/** create_outline_node
|
|
2
|
+
/** create_outline_node(:create_outline_node(type, title, parent) → id) */
|
|
3
3
|
export declare const executeCreateOutlineNode: ExecutorFn;
|
|
4
|
-
/** move_node
|
|
4
|
+
/** move_node(:move_node(node_id, parent, order) → void;parent 可为 root) */
|
|
5
5
|
export declare const executeMoveNode: ExecutorFn;
|
|
6
|
-
/** delete_node
|
|
6
|
+
/** delete_node(:delete_node(node_id) → void;软删 + 递归子树) */
|
|
7
7
|
export declare const executeDeleteNode: ExecutorFn;
|
|
8
8
|
//# sourceMappingURL=outline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/executor/outline.ts"],"names":[],"mappings":"AAWA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3E,
|
|
1
|
+
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/executor/outline.ts"],"names":[],"mappings":"AAWA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3E,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,EAAE,UAUtC,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,eAAe,EAAE,UAa7B,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,EAAE,UAI/B,CAAC"}
|
package/dist/executor/outline.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
// 执行类工具:大纲(S6.7
|
|
1
|
+
// 执行类工具:大纲(S6.7,「执行类」3 个)
|
|
2
2
|
// create_outline_node / move_node / delete_node
|
|
3
3
|
//
|
|
4
|
-
// 写路径:直接调 db outline-ops(唯一写路径;outline.json 原子写由 db
|
|
5
|
-
// updatedAt 由应用层 nowIso
|
|
6
|
-
//
|
|
4
|
+
// 写路径:直接调 db outline-ops(唯一写路径;outline.json 原子写由 db 层保证);
|
|
5
|
+
// updatedAt 由应用层 nowIso 传入(时间约定:ISO 8601 应用层写入,模块不生成时间)。
|
|
6
|
+
// 层级约束( 严格三层)由 db assertCanHold 兜底:scene 挂 chapter、chapter 挂卷/根、
|
|
7
7
|
// volume 挂根;parent_id 缺省挂 root(volume/chapter 可挂根,scene 缺省即拒绝——与提案层同语义)。
|
|
8
|
-
//
|
|
8
|
+
// 软删语义:delete_node 软删 + 递归子树(本体保留可回收站还原)。
|
|
9
9
|
import { createOutlineNode, deleteOutlineNode, moveOutlineNode, nowIso } from "@whispering233/ai-editor-db";
|
|
10
10
|
import { requireNumber, requireString } from "./types.js";
|
|
11
|
-
/** create_outline_node
|
|
11
|
+
/** create_outline_node(:create_outline_node(type, title, parent) → id) */
|
|
12
12
|
export const executeCreateOutlineNode = (ctx, proposal) => {
|
|
13
13
|
const args = proposal.args;
|
|
14
|
-
const parentId = args.parent_id === undefined ? "root" : requireString(args, "parent_id"); //
|
|
14
|
+
const parentId = args.parent_id === undefined ? "root" : requireString(args, "parent_id"); // 缺省挂根
|
|
15
15
|
const node = createOutlineNode(ctx.outlineDir, {
|
|
16
16
|
type: requireString(args, "type"),
|
|
17
17
|
title: requireString(args, "title"),
|
|
@@ -20,7 +20,7 @@ export const executeCreateOutlineNode = (ctx, proposal) => {
|
|
|
20
20
|
});
|
|
21
21
|
return { id: node.id };
|
|
22
22
|
};
|
|
23
|
-
/** move_node
|
|
23
|
+
/** move_node(:move_node(node_id, parent, order) → void;parent 可为 root) */
|
|
24
24
|
export const executeMoveNode = (ctx, proposal) => {
|
|
25
25
|
const args = proposal.args;
|
|
26
26
|
const nodeId = requireString(args, "node_id");
|
|
@@ -30,7 +30,7 @@ export const executeMoveNode = (ctx, proposal) => {
|
|
|
30
30
|
}, nowIso());
|
|
31
31
|
return { id: nodeId, ...result };
|
|
32
32
|
};
|
|
33
|
-
/** delete_node
|
|
33
|
+
/** delete_node(:delete_node(node_id) → void;软删 + 递归子树) */
|
|
34
34
|
export const executeDeleteNode = (ctx, proposal) => {
|
|
35
35
|
const nodeId = requireString(proposal.args, "node_id");
|
|
36
36
|
const { children } = deleteOutlineNode(ctx.outlineDir, nodeId, nowIso());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/executor/outline.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/executor/outline.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,gDAAgD;AAChD,EAAE;AACF,0DAA0D;AAC1D,yDAAyD;AACzD,iEAAiE;AACjE,yEAAyE;AACzE,0CAA0C;AAE1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE5G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO;IAClG,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE;QAC7C,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAqC;QACrE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QACnC,QAAQ;QACR,SAAS,EAAE,MAAM,EAAE;KACpB,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,0EAA0E;AAC1E,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,MAAM,GAAG,eAAe,CAC5B,GAAG,CAAC,UAAU,EACd,MAAM,EACN;QACE,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,mCAAmC;KACzE,EACD,MAAM,EAAE,CACT,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;AACnE,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ExecutorFn } from "./types.js";
|
|
2
|
-
/** execute_create_reference
|
|
2
|
+
/** execute_create_reference(「参考资料写入」:确认后写入实体,type 缺省 material) */
|
|
3
3
|
export declare const executeCreateReference: ExecutorFn;
|
|
4
4
|
//# sourceMappingURL=reference.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/executor/reference.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7D,
|
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/executor/reference.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7D,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,EAAE,UAYpC,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
//
|
|
1
|
+
// 执行类工具:参考资料(批次九)
|
|
2
2
|
// execute_create_reference——propose_create_reference 确认后经 executeProposal 调度,
|
|
3
3
|
// 复用 executeCreateEntity(type='reference' + data 合并),补 data.type 缺省 material。
|
|
4
4
|
// 与 S6.7 其他执行工具同:不注册 registry(LLM 不可见)。
|
|
5
5
|
import { requireRecord, requireString } from "./types.js";
|
|
6
6
|
import { executeCreateEntity } from "./entity.js";
|
|
7
|
-
/** execute_create_reference
|
|
7
|
+
/** execute_create_reference(「参考资料写入」:确认后写入实体,type 缺省 material) */
|
|
8
8
|
export const executeCreateReference = (ctx, proposal) => {
|
|
9
9
|
const args = proposal.args;
|
|
10
10
|
const name = requireString(args, "name");
|
|
@@ -12,7 +12,7 @@ export const executeCreateReference = (ctx, proposal) => {
|
|
|
12
12
|
return executeCreateEntity(ctx, {
|
|
13
13
|
...proposal,
|
|
14
14
|
args: {
|
|
15
|
-
type: "reference", //
|
|
15
|
+
type: "reference", // 固定实体类型( 第 7 种实体)
|
|
16
16
|
name,
|
|
17
17
|
data: { ...data, type: data.type ?? "material" }, // data.type 缺省 material(schema 容错默认)
|
|
18
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/executor/reference.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/executor/reference.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,8EAA8E;AAC9E,8EAA8E;AAC9E,wCAAwC;AAGxC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,kEAAkE;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAkB,EAAE;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAA4B,CAAC;IACpE,OAAO,mBAAmB,CAAC,GAAG,EAAE;QAC9B,GAAG,QAAQ;QACX,IAAI,EAAE;YACJ,IAAI,EAAE,WAAW,EAAE,mBAAmB;YACtC,IAAI;YACJ,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE,EAAE,qCAAqC;SACxF;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ExecutorFn } from "./types.js";
|
|
2
|
-
/** add_relation
|
|
2
|
+
/** add_relation(:add_relation(source, target, type) → id) */
|
|
3
3
|
export declare const executeAddRelation: ExecutorFn;
|
|
4
|
-
/** remove_relation
|
|
4
|
+
/** remove_relation(:remove_relation(id) → void;物理删) */
|
|
5
5
|
export declare const executeRemoveRelation: ExecutorFn;
|
|
6
6
|
//# sourceMappingURL=relation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/executor/relation.ts"],"names":[],"mappings":"AAUA,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E,
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/executor/relation.ts"],"names":[],"mappings":"AAUA,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAE,UAehC,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,EAAE,UAOnC,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
// 执行类工具:关系(S6.7
|
|
1
|
+
// 执行类工具:关系(S6.7,「执行类」2 个)
|
|
2
2
|
// add_relation / remove_relation
|
|
3
3
|
//
|
|
4
4
|
// - add_relation:端点类型(source_type/target_type)已由 S6.6 提案层派生规范化到 args,
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// - remove_relation:手动删关系 =
|
|
8
|
-
//
|
|
5
|
+
// 此处直接透传 db createRelation(判重 RELATION_EXISTS / 端点存在性校验 db 层负责);
|
|
6
|
+
// 重复确认同一 add_relation 提案 → RELATION_EXISTS 抛错(幂等只保证 hook 复合写,)
|
|
7
|
+
// - remove_relation:手动删关系 = **物理删**(不置 deleted_at、不进回收站);
|
|
8
|
+
// 0 行影响(关系不存在)→ 抛错(fail-fast,S7.5 转错误响应)
|
|
9
9
|
import { createRelation, deleteRelation } from "@whispering233/ai-editor-db";
|
|
10
10
|
import { optionalRecord, requireString } from "./types.js";
|
|
11
|
-
/** add_relation
|
|
11
|
+
/** add_relation(:add_relation(source, target, type) → id) */
|
|
12
12
|
export const executeAddRelation = (ctx, proposal) => {
|
|
13
13
|
const args = proposal.args;
|
|
14
14
|
const row = createRelation(ctx.db, {
|
|
@@ -21,7 +21,7 @@ export const executeAddRelation = (ctx, proposal) => {
|
|
|
21
21
|
}, ctx.outlineDir);
|
|
22
22
|
return { id: row.id };
|
|
23
23
|
};
|
|
24
|
-
/** remove_relation
|
|
24
|
+
/** remove_relation(:remove_relation(id) → void;物理删) */
|
|
25
25
|
export const executeRemoveRelation = (ctx, proposal) => {
|
|
26
26
|
const relationId = requireString(proposal.args, "relation_id");
|
|
27
27
|
const changes = deleteRelation(ctx.db, relationId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/executor/relation.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/executor/relation.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,iEAAiE;AACjE,+DAA+D;AAC/D,0DAA0D;AAC1D,yCAAyC;AAEzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE5E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,cAAc,CACxB,GAAG,CAAC,EAAE,EACN;QACE,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;QAC9C,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;QAC9C,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC;QAClD,QAAQ,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC;KAC3C,EACD,GAAG,CAAC,UAAU,CACf,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ToolContext } from "../context.js";
|
|
2
2
|
import type { Proposal } from "../proposal/types.js";
|
|
3
3
|
import { type ExecutorResult } from "./types.js";
|
|
4
|
-
/** reorder_timepoints
|
|
4
|
+
/** reorder_timepoints(:reorder_timepoints(timepoint_ids) → { reordered }) */
|
|
5
5
|
export declare function executeReorderTimepoints(ctx: ToolContext, proposal: Proposal): ExecutorResult;
|
|
6
6
|
//# sourceMappingURL=reorder-timepoints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorder-timepoints.d.ts","sourceRoot":"","sources":["../../src/executor/reorder-timepoints.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,
|
|
1
|
+
{"version":3,"file":"reorder-timepoints.d.ts","sourceRoot":"","sources":["../../src/executor/reorder-timepoints.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAkC7F"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
// 执行类工具:时间轴时间点重排(G2
|
|
1
|
+
// 执行类工具:时间轴时间点重排(G2,「执行类」)
|
|
2
2
|
// reorder_timepoints
|
|
3
3
|
//
|
|
4
4
|
// 与提案工具的核心差异:**直接调 db 写层落库**(唯一写路径,S7.5 确认后由 executor 门面调用);
|
|
5
|
-
// 抛错即失败。不注册 registry(执行类不暴露给 LLM
|
|
5
|
+
// 抛错即失败。不注册 registry(执行类不暴露给 LLM,「核心设计原则」)。
|
|
6
6
|
//
|
|
7
|
-
// 语义(G2
|
|
7
|
+
// 语义(G2,注记):args.timepoint_ids 为 LLM 排序提案的有序时间点 id 全量序列——
|
|
8
8
|
// 非空去重校验 → 读当前全部未软删时间点(listTimepoints)→ **集合相等校验**(缺/多/重复 →
|
|
9
9
|
// 抛错,与提案层同款:防御纵深,兜底「S7.5 references 快照校验已拦截但确认前用户又拖拽
|
|
10
10
|
// 增删」的竞态)→ 调 db reorderTimepoints 按新序事务内重写 sort_order 0..n-1(拖拽权威语义
|
|
11
|
-
//
|
|
11
|
+
// 不变, G2 修订:排序结果即 timepoint.sort_order 线性序;不改其下事件序——
|
|
12
12
|
// 双独立线性序)→ 返回 { reordered: n }。
|
|
13
13
|
import { listTimepoints, nowIso, reorderTimepoints } from "@whispering233/ai-editor-db";
|
|
14
14
|
import { requireArray } from "./types.js";
|
|
15
|
-
/** reorder_timepoints
|
|
15
|
+
/** reorder_timepoints(:reorder_timepoints(timepoint_ids) → { reordered }) */
|
|
16
16
|
export function executeReorderTimepoints(ctx, proposal) {
|
|
17
17
|
const raw = requireArray(proposal.args, "timepoint_ids");
|
|
18
18
|
// 元素防御:提案层 zod 已校验为 string[],此处防脏调用(与 requireString 同风格)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorder-timepoints.js","sourceRoot":"","sources":["../../src/executor/reorder-timepoints.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"reorder-timepoints.js","sourceRoot":"","sources":["../../src/executor/reorder-timepoints.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,qBAAqB;AACrB,EAAE;AACF,6DAA6D;AAC7D,4CAA4C;AAC5C,EAAE;AACF,0DAA0D;AAC1D,4DAA4D;AAC5D,qDAAqD;AACrD,oEAAoE;AACpE,qDAAqD;AACrD,gCAAgC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AAE/D,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAC,GAAgB,EAAE,QAAkB;IAC3E,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC1D,yDAAyD;IACxD,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACF,yCAAyC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACF,+DAA+D;IAC/D,wDAAwD;IACxD,8BAA8B;IAC7B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,CAAC,GAAa,EAAU,EAAE;YACxC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC;QACF,MAAM,IAAI,KAAK,CACb,sBAAsB,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CACtG,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
package/dist/executor/types.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import type { ToolContext } from "../context.js";
|
|
|
2
2
|
import type { Proposal } from "../proposal/types.js";
|
|
3
3
|
/**
|
|
4
4
|
* 执行结果(统一携带 id:新对象 id 或操作对象 id;扩展字段 camelCase)。
|
|
5
|
-
* duplicated=true:幂等命中——(node_id, hook_id, relation_type) 已有记录,未重复写(
|
|
5
|
+
* duplicated=true:幂等命中——(node_id, hook_id, relation_type) 已有记录,未重复写( 复合写说明)。
|
|
6
6
|
* id 可选(F9/G2):reorder_timepoints 是批量操作无单对象 id,返回 { reordered: n } 即可;
|
|
7
|
-
* 其余执行器均携带 id(S7.5 响应 result
|
|
7
|
+
* 其余执行器均携带 id(S7.5 响应 result 透传,未要求 id 必在)。
|
|
8
8
|
*/
|
|
9
9
|
export type ExecutorResult = {
|
|
10
10
|
id?: string;
|