@whispering233/ai-editor-tools 0.0.30 → 0.0.33

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 (93) hide show
  1. package/dist/analysis/conflict.d.ts +1 -1
  2. package/dist/analysis/conflict.d.ts.map +1 -1
  3. package/dist/analysis/consistency.d.ts +1 -1
  4. package/dist/analysis/consistency.d.ts.map +1 -1
  5. package/dist/analysis/hook.d.ts +1 -1
  6. package/dist/analysis/hook.d.ts.map +1 -1
  7. package/dist/analysis/orphan.d.ts +1 -1
  8. package/dist/analysis/orphan.d.ts.map +1 -1
  9. package/dist/analysis/path.d.ts +1 -1
  10. package/dist/analysis/path.d.ts.map +1 -1
  11. package/dist/analysis/suggest.d.ts +1 -1
  12. package/dist/analysis/suggest.d.ts.map +1 -1
  13. package/dist/executor/index.d.ts +0 -2
  14. package/dist/executor/index.d.ts.map +1 -1
  15. package/dist/executor/index.js.map +1 -1
  16. package/dist/executor/types.d.ts +0 -2
  17. package/dist/executor/types.d.ts.map +1 -1
  18. package/dist/executor/types.js +0 -7
  19. package/dist/executor/types.js.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +44 -43
  23. package/dist/index.js.map +1 -1
  24. package/dist/proposal/delta.d.ts +1 -1
  25. package/dist/proposal/delta.d.ts.map +1 -1
  26. package/dist/proposal/entity.d.ts +1 -1
  27. package/dist/proposal/entity.d.ts.map +1 -1
  28. package/dist/proposal/hook.d.ts +1 -1
  29. package/dist/proposal/hook.d.ts.map +1 -1
  30. package/dist/proposal/outline.d.ts +1 -1
  31. package/dist/proposal/outline.d.ts.map +1 -1
  32. package/dist/proposal/reference.d.ts +1 -1
  33. package/dist/proposal/reference.d.ts.map +1 -1
  34. package/dist/proposal/relation.d.ts +1 -1
  35. package/dist/proposal/relation.d.ts.map +1 -1
  36. package/dist/proposal/reorder-timepoints.d.ts +1 -1
  37. package/dist/proposal/reorder-timepoints.d.ts.map +1 -1
  38. package/dist/proposal/reorder-timepoints.js +1 -1
  39. package/dist/proposal/reorder-timepoints.js.map +1 -1
  40. package/dist/proposal/types.d.ts +1 -1
  41. package/dist/proposal/types.js +2 -2
  42. package/dist/proposal/types.js.map +1 -1
  43. package/dist/query/delta.d.ts +1 -1
  44. package/dist/query/delta.d.ts.map +1 -1
  45. package/dist/query/entity.d.ts +1 -1
  46. package/dist/query/entity.d.ts.map +1 -1
  47. package/dist/query/outline.d.ts +1 -1
  48. package/dist/query/outline.d.ts.map +1 -1
  49. package/dist/query/reference.d.ts +1 -1
  50. package/dist/query/reference.d.ts.map +1 -1
  51. package/dist/query/relation.d.ts +1 -1
  52. package/dist/query/relation.d.ts.map +1 -1
  53. package/dist/registry.d.ts +20 -13
  54. package/dist/registry.d.ts.map +1 -1
  55. package/dist/registry.js +23 -9
  56. package/dist/registry.js.map +1 -1
  57. package/dist/schemas/analysis.d.ts +51 -0
  58. package/dist/schemas/analysis.d.ts.map +1 -0
  59. package/dist/schemas/analysis.js +46 -0
  60. package/dist/schemas/analysis.js.map +1 -0
  61. package/dist/schemas/delta.d.ts +31 -0
  62. package/dist/schemas/delta.d.ts.map +1 -0
  63. package/dist/schemas/delta.js +35 -0
  64. package/dist/schemas/delta.js.map +1 -0
  65. package/dist/schemas/entity.d.ts +28 -0
  66. package/dist/schemas/entity.d.ts.map +1 -0
  67. package/dist/schemas/entity.js +31 -0
  68. package/dist/schemas/entity.js.map +1 -0
  69. package/dist/schemas/helpers.d.ts +8 -0
  70. package/dist/schemas/helpers.d.ts.map +1 -0
  71. package/dist/schemas/helpers.js +27 -0
  72. package/dist/schemas/helpers.js.map +1 -0
  73. package/dist/schemas/index.d.ts +8 -0
  74. package/dist/schemas/index.d.ts.map +1 -0
  75. package/dist/schemas/index.js +12 -0
  76. package/dist/schemas/index.js.map +1 -0
  77. package/dist/schemas/outline.d.ts +11 -0
  78. package/dist/schemas/outline.d.ts.map +1 -0
  79. package/dist/schemas/outline.js +12 -0
  80. package/dist/schemas/outline.js.map +1 -0
  81. package/dist/schemas/proposal.d.ts +125 -0
  82. package/dist/schemas/proposal.d.ts.map +1 -0
  83. package/dist/schemas/proposal.js +123 -0
  84. package/dist/schemas/proposal.js.map +1 -0
  85. package/dist/schemas/reference.d.ts +13 -0
  86. package/dist/schemas/reference.d.ts.map +1 -0
  87. package/dist/schemas/reference.js +13 -0
  88. package/dist/schemas/reference.js.map +1 -0
  89. package/dist/schemas/relation.d.ts +17 -0
  90. package/dist/schemas/relation.d.ts.map +1 -0
  91. package/dist/schemas/relation.js +19 -0
  92. package/dist/schemas/relation.js.map +1 -0
  93. package/package.json +5 -5
