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,207 @@
1
+ /**
2
+ * OpenAI 兼容格式 LLM Provider
3
+ *
4
+ * 支持所有使用 OpenAI API 格式的服务:
5
+ * - OpenAI
6
+ * - DeepSeek
7
+ * - Groq
8
+ * - Together AI
9
+ * - Fireworks AI
10
+ * - OpenRouter
11
+ * - LiteLLM 代理
12
+ * - 大多数国产大模型 API
13
+ */
14
+ /**
15
+ * OpenAI 兼容格式 Provider
16
+ *
17
+ * 使用 OpenAI Chat Completions API 格式:
18
+ * - Endpoint: /chat/completions
19
+ * - 请求体: { model, messages, temperature, max_tokens, ... }
20
+ */
21
+ export class OpenAICompatibleProvider {
22
+ name;
23
+ config;
24
+ endpoint;
25
+ constructor(config) {
26
+ let baseUrl = config.baseUrl ?? 'https://api.openai.com/v1';
27
+ // 移除尾部斜杠
28
+ baseUrl = baseUrl.replace(/\/$/, '');
29
+ // 如果以 /chat/completions 结尾,移除它
30
+ if (baseUrl.endsWith('/chat/completions')) {
31
+ baseUrl = baseUrl.replace(/\/chat\/completions$/, '');
32
+ }
33
+ this.config = {
34
+ apiKey: config.apiKey,
35
+ baseUrl,
36
+ model: config.model ?? 'gpt-4',
37
+ defaultTimeout: config.defaultTimeout ?? 60000,
38
+ providerName: config.providerName ?? 'openai-compatible',
39
+ };
40
+ this.name = this.config.providerName;
41
+ this.endpoint = `${this.config.baseUrl}/chat/completions`;
42
+ }
43
+ async chat(messages, options) {
44
+ const timeout = options?.timeout ?? this.config.defaultTimeout;
45
+ const controller = new AbortController();
46
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
47
+ try {
48
+ const response = await fetch(this.endpoint, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Authorization': `Bearer ${this.config.apiKey}`,
52
+ 'Content-Type': 'application/json',
53
+ },
54
+ body: JSON.stringify({
55
+ model: this.config.model,
56
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
57
+ temperature: options?.temperature ?? 0.7,
58
+ max_tokens: options?.maxTokens,
59
+ stream: false,
60
+ }),
61
+ signal: controller.signal,
62
+ });
63
+ if (!response.ok) {
64
+ const error = await response.text();
65
+ throw new Error(`${this.name} API error: ${response.status} - ${error}`);
66
+ }
67
+ const data = await response.json();
68
+ const message = data.choices[0]?.message;
69
+ // Debug: 检查是否有 reasoning_content
70
+ if (message?.reasoning_content) {
71
+ console.log(`[${this.name}] Model returned reasoning_content (${message.reasoning_content.length} chars)`);
72
+ }
73
+ return {
74
+ content: message?.content ?? '',
75
+ reasoningContent: message?.reasoning_content,
76
+ usage: data.usage ? {
77
+ promptTokens: data.usage.prompt_tokens,
78
+ completionTokens: data.usage.completion_tokens,
79
+ reasoningTokens: data.usage.reasoning_tokens,
80
+ totalTokens: data.usage.total_tokens,
81
+ } : undefined,
82
+ };
83
+ }
84
+ finally {
85
+ clearTimeout(timeoutId);
86
+ }
87
+ }
88
+ async chatWithStructuredOutput(messages, config, options) {
89
+ // 增强最后一条消息,添加 JSON 格式要求
90
+ const enhancedMessages = [
91
+ ...messages.slice(0, -1),
92
+ {
93
+ role: messages[messages.length - 1].role,
94
+ content: `${messages[messages.length - 1].content}
95
+
96
+ 请严格按照以下 JSON 格式返回结果,不要包含任何其他内容:
97
+ ${config.schema}`,
98
+ },
99
+ ];
100
+ const response = await this.chat(enhancedMessages, options);
101
+ const content = response.content;
102
+ // 提取 JSON 内容
103
+ const jsonMatch = content.match(/```json\n?([\s\S]*?)\n?```/) ||
104
+ content.match(/\{[\s\S]*\}/);
105
+ if (!jsonMatch) {
106
+ throw new Error(`Failed to parse structured output: ${content}`);
107
+ }
108
+ let jsonStr = jsonMatch[1] || jsonMatch[0];
109
+ let data;
110
+ if (config.parser) {
111
+ data = config.parser(jsonStr);
112
+ }
113
+ else {
114
+ // 尝试直接解析
115
+ try {
116
+ data = JSON.parse(jsonStr);
117
+ }
118
+ catch {
119
+ // 如果解析失败,尝试修复常见的 JSON 格式问题
120
+ jsonStr = this.repairJson(jsonStr);
121
+ data = JSON.parse(jsonStr);
122
+ }
123
+ }
124
+ return {
125
+ data,
126
+ rawContent: content,
127
+ reasoningContent: response.reasoningContent,
128
+ usage: response.usage,
129
+ };
130
+ }
131
+ /**
132
+ * 尝试修复 LLM 生成的格式错误的 JSON
133
+ * 主要处理字符串值中未转义的特殊字符
134
+ */
135
+ repairJson(jsonStr) {
136
+ // 策略 1:修复字符串值中的未转义换行符
137
+ // 找到所有字符串值(引号之间的内容),转义其中的换行符
138
+ let result = '';
139
+ let inString = false;
140
+ let escaped = false;
141
+ for (let i = 0; i < jsonStr.length; i++) {
142
+ const char = jsonStr[i];
143
+ if (escaped) {
144
+ // 前一个字符是反斜杠,当前字符是转义序列的一部分
145
+ result += char;
146
+ escaped = false;
147
+ continue;
148
+ }
149
+ if (char === '\\') {
150
+ escaped = true;
151
+ result += char;
152
+ continue;
153
+ }
154
+ if (char === '"') {
155
+ inString = !inString;
156
+ result += char;
157
+ continue;
158
+ }
159
+ if (inString) {
160
+ // 在字符串内部,需要转义特殊字符
161
+ if (char === '\n') {
162
+ result += '\\n';
163
+ }
164
+ else if (char === '\r') {
165
+ result += '\\r';
166
+ }
167
+ else if (char === '\t') {
168
+ result += '\\t';
169
+ }
170
+ else {
171
+ result += char;
172
+ }
173
+ }
174
+ else {
175
+ result += char;
176
+ }
177
+ }
178
+ return result;
179
+ }
180
+ }
181
+ /**
182
+ * 便捷别名:DeepSeek Provider
183
+ */
184
+ export class DeepSeekProvider extends OpenAICompatibleProvider {
185
+ constructor(config) {
186
+ super({
187
+ ...config,
188
+ baseUrl: config.baseUrl ?? 'https://api.deepseek.com/v1',
189
+ model: config.model ?? 'deepseek-chat',
190
+ providerName: 'deepseek',
191
+ });
192
+ }
193
+ }
194
+ /**
195
+ * 便捷别名:OpenAI Provider
196
+ */
197
+ export class OpenAIProvider extends OpenAICompatibleProvider {
198
+ constructor(config) {
199
+ super({
200
+ ...config,
201
+ baseUrl: config.baseUrl ?? 'https://api.openai.com/v1',
202
+ model: config.model ?? 'gpt-4',
203
+ providerName: 'openai',
204
+ });
205
+ }
206
+ }
207
+ //# sourceMappingURL=openai-compatible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/llm/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * 统一的 ActionService 实现
3
+ * 通过注入 ContentGenerationCapability 支持不同的 LLM 提供者
4
+ */
5
+ import { ActionService, ActionContext, ActionResult, TaskStatus } from './interfaces.js';
6
+ import { ActionNodeType } from '../types/index.js';
7
+ import { ContentGenerationCapability, LLMCallOptions } from '../llm/interfaces.js';
8
+ /**
9
+ * 文件操作配置
10
+ */
11
+ export interface FileOperationConfig {
12
+ /** 基础目录,所有文件操作相对于此目录 */
13
+ baseDir: string;
14
+ /** 允许的文件扩展名(空数组表示允许所有) */
15
+ allowedExtensions?: string[];
16
+ /** 最大文件大小(字节),默认 10MB */
17
+ maxFileSize?: number;
18
+ }
19
+ export declare class DefaultActionService implements ActionService {
20
+ /** LLM 内容生成能力(用于 llm_call 类型) */
21
+ private contentGeneration;
22
+ private defaultOptions?;
23
+ private asyncTaskContexts;
24
+ private fileConfig;
25
+ private fileLoader;
26
+ private nunjucksEnv;
27
+ constructor(
28
+ /** LLM 内容生成能力(用于 llm_call 类型) */
29
+ contentGeneration: ContentGenerationCapability, defaultOptions?: LLMCallOptions | undefined,
30
+ /** 文件操作配置 */
31
+ fileConfig?: Partial<FileOperationConfig>);
32
+ /**
33
+ * 注册 Nunjucks 内置过滤器
34
+ * 替换原有的 Loader 和 Transformer 系统
35
+ */
36
+ private registerNunjucksFilters;
37
+ /**
38
+ * 加载文件(供 file 过滤器使用)
39
+ */
40
+ private loadFileForTemplate;
41
+ /**
42
+ * 下载远程图片(解决防盗链问题)
43
+ * 通过本地代理下载,绕过 referer 检查
44
+ * 如果下载失败,返回 null 而不是抛出错误
45
+ */
46
+ private downloadRemoteImage;
47
+ /**
48
+ * 使用 Nunjucks 渲染模板
49
+ */
50
+ private renderTemplate;
51
+ executeSync(actionType: ActionNodeType, context: ActionContext): Promise<ActionResult>;
52
+ private executeLLMCall;
53
+ private executeApiCall;
54
+ /**
55
+ * 解析 URL 中的模板变量
56
+ * 支持 ${variableName} 格式
57
+ */
58
+ private resolveUrlTemplate;
59
+ /**
60
+ * 构建请求头(异步版本,支持 Nunjucks 模板)
61
+ */
62
+ private buildHeaders;
63
+ /**
64
+ * 构建请求体(异步版本,支持 Loader 表达式)
65
+ */
66
+ private buildRequestBody;
67
+ /**
68
+ * 处理 API 响应
69
+ */
70
+ private processApiResponse;
71
+ /**
72
+ * 将响应数据保存到文件
73
+ * 用于处理大型响应(如图片、视频),避免超出 Temporal payload 限制
74
+ */
75
+ private saveResponseDataToFile;
76
+ /**
77
+ * 将数据转换为 Buffer
78
+ * 支持多种数据格式
79
+ */
80
+ private convertToBuffer;
81
+ /**
82
+ * 检查字符串是否看起来像 base64 编码
83
+ */
84
+ private looksLikeBase64;
85
+ /**
86
+ * 从对象中按路径提取值
87
+ * 支持点号分隔路径和数组索引,如:
88
+ * - "data.results"
89
+ * - "meta.total"
90
+ * - "choices.0.message" (数字作为数组索引)
91
+ * - "items[0].name" (方括号数组索引)
92
+ */
93
+ private extractByPath;
94
+ private executeHttpRequest;
95
+ private executeFileOperation;
96
+ /**
97
+ * 解析并验证文件路径
98
+ */
99
+ private resolveFilePath;
100
+ /**
101
+ * 执行文件写入
102
+ */
103
+ private executeFileWrite;
104
+ /**
105
+ * 执行文件读取
106
+ */
107
+ private executeFileRead;
108
+ private executeDatabaseQuery;
109
+ private executeShellCommand;
110
+ submitAsyncTask(actionType: ActionNodeType, context: ActionContext): Promise<string>;
111
+ checkTaskStatus(taskId: string): Promise<TaskStatus>;
112
+ getTaskResult(taskId: string): Promise<ActionResult>;
113
+ /**
114
+ * 解析异步 URL 模板
115
+ * 支持 ${taskId} 和 ${fieldName} 变量
116
+ */
117
+ private resolveAsyncUrlTemplate;
118
+ /**
119
+ * 规范化状态值为数组
120
+ */
121
+ private normalizeStatusValues;
122
+ /**
123
+ * 从对象中提取多个字段
124
+ */
125
+ private extractMultipleFields;
126
+ /**
127
+ * 清理已完成的异步任务上下文
128
+ * 防止内存泄漏
129
+ */
130
+ cleanupAsyncTaskContext(taskId: string): void;
131
+ }
132
+ //# sourceMappingURL=actionService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionService.d.ts","sourceRoot":"","sources":["../../src/services/actionService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAkC,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGnF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmBD,qBAAa,oBAAqB,YAAW,aAAa;IAOtD,iCAAiC;IACjC,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,cAAc,CAAC;IARzB,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAuB;;IAGxC,iCAAiC;IACzB,iBAAiB,EAAE,2BAA2B,EAC9C,cAAc,CAAC,EAAE,cAAc,YAAA;IACvC,aAAa;IACb,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAgB3C;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA6J/B;;OAEG;YACW,mBAAmB;IAQjC;;;;OAIG;YACW,mBAAmB;IAmCjC;;OAEG;YACW,cAAc;IAetB,WAAW,CACf,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC;YA2BV,cAAc;YAkBd,cAAc;IA0D5B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;YACW,YAAY;IA4D1B;;OAEG;YACW,gBAAgB;IAoE9B;;OAEG;YACW,kBAAkB;IAkEhC;;;OAGG;YACW,sBAAsB;IAuCpC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAqFvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;YA0BP,kBAAkB;YAmBlB,oBAAoB;IA2BlC;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;YACW,gBAAgB;IAkD9B;;OAEG;YACW,eAAe;YA4Cf,oBAAoB;YASpB,mBAAmB;IAS3B,eAAe,CACnB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IAuDZ,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiEpD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoD1D;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;OAGG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAG9C"}