persona-core 1.0.0

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 (218) hide show
  1. package/dist/db/client.d.ts +55 -0
  2. package/dist/db/client.d.ts.map +1 -0
  3. package/dist/db/client.js +157 -0
  4. package/dist/db/client.js.map +1 -0
  5. package/dist/db/index.d.ts +7 -0
  6. package/dist/db/index.d.ts.map +1 -0
  7. package/dist/db/index.js +7 -0
  8. package/dist/db/index.js.map +1 -0
  9. package/dist/db/repositories/executionRepository.d.ts +15 -0
  10. package/dist/db/repositories/executionRepository.d.ts.map +1 -0
  11. package/dist/db/repositories/executionRepository.js +41 -0
  12. package/dist/db/repositories/executionRepository.js.map +1 -0
  13. package/dist/db/repositories/index.d.ts +10 -0
  14. package/dist/db/repositories/index.d.ts.map +1 -0
  15. package/dist/db/repositories/index.js +10 -0
  16. package/dist/db/repositories/index.js.map +1 -0
  17. package/dist/db/repositories/nodeRepository.d.ts +15 -0
  18. package/dist/db/repositories/nodeRepository.d.ts.map +1 -0
  19. package/dist/db/repositories/nodeRepository.js +61 -0
  20. package/dist/db/repositories/nodeRepository.js.map +1 -0
  21. package/dist/db/repositories/personaRepository.d.ts +13 -0
  22. package/dist/db/repositories/personaRepository.d.ts.map +1 -0
  23. package/dist/db/repositories/personaRepository.js +42 -0
  24. package/dist/db/repositories/personaRepository.js.map +1 -0
  25. package/dist/db/repositories/planResultRepository.d.ts +13 -0
  26. package/dist/db/repositories/planResultRepository.d.ts.map +1 -0
  27. package/dist/db/repositories/planResultRepository.js +30 -0
  28. package/dist/db/repositories/planResultRepository.js.map +1 -0
  29. package/dist/db/repositories/scheduleRepository.d.ts +27 -0
  30. package/dist/db/repositories/scheduleRepository.d.ts.map +1 -0
  31. package/dist/db/repositories/scheduleRepository.js +187 -0
  32. package/dist/db/repositories/scheduleRepository.js.map +1 -0
  33. package/dist/db/repositories/types.d.ts +132 -0
  34. package/dist/db/repositories/types.d.ts.map +1 -0
  35. package/dist/db/repositories/types.js +5 -0
  36. package/dist/db/repositories/types.js.map +1 -0
  37. package/dist/db/schema.d.ts +742 -0
  38. package/dist/db/schema.d.ts.map +1 -0
  39. package/dist/db/schema.js +85 -0
  40. package/dist/db/schema.js.map +1 -0
  41. package/dist/index.d.ts +11 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +16 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/llm/capabilities.d.ts +56 -0
  46. package/dist/llm/capabilities.d.ts.map +1 -0
  47. package/dist/llm/capabilities.js +305 -0
  48. package/dist/llm/capabilities.js.map +1 -0
  49. package/dist/llm/index.d.ts +7 -0
  50. package/dist/llm/index.d.ts.map +1 -0
  51. package/dist/llm/index.js +10 -0
  52. package/dist/llm/index.js.map +1 -0
  53. package/dist/llm/interfaces.d.ts +249 -0
  54. package/dist/llm/interfaces.d.ts.map +1 -0
  55. package/dist/llm/interfaces.js +5 -0
  56. package/dist/llm/interfaces.js.map +1 -0
  57. package/dist/llm/providers/anthropic-compatible.d.ts +48 -0
  58. package/dist/llm/providers/anthropic-compatible.d.ts.map +1 -0
  59. package/dist/llm/providers/anthropic-compatible.js +163 -0
  60. package/dist/llm/providers/anthropic-compatible.js.map +1 -0
  61. package/dist/llm/providers/index.d.ts +14 -0
  62. package/dist/llm/providers/index.d.ts.map +1 -0
  63. package/dist/llm/providers/index.js +12 -0
  64. package/dist/llm/providers/index.js.map +1 -0
  65. package/dist/llm/providers/openai-compatible.d.ts +59 -0
  66. package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
  67. package/dist/llm/providers/openai-compatible.js +207 -0
  68. package/dist/llm/providers/openai-compatible.js.map +1 -0
  69. package/dist/services/actionService.d.ts +132 -0
  70. package/dist/services/actionService.d.ts.map +1 -0
  71. package/dist/services/actionService.js +971 -0
  72. package/dist/services/actionService.js.map +1 -0
  73. package/dist/services/branchService.d.ts +19 -0
  74. package/dist/services/branchService.d.ts.map +1 -0
  75. package/dist/services/branchService.js +50 -0
  76. package/dist/services/branchService.js.map +1 -0
  77. package/dist/services/expressionEvaluator.d.ts +16 -0
  78. package/dist/services/expressionEvaluator.d.ts.map +1 -0
  79. package/dist/services/expressionEvaluator.js +70 -0
  80. package/dist/services/expressionEvaluator.js.map +1 -0
  81. package/dist/services/factory.d.ts +43 -0
  82. package/dist/services/factory.d.ts.map +1 -0
  83. package/dist/services/factory.js +30 -0
  84. package/dist/services/factory.js.map +1 -0
  85. package/dist/services/index.d.ts +15 -0
  86. package/dist/services/index.d.ts.map +1 -0
  87. package/dist/services/index.js +17 -0
  88. package/dist/services/index.js.map +1 -0
  89. package/dist/services/interfaces.d.ts +117 -0
  90. package/dist/services/interfaces.d.ts.map +1 -0
  91. package/dist/services/interfaces.js +5 -0
  92. package/dist/services/interfaces.js.map +1 -0
  93. package/dist/services/loaders/fileLoader.d.ts +56 -0
  94. package/dist/services/loaders/fileLoader.d.ts.map +1 -0
  95. package/dist/services/loaders/fileLoader.js +161 -0
  96. package/dist/services/loaders/fileLoader.js.map +1 -0
  97. package/dist/services/loaders/index.d.ts +6 -0
  98. package/dist/services/loaders/index.d.ts.map +1 -0
  99. package/dist/services/loaders/index.js +6 -0
  100. package/dist/services/loaders/index.js.map +1 -0
  101. package/dist/services/loaders/transformers.d.ts +32 -0
  102. package/dist/services/loaders/transformers.d.ts.map +1 -0
  103. package/dist/services/loaders/transformers.js +78 -0
  104. package/dist/services/loaders/transformers.js.map +1 -0
  105. package/dist/services/mockAction.d.ts +65 -0
  106. package/dist/services/mockAction.d.ts.map +1 -0
  107. package/dist/services/mockAction.js +153 -0
  108. package/dist/services/mockAction.js.map +1 -0
  109. package/dist/services/mockBranch.d.ts +50 -0
  110. package/dist/services/mockBranch.d.ts.map +1 -0
  111. package/dist/services/mockBranch.js +75 -0
  112. package/dist/services/mockBranch.js.map +1 -0
  113. package/dist/services/mockThinking.d.ts +68 -0
  114. package/dist/services/mockThinking.d.ts.map +1 -0
  115. package/dist/services/mockThinking.js +89 -0
  116. package/dist/services/mockThinking.js.map +1 -0
  117. package/dist/services/thinkingService.d.ts +15 -0
  118. package/dist/services/thinkingService.d.ts.map +1 -0
  119. package/dist/services/thinkingService.js +117 -0
  120. package/dist/services/thinkingService.js.map +1 -0
  121. package/dist/temporal/activities/actionActivities.d.ts +15 -0
  122. package/dist/temporal/activities/actionActivities.d.ts.map +1 -0
  123. package/dist/temporal/activities/actionActivities.js +140 -0
  124. package/dist/temporal/activities/actionActivities.js.map +1 -0
  125. package/dist/temporal/activities/branchActivities.d.ts +13 -0
  126. package/dist/temporal/activities/branchActivities.d.ts.map +1 -0
  127. package/dist/temporal/activities/branchActivities.js +26 -0
  128. package/dist/temporal/activities/branchActivities.js.map +1 -0
  129. package/dist/temporal/activities/dbActivities.d.ts +14 -0
  130. package/dist/temporal/activities/dbActivities.d.ts.map +1 -0
  131. package/dist/temporal/activities/dbActivities.js +84 -0
  132. package/dist/temporal/activities/dbActivities.js.map +1 -0
  133. package/dist/temporal/activities/index.d.ts +9 -0
  134. package/dist/temporal/activities/index.d.ts.map +1 -0
  135. package/dist/temporal/activities/index.js +9 -0
  136. package/dist/temporal/activities/index.js.map +1 -0
  137. package/dist/temporal/activities/thinkingActivities.d.ts +17 -0
  138. package/dist/temporal/activities/thinkingActivities.d.ts.map +1 -0
  139. package/dist/temporal/activities/thinkingActivities.js +145 -0
  140. package/dist/temporal/activities/thinkingActivities.js.map +1 -0
  141. package/dist/temporal/activities/types.d.ts +100 -0
  142. package/dist/temporal/activities/types.d.ts.map +1 -0
  143. package/dist/temporal/activities/types.js +5 -0
  144. package/dist/temporal/activities/types.js.map +1 -0
  145. package/dist/temporal/client.d.ts +43 -0
  146. package/dist/temporal/client.d.ts.map +1 -0
  147. package/dist/temporal/client.js +75 -0
  148. package/dist/temporal/client.js.map +1 -0
  149. package/dist/temporal/index.d.ts +10 -0
  150. package/dist/temporal/index.d.ts.map +1 -0
  151. package/dist/temporal/index.js +12 -0
  152. package/dist/temporal/index.js.map +1 -0
  153. package/dist/temporal/personaCoreClient.d.ts +199 -0
  154. package/dist/temporal/personaCoreClient.d.ts.map +1 -0
  155. package/dist/temporal/personaCoreClient.js +233 -0
  156. package/dist/temporal/personaCoreClient.js.map +1 -0
  157. package/dist/temporal/personaWorker.d.ts +141 -0
  158. package/dist/temporal/personaWorker.d.ts.map +1 -0
  159. package/dist/temporal/personaWorker.js +93 -0
  160. package/dist/temporal/personaWorker.js.map +1 -0
  161. package/dist/temporal/worker.d.ts +66 -0
  162. package/dist/temporal/worker.d.ts.map +1 -0
  163. package/dist/temporal/worker.js +109 -0
  164. package/dist/temporal/worker.js.map +1 -0
  165. package/dist/temporal/workflows/index.d.ts +5 -0
  166. package/dist/temporal/workflows/index.d.ts.map +1 -0
  167. package/dist/temporal/workflows/index.js +5 -0
  168. package/dist/temporal/workflows/index.js.map +1 -0
  169. package/dist/temporal/workflows/scheduleWorkflow.d.ts +31 -0
  170. package/dist/temporal/workflows/scheduleWorkflow.d.ts.map +1 -0
  171. package/dist/temporal/workflows/scheduleWorkflow.js +256 -0
  172. package/dist/temporal/workflows/scheduleWorkflow.js.map +1 -0
  173. package/dist/types/common.d.ts +81 -0
  174. package/dist/types/common.d.ts.map +1 -0
  175. package/dist/types/common.js +5 -0
  176. package/dist/types/common.js.map +1 -0
  177. package/dist/types/index.d.ts +8 -0
  178. package/dist/types/index.d.ts.map +1 -0
  179. package/dist/types/index.js +12 -0
  180. package/dist/types/index.js.map +1 -0
  181. package/dist/types/nodes.d.ts +496 -0
  182. package/dist/types/nodes.d.ts.map +1 -0
  183. package/dist/types/nodes.js +5 -0
  184. package/dist/types/nodes.js.map +1 -0
  185. package/dist/types/persona.d.ts +59 -0
  186. package/dist/types/persona.d.ts.map +1 -0
  187. package/dist/types/persona.js +36 -0
  188. package/dist/types/persona.js.map +1 -0
  189. package/dist/types/schedule.d.ts +143 -0
  190. package/dist/types/schedule.d.ts.map +1 -0
  191. package/dist/types/schedule.js +155 -0
  192. package/dist/types/schedule.js.map +1 -0
  193. package/dist/utils/dateUtils.d.ts +31 -0
  194. package/dist/utils/dateUtils.d.ts.map +1 -0
  195. package/dist/utils/dateUtils.js +53 -0
  196. package/dist/utils/dateUtils.js.map +1 -0
  197. package/dist/utils/index.d.ts +8 -0
  198. package/dist/utils/index.d.ts.map +1 -0
  199. package/dist/utils/index.js +8 -0
  200. package/dist/utils/index.js.map +1 -0
  201. package/dist/utils/inputResolver.d.ts +43 -0
  202. package/dist/utils/inputResolver.d.ts.map +1 -0
  203. package/dist/utils/inputResolver.js +137 -0
  204. package/dist/utils/inputResolver.js.map +1 -0
  205. package/dist/utils/sharedDataUtils.d.ts +36 -0
  206. package/dist/utils/sharedDataUtils.d.ts.map +1 -0
  207. package/dist/utils/sharedDataUtils.js +84 -0
  208. package/dist/utils/sharedDataUtils.js.map +1 -0
  209. package/dist/utils/typeGuards.d.ts +33 -0
  210. package/dist/utils/typeGuards.d.ts.map +1 -0
  211. package/dist/utils/typeGuards.js +50 -0
  212. package/dist/utils/typeGuards.js.map +1 -0
  213. package/docs/add-llm-provider.md +353 -0
  214. package/docs/external/deepseek-v32.md +28 -0
  215. package/docs/quick-start.md +849 -0
  216. package/docs/suite-guide.md +148 -0
  217. package/docs/usage-guide.md +1487 -0
  218. package/package.json +80 -0
