@whispering233/ai-editor-shared 0.0.33 → 0.0.38
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/constants/backup.d.ts +14 -0
- package/dist/constants/backup.d.ts.map +1 -1
- package/dist/constants/backup.js +5 -0
- package/dist/constants/backup.js.map +1 -1
- package/dist/constants/delta.d.ts +25 -0
- package/dist/constants/delta.d.ts.map +1 -0
- package/dist/constants/delta.js +37 -0
- package/dist/constants/delta.js.map +1 -0
- package/dist/constants/entity.d.ts +17 -0
- package/dist/constants/entity.d.ts.map +1 -1
- package/dist/constants/entity.js +26 -0
- package/dist/constants/entity.js.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/tool.d.ts +2 -2
- package/dist/constants/tool.d.ts.map +1 -1
- package/dist/constants/tool.js +2 -2
- package/dist/constants/tool.js.map +1 -1
- package/dist/types/ability-panel.d.ts +16 -0
- package/dist/types/ability-panel.d.ts.map +1 -0
- package/dist/types/ability-panel.js +9 -0
- package/dist/types/ability-panel.js.map +1 -0
- package/dist/types/api.d.ts +34 -24
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +65 -9
- package/dist/types/api.js.map +1 -1
- package/dist/types/cloud.d.ts +200 -0
- package/dist/types/cloud.d.ts.map +1 -0
- package/dist/types/cloud.js +7 -0
- package/dist/types/cloud.js.map +1 -0
- package/dist/types/entity.d.ts +1 -1
- package/dist/types/entity.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/project.d.ts +1 -1
- package/dist/utils/ability-panel.d.ts +67 -0
- package/dist/utils/ability-panel.d.ts.map +1 -0
- package/dist/utils/ability-panel.js +159 -0
- package/dist/utils/ability-panel.js.map +1 -0
- package/dist/utils/backup.d.ts +50 -16
- package/dist/utils/backup.d.ts.map +1 -1
- package/dist/utils/backup.js +92 -59
- package/dist/utils/backup.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/relation-type.d.ts +10 -0
- package/dist/utils/relation-type.d.ts.map +1 -0
- package/dist/utils/relation-type.js +33 -0
- package/dist/utils/relation-type.js.map +1 -0
- package/package.json +1 -1
|
@@ -6,6 +6,20 @@ export declare const DEFAULT_BACKUP_FREQUENCY_MINUTES = 10;
|
|
|
6
6
|
export declare const MAX_BACKUPS_PER_PROJECT = 20;
|
|
7
7
|
/** 手动备份自定义名称最大长度(trim 后 1-30 字符;超出 → 400 VALIDATION_ERROR) */
|
|
8
8
|
export declare const MAX_BACKUP_NAME_LENGTH = 30;
|
|
9
|
+
/**
|
|
10
|
+
* 设备名最大长度(trim 后 1-16 字符)。设备段是文件名的第 3 段,不得出现 `-`
|
|
11
|
+
* (段分隔符)——主机名里的 `-` 在派生时转写为 `_`,用户手工配置时非法 → 400 VALIDATION_ERROR。
|
|
12
|
+
*/
|
|
13
|
+
export declare const MAX_DEVICE_NAME_LENGTH = 16;
|
|
9
14
|
/** 备份类型:auto = 自动(定时器/覆盖前快照)/ manual = 手动(立即备份触发);文件名 kind 标记段来源 */
|
|
10
15
|
export type BackupKind = "auto" | "manual";
|
|
16
|
+
/**
|
|
17
|
+
* 备份包内容规模快照(写入文件名的尾部三段统计,`人物N-设定N-章N`)。
|
|
18
|
+
* 口径:**未软删**存量(实体表不含回收站;章 = outline.json 中未软删 `chapter` 节点)。
|
|
19
|
+
*/
|
|
20
|
+
export interface BackupStats {
|
|
21
|
+
characters: number;
|
|
22
|
+
settings: number;
|
|
23
|
+
chapters: number;
|
|
24
|
+
}
|
|
11
25
|
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/constants/backup.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,iCAAkC,CAAC;AAElE,kDAAkD;AAClD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,6CAA6C;AAC7C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,oEAAoE;AACpE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/constants/backup.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,iCAAkC,CAAC;AAElE,kDAAkD;AAClD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,6CAA6C;AAC7C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,oEAAoE;AACpE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
package/dist/constants/backup.js
CHANGED
|
@@ -8,4 +8,9 @@ export const DEFAULT_BACKUP_FREQUENCY_MINUTES = 10;
|
|
|
8
8
|
export const MAX_BACKUPS_PER_PROJECT = 20;
|
|
9
9
|
/** 手动备份自定义名称最大长度(trim 后 1-30 字符;超出 → 400 VALIDATION_ERROR) */
|
|
10
10
|
export const MAX_BACKUP_NAME_LENGTH = 30;
|
|
11
|
+
/**
|
|
12
|
+
* 设备名最大长度(trim 后 1-16 字符)。设备段是文件名的第 3 段,不得出现 `-`
|
|
13
|
+
* (段分隔符)——主机名里的 `-` 在派生时转写为 `_`,用户手工配置时非法 → 400 VALIDATION_ERROR。
|
|
14
|
+
*/
|
|
15
|
+
export const MAX_DEVICE_NAME_LENGTH = 16;
|
|
11
16
|
//# sourceMappingURL=backup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/constants/backup.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,4DAA4D;AAE5D,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAElE,kDAAkD;AAClD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAEnD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/constants/backup.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,4DAA4D;AAE5D,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAElE,kDAAkD;AAClD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAEnD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 事实字段(写路径已把当前值同步进 `data`)→ 变更记录**只能用 `op=set`**。
|
|
3
|
+
*
|
|
4
|
+
* `hook.status` 由复合写(推进/回收/废弃)同步为最新值:终态守卫、列表分组、AI 统计都直接读它,
|
|
5
|
+
* 因此用 `op=update` + `from` 重放必然假冲突(重放基座即最新值,`from` 永远对不上)。
|
|
6
|
+
*/
|
|
7
|
+
export declare const SET_ONLY_FIELDS: Record<string, readonly string[]>;
|
|
8
|
+
/**
|
|
9
|
+
* character 不可变字段(**不参与 Delta**——人工经 `PUT` 直接编辑):按实体类型。
|
|
10
|
+
*
|
|
11
|
+
* `role`/`description` 同时是列表摘要与 AI 检索的依据,允许 Delta 改会与 `entities.name`/
|
|
12
|
+
* 摘要其它读取面产生“同一人物两个值”的语义裂缝(见 `docs/db/schema.md`「人物 data 分层」/
|
|
13
|
+
* `docs/design/10-data-model.md` §14 不变式 1)。
|
|
14
|
+
*
|
|
15
|
+
* 消费方:client(`lib/delta-create` 字段下拉排除、`lib/character-detail` 基础信息区字段集)
|
|
16
|
+
* 与 tools(`proposal/delta` 提案层守卫)。
|
|
17
|
+
*/
|
|
18
|
+
export declare const IMMUTABLE_FIELDS: Record<string, readonly string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* character 已移除字段(schema 已删——`status` 无展示面、`abilities` 经 007 迁移为 `ability_panel`):
|
|
21
|
+
* 写入只会留下脏键(不参与展示与状态累积),故提案层与 executor 均拒绝;
|
|
22
|
+
* 旧项目的存量脏值由 `.passthrough()` 容错,不迁移。
|
|
23
|
+
*/
|
|
24
|
+
export declare const REMOVED_CHARACTER_FIELDS: readonly string[];
|
|
25
|
+
//# sourceMappingURL=delta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/constants/delta.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAE7D,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAE9D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAA4B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Delta(变更记录)字段约束常量
|
|
2
|
+
//
|
|
3
|
+
// **单一定义**:client(`lib/delta-create`:字段下拉 / op 选项)与 tools(`proposal/delta`、
|
|
4
|
+
// `executor/delta`:写入守卫)双向消费——client 不能 import tools,各手抄一份必然漂移。
|
|
5
|
+
// 纯常量(无 schema / TypeBox),可安全进客户端包。
|
|
6
|
+
//
|
|
7
|
+
// 依据:`docs/design/10-data-model.md` §4「物化事实字段不用 CAS」与 §14 不变式 1、
|
|
8
|
+
// `docs/db/schema.md`「人物 data 分层」。
|
|
9
|
+
/**
|
|
10
|
+
* 事实字段(写路径已把当前值同步进 `data`)→ 变更记录**只能用 `op=set`**。
|
|
11
|
+
*
|
|
12
|
+
* `hook.status` 由复合写(推进/回收/废弃)同步为最新值:终态守卫、列表分组、AI 统计都直接读它,
|
|
13
|
+
* 因此用 `op=update` + `from` 重放必然假冲突(重放基座即最新值,`from` 永远对不上)。
|
|
14
|
+
*/
|
|
15
|
+
export const SET_ONLY_FIELDS = {
|
|
16
|
+
hook: ["status"],
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* character 不可变字段(**不参与 Delta**——人工经 `PUT` 直接编辑):按实体类型。
|
|
20
|
+
*
|
|
21
|
+
* `role`/`description` 同时是列表摘要与 AI 检索的依据,允许 Delta 改会与 `entities.name`/
|
|
22
|
+
* 摘要其它读取面产生“同一人物两个值”的语义裂缝(见 `docs/db/schema.md`「人物 data 分层」/
|
|
23
|
+
* `docs/design/10-data-model.md` §14 不变式 1)。
|
|
24
|
+
*
|
|
25
|
+
* 消费方:client(`lib/delta-create` 字段下拉排除、`lib/character-detail` 基础信息区字段集)
|
|
26
|
+
* 与 tools(`proposal/delta` 提案层守卫)。
|
|
27
|
+
*/
|
|
28
|
+
export const IMMUTABLE_FIELDS = {
|
|
29
|
+
character: ["role", "description"],
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* character 已移除字段(schema 已删——`status` 无展示面、`abilities` 经 007 迁移为 `ability_panel`):
|
|
33
|
+
* 写入只会留下脏键(不参与展示与状态累积),故提案层与 executor 均拒绝;
|
|
34
|
+
* 旧项目的存量脏值由 `.passthrough()` 容错,不迁移。
|
|
35
|
+
*/
|
|
36
|
+
export const REMOVED_CHARACTER_FIELDS = ["status", "abilities"];
|
|
37
|
+
//# sourceMappingURL=delta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/constants/delta.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,EAAE;AACF,4EAA4E;AAC5E,gEAAgE;AAChE,oCAAoC;AACpC,EAAE;AACF,iEAAiE;AACjE,mCAAmC;AAEnC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsC;IAChE,IAAI,EAAE,CAAC,QAAQ,CAAC;CACjB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAsC;IACjE,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -16,6 +16,23 @@ export declare const ENTITY_TYPE_LABELS: Record<EntityTypeValue, string>;
|
|
|
16
16
|
export declare const RELATION_TYPES: readonly ["belongs_to", "owns", "masters", "ally", "rival", "mentor", "family", "kills", "appears_in", "occurs_at", "plot_edge", "plants", "advances", "resolves", "depends_on", "involves", "occurs_in"];
|
|
17
17
|
/** 关系类型(从 RELATION_TYPES 派生) */
|
|
18
18
|
export type RelationType = (typeof RELATION_TYPES)[number];
|
|
19
|
+
/**
|
|
20
|
+
* 关系类型分组(UI 语义分区):character 人↔人 / structure 层级与归属 / anchor 大纲节点锚定 /
|
|
21
|
+
* hook 伏笔链路 / mount 时间轴挂载(由时间轴 UI 专管,通用对话框不暴露)/ canvas 画布推演。
|
|
22
|
+
*/
|
|
23
|
+
export type RelationTypeGroup = "character" | "structure" | "anchor" | "hook" | "mount" | "canvas";
|
|
24
|
+
/**
|
|
25
|
+
* 关系类型属性注册表(**单一来源**):client 中文标签、人物页人↔人子集、对话框排除集、
|
|
26
|
+
* tools 冲突检测的对称口径一律由此派生,禁止手抄清单。`Record<RelationType, …>` ⇒
|
|
27
|
+
* 新增预定义类型必须补属性,否则编译失败。
|
|
28
|
+
* `symmetric` 仅对称类型(语义对等,展示层合并 + 冲突检测把单向存在报为缺口)标注——
|
|
29
|
+
* 未标注即有向;自定义类型一律有向。
|
|
30
|
+
*/
|
|
31
|
+
export declare const RELATION_TYPE_META: Record<RelationType, {
|
|
32
|
+
label: string;
|
|
33
|
+
group: RelationTypeGroup;
|
|
34
|
+
symmetric?: true;
|
|
35
|
+
}>;
|
|
19
36
|
/** 剧情连线关系类型(画布连线用 plot_edge,metadata 存连线标签) */
|
|
20
37
|
export declare const PLOT_EDGE_TYPE: "plot_edge";
|
|
21
38
|
/** 伏笔管理关系(伏笔关系约定:大纲节点 → hook) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/constants/entity.ts"],"names":[],"mappings":"AAGA,oHAAoH;AACpH,eAAO,MAAM,YAAY,0FAA2F,CAAC;AAErH,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAQ9D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,2MAkBjB,CAAC;AAEX,gCAAgC;AAChC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,+CAA+C;AAC/C,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AAEnD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,6CAA8C,CAAC;AAE/E,eAAe;AACf,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/constants/entity.ts"],"names":[],"mappings":"AAGA,oHAAoH;AACpH,eAAO,MAAM,YAAY,0FAA2F,CAAC;AAErH,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAQ9D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,2MAkBjB,CAAC;AAEX,gCAAgC;AAChC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,YAAY,EACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,CAAA;CAAE,CAmB9D,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AAEnD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,6CAA8C,CAAC;AAE/E,eAAe;AACf,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/constants/entity.js
CHANGED
|
@@ -40,6 +40,32 @@ export const RELATION_TYPES = [
|
|
|
40
40
|
"involves",
|
|
41
41
|
"occurs_in",
|
|
42
42
|
];
|
|
43
|
+
/**
|
|
44
|
+
* 关系类型属性注册表(**单一来源**):client 中文标签、人物页人↔人子集、对话框排除集、
|
|
45
|
+
* tools 冲突检测的对称口径一律由此派生,禁止手抄清单。`Record<RelationType, …>` ⇒
|
|
46
|
+
* 新增预定义类型必须补属性,否则编译失败。
|
|
47
|
+
* `symmetric` 仅对称类型(语义对等,展示层合并 + 冲突检测把单向存在报为缺口)标注——
|
|
48
|
+
* 未标注即有向;自定义类型一律有向。
|
|
49
|
+
*/
|
|
50
|
+
export const RELATION_TYPE_META = {
|
|
51
|
+
belongs_to: { label: "所属", group: "structure" },
|
|
52
|
+
owns: { label: "拥有", group: "structure" },
|
|
53
|
+
masters: { label: "掌握", group: "structure" },
|
|
54
|
+
ally: { label: "盟友", group: "character", symmetric: true },
|
|
55
|
+
rival: { label: "对手", group: "character", symmetric: true },
|
|
56
|
+
mentor: { label: "师徒", group: "character" },
|
|
57
|
+
family: { label: "家族", group: "character", symmetric: true },
|
|
58
|
+
kills: { label: "击杀", group: "character" },
|
|
59
|
+
appears_in: { label: "出现于", group: "anchor" },
|
|
60
|
+
occurs_at: { label: "发生于", group: "mount" },
|
|
61
|
+
plot_edge: { label: "剧情连线", group: "canvas" },
|
|
62
|
+
plants: { label: "埋设", group: "hook" },
|
|
63
|
+
advances: { label: "推进", group: "hook" },
|
|
64
|
+
resolves: { label: "回收", group: "hook" },
|
|
65
|
+
depends_on: { label: "依赖", group: "hook" },
|
|
66
|
+
involves: { label: "涉及", group: "hook" },
|
|
67
|
+
occurs_in: { label: "锚定于", group: "anchor" },
|
|
68
|
+
};
|
|
43
69
|
/** 剧情连线关系类型(画布连线用 plot_edge,metadata 存连线标签) */
|
|
44
70
|
export const PLOT_EDGE_TYPE = "plot_edge";
|
|
45
71
|
/** 伏笔管理关系(伏笔关系约定:大纲节点 → hook) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/constants/entity.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,yCAAyC;AAEzC,oHAAoH;AACpH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;AAKrH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAoC;IACjE,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY;IACZ,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW;CACH,CAAC;
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/constants/entity.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,yCAAyC;AAEzC,oHAAoH;AACpH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;AAKrH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAoC;IACjE,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY;IACZ,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW;CACH,CAAC;AAWX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAG3B;IACF,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;IAC/C,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;IACzC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;IAC5C,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;IAC1D,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;IAC3D,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;IAC3C,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;IAC5D,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1C,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IAC3C,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC7C,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IACtC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IACxC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IACxC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IACxC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;CAC7C,CAAC;AAEF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,WAAoB,CAAC;AAEnD,iCAAiC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// 常量聚合出口
|
|
2
|
-
// 文件划分见 (constants/:entity.ts / hook.ts / tool.ts / outline.ts / backup.ts)
|
|
2
|
+
// 文件划分见 (constants/:entity.ts / hook.ts / tool.ts / outline.ts / backup.ts / delta.ts)
|
|
3
3
|
export * from "./entity.js";
|
|
4
4
|
export * from "./hook.js";
|
|
5
5
|
export * from "./tool.js";
|
|
6
6
|
export * from "./outline.js";
|
|
7
7
|
export * from "./backup.js";
|
|
8
|
+
export * from "./delta.js";
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,uFAAuF;AACvF,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/dist/constants/tool.d.ts
CHANGED
|
@@ -27,9 +27,9 @@ export declare const PROPOSAL_TOOLS: readonly ["propose_create_entity", "propose
|
|
|
27
27
|
* reorder_timepoints 为批量重排(G2:按新序事务内重写 sort_order 0..n-1,取代 F9 reorder_events)
|
|
28
28
|
*/
|
|
29
29
|
export declare const EXECUTOR_TOOLS: readonly ["create_entity", "update_entity", "delete_entity", "add_relation", "remove_relation", "add_delta", "create_outline_node", "move_node", "delete_node", "advance_hook", "resolve_hook", "abandon_hook", "reorder_timepoints"];
|
|
30
|
-
/** 自动级工具(查询 + 分析 +
|
|
30
|
+
/** 自动级工具(查询 9 + 分析 5 + 伏笔分析 5,共 19 个) */
|
|
31
31
|
export declare const AUTO_TOOLS: readonly ["get_entity", "search_entities", "search_references", "query_relationships", "get_outline", "get_outline_path", "compute_state", "get_delta_history", "get_entity_summary", "analyze_consistency", "detect_conflicts", "trace_plot_paths", "find_orphan_elements", "suggest_connections", "analyze_hook_health", "trace_hook_lifecycle", "suggest_hook_payoff", "find_hook_opportunities", "detect_hook_conflicts"];
|
|
32
|
-
/** 全部工具名(自动
|
|
32
|
+
/** 全部工具名(自动 19 + 提案 16 + 执行 13 = 48 个) */
|
|
33
33
|
export declare const TOOL_NAMES: readonly ["get_entity", "search_entities", "search_references", "query_relationships", "get_outline", "get_outline_path", "compute_state", "get_delta_history", "get_entity_summary", "analyze_consistency", "detect_conflicts", "trace_plot_paths", "find_orphan_elements", "suggest_connections", "analyze_hook_health", "trace_hook_lifecycle", "suggest_hook_payoff", "find_hook_opportunities", "detect_hook_conflicts", "propose_create_entity", "propose_update_entity", "propose_delete_entity", "propose_add_relation", "propose_remove_relation", "propose_add_delta", "propose_outline_node", "propose_move_node", "propose_delete_node", "propose_create_hook", "propose_update_hook", "propose_advance_hook", "propose_resolve_hook", "propose_abandon_hook", "propose_reorder_timepoints", "propose_create_reference", "create_entity", "update_entity", "delete_entity", "add_relation", "remove_relation", "add_delta", "create_outline_node", "move_node", "delete_node", "advance_hook", "resolve_hook", "abandon_hook", "reorder_timepoints"];
|
|
34
34
|
/** 工具名(从 TOOL_NAMES 派生) */
|
|
35
35
|
export type ToolName = (typeof TOOL_NAMES)[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/constants/tool.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX,aAAa;AACb,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF,+BAA+B;AAC/B,eAAO,MAAM,WAAW,uLAUd,CAAC;AAEX,kCAAkC;AAClC,eAAO,MAAM,cAAc,yHAMjB,CAAC;AAEX,2BAA2B;AAC3B,eAAO,MAAM,mBAAmB,qIAMtB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,cAAc,kZAiBjB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,cAAc,uOAcjB,CAAC;AAEX,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/constants/tool.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX,aAAa;AACb,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF,+BAA+B;AAC/B,eAAO,MAAM,WAAW,uLAUd,CAAC;AAEX,kCAAkC;AAClC,eAAO,MAAM,cAAc,yHAMjB,CAAC;AAEX,2BAA2B;AAC3B,eAAO,MAAM,mBAAmB,qIAMtB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,cAAc,kZAiBjB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,cAAc,uOAcjB,CAAC;AAEX,yCAAyC;AACzC,eAAO,MAAM,UAAU,+ZAAuE,CAAC;AAE/F,0CAA0C;AAC1C,eAAO,MAAM,UAAU,kgCAAiE,CAAC;AAEzF,2BAA2B;AAC3B,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/constants/tool.js
CHANGED
|
@@ -79,8 +79,8 @@ export const EXECUTOR_TOOLS = [
|
|
|
79
79
|
"abandon_hook",
|
|
80
80
|
"reorder_timepoints",
|
|
81
81
|
];
|
|
82
|
-
/** 自动级工具(查询 + 分析 +
|
|
82
|
+
/** 自动级工具(查询 9 + 分析 5 + 伏笔分析 5,共 19 个) */
|
|
83
83
|
export const AUTO_TOOLS = [...QUERY_TOOLS, ...ANALYSIS_TOOLS, ...HOOK_ANALYSIS_TOOLS];
|
|
84
|
-
/** 全部工具名(自动
|
|
84
|
+
/** 全部工具名(自动 19 + 提案 16 + 执行 13 = 48 个) */
|
|
85
85
|
export const TOOL_NAMES = [...AUTO_TOOLS, ...PROPOSAL_TOOLS, ...EXECUTOR_TOOLS];
|
|
86
86
|
//# sourceMappingURL=tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/constants/tool.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;CACZ,CAAC;AAKX,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,iBAAiB;IACjB,mBAAmB,EAAE,eAAe;IACpC,qBAAqB;IACrB,aAAa;IACb,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,oBAAoB;CACZ,CAAC;AAEX,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,qBAAqB;CACb,CAAC;AAEX,2BAA2B;AAC3B,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,uBAAuB;CACf,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,yBAAyB;IACzB,mBAAmB;IACnB,sBAAsB;IACtB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,4BAA4B,EAAE,wCAAwC;IACtE,0BAA0B,EAAE,yBAAyB;CAC7C,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,eAAe;IACf,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IACrB,WAAW;IACX,aAAa;IACb,cAAc;IACd,cAAc;IACd,cAAc;IACd,oBAAoB;CACZ,CAAC;AAEX,
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/constants/tool.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;CACZ,CAAC;AAKX,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,iBAAiB;IACjB,mBAAmB,EAAE,eAAe;IACpC,qBAAqB;IACrB,aAAa;IACb,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,oBAAoB;CACZ,CAAC;AAEX,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,qBAAqB;CACb,CAAC;AAEX,2BAA2B;AAC3B,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,uBAAuB;CACf,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,yBAAyB;IACzB,mBAAmB;IACnB,sBAAsB;IACtB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,4BAA4B,EAAE,wCAAwC;IACtE,0BAA0B,EAAE,yBAAyB;CAC7C,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,eAAe;IACf,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IACrB,WAAW;IACX,aAAa;IACb,cAAc;IACd,cAAc;IACd,cAAc;IACd,oBAAoB;CACZ,CAAC;AAEX,yCAAyC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,EAAE,GAAG,mBAAmB,CAAU,CAAC;AAE/F,0CAA0C;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,cAAc,EAAE,GAAG,cAAc,CAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** 能力面板节点(分支 = 带非空 `children`;叶子 = 带可选 `value`) */
|
|
2
|
+
export interface AbilityPanelNode {
|
|
3
|
+
name: string;
|
|
4
|
+
/** 叶子值(仅叶子出现——分支不可赋值,规范形状下分支不携带该键) */
|
|
5
|
+
value?: string | number;
|
|
6
|
+
/** 子节点(非空数组 = 分支;缺省 = 叶子) */
|
|
7
|
+
children?: AbilityPanelNode[];
|
|
8
|
+
}
|
|
9
|
+
/** 叶子枚举项(panelLeafPaths 返回值):`path` = 祖先名点分拼接,供 Delta 字段路径使用 */
|
|
10
|
+
export interface AbilityPanelLeaf {
|
|
11
|
+
/** 点分路径(如 `火系.等级`)——逐字拼接不做转义 */
|
|
12
|
+
path: string;
|
|
13
|
+
name: string;
|
|
14
|
+
value?: string | number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ability-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ability-panel.d.ts","sourceRoot":"","sources":["../../src/types/ability-panel.ts"],"names":[],"mappings":"AAQA,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACd,sCAAsC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,6BAA6B;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAChC,gCAAgC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// 能力面板(character.data.ability_panel)数据类型
|
|
2
|
+
// 结构契约见 docs/db/schema.md「人物 data 分层」;解析/枚举/派生纯函数见 utils/ability-panel.ts。
|
|
3
|
+
//
|
|
4
|
+
// 不变式(单一来源,调用方不得各写一套拼写):
|
|
5
|
+
// - **分支 ⇔ `children` 为非空数组**:有 children = 分支(**不可赋值**);无 children = 叶子(**可赋值**)
|
|
6
|
+
// - 叶子 `value` ∈ `string | number`(与 DeltaChange 的 from/to/value 同域);缺省 = 空值
|
|
7
|
+
// - 顺序 = 数组顺序(**无 sort_order 列、无迁移**);嵌套层数不限
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=ability-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ability-panel.js","sourceRoot":"","sources":["../../src/types/ability-panel.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,2EAA2E;AAC3E,EAAE;AACF,yBAAyB;AACzB,iFAAiF;AACjF,6EAA6E;AAC7E,6CAA6C"}
|
package/dist/types/api.d.ts
CHANGED
|
@@ -87,17 +87,26 @@ export declare const apiErrorSchema: z.ZodObject<{
|
|
|
87
87
|
/** 错误响应类型 */
|
|
88
88
|
export type ApiError = z.infer<typeof apiErrorSchema>;
|
|
89
89
|
/**
|
|
90
|
-
* character
|
|
90
|
+
* character 专属字段(**不可变**:role/description;**可变**:alias/gender/age/race/motivation/personality[]/ability_panel;
|
|
91
|
+
* custom_fields)——分层与不变式见 `docs/db/schema.md`「人物 data 分层」。
|
|
91
92
|
* 注意:data 嵌套对象内部字段原样透传(snake_case,如 custom_fields),顶层字段才是 camelCase
|
|
93
|
+
*
|
|
94
|
+
* **2026-09 修订**:`status` 彻底移除(旧残留由 `.passthrough()` 容错,不再解析/展示);
|
|
95
|
+
* `abilities[]` → `ability_panel`(007 迁移);`description` 为必填(**仅前端校验**——服务端不硬校验,
|
|
96
|
+
* 保护 AI 提案/旧数据/备份导入三条路径)。
|
|
97
|
+
* `ability_panel` 为**宽校验**声明(`z.unknown()`,不约束结构):面板是用户自定义字段树,
|
|
98
|
+
* 结构防御在读取端(shared `parseAbilityPanel`)——服务端绝不因面板结构问题拒绝写入。
|
|
92
99
|
*/
|
|
93
100
|
export declare const characterDataSchema: z.ZodObject<{
|
|
94
101
|
role: z.ZodOptional<z.ZodString>;
|
|
102
|
+
description: z.ZodOptional<z.ZodString>;
|
|
103
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
95
104
|
gender: z.ZodOptional<z.ZodString>;
|
|
96
105
|
age: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
106
|
+
race: z.ZodOptional<z.ZodString>;
|
|
97
107
|
personality: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
98
108
|
motivation: z.ZodOptional<z.ZodString>;
|
|
99
|
-
|
|
100
|
-
status: z.ZodOptional<z.ZodString>;
|
|
109
|
+
ability_panel: z.ZodOptional<z.ZodUnknown>;
|
|
101
110
|
custom_fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
102
111
|
}, z.core.$loose>;
|
|
103
112
|
/** setting 专属字段(description/tags/rules/custom_fields;
|
|
@@ -172,12 +181,14 @@ export declare const referenceDataSchema: z.ZodObject<{
|
|
|
172
181
|
export declare const ENTITY_DATA_SCHEMAS: {
|
|
173
182
|
readonly character: z.ZodObject<{
|
|
174
183
|
role: z.ZodOptional<z.ZodString>;
|
|
184
|
+
description: z.ZodOptional<z.ZodString>;
|
|
185
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
175
186
|
gender: z.ZodOptional<z.ZodString>;
|
|
176
187
|
age: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
188
|
+
race: z.ZodOptional<z.ZodString>;
|
|
177
189
|
personality: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
178
190
|
motivation: z.ZodOptional<z.ZodString>;
|
|
179
|
-
|
|
180
|
-
status: z.ZodOptional<z.ZodString>;
|
|
191
|
+
ability_panel: z.ZodOptional<z.ZodUnknown>;
|
|
181
192
|
custom_fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
182
193
|
}, z.core.$loose>;
|
|
183
194
|
readonly setting: z.ZodObject<{
|
|
@@ -454,25 +465,7 @@ export declare const relationCreateReqSchema: z.ZodObject<{
|
|
|
454
465
|
source_id: z.ZodString;
|
|
455
466
|
target_type: z.ZodString;
|
|
456
467
|
target_id: z.ZodString;
|
|
457
|
-
relation_type: z.
|
|
458
|
-
belongs_to: "belongs_to";
|
|
459
|
-
owns: "owns";
|
|
460
|
-
masters: "masters";
|
|
461
|
-
ally: "ally";
|
|
462
|
-
rival: "rival";
|
|
463
|
-
mentor: "mentor";
|
|
464
|
-
family: "family";
|
|
465
|
-
kills: "kills";
|
|
466
|
-
appears_in: "appears_in";
|
|
467
|
-
occurs_at: "occurs_at";
|
|
468
|
-
plot_edge: "plot_edge";
|
|
469
|
-
plants: "plants";
|
|
470
|
-
advances: "advances";
|
|
471
|
-
resolves: "resolves";
|
|
472
|
-
depends_on: "depends_on";
|
|
473
|
-
involves: "involves";
|
|
474
|
-
occurs_in: "occurs_in";
|
|
475
|
-
}>;
|
|
468
|
+
relation_type: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
476
469
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
477
470
|
}, z.core.$strict>;
|
|
478
471
|
export declare const relationCreateResSchema: z.ZodObject<{
|
|
@@ -874,4 +867,21 @@ export declare const namesResolveResSchema: z.ZodObject<{
|
|
|
874
867
|
}, z.core.$strip>>>;
|
|
875
868
|
}, z.core.$strip>;
|
|
876
869
|
export type NamesResolveResult = z.infer<typeof namesResolveResSchema>;
|
|
870
|
+
export declare const cloudConfigPutReqSchema: z.ZodObject<{
|
|
871
|
+
url: z.ZodOptional<z.ZodString>;
|
|
872
|
+
username: z.ZodOptional<z.ZodString>;
|
|
873
|
+
password: z.ZodOptional<z.ZodString>;
|
|
874
|
+
device: z.ZodOptional<z.ZodString>;
|
|
875
|
+
autoPush: z.ZodOptional<z.ZodBoolean>;
|
|
876
|
+
}, z.core.$strict>;
|
|
877
|
+
export type CloudConfigPutReq = z.infer<typeof cloudConfigPutReqSchema>;
|
|
878
|
+
export declare const cloudPushReqSchema: z.ZodObject<{
|
|
879
|
+
file_name: z.ZodOptional<z.ZodString>;
|
|
880
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
881
|
+
}, z.core.$strict>;
|
|
882
|
+
export type CloudPushReq = z.infer<typeof cloudPushReqSchema>;
|
|
883
|
+
export declare const cloudPullReqSchema: z.ZodObject<{
|
|
884
|
+
file_name: z.ZodOptional<z.ZodString>;
|
|
885
|
+
}, z.core.$strict>;
|
|
886
|
+
export type CloudPullReq = z.infer<typeof cloudPullReqSchema>;
|
|
877
887
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/types/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI/H,oDAAoD;AACpD,eAAO,MAAM,gBAAgB;;;;;;;;EAAuB,CAAC;AAErD,yBAAyB;AACzB,eAAO,MAAM,qBAAqB;;;EAAuB,CAAC;AAI1D;;;;;GAKG;AACH,eAAO,MAAM,WAAW,ieAyBd,CAAC;AAEX,0BAA0B;AAC1B,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;EAAsB,CAAC;AAEnD,6CAA6C;AAC7C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,wCAAwC;AACxC,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;;;kBAKlE;AAED,mEAAmE;AACnE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOzB,CAAC;AAEH,aAAa;AACb,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAItD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;iBAahB,CAAC;AAEjB;;;0EAG0E;AAC1E,eAAO,MAAM,iBAAiB;;;;;iBAOd,CAAC;AAEjB,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB;;;;;iBAOf,CAAC;AAEjB,gHAAgH;AAChH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;iBAWX,CAAC;AAEjB,0DAA0D;AAC1D,eAAO,MAAM,eAAe;;;iBAKZ,CAAC;AAEjB,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,gCAA6B,CAAC;AAE9D;;;;8BAI8B;AAC9B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;iBAWhB,CAAC;AAEjB;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQtB,CAAC;AAIX;wCACwC;AACxC,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CASvD,CAAC;AAGH,eAAO,MAAM,sBAAsB;;;;;;;;;kBAaxB,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAGH,eAAO,MAAM,oBAAoB;;kBAItB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;;;;iBAK/B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;;iBAc/B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAGpF,eAAO,MAAM,sBAAsB,qFAAsB,CAAC;AAG1D,eAAO,MAAM,4BAA4B;;;;;;;;kBAa9B,CAAC;AAEZ,eAAO,MAAM,4BAA4B;;iBAEvC,CAAC;AAKH,eAAO,MAAM,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAI7D,CAAC;AAKH,eAAO,MAAM,yBAAyB;;kBAI3B,CAAC;AAEZ,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAQH,eAAO,MAAM,sBAAsB;;kBAIxB,CAAC;AACZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE,eAAO,MAAM,4BAA4B;;;kBAK9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,sDAAuD,CAAC;AAE9F;;;;;;;;;;GAUG;AAYH,eAAO,MAAM,sBAAsB;;;;;;;;;iBAOjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAWzD,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAYvD,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;iBAahC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;iBAK9B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;iBAShC,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;kBAKvB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAMhC,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;kBAKvB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAMH,qBAAqB;AACrB,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAG7B,CAAC;AAGH,eAAO,MAAM,mBAAmB;;;;;;;iBAO9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;iBAGjC,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;kBAezB,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;;;;;;;iBASlC,CAAC;AAGH,eAAO,MAAM,2BAA2B;;kBAI7B,CAAC;AAGZ,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAIH,mDAAmD;AACnD,eAAO,MAAM,aAAa;;;;;EAA6C,CAAC;AAExE,aAAa;AACb,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAM5B,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAUnD,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;kBAQtB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;kBAMvB,CAAC;AAEZ,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CA8B9D,CAAC;AAIH;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe;;;;;;;;;iBAOZ,CAAC;AAEjB,eAAO,MAAM,iBAAiB;;;iBAKd,CAAC;AAEjB,eAAO,MAAM,gBAAgB;;;iBAKb,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;CAI5B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAmBjC,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;iBAOhC,CAAC;AAGH,eAAO,MAAM,sBAAsB;;;;;;;;;;kBAQxB,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;iBAMjC,CAAC;AAGH,eAAO,MAAM,sBAAsB;;;;kBAMxB,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;iBAEjC,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;kBAKtB,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;iBAI/B,CAAC;AAGH,eAAO,MAAM,mBAAmB;;kBAOrB,CAAC;AAEZ,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAIH,eAAO,MAAM,oBAAoB;;;kBAQtB,CAAC;AAIZ,eAAO,MAAM,oBAAoB;;;kBAQtB,CAAC;AAGZ,eAAO,MAAM,sBAAsB;;;;;;;iBAOjC,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAKH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;iBAO7B,CAAC;AAGH,eAAO,MAAM,2BAA2B;;;;iBAItC,CAAC;AAGH,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAGH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAKH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;kBAYnB,CAAC;AAGZ,eAAO,MAAM,wBAAwB;;;;;;iBAMnC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;iBAEhC,CAAC;AAIH,gEAAgE;AAChE,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAEH,wDAAwD;AACxD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3F,2BAA2B;AAC3B,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,2BAA2B;AAC3B,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;iBAchC,CAAC;AAIH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAGH,eAAO,MAAM,0BAA0B;;iBAErC,CAAC;AAKH,eAAO,MAAM,wBAAwB;;;iBAGnC,CAAC;AAGH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAIH,8GAA8G;AAC9G,eAAO,MAAM,eAAe,sEAAuE,CAAC;AACpG,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,mDAAmD;AACnD,eAAO,MAAM,eAAe;;;;;;;iBAO1B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE3D,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;iBAOjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKlC,CAAC;AAKH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;kBAOzB,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAMH,eAAO,MAAM,qBAAqB;;kBAIvB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;iBAEhC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAYvE,eAAO,MAAM,uBAAuB;;;;;;kBAQzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAMxE,eAAO,MAAM,kBAAkB;;;kBAKpB,CAAC;AACZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAM9D,eAAO,MAAM,kBAAkB;;kBAIpB,CAAC;AACZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
package/dist/types/api.js
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
// client 只消费推断出的类型与常量,不打包校验函数(避免 50KB 级依赖进浏览器包)。
|
|
6
6
|
// zod 版本:^4(注意 v4 API:z.record 必须两参、z.enum 接受 readonly 数组)
|
|
7
7
|
import { z } from "zod";
|
|
8
|
-
import { ENTITY_TYPES
|
|
8
|
+
import { ENTITY_TYPES } from "../constants/entity.js";
|
|
9
|
+
import { normalizeRelationType, relationTypeSyntaxError } from "../utils/relation-type.js";
|
|
9
10
|
import { HOOK_STATUSES, PAYOFF_TIMING } from "../constants/hook.js";
|
|
10
11
|
import { CONFLICT_LEVELS } from "../constants/outline.js";
|
|
11
12
|
import { BACKUP_FREQUENCIES } from "../constants/backup.js";
|
|
@@ -68,18 +69,27 @@ export const apiErrorSchema = z.object({
|
|
|
68
69
|
});
|
|
69
70
|
// ============ 实体 data 字段 schema(创建接口 + +) ============
|
|
70
71
|
/**
|
|
71
|
-
* character
|
|
72
|
+
* character 专属字段(**不可变**:role/description;**可变**:alias/gender/age/race/motivation/personality[]/ability_panel;
|
|
73
|
+
* custom_fields)——分层与不变式见 `docs/db/schema.md`「人物 data 分层」。
|
|
72
74
|
* 注意:data 嵌套对象内部字段原样透传(snake_case,如 custom_fields),顶层字段才是 camelCase
|
|
75
|
+
*
|
|
76
|
+
* **2026-09 修订**:`status` 彻底移除(旧残留由 `.passthrough()` 容错,不再解析/展示);
|
|
77
|
+
* `abilities[]` → `ability_panel`(007 迁移);`description` 为必填(**仅前端校验**——服务端不硬校验,
|
|
78
|
+
* 保护 AI 提案/旧数据/备份导入三条路径)。
|
|
79
|
+
* `ability_panel` 为**宽校验**声明(`z.unknown()`,不约束结构):面板是用户自定义字段树,
|
|
80
|
+
* 结构防御在读取端(shared `parseAbilityPanel`)——服务端绝不因面板结构问题拒绝写入。
|
|
73
81
|
*/
|
|
74
82
|
export const characterDataSchema = z
|
|
75
83
|
.object({
|
|
76
84
|
role: z.string().optional(),
|
|
85
|
+
description: z.string().optional(),
|
|
86
|
+
alias: z.string().optional(), // 假名/化名(单值:当前位置时这个人的化名)
|
|
77
87
|
gender: z.string().optional(),
|
|
78
88
|
age: z.union([z.string(), z.number()]).optional(), // 年龄文本或数字皆可(未定死类型)
|
|
89
|
+
race: z.string().optional(),
|
|
79
90
|
personality: z.array(z.string()).optional(),
|
|
80
91
|
motivation: z.string().optional(),
|
|
81
|
-
|
|
82
|
-
status: z.string().optional(),
|
|
92
|
+
ability_panel: z.unknown().optional(), // 能力面板树(宽校验;解析见 shared parseAbilityPanel)
|
|
83
93
|
custom_fields: z.record(z.string(), z.unknown()).optional(),
|
|
84
94
|
})
|
|
85
95
|
.passthrough(); // 允许未知字段(创作工具,用户自定义字段自由)
|
|
@@ -431,14 +441,22 @@ export const relationQueryResSchema = z.object({
|
|
|
431
441
|
relations: z.array(relationRecordSchema),
|
|
432
442
|
paths: z.array(relationPathSchema).optional(), // depth>=2 时返回
|
|
433
443
|
});
|
|
434
|
-
// POST /api/v1/relation(relation_type
|
|
444
|
+
// POST /api/v1/relation(relation_type 自由字符串:预定义 17 类 ∪ 自定义类型,语法校验单一来源 =
|
|
445
|
+
// shared `utils/relation-type.ts`;收窄为枚举的只剩 AI 工具层,见 packages/tools/src/schemas/relation.ts)
|
|
435
446
|
export const relationCreateReqSchema = z
|
|
436
447
|
.object({
|
|
437
448
|
source_type: z.string(),
|
|
438
449
|
source_id: z.string(),
|
|
439
450
|
target_type: z.string(),
|
|
440
451
|
target_id: z.string(),
|
|
441
|
-
relation_type: z
|
|
452
|
+
relation_type: z
|
|
453
|
+
.string()
|
|
454
|
+
.transform(normalizeRelationType)
|
|
455
|
+
.superRefine((value, ctx) => {
|
|
456
|
+
const message = relationTypeSyntaxError(value);
|
|
457
|
+
if (message !== null)
|
|
458
|
+
ctx.addIssue({ code: "custom", message });
|
|
459
|
+
}),
|
|
442
460
|
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
443
461
|
})
|
|
444
462
|
.strict();
|
|
@@ -504,19 +522,19 @@ export const deltaByNodeResSchema = z.object({
|
|
|
504
522
|
nodeId: z.string(),
|
|
505
523
|
deltas: z.array(deltaRecordSchema),
|
|
506
524
|
});
|
|
507
|
-
// POST /api/v1/delta/compute
|
|
525
|
+
// POST /api/v1/delta/compute(章序前缀累积:章序 ≤ 目标进度章的全部章)
|
|
508
526
|
export const deltaComputeReqSchema = z
|
|
509
527
|
.object({
|
|
510
528
|
target_type: z.string(),
|
|
511
529
|
target_id: z.string(),
|
|
512
|
-
at_node_id: z.string(), //
|
|
530
|
+
at_node_id: z.string(), // 目标节点(不限层级)——映射为进度章:章→自身 / 场景→所属章 / 卷→该卷最后一个未软删章
|
|
513
531
|
})
|
|
514
532
|
.strict();
|
|
515
533
|
export const deltaComputeResSchema = z.object({
|
|
516
534
|
targetType: z.string(),
|
|
517
535
|
targetId: z.string(),
|
|
518
536
|
atNodeId: z.string(),
|
|
519
|
-
state: z.record(z.string(), z.unknown()), // 初始 data +
|
|
537
|
+
state: z.record(z.string(), z.unknown()), // 初始 data + 章序前缀(章序 ≤ 进度章)的全部 Delta 累积
|
|
520
538
|
appliedDeltas: z.array(z.object({
|
|
521
539
|
nodeId: z.string(),
|
|
522
540
|
description: z.string(),
|
|
@@ -845,6 +863,44 @@ export const namesResolveReqSchema = z
|
|
|
845
863
|
export const namesResolveResSchema = z.object({
|
|
846
864
|
names: z.record(z.string(), z.object({ label: z.string(), name: z.string() }).nullable()),
|
|
847
865
|
});
|
|
866
|
+
// ============ 云端存档(卡 2:账号配置段) ============
|
|
867
|
+
//
|
|
868
|
+
// PUT /api/v1/cloud/config:写入云端账号配置与设备名、自动推送开关
|
|
869
|
+
// - url / username:**空串 = 清空该项**(url+username+password 三项齐空 → 回到「未配置」)
|
|
870
|
+
// - **凭据三件套要么齐、要么全无**:url 与 username 皆为空 ⇒ **password 一并丢弃**(避免磁盘留下已失效的密码)
|
|
871
|
+
// - password:**缺省或空串 = 不修改**(响应从不回传,设置页表单留空即保留原值)
|
|
872
|
+
// - **URL 内嵌 userinfo(`https://用户名:密码@host/dav`)直接 400 拒绝**(不静默剥离——那会让用户以为已生效)
|
|
873
|
+
// - device:空串 = 回到缺省(简化 hostname);语法规则执行点在 shared sanitizeDeviceName(非空时)
|
|
874
|
+
// - autoPush:缺省 = 不修改(本机级开关,缺省 false)
|
|
875
|
+
// - url 非空时的归一化(http(s) 绝对地址、去尾斜杠)在路由层校验(→ 400 VALIDATION_ERROR)
|
|
876
|
+
export const cloudConfigPutReqSchema = z
|
|
877
|
+
.object({
|
|
878
|
+
url: z.string().optional(),
|
|
879
|
+
username: z.string().optional(),
|
|
880
|
+
password: z.string().optional(),
|
|
881
|
+
device: z.string().optional(),
|
|
882
|
+
autoPush: z.boolean().optional(),
|
|
883
|
+
})
|
|
884
|
+
.strict();
|
|
885
|
+
// POST /api/v1/cloud/push:推送一份本地备份(卡 4)
|
|
886
|
+
// - file_name 缺省 = 最新一份;须通过 parseBackupFileName 白名单(服务端校验 → 400)
|
|
887
|
+
// - force 缺省 false:云端 head ≠ 本机 lastPushedFileName 时 409 CLOUD_CONFLICT;
|
|
888
|
+
// true = 先把云端那份下载存进本地 .backups/(两边都留档)再覆盖云端
|
|
889
|
+
export const cloudPushReqSchema = z
|
|
890
|
+
.object({
|
|
891
|
+
file_name: z.string().optional(),
|
|
892
|
+
force: z.boolean().optional(),
|
|
893
|
+
})
|
|
894
|
+
.strict();
|
|
895
|
+
// POST /api/v1/cloud/pull:从云端拉取一份备份应用到当前项目(卡 5)
|
|
896
|
+
// - file_name 缺省 = 云端 head;须通过 parseBackupFileName 白名单(服务端校验 → 400)
|
|
897
|
+
// - 语义 = 三文件覆盖 + references/ 与 sessions/ **并集合并**(基线三方比较、删除优先);
|
|
898
|
+
// 与本地 restore(整体覆盖)不同,见 docs/api/100-api-cloud.md
|
|
899
|
+
export const cloudPullReqSchema = z
|
|
900
|
+
.object({
|
|
901
|
+
file_name: z.string().optional(),
|
|
902
|
+
})
|
|
903
|
+
.strict();
|
|
848
904
|
// ============ chat SSE 事件 ============
|
|
849
905
|
//
|
|
850
906
|
// 事件集(服务端→客户端的 pi 事件投影)以 docs/api/80-api-chat.md 为契约。本文件**不再镜像**
|