@@ -0,0 +1,35 @@
1
+ // 工具参数 schema:Delta 域(compute_state / get_delta_history + 单条变更共用 schema)
2
+ //
3
+ // deltaChangeSchema 与 shared `types/api.ts` 的 zod `deltaChangeSchema`(REST 入参校验)
4
+ // 同构:字段/可选性/联合类型逐项对齐;此处用 TypeBox 是为工具参数校验与模型 schema 同源。
5
+ // 嵌套对象 `additionalProperties: false` 与旧 zod `toJSONSchema()` 输出一致(模型-facing schema 不变)。
6
+ import { Type } from "@earendil-works/pi-ai";
7
+ import { stringEnum } from "./helpers.js";
8
+ /** 变更操作类型(set/update/add/remove) */
9
+ export const deltaOpSchema = stringEnum(["set", "update", "add", "remove"]);
10
+ /** 单条属性变更(复用:propose_add_delta 的 changes 项) */
11
+ export const deltaChangeSchema = Type.Object({
12
+ field: Type.String(),
13
+ op: deltaOpSchema,
14
+ /** 旧值(op=update 时服务端要求必填) */
15
+ from: Type.Optional(Type.Union([Type.String(), Type.Number(), Type.Null()])),
16
+ /** 新值(op=set/update 时服务端要求必填;add/remove 用 value) */
17
+ to: Type.Optional(Type.Union([Type.String(), Type.Number(), Type.Null()])),
18
+ /** 值(op=add/remove 时使用) */
19
+ value: Type.Optional(Type.Union([Type.String(), Type.Number()])),
20
+ }, { additionalProperties: false });
21
+ /**
22
+ * compute_state 入参(与 POST /api/v1/delta/compute 同构,api.ts deltaComputeReqSchema):
23
+ * 目标实体到达 at_node_id 时的累积状态(只沿大纲树父链累积已确认 Delta)
24
+ */
25
+ export const computeStateArgsSchema = Type.Object({
26
+ target_type: Type.String(),
27
+ target_id: Type.String(),
28
+ at_node_id: Type.String(),
29
+ }, { additionalProperties: false });
30
+ /** get_delta_history 入参:target_type + target_id(该实体的全部属性变更记录,按时间/节点排序) */
31
+ export const getDeltaHistoryArgsSchema = Type.Object({
32
+ target_type: Type.String(),
33
+ target_id: Type.String(),
34
+ }, { additionalProperties: false });
35
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/schemas/delta.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,iFAAiF;AACjF,wDAAwD;AACxD,wFAAwF;AAExF,OAAO,EAAE,IAAI,EAAe,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,oCAAoC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAU,CAAC,CAAC;AAErF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAC1C;IACE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;IACpB,EAAE,EAAE,aAAa;IACjB,6BAA6B;IAC7B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5E,oDAAoD;IACpD,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,2BAA2B;IAC3B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CACjE,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAC/C;IACE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;IACxB,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;CAC1B,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAClD;IACE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;CACzB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Type, type Static } from "@earendil-works/pi-ai";
2
+ /** 实体类型白名单(跨 schema 复用;非法值在校验期拦下) */
3
+ export declare const entityTypeSchema: Type.TUnsafe<"character" | "setting" | "location" | "hook" | "event" | "timepoint" | "reference">;
4
+ /** get_entity 入参:type + id(id 前缀体系全局唯一,type 用于回显与一致性校验) */
5
+ export declare const getEntityArgsSchema: Type.TObject<{
6
+ type: Type.TUnsafe<"character" | "setting" | "location" | "hook" | "event" | "timepoint" | "reference">;
7
+ id: Type.TString;
8
+ }>;
9
+ export type GetEntityArgs = Static<typeof getEntityArgsSchema>;
10
+ /**
11
+ * search_entities 入参:type + query(name 模糊匹配)+ filters(data 字段过滤)
12
+ * filters.status:data.status 字符串相等匹配;filters.tags:data.tags 数组须包含全部指定 tags(AND)
13
+ */
14
+ export declare const searchEntitiesArgsSchema: Type.TObject<{
15
+ type: Type.TUnsafe<"character" | "setting" | "location" | "hook" | "event" | "timepoint" | "reference">;
16
+ query: Type.TString;
17
+ filters: Type.TOptional<Type.TObject<{
18
+ tags: Type.TOptional<Type.TArray<Type.TString>>;
19
+ status: Type.TOptional<Type.TString>;
20
+ }>>;
21
+ }>;
22
+ export type SearchEntitiesArgs = Static<typeof searchEntitiesArgsSchema>;
23
+ /** get_entity_summary 入参:type(指定类型实体的统计数据:总数 + 类型专属分布) */
24
+ export declare const getEntitySummaryArgsSchema: Type.TObject<{
25
+ type: Type.TUnsafe<"character" | "setting" | "location" | "hook" | "event" | "timepoint" | "reference">;
26
+ }>;
27
+ export type GetEntitySummaryArgs = Static<typeof getEntitySummaryArgsSchema>;
28
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/schemas/entity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI1D,qCAAqC;AACrC,eAAO,MAAM,gBAAgB,mGAA2B,CAAC;AAEzD,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB;;;EAM/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;;;EAepC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEzE,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B;;EAKtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ // 工具参数 schema:实体域(get_entity / search_entities / get_entity_summary)
2
+ // 写法契约见 docs/api/tool-calling.md「工具定义(TypeBox)」:schema 运行时即 JSON Schema,
3
+ // 一份定义同时给模型(tool parameters)、TS(Static<>)、pi 校验(validateToolArguments)。
4
+ // 严格性:顶层对象 `additionalProperties: false` 等价原 zod `.strict()`(拒绝未知字段)。
5
+ import { Type } from "@earendil-works/pi-ai";
6
+ import { ENTITY_TYPES } from "@whispering233/ai-editor-shared";
7
+ import { stringEnum } from "./helpers.js";
8
+ /** 实体类型白名单(跨 schema 复用;非法值在校验期拦下) */
9
+ export const entityTypeSchema = stringEnum(ENTITY_TYPES);
10
+ /** get_entity 入参:type + id(id 前缀体系全局唯一,type 用于回显与一致性校验) */
11
+ export const getEntityArgsSchema = Type.Object({
12
+ type: entityTypeSchema,
13
+ id: Type.String(),
14
+ }, { additionalProperties: false });
15
+ /**
16
+ * search_entities 入参:type + query(name 模糊匹配)+ filters(data 字段过滤)
17
+ * filters.status:data.status 字符串相等匹配;filters.tags:data.tags 数组须包含全部指定 tags(AND)
18
+ */
19
+ export const searchEntitiesArgsSchema = Type.Object({
20
+ type: entityTypeSchema,
21
+ query: Type.String(),
22
+ filters: Type.Optional(Type.Object({
23
+ tags: Type.Optional(Type.Array(Type.String())),
24
+ status: Type.Optional(Type.String()),
25
+ }, { additionalProperties: false })),
26
+ }, { additionalProperties: false });
27
+ /** get_entity_summary 入参:type(指定类型实体的统计数据:总数 + 类型专属分布) */
28
+ export const getEntitySummaryArgsSchema = Type.Object({
29
+ type: entityTypeSchema,
30
+ }, { additionalProperties: false });
31
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/schemas/entity.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,yEAAyE;AACzE,wEAAwE;AACxE,sEAAsE;AAEtE,OAAO,EAAE,IAAI,EAAe,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qCAAqC;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AAEzD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAC5C;IACE,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;CAClB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CACjD;IACE,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACrC,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CACF;CACF,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC,MAAM,CACnD;IACE,IAAI,EAAE,gBAAgB;CACvB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Type } from "@earendil-works/pi-ai";
2
+ /** 字符串枚举:产出 `{"type":"string","enum":[...]}`,并保留字面量联合类型推导 */
3
+ export declare function stringEnum<const T extends readonly string[]>(values: T): Type.TUnsafe<T[number]>;
4
+ /** 自由形态对象(data / patches / metadata):任意字符串键 + 任意值;可选 `minProperties`(拒绝空对象) */
5
+ export declare function freeFormObject(options?: {
6
+ minProperties?: number;
7
+ }): Type.TUnsafe<Record<string, unknown>>;
8
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/schemas/helpers.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,2BAEtE;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,yCAQtE"}
@@ -0,0 +1,27 @@
1
+ // 工具参数 schema 共用 helper(形状对齐旧 zod `toJSONSchema()` 输出,模型-facing schema 逐字不变)
2
+ //
3
+ // 背景(独立 oracle 比对新旧 JSON Schema 发现的差异):`Type.Enum(values)` 产出 `{"enum":[...]}`
4
+ // (无 type)、`Type.Record(...)` 产出 `patternProperties`;旧 zod 分别产出
5
+ // `{"type":"string","enum":[...]}` 与 `{"type":"object","additionalProperties":{},"propertyNames":{...}}`。
6
+ // 两者都是合法 JSON Schema,但为降低 OpenAI 兼容端点对少见形态的拒绝风险,这里用 `Type.Unsafe`
7
+ // 产出旧形状(`Enum`/`Record` 不再使用)。
8
+ //
9
+ // 校验语义:`Type.Unsafe` 不带 TypeBox Kind 标记 → pi 的 `validateToolArguments` 走纯 JSON Schema
10
+ // 路径(`coerceWithJsonSchema` + `Compile`),与 registry 的校验入口一致。
11
+ import { Type } from "@earendil-works/pi-ai";
12
+ /** 字符串枚举:产出 `{"type":"string","enum":[...]}`,并保留字面量联合类型推导 */
13
+ export function stringEnum(values) {
14
+ return Type.Unsafe({ type: "string", enum: [...values] });
15
+ }
16
+ /** 自由形态对象(data / patches / metadata):任意字符串键 + 任意值;可选 `minProperties`(拒绝空对象) */
17
+ export function freeFormObject(options = {}) {
18
+ const schema = {
19
+ type: "object",
20
+ additionalProperties: {},
21
+ propertyNames: { type: "string" },
22
+ };
23
+ if (options.minProperties !== undefined)
24
+ schema.minProperties = options.minProperties;
25
+ return Type.Unsafe(schema);
26
+ }
27
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/schemas/helpers.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,+EAA+E;AAC/E,gEAAgE;AAChE,0GAA0G;AAC1G,kEAAkE;AAClE,+BAA+B;AAC/B,EAAE;AACF,sFAAsF;AACtF,6DAA6D;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAoC,MAAS;IACrE,OAAO,IAAI,CAAC,MAAM,CAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,UAAsC,EAAE;IACrE,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,EAAE;QACxB,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAClC,CAAC;IACF,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;QAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IACtF,OAAO,IAAI,CAAC,MAAM,CAA0B,MAAM,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from "./entity.js";
2
+ export * from "./relation.js";
3
+ export * from "./outline.js";
4
+ export * from "./delta.js";
5
+ export * from "./reference.js";
6
+ export * from "./analysis.js";
7
+ export * from "./proposal.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAKA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ // 工具参数 schema 聚合出口(TypeBox)
2
+ //
3
+ // 契约见 docs/api/tool-calling.md「工具定义(TypeBox)」:schema 定义在 tools 包
4
+ // (不放 shared——client 不打包工具 schema),`Type`/`Static` 经 @earendil-works/pi-ai 重导出。
5
+ export * from "./entity.js";
6
+ export * from "./relation.js";
7
+ export * from "./outline.js";
8
+ export * from "./delta.js";
9
+ export * from "./reference.js";
10
+ export * from "./analysis.js";
11
+ export * from "./proposal.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,iEAAiE;AACjE,gFAAgF;AAEhF,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Type, type Static } from "@earendil-works/pi-ai";
2
+ /** 大纲节点层级(严格三层:卷 → 章 → 场景) */
3
+ export declare const outlineNodeTypeSchema: Type.TUnsafe<"volume" | "chapter" | "scene">;
4
+ /** get_outline 入参:无参;默认不含 metadata 统计(省 token,需统计走 API with_metadata) */
5
+ export declare const getOutlineArgsSchema: Type.TObject<{}>;
6
+ /** get_outline_path 入参:node_id(根 → 该节点的路径 ID 列表,含 root) */
7
+ export declare const getOutlinePathArgsSchema: Type.TObject<{
8
+ node_id: Type.TString;
9
+ }>;
10
+ export type GetOutlinePathArgs = Static<typeof getOutlinePathArgsSchema>;
11
+ //# sourceMappingURL=outline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/schemas/outline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG1D,8BAA8B;AAC9B,eAAO,MAAM,qBAAqB,8CAAsD,CAAC;AAEzF,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,kBAAmD,CAAC;AAGrF,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB;;EAKpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ // 工具参数 schema:大纲域(get_outline / get_outline_path)+ 大纲层级共用枚举
2
+ import { Type } from "@earendil-works/pi-ai";
3
+ import { stringEnum } from "./helpers.js";
4
+ /** 大纲节点层级(严格三层:卷 → 章 → 场景) */
5
+ export const outlineNodeTypeSchema = stringEnum(["volume", "chapter", "scene"]);
6
+ /** get_outline 入参:无参;默认不含 metadata 统计(省 token,需统计走 API with_metadata) */
7
+ export const getOutlineArgsSchema = Type.Object({}, { additionalProperties: false });
8
+ /** get_outline_path 入参:node_id(根 → 该节点的路径 ID 列表,含 root) */
9
+ export const getOutlinePathArgsSchema = Type.Object({
10
+ node_id: Type.String(),
11
+ }, { additionalProperties: false });
12
+ //# sourceMappingURL=outline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/schemas/outline.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,IAAI,EAAe,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC,CAAC;AAEzF,yEAAyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAGrF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CACjD;IACE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;CACvB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC"}
@@ -0,0 +1,125 @@
1
+ import { Type, type Static } from "@earendil-works/pi-ai";
2
+ /** propose_create_entity 入参:type + name(必填)+ data(可选自定义字段) */
3
+ export declare const proposeCreateEntityArgsSchema: Type.TObject<{
4
+ type: Type.TUnsafe<"character" | "setting" | "location" | "hook" | "event" | "timepoint" | "reference">;
5
+ name: Type.TString;
6
+ data: Type.TOptional<Type.TUnsafe<Record<string, unknown>>>;
7
+ }>;
8
+ export type ProposeCreateEntityArgs = Static<typeof proposeCreateEntityArgsSchema>;
9
+ /** propose_update_entity 入参:entity_id + patches(data 部分字段,至少一项) */
10
+ export declare const proposeUpdateEntityArgsSchema: Type.TObject<{
11
+ entity_id: Type.TString;
12
+ patches: Type.TUnsafe<Record<string, unknown>>;
13
+ }>;
14
+ export type ProposeUpdateEntityArgs = Static<typeof proposeUpdateEntityArgsSchema>;
15
+ /** propose_delete_entity 入参:entity_id(软删 + 级联,可回收站还原) */
16
+ export declare const proposeDeleteEntityArgsSchema: Type.TObject<{
17
+ entity_id: Type.TString;
18
+ }>;
19
+ export type ProposeDeleteEntityArgs = Static<typeof proposeDeleteEntityArgsSchema>;
20
+ /**
21
+ * propose_add_relation 入参:source/target 为端点 id(实体 id 或大纲节点 id,类型生成时自动识别);
22
+ * type 白名单(16 种,含 plot_edge/plants/advances/resolves);metadata 可选
23
+ */
24
+ export declare const proposeAddRelationArgsSchema: Type.TObject<{
25
+ source: Type.TString;
26
+ target: Type.TString;
27
+ type: Type.TUnsafe<"belongs_to" | "owns" | "masters" | "ally" | "rival" | "mentor" | "family" | "kills" | "appears_in" | "occurs_at" | "plot_edge" | "plants" | "advances" | "resolves" | "depends_on" | "involves" | "occurs_in">;
28
+ metadata: Type.TOptional<Type.TUnsafe<Record<string, unknown>>>;
29
+ }>;
30
+ export type ProposeAddRelationArgs = Static<typeof proposeAddRelationArgsSchema>;
31
+ /** propose_remove_relation 入参:relation_id(手动删关系 = 物理删,不进回收站) */
32
+ export declare const proposeRemoveRelationArgsSchema: Type.TObject<{
33
+ relation_id: Type.TString;
34
+ }>;
35
+ export type ProposeRemoveRelationArgs = Static<typeof proposeRemoveRelationArgsSchema>;
36
+ /** propose_add_delta 入参:node_id(触发节点)+ target(变更目标)+ changes(至少一项) */
37
+ export declare const proposeAddDeltaArgsSchema: Type.TObject<{
38
+ node_id: Type.TString;
39
+ target: Type.TString;
40
+ changes: Type.TArray<Type.TObject<{
41
+ field: Type.TString;
42
+ op: Type.TUnsafe<"set" | "update" | "add" | "remove">;
43
+ from: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber, Type.TNull]>>;
44
+ to: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber, Type.TNull]>>;
45
+ value: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber]>>;
46
+ }>>;
47
+ }>;
48
+ export type ProposeAddDeltaArgs = Static<typeof proposeAddDeltaArgsSchema>;
49
+ /** propose_outline_node 入参:type(volume|chapter|scene)+ title + parent_id(缺省挂根;scene 必须挂 chapter) */
50
+ export declare const proposeOutlineNodeArgsSchema: Type.TObject<{
51
+ type: Type.TUnsafe<"volume" | "chapter" | "scene">;
52
+ title: Type.TString;
53
+ parent_id: Type.TOptional<Type.TString>;
54
+ }>;
55
+ export type ProposeOutlineNodeArgs = Static<typeof proposeOutlineNodeArgsSchema>;
56
+ /**
57
+ * propose_move_node 入参:node_id + parent_id(目标父节点,**可为 "root"**)+ order(目标位置,0 起)。
58
+ * order 无上限:超出目标父 children 长度的行为由执行层定义(提案只承载意图)。
59
+ */
60
+ export declare const proposeMoveNodeArgsSchema: Type.TObject<{
61
+ node_id: Type.TString;
62
+ parent_id: Type.TString;
63
+ order: Type.TInteger;
64
+ }>;
65
+ export type ProposeMoveNodeArgs = Static<typeof proposeMoveNodeArgsSchema>;
66
+ /** propose_delete_node 入参:node_id(软删 + 递归子树,可回收站还原) */
67
+ export declare const proposeDeleteNodeArgsSchema: Type.TObject<{
68
+ node_id: Type.TString;
69
+ }>;
70
+ export type ProposeDeleteNodeArgs = Static<typeof proposeDeleteNodeArgsSchema>;
71
+ /** propose_create_hook 入参:name + data(可选伏笔字段)+ plant_at_node_id(可选埋设节点) */
72
+ export declare const proposeCreateHookArgsSchema: Type.TObject<{
73
+ name: Type.TString;
74
+ data: Type.TOptional<Type.TUnsafe<Record<string, unknown>>>;
75
+ plant_at_node_id: Type.TOptional<Type.TString>;
76
+ }>;
77
+ export type ProposeCreateHookArgs = Static<typeof proposeCreateHookArgsSchema>;
78
+ /** propose_update_hook 入参:hook_id + patches(data 部分字段,至少一项) */
79
+ export declare const proposeUpdateHookArgsSchema: Type.TObject<{
80
+ hook_id: Type.TString;
81
+ patches: Type.TUnsafe<Record<string, unknown>>;
82
+ }>;
83
+ export type ProposeUpdateHookArgs = Static<typeof proposeUpdateHookArgsSchema>;
84
+ /** propose_advance_hook 入参:hook_id + node_id + description(确认后复合写 delta+relations) */
85
+ export declare const proposeAdvanceHookArgsSchema: Type.TObject<{
86
+ hook_id: Type.TString;
87
+ node_id: Type.TString;
88
+ description: Type.TString;
89
+ }>;
90
+ export type ProposeAdvanceHookArgs = Static<typeof proposeAdvanceHookArgsSchema>;
91
+ /** propose_resolve_hook 入参:hook_id + node_id + description(确认后复合写 delta+relations) */
92
+ export declare const proposeResolveHookArgsSchema: Type.TObject<{
93
+ hook_id: Type.TString;
94
+ node_id: Type.TString;
95
+ description: Type.TString;
96
+ }>;
97
+ export type ProposeResolveHookArgs = Static<typeof proposeResolveHookArgsSchema>;
98
+ /** propose_abandon_hook 入参:hook_id + description(确认后复合写 delta 记 status=abandoned) */
99
+ export declare const proposeAbandonHookArgsSchema: Type.TObject<{
100
+ hook_id: Type.TString;
101
+ description: Type.TString;
102
+ }>;
103
+ export type ProposeAbandonHookArgs = Static<typeof proposeAbandonHookArgsSchema>;
104
+ /**
105
+ * propose_reorder_timepoints 入参:timepoint_ids——LLM 按时间点 name 语义识别先后后产出的
106
+ * **有序时间点 id 全量序列**(须覆盖当前全部未软删时间点,缺/多/重复由生成时校验拒绝);
107
+ * 200 = 时间点量上限,与列表 limit 对齐。
108
+ */
109
+ export declare const proposeReorderTimepointsArgsSchema: Type.TObject<{
110
+ timepoint_ids: Type.TArray<Type.TString>;
111
+ }>;
112
+ export type ProposeReorderTimepointsArgs = Static<typeof proposeReorderTimepointsArgsSchema>;
113
+ /**
114
+ * propose_create_reference 入参:name 标题(必填)+ type 分类(自由文本,缺省 material
115
+ * 写入侧兜底)+ content 全文长文本 + source 来源(可选)+ tags 标签数组(可选)。
116
+ */
117
+ export declare const proposeCreateReferenceArgsSchema: Type.TObject<{
118
+ name: Type.TString;
119
+ type: Type.TOptional<Type.TString>;
120
+ content: Type.TOptional<Type.TString>;
121
+ source: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
122
+ tags: Type.TOptional<Type.TArray<Type.TString>>;
123
+ }>;
124
+ export type ProposeCreateReferenceArgs = Static<typeof proposeCreateReferenceArgsSchema>;
125
+ //# sourceMappingURL=proposal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../../src/schemas/proposal.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAY1D,8DAA8D;AAC9D,eAAO,MAAM,6BAA6B;;;;EAOzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEnF,mEAAmE;AACnE,eAAO,MAAM,6BAA6B;;;EAMzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEnF,yDAAyD;AACzD,eAAO,MAAM,6BAA6B;;EAKzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAInF;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;EAQxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF,gEAAgE;AAChE,eAAO,MAAM,+BAA+B;;EAK3C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAIvF,sEAAsE;AACtE,eAAO,MAAM,yBAAyB;;;;;;;;;;EAOrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAI3E,oGAAoG;AACpG,eAAO,MAAM,4BAA4B;;;;EAOxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;EAOrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE3E,uDAAuD;AACvD,eAAO,MAAM,2BAA2B;;EAKvC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAI/E,2EAA2E;AAC3E,eAAO,MAAM,2BAA2B;;;;EAOvC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,+DAA+D;AAC/D,eAAO,MAAM,2BAA2B;;;EAMvC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,sFAAsF;AACtF,eAAO,MAAM,4BAA4B;;;;EAOxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF,sFAAsF;AACtF,eAAO,MAAM,4BAA4B;;;;EAOxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF,qFAAqF;AACrF,eAAO,MAAM,4BAA4B;;;EAMxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIjF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC;;EAK9C,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAI7F;;;GAGG;AACH,eAAO,MAAM,gCAAgC;;;;;;EAS5C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC"}
@@ -0,0 +1,123 @@
1
+ // 工具参数 schema:提案域(propose_* 16 个)
2
+ //
3
+ // 语义(docs/api/tool-calling.md「提案类(需确认)」):AI 不能直接修改数据——propose_*
4
+ // 只产出提案对象;参数签名与工具目录逐字对齐(端点 id 的类型识别与 updated_at 快照
5
+ // 由服务端生成时完成,故入参只需 id 字符串)。
6
+ // patches(部分更新字段)以 `minProperties: 1` 表达「拒绝空对象」(等价原 zod `.refine`)。
7
+ import { Type } from "@earendil-works/pi-ai";
8
+ import { entityTypeSchema } from "./entity.js";
9
+ import { relationTypeSchema } from "./relation.js";
10
+ import { outlineNodeTypeSchema } from "./outline.js";
11
+ import { deltaChangeSchema } from "./delta.js";
12
+ import { freeFormObject } from "./helpers.js";
13
+ /** 任意结构化的 data / metadata 载荷(record 形状与旧 zod `toJSONSchema()` 一致) */
14
+ const dataRecordSchema = freeFormObject();
15
+ // ============ 实体(proposal/entity.ts) ============
16
+ /** propose_create_entity 入参:type + name(必填)+ data(可选自定义字段) */
17
+ export const proposeCreateEntityArgsSchema = Type.Object({
18
+ type: entityTypeSchema,
19
+ name: Type.String({ minLength: 1 }),
20
+ data: Type.Optional(dataRecordSchema),
21
+ }, { additionalProperties: false });
22
+ /** propose_update_entity 入参:entity_id + patches(data 部分字段,至少一项) */
23
+ export const proposeUpdateEntityArgsSchema = Type.Object({
24
+ entity_id: Type.String(),
25
+ patches: freeFormObject({ minProperties: 1 }),
26
+ }, { additionalProperties: false });
27
+ /** propose_delete_entity 入参:entity_id(软删 + 级联,可回收站还原) */
28
+ export const proposeDeleteEntityArgsSchema = Type.Object({
29
+ entity_id: Type.String(),
30
+ }, { additionalProperties: false });
31
+ // ============ 关系(proposal/relation.ts) ============
32
+ /**
33
+ * propose_add_relation 入参:source/target 为端点 id(实体 id 或大纲节点 id,类型生成时自动识别);
34
+ * type 白名单(16 种,含 plot_edge/plants/advances/resolves);metadata 可选
35
+ */
36
+ export const proposeAddRelationArgsSchema = Type.Object({
37
+ source: Type.String(),
38
+ target: Type.String(),
39
+ type: relationTypeSchema,
40
+ metadata: Type.Optional(dataRecordSchema),
41
+ }, { additionalProperties: false });
42
+ /** propose_remove_relation 入参:relation_id(手动删关系 = 物理删,不进回收站) */
43
+ export const proposeRemoveRelationArgsSchema = Type.Object({
44
+ relation_id: Type.String(),
45
+ }, { additionalProperties: false });
46
+ // ============ Delta(proposal/delta.ts) ============
47
+ /** propose_add_delta 入参:node_id(触发节点)+ target(变更目标)+ changes(至少一项) */
48
+ export const proposeAddDeltaArgsSchema = Type.Object({
49
+ node_id: Type.String(),
50
+ target: Type.String(),
51
+ changes: Type.Array(deltaChangeSchema, { minItems: 1 }),
52
+ }, { additionalProperties: false });
53
+ // ============ 大纲(proposal/outline.ts) ============
54
+ /** propose_outline_node 入参:type(volume|chapter|scene)+ title + parent_id(缺省挂根;scene 必须挂 chapter) */
55
+ export const proposeOutlineNodeArgsSchema = Type.Object({
56
+ type: outlineNodeTypeSchema,
57
+ title: Type.String({ minLength: 1 }),
58
+ parent_id: Type.Optional(Type.String()),
59
+ }, { additionalProperties: false });
60
+ /**
61
+ * propose_move_node 入参:node_id + parent_id(目标父节点,**可为 "root"**)+ order(目标位置,0 起)。
62
+ * order 无上限:超出目标父 children 长度的行为由执行层定义(提案只承载意图)。
63
+ */
64
+ export const proposeMoveNodeArgsSchema = Type.Object({
65
+ node_id: Type.String(),
66
+ parent_id: Type.String(),
67
+ order: Type.Integer({ minimum: 0 }),
68
+ }, { additionalProperties: false });
69
+ /** propose_delete_node 入参:node_id(软删 + 递归子树,可回收站还原) */
70
+ export const proposeDeleteNodeArgsSchema = Type.Object({
71
+ node_id: Type.String(),
72
+ }, { additionalProperties: false });
73
+ // ============ 伏笔(proposal/hook.ts) ============
74
+ /** propose_create_hook 入参:name + data(可选伏笔字段)+ plant_at_node_id(可选埋设节点) */
75
+ export const proposeCreateHookArgsSchema = Type.Object({
76
+ name: Type.String({ minLength: 1 }),
77
+ data: Type.Optional(dataRecordSchema),
78
+ plant_at_node_id: Type.Optional(Type.String()),
79
+ }, { additionalProperties: false });
80
+ /** propose_update_hook 入参:hook_id + patches(data 部分字段,至少一项) */
81
+ export const proposeUpdateHookArgsSchema = Type.Object({
82
+ hook_id: Type.String(),
83
+ patches: freeFormObject({ minProperties: 1 }),
84
+ }, { additionalProperties: false });
85
+ /** propose_advance_hook 入参:hook_id + node_id + description(确认后复合写 delta+relations) */
86
+ export const proposeAdvanceHookArgsSchema = Type.Object({
87
+ hook_id: Type.String(),
88
+ node_id: Type.String(),
89
+ description: Type.String({ minLength: 1 }),
90
+ }, { additionalProperties: false });
91
+ /** propose_resolve_hook 入参:hook_id + node_id + description(确认后复合写 delta+relations) */
92
+ export const proposeResolveHookArgsSchema = Type.Object({
93
+ hook_id: Type.String(),
94
+ node_id: Type.String(),
95
+ description: Type.String({ minLength: 1 }),
96
+ }, { additionalProperties: false });
97
+ /** propose_abandon_hook 入参:hook_id + description(确认后复合写 delta 记 status=abandoned) */
98
+ export const proposeAbandonHookArgsSchema = Type.Object({
99
+ hook_id: Type.String(),
100
+ description: Type.String({ minLength: 1 }),
101
+ }, { additionalProperties: false });
102
+ // ============ 时间轴(proposal/reorder-timepoints.ts,G2) ============
103
+ /**
104
+ * propose_reorder_timepoints 入参:timepoint_ids——LLM 按时间点 name 语义识别先后后产出的
105
+ * **有序时间点 id 全量序列**(须覆盖当前全部未软删时间点,缺/多/重复由生成时校验拒绝);
106
+ * 200 = 时间点量上限,与列表 limit 对齐。
107
+ */
108
+ export const proposeReorderTimepointsArgsSchema = Type.Object({
109
+ timepoint_ids: Type.Array(Type.String(), { minItems: 1, maxItems: 200 }),
110
+ }, { additionalProperties: false });
111
+ // ============ 参考资料(proposal/reference.ts) ============
112
+ /**
113
+ * propose_create_reference 入参:name 标题(必填)+ type 分类(自由文本,缺省 material
114
+ * 写入侧兜底)+ content 全文长文本 + source 来源(可选)+ tags 标签数组(可选)。
115
+ */
116
+ export const proposeCreateReferenceArgsSchema = Type.Object({
117
+ name: Type.String({ minLength: 1 }),
118
+ type: Type.Optional(Type.String()),
119
+ content: Type.Optional(Type.String()),
120
+ source: Type.Optional(Type.Union([Type.String(), Type.Null()])),
121
+ tags: Type.Optional(Type.Array(Type.String())),
122
+ }, { additionalProperties: false });
123
+ //# sourceMappingURL=proposal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/schemas/proposal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Type, type Static } from "@earendil-works/pi-ai";
2
+ /**
3
+ * search_references 入参:query 关键词(标题+tags 命中)+ 可选 type 分类过滤(自由文本,
4
+ * 原预置枚举已取消,建议沿用项目内已有分类)+ 可选 tags 过滤。
5
+ * 返回摘要列表(content 截断 120 字)。
6
+ */
7
+ export declare const searchReferencesArgsSchema: Type.TObject<{
8
+ query: Type.TString;
9
+ type: Type.TOptional<Type.TString>;
10
+ tags: Type.TOptional<Type.TArray<Type.TString>>;
11
+ }>;
12
+ export type SearchReferencesArgs = Static<typeof searchReferencesArgsSchema>;
13
+ //# sourceMappingURL=reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/schemas/reference.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;;;;EAOtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ // 工具参数 schema:参考资料域(search_references)
2
+ import { Type } from "@earendil-works/pi-ai";
3
+ /**
4
+ * search_references 入参:query 关键词(标题+tags 命中)+ 可选 type 分类过滤(自由文本,
5
+ * 原预置枚举已取消,建议沿用项目内已有分类)+ 可选 tags 过滤。
6
+ * 返回摘要列表(content 截断 120 字)。
7
+ */
8
+ export const searchReferencesArgsSchema = Type.Object({
9
+ query: Type.String(),
10
+ type: Type.Optional(Type.String()),
11
+ tags: Type.Optional(Type.Array(Type.String())),
12
+ }, { additionalProperties: false });
13
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/schemas/reference.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,OAAO,EAAE,IAAI,EAAe,MAAM,uBAAuB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC,MAAM,CACnD;IACE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Type, type Static } from "@earendil-works/pi-ai";
2
+ /** 关系类型白名单(预定义 16 种;工具参数由 LLM 生成,枚举提前拦非法值——与 REST 层的宽松 string 不同) */
3
+ export declare const relationTypeSchema: Type.TUnsafe<"belongs_to" | "owns" | "masters" | "ally" | "rival" | "mentor" | "family" | "kills" | "appears_in" | "occurs_at" | "plot_edge" | "plants" | "advances" | "resolves" | "depends_on" | "involves" | "occurs_in">;
4
+ /**
5
+ * query_relationships 入参:source_type/target_type 为自由字符串(实体类型或 outline_node);
6
+ * relation_type 白名单;depth 1=紧邻 / 2=k跳 / 3=全量(必填,与 API 层一致)
7
+ */
8
+ export declare const queryRelationshipsArgsSchema: Type.TObject<{
9
+ source_type: Type.TOptional<Type.TString>;
10
+ source_id: Type.TOptional<Type.TString>;
11
+ target_type: Type.TOptional<Type.TString>;
12
+ target_id: Type.TOptional<Type.TString>;
13
+ relation_type: Type.TOptional<Type.TUnsafe<"belongs_to" | "owns" | "masters" | "ally" | "rival" | "mentor" | "family" | "kills" | "appears_in" | "occurs_at" | "plot_edge" | "plants" | "advances" | "resolves" | "depends_on" | "involves" | "occurs_in">>;
14
+ depth: Type.TUnion<[Type.TLiteral<1>, Type.TLiteral<2>, Type.TLiteral<3>]>;
15
+ }>;
16
+ export type QueryRelationshipsArgs = Static<typeof queryRelationshipsArgsSchema>;
17
+ //# sourceMappingURL=relation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/schemas/relation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI1D,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,8NAA6B,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;EAUxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ // 工具参数 schema:关系域(query_relationships)
2
+ import { Type } from "@earendil-works/pi-ai";
3
+ import { RELATION_TYPES } from "@whispering233/ai-editor-shared";
4
+ import { stringEnum } from "./helpers.js";
5
+ /** 关系类型白名单(预定义 16 种;工具参数由 LLM 生成,枚举提前拦非法值——与 REST 层的宽松 string 不同) */
6
+ export const relationTypeSchema = stringEnum(RELATION_TYPES);
7
+ /**
8
+ * query_relationships 入参:source_type/target_type 为自由字符串(实体类型或 outline_node);
9
+ * relation_type 白名单;depth 1=紧邻 / 2=k跳 / 3=全量(必填,与 API 层一致)
10
+ */
11
+ export const queryRelationshipsArgsSchema = Type.Object({
12
+ source_type: Type.Optional(Type.String()),
13
+ source_id: Type.Optional(Type.String()),
14
+ target_type: Type.Optional(Type.String()),
15
+ target_id: Type.Optional(Type.String()),
16
+ relation_type: Type.Optional(relationTypeSchema),
17
+ depth: Type.Union([Type.Literal(1), Type.Literal(2), Type.Literal(3)]),
18
+ }, { additionalProperties: false });
19
+ //# sourceMappingURL=relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/schemas/relation.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,OAAO,EAAE,IAAI,EAAe,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CACrD;IACE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CACvE,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whispering233/ai-editor-tools",
3
- "version": "0.0.30",
3
+ "version": "0.0.33",
4
4
  "license": "MIT",
5
5
  "description": "AI 工具目录:工具定义 + 执行器",
6
6
  "type": "module",
@@ -26,12 +26,12 @@
26
26
  "postpack": "node ../../scripts/restore-package-json.mjs"
27
27
  },
28
28
  "dependencies": {
29
- "@whispering233/ai-editor-db": "0.0.30",
30
- "@whispering233/ai-editor-shared": "0.0.30"
29
+ "@earendil-works/pi-ai": "0.85.1",
30
+ "@whispering233/ai-editor-db": "0.0.33",
31
+ "@whispering233/ai-editor-shared": "0.0.33"
31
32
  },
32
33
  "devDependencies": {
33
- "typescript": "^5.8.0",
34
- "zod": "^4.0.0"
34
+ "typescript": "^5.8.0"
35
35
  },
36
36
  "repository": {
37
37
  "type": "git",