@@ -0,0 +1,199 @@
1
+ /**
2
+ * PersonaCore 高级客户端
3
+ *
4
+ * 纯 Temporal 客户端封装,不直接连接数据库。
5
+ * Schedule 通过 Workflow 输入传递,由 Worker 负责写入数据库。
6
+ */
7
+ import { Client } from '@temporalio/client';
8
+ import { ScheduleExecutionStatus } from './workflows/scheduleWorkflow.js';
9
+ import { Persona, Schedule, SharedDataValue } from '../types/index.js';
10
+ /**
11
+ * 启动参数:使用已存在的 Schedule
12
+ */
13
+ export interface StartScheduleParams {
14
+ /** 已存在于数据库中的 Schedule ID */
15
+ scheduleId: string;
16
+ }
17
+ /**
18
+ * 启动参数:传入完整的 Persona 和 Schedule 定义
19
+ */
20
+ export interface StartWithPersonaParams {
21
+ /** 完整的 Persona 定义 */
22
+ persona: Persona;
23
+ /** 完整的 Schedule 定义 */
24
+ schedule: Schedule;
25
+ }
26
+ /**
27
+ * 启动参数:传入 Persona 定义和初始思考提示
28
+ * 系统会自动创建一个只有入口思考节点的 Schedule
29
+ */
30
+ export interface StartWithThinkingParams {
31
+ /** 完整的 Persona 定义 */
32
+ persona: Persona;
33
+ /** 初始思考节点的提示 */
34
+ thinkingPrompt: string;
35
+ /** 可选:Schedule 名称 */
36
+ scheduleName?: string;
37
+ /** 可选:初始共享数据 */
38
+ initialSharedData?: Record<string, SharedDataValue>;
39
+ }
40
+ /**
41
+ * Workflow 执行句柄
42
+ */
43
+ export interface WorkflowHandle {
44
+ /** Workflow ID */
45
+ workflowId: string;
46
+ /** Schedule ID */
47
+ scheduleId: string;
48
+ /** Persona ID */
49
+ personaId: string;
50
+ /** 获取执行状态 */
51
+ getStatus(): Promise<ScheduleExecutionStatus>;
52
+ /** 暂停执行 */
53
+ pause(): Promise<void>;
54
+ /** 恢复执行 */
55
+ resume(): Promise<void>;
56
+ /** 取消执行 */
57
+ cancel(): Promise<void>;
58
+ /** 等待执行完成 */
59
+ waitForCompletion(): Promise<void>;
60
+ }
61
+ /**
62
+ * PersonaCore 客户端配置
63
+ *
64
+ * 注意:Client 不再需要数据库连接,所有数据操作由 Worker 完成。
65
+ */
66
+ export interface PersonaCoreClientConfig {
67
+ /** Temporal Server 地址(与 temporalClient 二选一) */
68
+ temporalAddress?: string;
69
+ /** 已有的 Temporal Client(与 temporalAddress 二选一,用于测试) */
70
+ temporalClient?: Client;
71
+ /** 任务队列名称 */
72
+ taskQueue: string;
73
+ }
74
+ /**
75
+ * PersonaCore 高级客户端
76
+ *
77
+ * 纯 Temporal 客户端,不直接连接数据库。
78
+ * Schedule 通过 Workflow 输入传递,由 Worker 负责持久化。
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * // 创建客户端(无需数据库配置)
83
+ * const client = await PersonaCoreClient.create({
84
+ * temporalAddress: 'localhost:7233',
85
+ * taskQueue: 'my-queue',
86
+ * });
87
+ *
88
+ * // 方式一:传入完整的 Persona 和思考提示
89
+ * const handle = await client.startWithThinking({
90
+ * persona: myPersona,
91
+ * thinkingPrompt: '帮我规划一个任务...',
92
+ * });
93
+ *
94
+ * // 方式二:传入完整的 Persona 和 Schedule
95
+ * const handle = await client.startWithPersona({
96
+ * persona: myPersona,
97
+ * schedule: mySchedule,
98
+ * });
99
+ *
100
+ * // 等待完成
101
+ * await handle.waitForCompletion();
102
+ * ```
103
+ */
104
+ export declare class PersonaCoreClient {
105
+ private client;
106
+ private taskQueue;
107
+ private constructor();
108
+ /**
109
+ * 创建 PersonaCore 客户端
110
+ */
111
+ static create(config: PersonaCoreClientConfig): Promise<PersonaCoreClient>;
112
+ /**
113
+ * 使用完整的 Persona 和 Schedule 启动 Workflow
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * const handle = await client.startWithPersona({
118
+ * persona: {
119
+ * id: 'my-persona',
120
+ * name: '示例人格',
121
+ * systemPrompt: '你是一个有帮助的助手',
122
+ * actionTypes: [...],
123
+ * createdAt: new Date(),
124
+ * updatedAt: new Date(),
125
+ * },
126
+ * schedule: {
127
+ * id: 'my-schedule',
128
+ * personaId: 'my-persona',
129
+ * name: '示例任务',
130
+ * entryNodeId: 'think-1',
131
+ * nodes: { ... },
132
+ * sharedData: { data: {}, fieldTypes: {} },
133
+ * status: 'pending',
134
+ * executionHistory: [],
135
+ * createdAt: new Date(),
136
+ * updatedAt: new Date(),
137
+ * },
138
+ * });
139
+ * ```
140
+ */
141
+ startWithPersona(params: StartWithPersonaParams): Promise<WorkflowHandle>;
142
+ /**
143
+ * 使用 Persona 和思考提示启动 Workflow
144
+ * 系统会自动创建一个只有入口思考节点的 Schedule
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const handle = await client.startWithThinking({
149
+ * persona: {
150
+ * id: 'humor-bot',
151
+ * name: '幽默机器人',
152
+ * systemPrompt: '你是一个幽默的助手...',
153
+ * actionTypes: [
154
+ * {
155
+ * kind: 'action',
156
+ * id: 'reply',
157
+ * name: '回复',
158
+ * executionType: 'llm_call',
159
+ * inputFields: [...],
160
+ * outputFields: [...],
161
+ * },
162
+ * ],
163
+ * createdAt: new Date(),
164
+ * updatedAt: new Date(),
165
+ * },
166
+ * thinkingPrompt: '用户说他今天很累,请给他一个幽默的回复',
167
+ * scheduleName: '幽默回复任务',
168
+ * });
169
+ * ```
170
+ */
171
+ startWithThinking(params: StartWithThinkingParams): Promise<WorkflowHandle>;
172
+ /**
173
+ * 使用已存在的 Schedule ID 启动 Workflow
174
+ *
175
+ * 注意:此方法假设 Schedule 已存在于数据库中。
176
+ * 如果 Schedule 不存在,Workflow 执行时会失败。
177
+ *
178
+ * @deprecated 推荐使用 startWithPersona 或 startWithThinking,它们会自动创建 Schedule
179
+ */
180
+ startSchedule(params: StartScheduleParams & {
181
+ personaId: string;
182
+ }): Promise<WorkflowHandle>;
183
+ /**
184
+ * 内部方法:启动 Workflow
185
+ * @param scheduleId - Schedule ID
186
+ * @param personaId - Persona ID
187
+ * @param schedule - 可选的完整 Schedule(首次启动时传入,由 Worker 写入数据库)
188
+ */
189
+ private startWorkflow;
190
+ /**
191
+ * 获取内部 Temporal Client
192
+ */
193
+ getTemporalClient(): Client;
194
+ /**
195
+ * 获取 Workflow Handle(用于查询已有的 Workflow)
196
+ */
197
+ getWorkflowHandle(workflowId: string): import("@temporalio/client").WorkflowHandle<import("@temporalio/client").Workflow>;
198
+ }
199
+ //# sourceMappingURL=personaCoreClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personaCoreClient.d.ts","sourceRoot":"","sources":["../../src/temporal/personaCoreClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAc,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAML,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAwB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,aAAa;IACb,SAAS,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9C,WAAW;IACX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,WAAW;IACX,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,WAAW;IACX,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,aAAa;IACb,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAKP;;OAEG;WACU,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAehF;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAyCjF;;;;;;;OAOG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAOjG;;;;;OAKG;YACW,aAAa;IAwC3B;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM;CAGrC"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * PersonaCore 高级客户端
3
+ *
4
+ * 纯 Temporal 客户端封装,不直接连接数据库。
5
+ * Schedule 通过 Workflow 输入传递,由 Worker 负责写入数据库。
6
+ */
7
+ import { Client, Connection } from '@temporalio/client';
8
+ import { v4 as uuidv4 } from 'uuid';
9
+ import { scheduleWorkflow, getStatusQuery, pauseSignal, resumeSignal, cancelSignal, } from './workflows/scheduleWorkflow.js';
10
+ /**
11
+ * PersonaCore 高级客户端
12
+ *
13
+ * 纯 Temporal 客户端,不直接连接数据库。
14
+ * Schedule 通过 Workflow 输入传递,由 Worker 负责持久化。
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // 创建客户端(无需数据库配置)
19
+ * const client = await PersonaCoreClient.create({
20
+ * temporalAddress: 'localhost:7233',
21
+ * taskQueue: 'my-queue',
22
+ * });
23
+ *
24
+ * // 方式一:传入完整的 Persona 和思考提示
25
+ * const handle = await client.startWithThinking({
26
+ * persona: myPersona,
27
+ * thinkingPrompt: '帮我规划一个任务...',
28
+ * });
29
+ *
30
+ * // 方式二:传入完整的 Persona 和 Schedule
31
+ * const handle = await client.startWithPersona({
32
+ * persona: myPersona,
33
+ * schedule: mySchedule,
34
+ * });
35
+ *
36
+ * // 等待完成
37
+ * await handle.waitForCompletion();
38
+ * ```
39
+ */
40
+ export class PersonaCoreClient {
41
+ client;
42
+ taskQueue;
43
+ constructor(client, taskQueue) {
44
+ this.client = client;
45
+ this.taskQueue = taskQueue;
46
+ }
47
+ /**
48
+ * 创建 PersonaCore 客户端
49
+ */
50
+ static async create(config) {
51
+ // 获取或创建 Temporal Client
52
+ let client;
53
+ if (config.temporalClient) {
54
+ client = config.temporalClient;
55
+ }
56
+ else if (config.temporalAddress) {
57
+ const connection = await Connection.connect({ address: config.temporalAddress });
58
+ client = new Client({ connection });
59
+ }
60
+ else {
61
+ throw new Error('Either temporalAddress or temporalClient must be provided');
62
+ }
63
+ return new PersonaCoreClient(client, config.taskQueue);
64
+ }
65
+ /**
66
+ * 使用完整的 Persona 和 Schedule 启动 Workflow
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * const handle = await client.startWithPersona({
71
+ * persona: {
72
+ * id: 'my-persona',
73
+ * name: '示例人格',
74
+ * systemPrompt: '你是一个有帮助的助手',
75
+ * actionTypes: [...],
76
+ * createdAt: new Date(),
77
+ * updatedAt: new Date(),
78
+ * },
79
+ * schedule: {
80
+ * id: 'my-schedule',
81
+ * personaId: 'my-persona',
82
+ * name: '示例任务',
83
+ * entryNodeId: 'think-1',
84
+ * nodes: { ... },
85
+ * sharedData: { data: {}, fieldTypes: {} },
86
+ * status: 'pending',
87
+ * executionHistory: [],
88
+ * createdAt: new Date(),
89
+ * updatedAt: new Date(),
90
+ * },
91
+ * });
92
+ * ```
93
+ */
94
+ async startWithPersona(params) {
95
+ const { persona, schedule } = params;
96
+ // 确保 schedule.personaId 与 persona.id 一致
97
+ if (schedule.personaId !== persona.id) {
98
+ throw new Error(`Schedule.personaId (${schedule.personaId}) must match Persona.id (${persona.id})`);
99
+ }
100
+ // 确保 schedule 包含 persona 快照
101
+ const scheduleWithPersona = {
102
+ ...schedule,
103
+ persona, // 嵌入 persona 快照
104
+ };
105
+ // 启动 Workflow,传入完整的 Schedule(由 Worker 写入数据库)
106
+ return this.startWorkflow(schedule.id, persona.id, scheduleWithPersona);
107
+ }
108
+ /**
109
+ * 使用 Persona 和思考提示启动 Workflow
110
+ * 系统会自动创建一个只有入口思考节点的 Schedule
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const handle = await client.startWithThinking({
115
+ * persona: {
116
+ * id: 'humor-bot',
117
+ * name: '幽默机器人',
118
+ * systemPrompt: '你是一个幽默的助手...',
119
+ * actionTypes: [
120
+ * {
121
+ * kind: 'action',
122
+ * id: 'reply',
123
+ * name: '回复',
124
+ * executionType: 'llm_call',
125
+ * inputFields: [...],
126
+ * outputFields: [...],
127
+ * },
128
+ * ],
129
+ * createdAt: new Date(),
130
+ * updatedAt: new Date(),
131
+ * },
132
+ * thinkingPrompt: '用户说他今天很累,请给他一个幽默的回复',
133
+ * scheduleName: '幽默回复任务',
134
+ * });
135
+ * ```
136
+ */
137
+ async startWithThinking(params) {
138
+ const { persona, thinkingPrompt, scheduleName, initialSharedData } = params;
139
+ // 生成 IDs(使用短 UUID 以确保节点 ID 不超过 64 字符限制)
140
+ const shortUuid = () => uuidv4().slice(0, 8);
141
+ const scheduleId = `sched-${shortUuid()}`;
142
+ const thinkingNodeId = `think-${shortUuid()}`;
143
+ // 创建入口思考节点
144
+ const thinkingNode = {
145
+ id: thinkingNodeId,
146
+ kind: 'thinking',
147
+ thinkingPrompt,
148
+ inputs: {},
149
+ nextNodeId: null,
150
+ };
151
+ // 创建 Schedule(包含 persona 快照)
152
+ const schedule = {
153
+ id: scheduleId,
154
+ personaId: persona.id,
155
+ persona, // 嵌入 persona 快照
156
+ name: scheduleName ?? `Task-${Date.now()}`,
157
+ entryNodeId: thinkingNodeId,
158
+ nodes: {
159
+ [thinkingNodeId]: thinkingNode,
160
+ },
161
+ sharedData: {
162
+ data: initialSharedData ?? {},
163
+ fieldTypes: {},
164
+ },
165
+ status: 'pending',
166
+ executionHistory: [],
167
+ createdAt: new Date(),
168
+ updatedAt: new Date(),
169
+ };
170
+ // 使用 startWithPersona 完成剩余工作
171
+ return this.startWithPersona({ persona, schedule });
172
+ }
173
+ /**
174
+ * 使用已存在的 Schedule ID 启动 Workflow
175
+ *
176
+ * 注意:此方法假设 Schedule 已存在于数据库中。
177
+ * 如果 Schedule 不存在,Workflow 执行时会失败。
178
+ *
179
+ * @deprecated 推荐使用 startWithPersona 或 startWithThinking,它们会自动创建 Schedule
180
+ */
181
+ async startSchedule(params) {
182
+ const { scheduleId, personaId } = params;
183
+ // 启动 Workflow(不传入 schedule,假设已存在)
184
+ return this.startWorkflow(scheduleId, personaId);
185
+ }
186
+ /**
187
+ * 内部方法:启动 Workflow
188
+ * @param scheduleId - Schedule ID
189
+ * @param personaId - Persona ID
190
+ * @param schedule - 可选的完整 Schedule(首次启动时传入,由 Worker 写入数据库)
191
+ */
192
+ async startWorkflow(scheduleId, personaId, schedule) {
193
+ const handle = await this.client.workflow.start(scheduleWorkflow, {
194
+ args: [{ scheduleId, schedule }],
195
+ taskQueue: this.taskQueue,
196
+ workflowId: `schedule-${scheduleId}`,
197
+ });
198
+ const workflowId = handle.workflowId;
199
+ return {
200
+ workflowId,
201
+ scheduleId,
202
+ personaId,
203
+ async getStatus() {
204
+ return handle.query(getStatusQuery);
205
+ },
206
+ async pause() {
207
+ await handle.signal(pauseSignal);
208
+ },
209
+ async resume() {
210
+ await handle.signal(resumeSignal);
211
+ },
212
+ async cancel() {
213
+ await handle.signal(cancelSignal);
214
+ },
215
+ async waitForCompletion() {
216
+ await handle.result();
217
+ },
218
+ };
219
+ }
220
+ /**
221
+ * 获取内部 Temporal Client
222
+ */
223
+ getTemporalClient() {
224
+ return this.client;
225
+ }
226
+ /**
227
+ * 获取 Workflow Handle(用于查询已有的 Workflow)
228
+ */
229
+ getWorkflowHandle(workflowId) {
230
+ return this.client.workflow.getHandle(workflowId);
231
+ }
232
+ }
233
+ //# sourceMappingURL=personaCoreClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personaCoreClient.js","sourceRoot":"","sources":["../../src/temporal/personaCoreClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Persona Worker 简化创建函数
3
+ *
4
+ * 提供开箱即用的 Worker 创建方式,用户只需提供:
5
+ * - LLM Provider
6
+ * - Temporal 地址
7
+ * - 可选的 PostgreSQL 连接字符串
8
+ */
9
+ import { LLMProvider } from '../llm/interfaces.js';
10
+ import { DatabaseHandle } from '../db/client.js';
11
+ import { WorkerHandle } from './worker.js';
12
+ /**
13
+ * PersonaWorker 配置
14
+ */
15
+ export interface PersonaWorkerConfig {
16
+ /**
17
+ * Temporal Server 地址(与 nativeConnection 二选一)
18
+ * @example "localhost:7233"
19
+ */
20
+ temporalAddress?: string;
21
+ /**
22
+ * 已有的 NativeConnection(与 temporalAddress 二选一,用于测试)
23
+ * 如果提供,将使用此连接而不是创建新连接
24
+ */
25
+ nativeConnection?: import('@temporalio/worker').NativeConnection;
26
+ /**
27
+ * Temporal 任务队列名称
28
+ * @default "persona-core-queue"
29
+ */
30
+ taskQueue?: string;
31
+ /**
32
+ * LLM 提供者(必需)
33
+ * 用于思考节点、内容生成、分支决策等
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * import { OpenAICompatibleProvider } from 'persona-core';
38
+ *
39
+ * const llmProvider = new OpenAICompatibleProvider({
40
+ * apiKey: 'your-api-key',
41
+ * baseUrl: 'https://api.openai.com/v1',
42
+ * model: 'gpt-4',
43
+ * });
44
+ * ```
45
+ */
46
+ llmProvider: LLMProvider;
47
+ /**
48
+ * 可选:为不同场景配置不同的 LLM 提供者
49
+ */
50
+ providers?: {
51
+ /** 规划专用 Provider(用于思考节点,可能需要更强大的模型) */
52
+ planning?: LLMProvider;
53
+ /** 分支决策专用 Provider(可使用更快的模型以降低延迟) */
54
+ branch?: LLMProvider;
55
+ /** 内容生成专用 Provider(可使用领域优化的模型) */
56
+ content?: LLMProvider;
57
+ };
58
+ /**
59
+ * 可选:PostgreSQL 数据库连接字符串
60
+ * 如果不提供,将使用 PGlite 内存数据库
61
+ *
62
+ * @example "postgres://user:password@localhost:5432/persona_pilot"
63
+ */
64
+ postgresUrl?: string;
65
+ /**
66
+ * 可选:已有的数据库句柄(用于测试或共享数据库)
67
+ * 如果提供,将忽略 postgresUrl
68
+ */
69
+ databaseHandle?: DatabaseHandle;
70
+ /**
71
+ * 可选:文件操作配置
72
+ */
73
+ fileConfig?: {
74
+ /** 文件操作的基础目录 */
75
+ baseDir?: string;
76
+ /** 最大文件大小(字节) */
77
+ maxFileSize?: number;
78
+ };
79
+ /**
80
+ * 可选:Temporal 连接超时时间(毫秒)
81
+ * @default 10000
82
+ */
83
+ connectTimeout?: number;
84
+ }
85
+ /**
86
+ * PersonaWorker 句柄
87
+ * 包含 Worker 实例和资源清理方法
88
+ */
89
+ export interface PersonaWorkerHandle {
90
+ /** Temporal Worker 句柄 */
91
+ workerHandle: WorkerHandle;
92
+ /** 数据库句柄 */
93
+ databaseHandle: DatabaseHandle;
94
+ /**
95
+ * 优雅关闭所有资源
96
+ * 包括 Worker、Temporal 连接和数据库连接
97
+ */
98
+ shutdown: () => Promise<void>;
99
+ }
100
+ /**
101
+ * 创建 PersonaWorker
102
+ *
103
+ * 简化的 Worker 创建函数,自动使用默认的服务实现。
104
+ * 用户只需提供 LLM Provider 和 Temporal 地址即可。
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * import { createPersonaWorker, OpenAICompatibleProvider } from 'persona-core';
109
+ *
110
+ * // 使用 PGlite 内存数据库(开发/测试)
111
+ * const worker = await createPersonaWorker({
112
+ * temporalAddress: 'localhost:7233',
113
+ * llmProvider: new OpenAICompatibleProvider({
114
+ * apiKey: process.env.OPENAI_API_KEY!,
115
+ * model: 'gpt-4',
116
+ * }),
117
+ * });
118
+ *
119
+ * // 运行 Worker
120
+ * await worker.workerHandle.worker.run();
121
+ *
122
+ * // 优雅关闭
123
+ * await worker.shutdown();
124
+ * ```
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * // 使用 PostgreSQL 数据库(生产)
129
+ * const worker = await createPersonaWorker({
130
+ * temporalAddress: 'temporal.example.com:7233',
131
+ * postgresUrl: 'postgres://user:pass@db.example.com:5432/persona_pilot',
132
+ * llmProvider: new OpenAICompatibleProvider({
133
+ * apiKey: process.env.OPENAI_API_KEY!,
134
+ * baseUrl: 'https://api.openai.com/v1',
135
+ * model: 'gpt-4-turbo',
136
+ * }),
137
+ * });
138
+ * ```
139
+ */
140
+ export declare function createPersonaWorker(config: PersonaWorkerConfig): Promise<PersonaWorkerHandle>;
141
+ //# sourceMappingURL=personaWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personaWorker.d.ts","sourceRoot":"","sources":["../../src/temporal/personaWorker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAkB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAA8B,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,oBAAoB,EAAE,gBAAgB,CAAC;IAEjE;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;;OAcG;IACH,WAAW,EAAE,WAAW,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,uCAAuC;QACvC,QAAQ,CAAC,EAAE,WAAW,CAAC;QACvB,qCAAqC;QACrC,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,kCAAkC;QAClC,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB,CAAC;IAEF;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,EAAE;QACX,gBAAgB;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY;IACZ,cAAc,EAAE,cAAc,CAAC;IAC/B;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CA6C9B"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Persona Worker 简化创建函数
3
+ *
4
+ * 提供开箱即用的 Worker 创建方式,用户只需提供:
5
+ * - LLM Provider
6
+ * - Temporal 地址
7
+ * - 可选的 PostgreSQL 连接字符串
8
+ */
9
+ import { createServices } from '../services/factory.js';
10
+ import { createDatabase } from '../db/client.js';
11
+ import { createWorker } from './worker.js';
12
+ /**
13
+ * 创建 PersonaWorker
14
+ *
15
+ * 简化的 Worker 创建函数,自动使用默认的服务实现。
16
+ * 用户只需提供 LLM Provider 和 Temporal 地址即可。
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { createPersonaWorker, OpenAICompatibleProvider } from 'persona-core';
21
+ *
22
+ * // 使用 PGlite 内存数据库(开发/测试)
23
+ * const worker = await createPersonaWorker({
24
+ * temporalAddress: 'localhost:7233',
25
+ * llmProvider: new OpenAICompatibleProvider({
26
+ * apiKey: process.env.OPENAI_API_KEY!,
27
+ * model: 'gpt-4',
28
+ * }),
29
+ * });
30
+ *
31
+ * // 运行 Worker
32
+ * await worker.workerHandle.worker.run();
33
+ *
34
+ * // 优雅关闭
35
+ * await worker.shutdown();
36
+ * ```
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * // 使用 PostgreSQL 数据库(生产)
41
+ * const worker = await createPersonaWorker({
42
+ * temporalAddress: 'temporal.example.com:7233',
43
+ * postgresUrl: 'postgres://user:pass@db.example.com:5432/persona_pilot',
44
+ * llmProvider: new OpenAICompatibleProvider({
45
+ * apiKey: process.env.OPENAI_API_KEY!,
46
+ * baseUrl: 'https://api.openai.com/v1',
47
+ * model: 'gpt-4-turbo',
48
+ * }),
49
+ * });
50
+ * ```
51
+ */
52
+ export async function createPersonaWorker(config) {
53
+ // 1. 创建或使用已有的数据库连接
54
+ const ownDatabase = !config.databaseHandle;
55
+ const databaseHandle = config.databaseHandle ?? await createDatabase(config.postgresUrl);
56
+ // 2. 创建服务配置
57
+ const serviceConfig = {
58
+ llmProvider: config.llmProvider,
59
+ planningProvider: config.providers?.planning,
60
+ branchProvider: config.providers?.branch,
61
+ contentProvider: config.providers?.content,
62
+ fileConfig: config.fileConfig,
63
+ };
64
+ // 3. 使用工厂创建所有默认服务
65
+ const services = createServices(serviceConfig);
66
+ // 4. 创建 Worker 配置
67
+ const workerConfig = {
68
+ temporalAddress: config.temporalAddress,
69
+ nativeConnection: config.nativeConnection,
70
+ taskQueue: config.taskQueue ?? 'persona-core-queue',
71
+ db: databaseHandle.db,
72
+ thinkingService: services.thinkingService,
73
+ actionService: services.actionService,
74
+ branchService: services.branchService,
75
+ connectTimeout: config.connectTimeout,
76
+ };
77
+ // 5. 创建 Worker
78
+ const workerHandle = await createWorker(workerConfig);
79
+ // 6. 返回句柄
80
+ return {
81
+ workerHandle,
82
+ databaseHandle,
83
+ shutdown: async () => {
84
+ // 优雅关闭 Worker
85
+ await workerHandle.shutdown();
86
+ // 只有自己创建的数据库连接才需要关闭
87
+ if (ownDatabase) {
88
+ await databaseHandle.close();
89
+ }
90
+ },
91
+ };
92
+ }
93
+ //# sourceMappingURL=personaWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personaWorker.js","sourceRoot":"","sources":["../../src/temporal/personaWorker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAiB,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,YAAY,EAA8B,MAAM,aAAa,CAAC;AAoGvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA2B;IAE3B,mBAAmB;IACnB,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;IAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEzF,YAAY;IACZ,MAAM,aAAa,GAAkB;QACnC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ;QAC5C,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM;QACxC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO;QAC1C,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,kBAAkB;IAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAE/C,kBAAkB;IAClB,MAAM,YAAY,GAAiB;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,oBAAoB;QACnD,EAAE,EAAE,cAAc,CAAC,EAAE;QACrB,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC;IAEF,eAAe;IACf,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAEtD,UAAU;IACV,OAAO;QACL,YAAY;QACZ,cAAc;QACd,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,cAAc;YACd,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC9B,oBAAoB;YACpB,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}