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,161 @@
1
+ /**
2
+ * File Loader
3
+ * 读取本地文件内容,用于 Template Loader 表达式
4
+ */
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ /**
8
+ * 敏感文件模式
9
+ * 禁止读取这些文件以保护安全
10
+ */
11
+ const FORBIDDEN_PATTERNS = [
12
+ /\.env$/i,
13
+ /\.env\.\w+$/i, // .env.local, .env.production 等
14
+ /keys\.json$/i,
15
+ /\.pem$/i,
16
+ /\.key$/i,
17
+ /id_rsa$/i,
18
+ /id_ed25519$/i,
19
+ /\.p12$/i,
20
+ /\.pfx$/i,
21
+ /credentials\.json$/i,
22
+ /secrets?\.(json|ya?ml)$/i,
23
+ ];
24
+ /**
25
+ * MIME 类型映射
26
+ */
27
+ const MIME_TYPES = {
28
+ // 图片
29
+ '.png': 'image/png',
30
+ '.jpg': 'image/jpeg',
31
+ '.jpeg': 'image/jpeg',
32
+ '.gif': 'image/gif',
33
+ '.webp': 'image/webp',
34
+ '.svg': 'image/svg+xml',
35
+ '.bmp': 'image/bmp',
36
+ '.ico': 'image/x-icon',
37
+ '.tiff': 'image/tiff',
38
+ '.tif': 'image/tiff',
39
+ // 视频
40
+ '.mp4': 'video/mp4',
41
+ '.webm': 'video/webm',
42
+ '.avi': 'video/x-msvideo',
43
+ '.mov': 'video/quicktime',
44
+ '.mkv': 'video/x-matroska',
45
+ // 音频
46
+ '.mp3': 'audio/mpeg',
47
+ '.wav': 'audio/wav',
48
+ '.ogg': 'audio/ogg',
49
+ '.flac': 'audio/flac',
50
+ // 文本
51
+ '.txt': 'text/plain',
52
+ '.html': 'text/html',
53
+ '.htm': 'text/html',
54
+ '.css': 'text/css',
55
+ '.csv': 'text/csv',
56
+ '.xml': 'text/xml',
57
+ '.md': 'text/markdown',
58
+ // 数据
59
+ '.json': 'application/json',
60
+ '.js': 'application/javascript',
61
+ '.ts': 'application/typescript',
62
+ '.pdf': 'application/pdf',
63
+ '.zip': 'application/zip',
64
+ '.tar': 'application/x-tar',
65
+ '.gz': 'application/gzip',
66
+ };
67
+ /**
68
+ * FileLoader 类
69
+ * 负责安全地读取本地文件
70
+ */
71
+ export class FileLoader {
72
+ baseDir;
73
+ maxFileSize;
74
+ constructor(
75
+ /** 基础目录,所有相对路径都相对于此目录 */
76
+ baseDir,
77
+ /** 最大文件大小(字节) */
78
+ maxFileSize = 50 * 1024 * 1024 // 50MB
79
+ ) {
80
+ this.baseDir = baseDir;
81
+ this.maxFileSize = maxFileSize;
82
+ }
83
+ /**
84
+ * 加载文件
85
+ *
86
+ * @param filePath 文件路径(相对或绝对)
87
+ * @param options 加载选项
88
+ * @returns 加载结果
89
+ */
90
+ async load(filePath, options = {}) {
91
+ // 解析完整路径
92
+ const fullPath = path.isAbsolute(filePath)
93
+ ? filePath
94
+ : path.resolve(this.baseDir, filePath);
95
+ // 安全检查:路径遍历防护
96
+ const normalizedPath = path.normalize(fullPath);
97
+ const normalizedBase = path.normalize(this.baseDir);
98
+ if (!normalizedPath.startsWith(normalizedBase)) {
99
+ throw new Error(`File path must be within base directory: ${this.baseDir}. ` +
100
+ `Attempted path: ${filePath}`);
101
+ }
102
+ // 安全检查:敏感文件保护
103
+ if (this.isForbiddenPath(normalizedPath)) {
104
+ throw new Error(`Access to sensitive files is forbidden: ${path.basename(filePath)}`);
105
+ }
106
+ // 检查文件是否存在
107
+ try {
108
+ await fs.access(normalizedPath);
109
+ }
110
+ catch {
111
+ throw new Error(`File not found: ${filePath}`);
112
+ }
113
+ // 获取文件信息
114
+ const stats = await fs.stat(normalizedPath);
115
+ // 检查文件大小
116
+ if (stats.size > this.maxFileSize) {
117
+ throw new Error(`File too large: ${stats.size} bytes (max: ${this.maxFileSize} bytes). ` +
118
+ `File: ${filePath}`);
119
+ }
120
+ // 确定 MIME 类型
121
+ const mimeType = this.detectMimeType(normalizedPath);
122
+ // 判断是否需要二进制模式
123
+ // 如果明确指定 binary 或者是二进制文件类型,使用二进制模式
124
+ const needsBinary = options.binary ?? this.isBinaryMimeType(mimeType);
125
+ // 读取文件
126
+ const buffer = await fs.readFile(normalizedPath);
127
+ return {
128
+ value: needsBinary ? buffer : buffer.toString('utf-8'),
129
+ mimeType,
130
+ };
131
+ }
132
+ /**
133
+ * 检测文件的 MIME 类型
134
+ */
135
+ detectMimeType(filePath) {
136
+ const ext = path.extname(filePath).toLowerCase();
137
+ return MIME_TYPES[ext] ?? 'application/octet-stream';
138
+ }
139
+ /**
140
+ * 检查 MIME 类型是否为二进制类型
141
+ */
142
+ isBinaryMimeType(mimeType) {
143
+ // 文本类型不是二进制
144
+ if (mimeType.startsWith('text/')) {
145
+ return false;
146
+ }
147
+ // JSON 和 JavaScript 是文本
148
+ if (mimeType === 'application/json' || mimeType === 'application/javascript') {
149
+ return false;
150
+ }
151
+ // 其他都视为二进制
152
+ return true;
153
+ }
154
+ /**
155
+ * 检查路径是否是被禁止的敏感文件
156
+ */
157
+ isForbiddenPath(filePath) {
158
+ return FORBIDDEN_PATTERNS.some(pattern => pattern.test(filePath));
159
+ }
160
+ }
161
+ //# sourceMappingURL=fileLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileLoader.js","sourceRoot":"","sources":["../../../src/services/loaders/fileLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Template Loaders 模块导出
3
+ */
4
+ export { FileLoader, type LoaderResult, type FileLoadOptions } from './fileLoader.js';
5
+ export { builtinTransformers, applyTransformers, type Transformer, type TransformerContext } from './transformers.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/loaders/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Template Loaders 模块导出
3
+ */
4
+ export { FileLoader } from './fileLoader.js';
5
+ export { builtinTransformers, applyTransformers } from './transformers.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/loaders/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAA2C,MAAM,iBAAiB,CAAC;AACtF,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Template Loader Transformers
3
+ * 用于在 Loader 处理后对数据进行转换
4
+ */
5
+ /**
6
+ * Transformer 上下文
7
+ * 包含转换过程中需要的元数据
8
+ */
9
+ export interface TransformerContext {
10
+ /** 文件的 MIME 类型 */
11
+ mimeType?: string;
12
+ }
13
+ /**
14
+ * Transformer 函数类型
15
+ * 接收值和上下文,返回转换后的值
16
+ */
17
+ export type Transformer = (value: string | Buffer, context: TransformerContext) => string | Buffer;
18
+ /**
19
+ * 内置 Transformer 集合
20
+ */
21
+ export declare const builtinTransformers: Record<string, Transformer>;
22
+ /**
23
+ * 应用转换器链
24
+ * 按顺序执行所有转换器
25
+ *
26
+ * @param value 初始值
27
+ * @param transformerNames 转换器名称数组
28
+ * @param context 转换上下文
29
+ * @returns 转换后的值
30
+ */
31
+ export declare function applyTransformers(value: string | Buffer, transformerNames: string[], context: TransformerContext): string | Buffer;
32
+ //# sourceMappingURL=transformers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../../src/services/loaders/transformers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,kBAAkB;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,EAAE,kBAAkB,KACxB,MAAM,GAAG,MAAM,CAAC;AAErB;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiD3D,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,OAAO,EAAE,kBAAkB,GAC1B,MAAM,GAAG,MAAM,CAgBjB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Template Loader Transformers
3
+ * 用于在 Loader 处理后对数据进行转换
4
+ */
5
+ /**
6
+ * 内置 Transformer 集合
7
+ */
8
+ export const builtinTransformers = {
9
+ /**
10
+ * Base64 编码转换器
11
+ * 将 Buffer 或字符串转换为 base64 编码的字符串
12
+ */
13
+ base64: (value, _ctx) => {
14
+ if (Buffer.isBuffer(value)) {
15
+ return value.toString('base64');
16
+ }
17
+ return Buffer.from(value).toString('base64');
18
+ },
19
+ /**
20
+ * Data URI 转换器
21
+ * 将 base64 字符串转换为 Data URI 格式
22
+ * 输入应为 base64 字符串,通常与 base64 transformer 配合使用
23
+ *
24
+ * 示例输出: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA..."
25
+ */
26
+ dataUri: (value, ctx) => {
27
+ if (typeof value !== 'string') {
28
+ throw new Error('dataUri transformer requires string input (base64). Use base64 transformer first.');
29
+ }
30
+ const mimeType = ctx.mimeType ?? 'application/octet-stream';
31
+ return `data:${mimeType};base64,${value}`;
32
+ },
33
+ /**
34
+ * JSON 序列化转换器
35
+ * 将值序列化为 JSON 字符串
36
+ */
37
+ json: (value, _ctx) => {
38
+ if (Buffer.isBuffer(value)) {
39
+ // 对于 Buffer,转换为 base64 后再序列化
40
+ return JSON.stringify(value.toString('base64'));
41
+ }
42
+ return JSON.stringify(value);
43
+ },
44
+ /**
45
+ * Trim 转换器
46
+ * 去除字符串首尾的空白字符
47
+ */
48
+ trim: (value, _ctx) => {
49
+ if (typeof value !== 'string') {
50
+ throw new Error('trim transformer requires string input');
51
+ }
52
+ return value.trim();
53
+ },
54
+ };
55
+ /**
56
+ * 应用转换器链
57
+ * 按顺序执行所有转换器
58
+ *
59
+ * @param value 初始值
60
+ * @param transformerNames 转换器名称数组
61
+ * @param context 转换上下文
62
+ * @returns 转换后的值
63
+ */
64
+ export function applyTransformers(value, transformerNames, context) {
65
+ let result = value;
66
+ for (const transformerName of transformerNames) {
67
+ // 跳过 binary,它是 loader 内部选项
68
+ if (transformerName === 'binary')
69
+ continue;
70
+ const transformer = builtinTransformers[transformerName];
71
+ if (!transformer) {
72
+ throw new Error(`Unknown transformer: ${transformerName}. Available: ${Object.keys(builtinTransformers).join(', ')}`);
73
+ }
74
+ result = transformer(result, context);
75
+ }
76
+ return result;
77
+ }
78
+ //# sourceMappingURL=transformers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../../src/services/loaders/transformers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAsB,EAAE,IAAwB,EAAU,EAAE;QACnE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,KAAsB,EAAE,GAAuB,EAAU,EAAE;QACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,0BAA0B,CAAC;QAC5D,OAAO,QAAQ,QAAQ,WAAW,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAsB,EAAE,IAAwB,EAAU,EAAE;QACjE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,6BAA6B;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAsB,EAAE,IAAwB,EAAU,EAAE;QACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,gBAA0B,EAC1B,OAA2B;IAE3B,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;QAC/C,2BAA2B;QAC3B,IAAI,eAAe,KAAK,QAAQ;YAAE,SAAS;QAE3C,MAAM,WAAW,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,eAAe,gBAAgB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxH,CAAC;QAED,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Mock 动作节点服务
3
+ * 用于测试环境模拟 Action 执行
4
+ */
5
+ import { ActionService, ActionContext, ActionResult, TaskStatus, MockService } from './interfaces.js';
6
+ import { ActionNodeType } from '../types/index.js';
7
+ /**
8
+ * Mock 动作配置
9
+ */
10
+ export interface MockActionConfig {
11
+ /** 预定义的输出结果 */
12
+ outputs?: Record<string, unknown> | (() => Record<string, unknown>);
13
+ /** 模拟延迟 (ms) */
14
+ delayMs?: number;
15
+ /** 是否为异步任务 */
16
+ isAsync?: boolean;
17
+ /** 异步任务需要的轮询次数 */
18
+ pollCount?: number;
19
+ /** 是否模拟失败 */
20
+ shouldFail?: boolean;
21
+ /** 失败时机 */
22
+ failureType?: 'immediate' | 'after_submit' | 'after_polls' | 'timeout';
23
+ /** 失败错误信息 */
24
+ failureMessage?: string;
25
+ /** 进度模拟(异步任务) */
26
+ progressSteps?: number[];
27
+ }
28
+ /**
29
+ * Mock 动作服务实现
30
+ */
31
+ export declare class MockActionService implements ActionService, MockService {
32
+ private configs;
33
+ private defaultConfig;
34
+ private asyncTasks;
35
+ private callHistory;
36
+ /**
37
+ * 配置特定动作类型的 Mock 行为
38
+ */
39
+ configureAction(actionTypeId: string, config: MockActionConfig): void;
40
+ /**
41
+ * 设置默认配置
42
+ */
43
+ setDefaultConfig(config: MockActionConfig): void;
44
+ /**
45
+ * 重置服务状态
46
+ */
47
+ reset(): void;
48
+ /**
49
+ * 获取调用历史
50
+ */
51
+ getCallHistory(): {
52
+ actionTypeId: string;
53
+ method: "executeSync" | "submitAsyncTask" | "checkTaskStatus" | "getTaskResult";
54
+ args: unknown[];
55
+ }[];
56
+ /**
57
+ * 获取活跃的异步任务数量
58
+ */
59
+ getActiveTaskCount(): number;
60
+ executeSync(actionType: ActionNodeType, context: ActionContext): Promise<ActionResult>;
61
+ submitAsyncTask(actionType: ActionNodeType, context: ActionContext): Promise<string>;
62
+ checkTaskStatus(taskId: string): Promise<TaskStatus>;
63
+ getTaskResult(taskId: string): Promise<ActionResult>;
64
+ }
65
+ //# sourceMappingURL=mockAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockAction.d.ts","sourceRoot":"","sources":["../../src/services/mockAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW;IACX,WAAW,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IACvE,aAAa;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAkBD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa,EAAE,WAAW;IAClE,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,WAAW,CAIX;IAER;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIrE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,cAAc;sBAhCE,MAAM;gBACZ,aAAa,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,eAAe;cACzE,OAAO,EAAE;;IAkCjB;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAItB,WAAW,CACf,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC;IA2BlB,eAAe,CACnB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IAqCZ,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA4CpD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CA2B3D"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Mock 动作节点服务
3
+ * 用于测试环境模拟 Action 执行
4
+ */
5
+ /**
6
+ * Mock 动作服务实现
7
+ */
8
+ export class MockActionService {
9
+ configs = new Map();
10
+ defaultConfig = {};
11
+ asyncTasks = new Map();
12
+ callHistory = [];
13
+ /**
14
+ * 配置特定动作类型的 Mock 行为
15
+ */
16
+ configureAction(actionTypeId, config) {
17
+ this.configs.set(actionTypeId, config);
18
+ }
19
+ /**
20
+ * 设置默认配置
21
+ */
22
+ setDefaultConfig(config) {
23
+ this.defaultConfig = config;
24
+ }
25
+ /**
26
+ * 重置服务状态
27
+ */
28
+ reset() {
29
+ this.configs.clear();
30
+ this.asyncTasks.clear();
31
+ this.callHistory = [];
32
+ this.defaultConfig = {};
33
+ }
34
+ /**
35
+ * 获取调用历史
36
+ */
37
+ getCallHistory() {
38
+ return [...this.callHistory];
39
+ }
40
+ /**
41
+ * 获取活跃的异步任务数量
42
+ */
43
+ getActiveTaskCount() {
44
+ return this.asyncTasks.size;
45
+ }
46
+ async executeSync(actionType, context) {
47
+ this.callHistory.push({
48
+ actionTypeId: actionType.id,
49
+ method: 'executeSync',
50
+ args: [actionType, context],
51
+ });
52
+ const config = this.configs.get(actionType.id) ?? this.defaultConfig;
53
+ // 模拟延迟
54
+ if (config.delayMs) {
55
+ await new Promise(resolve => setTimeout(resolve, config.delayMs));
56
+ }
57
+ // 模拟失败
58
+ if (config.shouldFail && config.failureType === 'immediate') {
59
+ throw new Error(config.failureMessage ?? `Action ${actionType.id} failed`);
60
+ }
61
+ // 获取输出
62
+ const outputs = typeof config.outputs === 'function'
63
+ ? config.outputs()
64
+ : (config.outputs ?? {});
65
+ return { outputs };
66
+ }
67
+ async submitAsyncTask(actionType, context) {
68
+ this.callHistory.push({
69
+ actionTypeId: actionType.id,
70
+ method: 'submitAsyncTask',
71
+ args: [actionType, context],
72
+ });
73
+ const config = this.configs.get(actionType.id) ?? this.defaultConfig;
74
+ // 模拟提交失败
75
+ if (config.shouldFail && config.failureType === 'after_submit') {
76
+ throw new Error(config.failureMessage ?? 'Failed to submit async task');
77
+ }
78
+ // 创建任务
79
+ const taskId = `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
80
+ const totalPolls = config.pollCount ?? 3;
81
+ const progressSteps = config.progressSteps ??
82
+ Array.from({ length: totalPolls }, (_, i) => Math.floor((100 / totalPolls) * (i + 1)));
83
+ this.asyncTasks.set(taskId, {
84
+ actionTypeId: actionType.id,
85
+ inputs: context.resolvedInputs,
86
+ currentPollIndex: 0,
87
+ totalPolls,
88
+ currentProgress: 0,
89
+ progressSteps,
90
+ config,
91
+ createdAt: Date.now(),
92
+ });
93
+ return taskId;
94
+ }
95
+ async checkTaskStatus(taskId) {
96
+ this.callHistory.push({
97
+ actionTypeId: '',
98
+ method: 'checkTaskStatus',
99
+ args: [taskId],
100
+ });
101
+ const task = this.asyncTasks.get(taskId);
102
+ if (!task) {
103
+ return {
104
+ completed: false,
105
+ failed: true,
106
+ error: 'Task not found',
107
+ };
108
+ }
109
+ // 递增轮询计数
110
+ task.currentPollIndex++;
111
+ // 更新进度
112
+ const progress = task.progressSteps[task.currentPollIndex - 1] ?? 100;
113
+ task.currentProgress = progress;
114
+ // 检查是否完成
115
+ const completed = task.currentPollIndex >= task.totalPolls;
116
+ // 模拟轮询后失败
117
+ if (task.config.shouldFail && task.config.failureType === 'after_polls' && completed) {
118
+ return {
119
+ completed: false,
120
+ failed: true,
121
+ error: task.config.failureMessage ?? 'Task failed after processing',
122
+ progress: task.currentProgress,
123
+ };
124
+ }
125
+ return {
126
+ completed,
127
+ failed: false,
128
+ progress: task.currentProgress,
129
+ };
130
+ }
131
+ async getTaskResult(taskId) {
132
+ this.callHistory.push({
133
+ actionTypeId: '',
134
+ method: 'getTaskResult',
135
+ args: [taskId],
136
+ });
137
+ const task = this.asyncTasks.get(taskId);
138
+ if (!task) {
139
+ throw new Error('Task not found');
140
+ }
141
+ if (task.currentPollIndex < task.totalPolls) {
142
+ throw new Error('Task not completed yet');
143
+ }
144
+ // 获取输出
145
+ const outputs = typeof task.config.outputs === 'function'
146
+ ? task.config.outputs()
147
+ : (task.config.outputs ?? {});
148
+ // 清理任务
149
+ this.asyncTasks.delete(taskId);
150
+ return { outputs };
151
+ }
152
+ }
153
+ //# sourceMappingURL=mockAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockAction.js","sourceRoot":"","sources":["../../src/services/mockAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Mock 分支决策服务
3
+ * 用于测试环境模拟分支决策
4
+ */
5
+ import { BranchService, BranchResult, MockService } from './interfaces.js';
6
+ import { BranchNodeInstance, SharedDataInstance } from '../types/index.js';
7
+ /**
8
+ * Mock 分支配置
9
+ */
10
+ export interface MockBranchConfig {
11
+ /** 预定义的分支选择结果 */
12
+ selectedBranchId?: string;
13
+ /** 动态决策函数 */
14
+ decisionFn?: (node: BranchNodeInstance, inputs: Record<string, unknown>) => string;
15
+ /** 模拟延迟 (ms) */
16
+ delayMs?: number;
17
+ /** 是否模拟失败 */
18
+ shouldFail?: boolean;
19
+ /** 失败错误信息 */
20
+ failureMessage?: string;
21
+ }
22
+ /**
23
+ * Mock 分支服务实现
24
+ */
25
+ export declare class MockBranchService implements BranchService, MockService {
26
+ private configs;
27
+ private defaultConfig;
28
+ private callHistory;
29
+ /**
30
+ * 配置特定节点的 Mock 行为
31
+ */
32
+ configure(nodeId: string, config: MockBranchConfig): void;
33
+ /**
34
+ * 设置默认配置
35
+ */
36
+ setDefaultConfig(config: MockBranchConfig): void;
37
+ /**
38
+ * 重置服务状态
39
+ */
40
+ reset(): void;
41
+ /**
42
+ * 获取调用历史(用于断言)
43
+ */
44
+ getCallHistory(): Array<{
45
+ nodeId: string;
46
+ inputs: Record<string, unknown>;
47
+ }>;
48
+ evaluateBranch(node: BranchNodeInstance, inputs: Record<string, unknown>, _sharedData: SharedDataInstance): Promise<BranchResult>;
49
+ }
50
+ //# sourceMappingURL=mockBranch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockBranch.d.ts","sourceRoot":"","sources":["../../src/services/mockBranch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa;IACb,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IACnF,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa,EAAE,WAAW;IAClE,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAkE;IAErF;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIzD;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAItE,cAAc,CAClB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,YAAY,CAAC;CAwCzB"}