@whispering233/ai-editor-tools 0.0.29 → 0.0.32
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 +1 -1
- package/dist/analysis/consistency.d.ts +3 -3
- package/dist/analysis/consistency.d.ts.map +1 -1
- package/dist/analysis/consistency.js +4 -4
- package/dist/analysis/consistency.js.map +1 -1
- package/dist/analysis/hook.d.ts +13 -13
- package/dist/analysis/hook.d.ts.map +1 -1
- package/dist/analysis/hook.js +9 -9
- package/dist/analysis/hook.js.map +1 -1
- package/dist/analysis/orphan.d.ts +3 -3
- package/dist/analysis/orphan.d.ts.map +1 -1
- package/dist/analysis/orphan.js +3 -3
- 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 +4 -4
- 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 +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -1
- 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 +1 -1
- 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 +5 -5
- 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 +12 -12
- package/dist/executor/hook.js.map +1 -1
- package/dist/executor/index.d.ts +0 -2
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +2 -2
- 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 +4 -4
- package/dist/executor/outline.js.map +1 -1
- package/dist/executor/reference.js +2 -2
- 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 +3 -3
- 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 +2 -2
- package/dist/executor/reorder-timepoints.js.map +1 -1
- package/dist/executor/types.d.ts +1 -3
- package/dist/executor/types.d.ts.map +1 -1
- package/dist/executor/types.js +0 -7
- package/dist/executor/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -49
- package/dist/index.js.map +1 -1
- package/dist/proposal/delta.d.ts +1 -1
- package/dist/proposal/delta.d.ts.map +1 -1
- package/dist/proposal/delta.js +1 -1
- package/dist/proposal/delta.js.map +1 -1
- package/dist/proposal/entity.d.ts +1 -1
- package/dist/proposal/entity.d.ts.map +1 -1
- package/dist/proposal/entity.js +1 -1
- 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 +1 -1
- package/dist/proposal/hook.js.map +1 -1
- package/dist/proposal/outline.d.ts +1 -1
- package/dist/proposal/outline.d.ts.map +1 -1
- package/dist/proposal/outline.js +2 -2
- package/dist/proposal/outline.js.map +1 -1
- package/dist/proposal/reference.d.ts +1 -1
- package/dist/proposal/reference.d.ts.map +1 -1
- package/dist/proposal/reference.js +1 -1
- 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/reorder-timepoints.d.ts +2 -2
- package/dist/proposal/reorder-timepoints.d.ts.map +1 -1
- package/dist/proposal/reorder-timepoints.js +5 -5
- package/dist/proposal/reorder-timepoints.js.map +1 -1
- package/dist/proposal/types.d.ts +5 -5
- package/dist/proposal/types.d.ts.map +1 -1
- package/dist/proposal/types.js +4 -4
- package/dist/proposal/types.js.map +1 -1
- package/dist/query/delta.d.ts +3 -3
- package/dist/query/delta.d.ts.map +1 -1
- package/dist/query/delta.js +3 -3
- package/dist/query/delta.js.map +1 -1
- package/dist/query/entity.d.ts +4 -4
- package/dist/query/entity.d.ts.map +1 -1
- package/dist/query/entity.js +3 -3
- package/dist/query/outline.d.ts +3 -3
- package/dist/query/outline.d.ts.map +1 -1
- package/dist/query/outline.js +3 -3
- package/dist/query/outline.js.map +1 -1
- package/dist/query/reference.d.ts +2 -2
- package/dist/query/reference.d.ts.map +1 -1
- package/dist/query/reference.js +2 -2
- package/dist/query/reference.js.map +1 -1
- package/dist/query/relation.d.ts +2 -2
- package/dist/query/relation.d.ts.map +1 -1
- package/dist/query/relation.js +1 -1
- package/dist/registry.d.ts +21 -14
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +23 -9
- package/dist/registry.js.map +1 -1
- package/dist/schemas/analysis.d.ts +51 -0
- package/dist/schemas/analysis.d.ts.map +1 -0
- package/dist/schemas/analysis.js +46 -0
- package/dist/schemas/analysis.js.map +1 -0
- package/dist/schemas/delta.d.ts +31 -0
- package/dist/schemas/delta.d.ts.map +1 -0
- package/dist/schemas/delta.js +35 -0
- package/dist/schemas/delta.js.map +1 -0
- package/dist/schemas/entity.d.ts +28 -0
- package/dist/schemas/entity.d.ts.map +1 -0
- package/dist/schemas/entity.js +31 -0
- package/dist/schemas/entity.js.map +1 -0
- package/dist/schemas/helpers.d.ts +8 -0
- package/dist/schemas/helpers.d.ts.map +1 -0
- package/dist/schemas/helpers.js +27 -0
- package/dist/schemas/helpers.js.map +1 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +12 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/outline.d.ts +11 -0
- package/dist/schemas/outline.d.ts.map +1 -0
- package/dist/schemas/outline.js +12 -0
- package/dist/schemas/outline.js.map +1 -0
- package/dist/schemas/proposal.d.ts +125 -0
- package/dist/schemas/proposal.d.ts.map +1 -0
- package/dist/schemas/proposal.js +123 -0
- package/dist/schemas/proposal.js.map +1 -0
- package/dist/schemas/reference.d.ts +13 -0
- package/dist/schemas/reference.d.ts.map +1 -0
- package/dist/schemas/reference.js +13 -0
- package/dist/schemas/reference.js.map +1 -0
- package/dist/schemas/relation.d.ts +17 -0
- package/dist/schemas/relation.d.ts.map +1 -0
- package/dist/schemas/relation.js +19 -0
- package/dist/schemas/relation.js.map +1 -0
- package/package.json +5 -5
package/dist/registry.js
CHANGED
|
@@ -1,20 +1,34 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// registerTool 挂载新工具;S7.4 executor 通过 getTool(name) 按名调度。
|
|
1
|
+
// 工具注册表:统一工具定义结构 + 注册/查询 API + 参数校验入口
|
|
2
|
+
// registerTool 挂载新工具;executor 通过 getTool(name) 按名调度。
|
|
4
3
|
//
|
|
5
|
-
// 定义结构 { name, description,
|
|
6
|
-
// -
|
|
7
|
-
//
|
|
4
|
+
// 定义结构 { name, description, parameters, permission, run }:
|
|
5
|
+
// - parameters:TypeBox 参数 schema(运行时即 JSON Schema;执行前 preflight 校验,
|
|
6
|
+
// 批量 tool_call 先全部校验再执行);校验失败即抛错(executor 统一转结构化 tool_result 喂回 LLM)
|
|
8
7
|
// - permission:TOOL_PERMISSION.AUTO(自动)/ PROPOSAL(提案确认)两级(「工具分级」)
|
|
9
8
|
// - run(ctx, args):同步执行,返回 JSON 可序列化结果;抛错即失败(不把失败编码进正常 content)
|
|
10
9
|
//
|
|
11
|
-
//
|
|
10
|
+
// 注册语义:重复注册同名工具抛错(防后续切片扩展时撞名;注册表是唯一事实来源)。
|
|
11
|
+
import { validateToolArguments } from "@earendil-works/pi-ai";
|
|
12
|
+
/**
|
|
13
|
+
* 参数校验(执行前 preflight;校验语义与 pi agent 循环一致——pi-ai 的
|
|
14
|
+
* validateToolArguments:先做原始类型 coerce,再按 schema 检查,失败抛错)。
|
|
15
|
+
* 校验通过返回(可能被 coerce 的)参数对象。
|
|
16
|
+
* @throws Error 校验失败(消息含工具名 + 字段路径 + 原始参数)
|
|
17
|
+
*/
|
|
18
|
+
export function validateToolArgs(def, args) {
|
|
19
|
+
return validateToolArguments({ name: def.name, description: def.description, parameters: def.parameters }, {
|
|
20
|
+
type: "toolCall",
|
|
21
|
+
id: `validate_${def.name}`,
|
|
22
|
+
name: def.name,
|
|
23
|
+
arguments: (args ?? {}),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
12
26
|
/** 注册表内部存储(Map 保证按名 O(1) 查询) */
|
|
13
27
|
const registry = new Map();
|
|
14
28
|
/**
|
|
15
29
|
* 注册单个工具:重复注册同名工具抛错——防后续切片扩展时撞名,
|
|
16
30
|
* 保证「注册表 = 工具目录唯一事实来源」。
|
|
17
|
-
* 防呆:name
|
|
31
|
+
* 防呆:name 必须为非空字符串(拼错名不应静默注册新工具)。
|
|
18
32
|
*/
|
|
19
33
|
export function registerTool(def) {
|
|
20
34
|
if (typeof def.name !== "string" || def.name.trim() === "") {
|
|
@@ -34,7 +48,7 @@ export function registerTools(defs) {
|
|
|
34
48
|
export function getTool(name) {
|
|
35
49
|
return registry.get(name);
|
|
36
50
|
}
|
|
37
|
-
/**
|
|
51
|
+
/** 全部已注册工具(按名称排序,稳定输出;供上下文组装注入 LLM 工具列表) */
|
|
38
52
|
export function listTools() {
|
|
39
53
|
return [...registry.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
40
54
|
}
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qDAAqD;AACrD,EAAE;AACF,2DAA2D;AAC3D,oEAAoE;AACpE,uEAAuE;AACvE,kEAAkE;AAClE,gEAAgE;AAChE,EAAE;AACF,0CAA0C;AAE1C,OAAO,EAAE,qBAAqB,EAA6B,MAAM,uBAAuB,CAAC;AA4BzF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAmB,EAAE,IAAa;IACjE,OAAO,qBAAqB,CAC1B,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,EAC5E;QACE,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,YAAY,GAAG,CAAC,IAAI,EAAE;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,CAAC,IAAI,IAAI,EAAE,CAA4B;KACnD,CACF,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAmB;IAC9C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,IAAI,cAAc,CAAC,CAAC;IAC9D,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,IAA+B;IAC3D,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Type, type Static } from "@earendil-works/pi-ai";
|
|
2
|
+
/** analyze_consistency 入参:entity_id(检查该实体档案内部的矛盾) */
|
|
3
|
+
export declare const analyzeConsistencyArgsSchema: Type.TObject<{
|
|
4
|
+
entity_id: Type.TString;
|
|
5
|
+
}>;
|
|
6
|
+
export type AnalyzeConsistencyArgs = Static<typeof analyzeConsistencyArgsSchema>;
|
|
7
|
+
/**
|
|
8
|
+
* detect_conflicts 入参:types 限定参与检测的实体类型(缺省全部);
|
|
9
|
+
* relation_filter 限定参与检测的关系类型(缺省用内置对称/互斥/互杀规则集)。
|
|
10
|
+
*/
|
|
11
|
+
export declare const detectConflictsArgsSchema: Type.TObject<{
|
|
12
|
+
types: Type.TOptional<Type.TArray<Type.TUnsafe<"character" | "setting" | "location" | "hook" | "event" | "timepoint" | "reference">>>;
|
|
13
|
+
relation_filter: Type.TOptional<Type.TArray<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
|
+
}>;
|
|
15
|
+
export type DetectConflictsArgs = Static<typeof detectConflictsArgsSchema>;
|
|
16
|
+
/** trace_plot_paths 入参:from_node_id → to_node_id(大纲节点) */
|
|
17
|
+
export declare const tracePlotPathsArgsSchema: Type.TObject<{
|
|
18
|
+
from_node_id: Type.TString;
|
|
19
|
+
to_node_id: Type.TString;
|
|
20
|
+
}>;
|
|
21
|
+
export type TracePlotPathsArgs = Static<typeof tracePlotPathsArgsSchema>;
|
|
22
|
+
/** find_orphan_elements 入参:无参(全项目扫描) */
|
|
23
|
+
export declare const findOrphanElementsArgsSchema: Type.TObject<{}>;
|
|
24
|
+
export type FindOrphanElementsArgs = Static<typeof findOrphanElementsArgsSchema>;
|
|
25
|
+
/** suggest_connections 入参:entity_id(建议潜在关联) */
|
|
26
|
+
export declare const suggestConnectionsArgsSchema: Type.TObject<{
|
|
27
|
+
entity_id: Type.TString;
|
|
28
|
+
}>;
|
|
29
|
+
export type SuggestConnectionsArgs = Static<typeof suggestConnectionsArgsSchema>;
|
|
30
|
+
/** analyze_hook_health 入参:无参(全项目活跃伏笔健康总览) */
|
|
31
|
+
export declare const analyzeHookHealthArgsSchema: Type.TObject<{}>;
|
|
32
|
+
export type AnalyzeHookHealthArgs = Static<typeof analyzeHookHealthArgsSchema>;
|
|
33
|
+
/** trace_hook_lifecycle 入参:hook_id(埋设/推进/回收节点 + 休眠章数 + 时间线图) */
|
|
34
|
+
export declare const traceHookLifecycleArgsSchema: Type.TObject<{
|
|
35
|
+
hook_id: Type.TString;
|
|
36
|
+
}>;
|
|
37
|
+
export type TraceHookLifecycleArgs = Static<typeof traceHookLifecycleArgsSchema>;
|
|
38
|
+
/** suggest_hook_payoff 入参:hook_id(基于埋设章节与半衰期推荐理想回收场景) */
|
|
39
|
+
export declare const suggestHookPayoffArgsSchema: Type.TObject<{
|
|
40
|
+
hook_id: Type.TString;
|
|
41
|
+
}>;
|
|
42
|
+
export type SuggestHookPayoffArgs = Static<typeof suggestHookPayoffArgsSchema>;
|
|
43
|
+
/** find_hook_opportunities 入参:outline_node_id(分析节点叙事特征,建议伏笔类别) */
|
|
44
|
+
export declare const findHookOpportunitiesArgsSchema: Type.TObject<{
|
|
45
|
+
outline_node_id: Type.TString;
|
|
46
|
+
}>;
|
|
47
|
+
export type FindHookOpportunitiesArgs = Static<typeof findHookOpportunitiesArgsSchema>;
|
|
48
|
+
/** detect_hook_conflicts 入参:无参(依赖循环/依赖废弃/时间悖论检测) */
|
|
49
|
+
export declare const detectHookConflictsArgsSchema: Type.TObject<{}>;
|
|
50
|
+
export type DetectHookConflictsArgs = Static<typeof detectHookConflictsArgsSchema>;
|
|
51
|
+
//# sourceMappingURL=analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/schemas/analysis.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM1D,qDAAqD;AACrD,eAAO,MAAM,4BAA4B;;EAKxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;EAMrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE3E,0DAA0D;AAC1D,eAAO,MAAM,wBAAwB;;;EAMpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEzE,wCAAwC;AACxC,eAAO,MAAM,4BAA4B,kBAAmD,CAAC;AAE7F,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B;;EAKxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIjF,6CAA6C;AAC7C,eAAO,MAAM,2BAA2B,kBAAmD,CAAC;AAE5F,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,gEAAgE;AAChE,eAAO,MAAM,4BAA4B;;EAKxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF,yDAAyD;AACzD,eAAO,MAAM,2BAA2B;;EAKvC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,kEAAkE;AAClE,eAAO,MAAM,+BAA+B;;EAK3C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEvF,oDAAoD;AACpD,eAAO,MAAM,6BAA6B,kBAAmD,CAAC;AAE9F,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// 工具参数 schema:分析域(核心分析 5 + 伏笔分析 5;权限全为 AUTO)
|
|
2
|
+
import { Type } from "@earendil-works/pi-ai";
|
|
3
|
+
import { entityTypeSchema } from "./entity.js";
|
|
4
|
+
import { relationTypeSchema } from "./relation.js";
|
|
5
|
+
// ============ 核心分析(analysis/*,S6.4) ============
|
|
6
|
+
/** analyze_consistency 入参:entity_id(检查该实体档案内部的矛盾) */
|
|
7
|
+
export const analyzeConsistencyArgsSchema = Type.Object({
|
|
8
|
+
entity_id: Type.String(),
|
|
9
|
+
}, { additionalProperties: false });
|
|
10
|
+
/**
|
|
11
|
+
* detect_conflicts 入参:types 限定参与检测的实体类型(缺省全部);
|
|
12
|
+
* relation_filter 限定参与检测的关系类型(缺省用内置对称/互斥/互杀规则集)。
|
|
13
|
+
*/
|
|
14
|
+
export const detectConflictsArgsSchema = Type.Object({
|
|
15
|
+
types: Type.Optional(Type.Array(entityTypeSchema)),
|
|
16
|
+
relation_filter: Type.Optional(Type.Array(relationTypeSchema)),
|
|
17
|
+
}, { additionalProperties: false });
|
|
18
|
+
/** trace_plot_paths 入参:from_node_id → to_node_id(大纲节点) */
|
|
19
|
+
export const tracePlotPathsArgsSchema = Type.Object({
|
|
20
|
+
from_node_id: Type.String(),
|
|
21
|
+
to_node_id: Type.String(),
|
|
22
|
+
}, { additionalProperties: false });
|
|
23
|
+
/** find_orphan_elements 入参:无参(全项目扫描) */
|
|
24
|
+
export const findOrphanElementsArgsSchema = Type.Object({}, { additionalProperties: false });
|
|
25
|
+
/** suggest_connections 入参:entity_id(建议潜在关联) */
|
|
26
|
+
export const suggestConnectionsArgsSchema = Type.Object({
|
|
27
|
+
entity_id: Type.String(),
|
|
28
|
+
}, { additionalProperties: false });
|
|
29
|
+
// ============ 伏笔分析(analysis/hook.ts,S6.5) ============
|
|
30
|
+
/** analyze_hook_health 入参:无参(全项目活跃伏笔健康总览) */
|
|
31
|
+
export const analyzeHookHealthArgsSchema = Type.Object({}, { additionalProperties: false });
|
|
32
|
+
/** trace_hook_lifecycle 入参:hook_id(埋设/推进/回收节点 + 休眠章数 + 时间线图) */
|
|
33
|
+
export const traceHookLifecycleArgsSchema = Type.Object({
|
|
34
|
+
hook_id: Type.String(),
|
|
35
|
+
}, { additionalProperties: false });
|
|
36
|
+
/** suggest_hook_payoff 入参:hook_id(基于埋设章节与半衰期推荐理想回收场景) */
|
|
37
|
+
export const suggestHookPayoffArgsSchema = Type.Object({
|
|
38
|
+
hook_id: Type.String(),
|
|
39
|
+
}, { additionalProperties: false });
|
|
40
|
+
/** find_hook_opportunities 入参:outline_node_id(分析节点叙事特征,建议伏笔类别) */
|
|
41
|
+
export const findHookOpportunitiesArgsSchema = Type.Object({
|
|
42
|
+
outline_node_id: Type.String(),
|
|
43
|
+
}, { additionalProperties: false });
|
|
44
|
+
/** detect_hook_conflicts 入参:无参(依赖循环/依赖废弃/时间悖论检测) */
|
|
45
|
+
export const detectHookConflictsArgsSchema = Type.Object({}, { additionalProperties: false });
|
|
46
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/schemas/analysis.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAAE,IAAI,EAAe,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,kDAAkD;AAElD,qDAAqD;AACrD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CACrD;IACE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;CACzB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAClD;IACE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAClD,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;CAC/D,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CACjD;IACE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;IAC3B,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;CAC1B,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,wCAAwC;AACxC,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAI7F,+CAA+C;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CACrD;IACE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;CACzB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,wDAAwD;AAExD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAI5F,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CACrD;IACE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;CACvB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,yDAAyD;AACzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,MAAM,CACpD;IACE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;CACvB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,kEAAkE;AAClE,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC,MAAM,CACxD;IACE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE;CAC/B,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,oDAAoD;AACpD,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Type, type Static } from "@earendil-works/pi-ai";
|
|
2
|
+
/** 变更操作类型(set/update/add/remove) */
|
|
3
|
+
export declare const deltaOpSchema: Type.TUnsafe<"set" | "update" | "add" | "remove">;
|
|
4
|
+
/** 单条属性变更(复用:propose_add_delta 的 changes 项) */
|
|
5
|
+
export declare const deltaChangeSchema: Type.TObject<{
|
|
6
|
+
field: Type.TString;
|
|
7
|
+
op: Type.TUnsafe<"set" | "update" | "add" | "remove">;
|
|
8
|
+
/** 旧值(op=update 时服务端要求必填) */
|
|
9
|
+
from: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber, Type.TNull]>>;
|
|
10
|
+
/** 新值(op=set/update 时服务端要求必填;add/remove 用 value) */
|
|
11
|
+
to: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber, Type.TNull]>>;
|
|
12
|
+
/** 值(op=add/remove 时使用) */
|
|
13
|
+
value: Type.TOptional<Type.TUnion<[Type.TString, Type.TNumber]>>;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* compute_state 入参(与 POST /api/v1/delta/compute 同构,api.ts deltaComputeReqSchema):
|
|
17
|
+
* 目标实体到达 at_node_id 时的累积状态(只沿大纲树父链累积已确认 Delta)
|
|
18
|
+
*/
|
|
19
|
+
export declare const computeStateArgsSchema: Type.TObject<{
|
|
20
|
+
target_type: Type.TString;
|
|
21
|
+
target_id: Type.TString;
|
|
22
|
+
at_node_id: Type.TString;
|
|
23
|
+
}>;
|
|
24
|
+
export type ComputeStateArgs = Static<typeof computeStateArgsSchema>;
|
|
25
|
+
/** get_delta_history 入参:target_type + target_id(该实体的全部属性变更记录,按时间/节点排序) */
|
|
26
|
+
export declare const getDeltaHistoryArgsSchema: Type.TObject<{
|
|
27
|
+
target_type: Type.TString;
|
|
28
|
+
target_id: Type.TString;
|
|
29
|
+
}>;
|
|
30
|
+
export type GetDeltaHistoryArgs = Static<typeof getDeltaHistoryArgsSchema>;
|
|
31
|
+
//# sourceMappingURL=delta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/schemas/delta.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG1D,oCAAoC;AACpC,eAAO,MAAM,aAAa,mDAA0D,CAAC;AAErF,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB;;;IAI1B,6BAA6B;;IAE7B,oDAAoD;;IAEpD,2BAA2B;;EAI9B,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;EAOlC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB;;;EAMrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -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 @@
|
|
|
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"}
|