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.
- package/dist/db/client.d.ts +55 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +157 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +7 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/repositories/executionRepository.d.ts +15 -0
- package/dist/db/repositories/executionRepository.d.ts.map +1 -0
- package/dist/db/repositories/executionRepository.js +41 -0
- package/dist/db/repositories/executionRepository.js.map +1 -0
- package/dist/db/repositories/index.d.ts +10 -0
- package/dist/db/repositories/index.d.ts.map +1 -0
- package/dist/db/repositories/index.js +10 -0
- package/dist/db/repositories/index.js.map +1 -0
- package/dist/db/repositories/nodeRepository.d.ts +15 -0
- package/dist/db/repositories/nodeRepository.d.ts.map +1 -0
- package/dist/db/repositories/nodeRepository.js +61 -0
- package/dist/db/repositories/nodeRepository.js.map +1 -0
- package/dist/db/repositories/personaRepository.d.ts +13 -0
- package/dist/db/repositories/personaRepository.d.ts.map +1 -0
- package/dist/db/repositories/personaRepository.js +42 -0
- package/dist/db/repositories/personaRepository.js.map +1 -0
- package/dist/db/repositories/planResultRepository.d.ts +13 -0
- package/dist/db/repositories/planResultRepository.d.ts.map +1 -0
- package/dist/db/repositories/planResultRepository.js +30 -0
- package/dist/db/repositories/planResultRepository.js.map +1 -0
- package/dist/db/repositories/scheduleRepository.d.ts +27 -0
- package/dist/db/repositories/scheduleRepository.d.ts.map +1 -0
- package/dist/db/repositories/scheduleRepository.js +187 -0
- package/dist/db/repositories/scheduleRepository.js.map +1 -0
- package/dist/db/repositories/types.d.ts +132 -0
- package/dist/db/repositories/types.d.ts.map +1 -0
- package/dist/db/repositories/types.js +5 -0
- package/dist/db/repositories/types.js.map +1 -0
- package/dist/db/schema.d.ts +742 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +85 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/capabilities.d.ts +56 -0
- package/dist/llm/capabilities.d.ts.map +1 -0
- package/dist/llm/capabilities.js +305 -0
- package/dist/llm/capabilities.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +10 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/interfaces.d.ts +249 -0
- package/dist/llm/interfaces.d.ts.map +1 -0
- package/dist/llm/interfaces.js +5 -0
- package/dist/llm/interfaces.js.map +1 -0
- package/dist/llm/providers/anthropic-compatible.d.ts +48 -0
- package/dist/llm/providers/anthropic-compatible.d.ts.map +1 -0
- package/dist/llm/providers/anthropic-compatible.js +163 -0
- package/dist/llm/providers/anthropic-compatible.js.map +1 -0
- package/dist/llm/providers/index.d.ts +14 -0
- package/dist/llm/providers/index.d.ts.map +1 -0
- package/dist/llm/providers/index.js +12 -0
- package/dist/llm/providers/index.js.map +1 -0
- package/dist/llm/providers/openai-compatible.d.ts +59 -0
- package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
- package/dist/llm/providers/openai-compatible.js +207 -0
- package/dist/llm/providers/openai-compatible.js.map +1 -0
- package/dist/services/actionService.d.ts +132 -0
- package/dist/services/actionService.d.ts.map +1 -0
- package/dist/services/actionService.js +971 -0
- package/dist/services/actionService.js.map +1 -0
- package/dist/services/branchService.d.ts +19 -0
- package/dist/services/branchService.d.ts.map +1 -0
- package/dist/services/branchService.js +50 -0
- package/dist/services/branchService.js.map +1 -0
- package/dist/services/expressionEvaluator.d.ts +16 -0
- package/dist/services/expressionEvaluator.d.ts.map +1 -0
- package/dist/services/expressionEvaluator.js +70 -0
- package/dist/services/expressionEvaluator.js.map +1 -0
- package/dist/services/factory.d.ts +43 -0
- package/dist/services/factory.d.ts.map +1 -0
- package/dist/services/factory.js +30 -0
- package/dist/services/factory.js.map +1 -0
- package/dist/services/index.d.ts +15 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +17 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/interfaces.d.ts +117 -0
- package/dist/services/interfaces.d.ts.map +1 -0
- package/dist/services/interfaces.js +5 -0
- package/dist/services/interfaces.js.map +1 -0
- package/dist/services/loaders/fileLoader.d.ts +56 -0
- package/dist/services/loaders/fileLoader.d.ts.map +1 -0
- package/dist/services/loaders/fileLoader.js +161 -0
- package/dist/services/loaders/fileLoader.js.map +1 -0
- package/dist/services/loaders/index.d.ts +6 -0
- package/dist/services/loaders/index.d.ts.map +1 -0
- package/dist/services/loaders/index.js +6 -0
- package/dist/services/loaders/index.js.map +1 -0
- package/dist/services/loaders/transformers.d.ts +32 -0
- package/dist/services/loaders/transformers.d.ts.map +1 -0
- package/dist/services/loaders/transformers.js +78 -0
- package/dist/services/loaders/transformers.js.map +1 -0
- package/dist/services/mockAction.d.ts +65 -0
- package/dist/services/mockAction.d.ts.map +1 -0
- package/dist/services/mockAction.js +153 -0
- package/dist/services/mockAction.js.map +1 -0
- package/dist/services/mockBranch.d.ts +50 -0
- package/dist/services/mockBranch.d.ts.map +1 -0
- package/dist/services/mockBranch.js +75 -0
- package/dist/services/mockBranch.js.map +1 -0
- package/dist/services/mockThinking.d.ts +68 -0
- package/dist/services/mockThinking.d.ts.map +1 -0
- package/dist/services/mockThinking.js +89 -0
- package/dist/services/mockThinking.js.map +1 -0
- package/dist/services/thinkingService.d.ts +15 -0
- package/dist/services/thinkingService.d.ts.map +1 -0
- package/dist/services/thinkingService.js +117 -0
- package/dist/services/thinkingService.js.map +1 -0
- package/dist/temporal/activities/actionActivities.d.ts +15 -0
- package/dist/temporal/activities/actionActivities.d.ts.map +1 -0
- package/dist/temporal/activities/actionActivities.js +140 -0
- package/dist/temporal/activities/actionActivities.js.map +1 -0
- package/dist/temporal/activities/branchActivities.d.ts +13 -0
- package/dist/temporal/activities/branchActivities.d.ts.map +1 -0
- package/dist/temporal/activities/branchActivities.js +26 -0
- package/dist/temporal/activities/branchActivities.js.map +1 -0
- package/dist/temporal/activities/dbActivities.d.ts +14 -0
- package/dist/temporal/activities/dbActivities.d.ts.map +1 -0
- package/dist/temporal/activities/dbActivities.js +84 -0
- package/dist/temporal/activities/dbActivities.js.map +1 -0
- package/dist/temporal/activities/index.d.ts +9 -0
- package/dist/temporal/activities/index.d.ts.map +1 -0
- package/dist/temporal/activities/index.js +9 -0
- package/dist/temporal/activities/index.js.map +1 -0
- package/dist/temporal/activities/thinkingActivities.d.ts +17 -0
- package/dist/temporal/activities/thinkingActivities.d.ts.map +1 -0
- package/dist/temporal/activities/thinkingActivities.js +145 -0
- package/dist/temporal/activities/thinkingActivities.js.map +1 -0
- package/dist/temporal/activities/types.d.ts +100 -0
- package/dist/temporal/activities/types.d.ts.map +1 -0
- package/dist/temporal/activities/types.js +5 -0
- package/dist/temporal/activities/types.js.map +1 -0
- package/dist/temporal/client.d.ts +43 -0
- package/dist/temporal/client.d.ts.map +1 -0
- package/dist/temporal/client.js +75 -0
- package/dist/temporal/client.js.map +1 -0
- package/dist/temporal/index.d.ts +10 -0
- package/dist/temporal/index.d.ts.map +1 -0
- package/dist/temporal/index.js +12 -0
- package/dist/temporal/index.js.map +1 -0
- package/dist/temporal/personaCoreClient.d.ts +199 -0
- package/dist/temporal/personaCoreClient.d.ts.map +1 -0
- package/dist/temporal/personaCoreClient.js +233 -0
- package/dist/temporal/personaCoreClient.js.map +1 -0
- package/dist/temporal/personaWorker.d.ts +141 -0
- package/dist/temporal/personaWorker.d.ts.map +1 -0
- package/dist/temporal/personaWorker.js +93 -0
- package/dist/temporal/personaWorker.js.map +1 -0
- package/dist/temporal/worker.d.ts +66 -0
- package/dist/temporal/worker.d.ts.map +1 -0
- package/dist/temporal/worker.js +109 -0
- package/dist/temporal/worker.js.map +1 -0
- package/dist/temporal/workflows/index.d.ts +5 -0
- package/dist/temporal/workflows/index.d.ts.map +1 -0
- package/dist/temporal/workflows/index.js +5 -0
- package/dist/temporal/workflows/index.js.map +1 -0
- package/dist/temporal/workflows/scheduleWorkflow.d.ts +31 -0
- package/dist/temporal/workflows/scheduleWorkflow.d.ts.map +1 -0
- package/dist/temporal/workflows/scheduleWorkflow.js +256 -0
- package/dist/temporal/workflows/scheduleWorkflow.js.map +1 -0
- package/dist/types/common.d.ts +81 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/nodes.d.ts +496 -0
- package/dist/types/nodes.d.ts.map +1 -0
- package/dist/types/nodes.js +5 -0
- package/dist/types/nodes.js.map +1 -0
- package/dist/types/persona.d.ts +59 -0
- package/dist/types/persona.d.ts.map +1 -0
- package/dist/types/persona.js +36 -0
- package/dist/types/persona.js.map +1 -0
- package/dist/types/schedule.d.ts +143 -0
- package/dist/types/schedule.d.ts.map +1 -0
- package/dist/types/schedule.js +155 -0
- package/dist/types/schedule.js.map +1 -0
- package/dist/utils/dateUtils.d.ts +31 -0
- package/dist/utils/dateUtils.d.ts.map +1 -0
- package/dist/utils/dateUtils.js +53 -0
- package/dist/utils/dateUtils.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/inputResolver.d.ts +43 -0
- package/dist/utils/inputResolver.d.ts.map +1 -0
- package/dist/utils/inputResolver.js +137 -0
- package/dist/utils/inputResolver.js.map +1 -0
- package/dist/utils/sharedDataUtils.d.ts +36 -0
- package/dist/utils/sharedDataUtils.d.ts.map +1 -0
- package/dist/utils/sharedDataUtils.js +84 -0
- package/dist/utils/sharedDataUtils.js.map +1 -0
- package/dist/utils/typeGuards.d.ts +33 -0
- package/dist/utils/typeGuards.d.ts.map +1 -0
- package/dist/utils/typeGuards.js +50 -0
- package/dist/utils/typeGuards.js.map +1 -0
- package/docs/add-llm-provider.md +353 -0
- package/docs/external/deepseek-v32.md +28 -0
- package/docs/quick-start.md +849 -0
- package/docs/suite-guide.md +148 -0
- package/docs/usage-guide.md +1487 -0
- package/package.json +80 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Worker
|
|
3
|
+
*/
|
|
4
|
+
import { Worker, NativeConnection } from '@temporalio/worker';
|
|
5
|
+
import { DatabaseClient } from '../db/client.js';
|
|
6
|
+
import { ThinkingService, ActionService, BranchService } from '../services/interfaces.js';
|
|
7
|
+
export interface WorkerConfig {
|
|
8
|
+
/** Temporal Server 地址(与 nativeConnection 二选一) */
|
|
9
|
+
temporalAddress?: string;
|
|
10
|
+
/** 已有的 NativeConnection(与 temporalAddress 二选一,用于测试) */
|
|
11
|
+
nativeConnection?: NativeConnection;
|
|
12
|
+
taskQueue: string;
|
|
13
|
+
db: DatabaseClient;
|
|
14
|
+
thinkingService: ThinkingService;
|
|
15
|
+
actionService: ActionService;
|
|
16
|
+
branchService: BranchService;
|
|
17
|
+
connectTimeout?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Worker 句柄接口
|
|
21
|
+
* 包含 Worker 实例和优雅关闭方法
|
|
22
|
+
*/
|
|
23
|
+
export interface WorkerHandle {
|
|
24
|
+
/** Temporal Worker 实例 */
|
|
25
|
+
worker: Worker;
|
|
26
|
+
/** 优雅关闭 Worker 和连接 */
|
|
27
|
+
shutdown: () => Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 创建 Temporal Worker
|
|
31
|
+
* 返回 WorkerHandle,包含 shutdown 方法用于优雅关闭
|
|
32
|
+
*/
|
|
33
|
+
export declare function createWorker(config: WorkerConfig): Promise<WorkerHandle>;
|
|
34
|
+
/**
|
|
35
|
+
* 创建简化的活动对象(用于测试)
|
|
36
|
+
*/
|
|
37
|
+
export declare function createActivities(config: {
|
|
38
|
+
db: DatabaseClient;
|
|
39
|
+
thinkingService: ThinkingService;
|
|
40
|
+
actionService: ActionService;
|
|
41
|
+
branchService: BranchService;
|
|
42
|
+
}): {
|
|
43
|
+
executeBranchNode(scheduleId: string, node: import("../index.js").NodeInstance, schedule: import("../db/repositories/types.js").ScheduleWithNodes): Promise<import("./index.js").BranchNodeResult>;
|
|
44
|
+
executeActionNode(scheduleId: string, node: import("../index.js").NodeInstance, schedule: import("../db/repositories/types.js").ScheduleWithNodes): Promise<import("./index.js").ActionNodeResult>;
|
|
45
|
+
submitAsyncTask(scheduleId: string, node: import("../index.js").NodeInstance, schedule: import("../db/repositories/types.js").ScheduleWithNodes): Promise<string>;
|
|
46
|
+
checkTaskStatus(taskId: string): Promise<{
|
|
47
|
+
completed: boolean;
|
|
48
|
+
failed: boolean;
|
|
49
|
+
error?: string;
|
|
50
|
+
}>;
|
|
51
|
+
getTaskResult(taskId: string): Promise<unknown>;
|
|
52
|
+
applyAsyncOutputMappings(scheduleId: string, node: import("../index.js").NodeInstance, outputs: Record<string, unknown>): Promise<void>;
|
|
53
|
+
executeThinkingNode(scheduleId: string, node: import("../index.js").NodeInstance, schedule: import("../db/repositories/types.js").ScheduleWithNodes): Promise<import("./index.js").ThinkingNodeResult>;
|
|
54
|
+
initializeSchedule(schedule: import("../index.js").Schedule): Promise<void>;
|
|
55
|
+
getScheduleFromDB(scheduleId: string): Promise<import("../db/repositories/types.js").ScheduleWithNodes | null>;
|
|
56
|
+
updateScheduleStatus(scheduleId: string, status: import("../index.js").ScheduleStatus): Promise<void>;
|
|
57
|
+
setCurrentNode(scheduleId: string, nodeId: string | null): Promise<void>;
|
|
58
|
+
updateSharedData(scheduleId: string, data: import("../index.js").SharedDataInstance): Promise<void>;
|
|
59
|
+
saveRuntimeState(scheduleId: string, state: import("../db/repositories/types.js").RuntimeState): Promise<void>;
|
|
60
|
+
getRuntimeState(scheduleId: string): Promise<import("../db/repositories/types.js").RuntimeState | null>;
|
|
61
|
+
recordNodeExecution(scheduleId: string, nodeId: string, result: import("./index.js").NodeExecutionResult): Promise<void>;
|
|
62
|
+
recordNodeFailure(scheduleId: string, nodeId: string, error: Error): Promise<void>;
|
|
63
|
+
recordLoopWarning(scheduleId: string, nodeId: string, recentNodeIds: string[]): Promise<void>;
|
|
64
|
+
getActionTypes(scheduleId: string): Promise<Record<string, import("../index.js").ActionNodeType>>;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/temporal/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK1F,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,cAAc,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAoE9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,EAAE,EAAE,cAAc,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;CAC9B;;;;;;;aA9BY,CAAC;;;;;;;;;;;;;;;;EAuDb"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Worker
|
|
3
|
+
*/
|
|
4
|
+
import { Worker, NativeConnection } from '@temporalio/worker';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { ScheduleRepositoryImpl, NodeRepositoryImpl, ExecutionRepositoryImpl, PlanResultRepositoryImpl, } from '../db/repositories/index.js';
|
|
8
|
+
import { createDBActivities } from './activities/dbActivities.js';
|
|
9
|
+
import { createThinkingActivities } from './activities/thinkingActivities.js';
|
|
10
|
+
import { createActionActivities } from './activities/actionActivities.js';
|
|
11
|
+
import { createBranchActivities } from './activities/branchActivities.js';
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = path.dirname(__filename);
|
|
14
|
+
/**
|
|
15
|
+
* 创建 Temporal Worker
|
|
16
|
+
* 返回 WorkerHandle,包含 shutdown 方法用于优雅关闭
|
|
17
|
+
*/
|
|
18
|
+
export async function createWorker(config) {
|
|
19
|
+
// 获取或创建 Temporal 连接
|
|
20
|
+
let connection;
|
|
21
|
+
let ownConnection = false;
|
|
22
|
+
if (config.nativeConnection) {
|
|
23
|
+
connection = config.nativeConnection;
|
|
24
|
+
}
|
|
25
|
+
else if (config.temporalAddress) {
|
|
26
|
+
connection = await NativeConnection.connect({
|
|
27
|
+
address: config.temporalAddress,
|
|
28
|
+
});
|
|
29
|
+
ownConnection = true;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error('Either temporalAddress or nativeConnection must be provided');
|
|
33
|
+
}
|
|
34
|
+
// 创建 repositories
|
|
35
|
+
const scheduleRepo = new ScheduleRepositoryImpl(config.db);
|
|
36
|
+
const nodeRepo = new NodeRepositoryImpl(config.db);
|
|
37
|
+
const executionRepo = new ExecutionRepositoryImpl(config.db);
|
|
38
|
+
const planResultRepo = new PlanResultRepositoryImpl(config.db);
|
|
39
|
+
// 创建 activities
|
|
40
|
+
const dbActivities = createDBActivities({
|
|
41
|
+
scheduleRepo,
|
|
42
|
+
executionRepo,
|
|
43
|
+
});
|
|
44
|
+
const thinkingActivities = createThinkingActivities({
|
|
45
|
+
thinkingService: config.thinkingService,
|
|
46
|
+
nodeRepo,
|
|
47
|
+
planResultRepo,
|
|
48
|
+
scheduleRepo,
|
|
49
|
+
});
|
|
50
|
+
const actionActivities = createActionActivities({
|
|
51
|
+
actionService: config.actionService,
|
|
52
|
+
scheduleRepo,
|
|
53
|
+
});
|
|
54
|
+
const branchActivities = createBranchActivities({
|
|
55
|
+
branchService: config.branchService,
|
|
56
|
+
});
|
|
57
|
+
const worker = await Worker.create({
|
|
58
|
+
connection,
|
|
59
|
+
namespace: 'default',
|
|
60
|
+
taskQueue: config.taskQueue,
|
|
61
|
+
workflowsPath: path.join(__dirname, './workflows'),
|
|
62
|
+
activities: {
|
|
63
|
+
...dbActivities,
|
|
64
|
+
...thinkingActivities,
|
|
65
|
+
...actionActivities,
|
|
66
|
+
...branchActivities,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
worker,
|
|
71
|
+
shutdown: async () => {
|
|
72
|
+
// 优雅关闭 Worker(等待正在执行的 Activity 完成)
|
|
73
|
+
worker.shutdown();
|
|
74
|
+
// 只有自己创建的连接才需要关闭
|
|
75
|
+
if (ownConnection) {
|
|
76
|
+
await connection.close();
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 创建简化的活动对象(用于测试)
|
|
83
|
+
*/
|
|
84
|
+
export function createActivities(config) {
|
|
85
|
+
const scheduleRepo = new ScheduleRepositoryImpl(config.db);
|
|
86
|
+
const nodeRepo = new NodeRepositoryImpl(config.db);
|
|
87
|
+
const executionRepo = new ExecutionRepositoryImpl(config.db);
|
|
88
|
+
const planResultRepo = new PlanResultRepositoryImpl(config.db);
|
|
89
|
+
return {
|
|
90
|
+
...createDBActivities({
|
|
91
|
+
scheduleRepo,
|
|
92
|
+
executionRepo,
|
|
93
|
+
}),
|
|
94
|
+
...createThinkingActivities({
|
|
95
|
+
thinkingService: config.thinkingService,
|
|
96
|
+
nodeRepo,
|
|
97
|
+
planResultRepo,
|
|
98
|
+
scheduleRepo,
|
|
99
|
+
}),
|
|
100
|
+
...createActionActivities({
|
|
101
|
+
actionService: config.actionService,
|
|
102
|
+
scheduleRepo,
|
|
103
|
+
}),
|
|
104
|
+
...createBranchActivities({
|
|
105
|
+
branchService: config.branchService,
|
|
106
|
+
}),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/temporal/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/temporal/workflows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,GAGb,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Workflow
|
|
3
|
+
*
|
|
4
|
+
* 这是 Temporal Workflow 的核心实现。
|
|
5
|
+
* Workflow 代码必须是确定性的,不能有任何 I/O 操作。
|
|
6
|
+
* 所有 I/O 操作都通过 Activity 完成。
|
|
7
|
+
*/
|
|
8
|
+
import type { NodeExecutionResult } from '../activities/types.js';
|
|
9
|
+
import type { Schedule } from '../../types/index.js';
|
|
10
|
+
export interface ScheduleExecutionStatus {
|
|
11
|
+
scheduleId: string;
|
|
12
|
+
currentNodeId: string | null;
|
|
13
|
+
totalIterations: number;
|
|
14
|
+
isPaused: boolean;
|
|
15
|
+
lastNodeResults: NodeExecutionResult[];
|
|
16
|
+
}
|
|
17
|
+
export declare const getStatusQuery: import("@temporalio/workflow").QueryDefinition<ScheduleExecutionStatus, [], string>;
|
|
18
|
+
export declare const pauseSignal: import("@temporalio/workflow").SignalDefinition<[], "pause">;
|
|
19
|
+
export declare const resumeSignal: import("@temporalio/workflow").SignalDefinition<[], "resume">;
|
|
20
|
+
export declare const cancelSignal: import("@temporalio/workflow").SignalDefinition<[], "cancel">;
|
|
21
|
+
export interface ScheduleWorkflowInput {
|
|
22
|
+
/** Schedule ID */
|
|
23
|
+
scheduleId: string;
|
|
24
|
+
/**
|
|
25
|
+
* 完整的 Schedule 定义(首次启动时传入)
|
|
26
|
+
* Continue-as-New 时不需要传入,会从数据库读取
|
|
27
|
+
*/
|
|
28
|
+
schedule?: Schedule;
|
|
29
|
+
}
|
|
30
|
+
export declare function scheduleWorkflow(input: ScheduleWorkflowInput): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=scheduleWorkflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduleWorkflow.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/scheduleWorkflow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EAMV,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAiCnE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,mBAAmB,EAAE,CAAC;CACxC;AAED,eAAO,MAAM,cAAc,qFAAoD,CAAC;AAMhF,eAAO,MAAM,WAAW,8DAAwB,CAAC;AACjD,eAAO,MAAM,YAAY,+DAAyB,CAAC;AACnD,eAAO,MAAM,YAAY,+DAAyB,CAAC;AAenD,MAAM,WAAW,qBAAqB;IACpC,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AA0CD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+NlF"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Workflow
|
|
3
|
+
*
|
|
4
|
+
* 这是 Temporal Workflow 的核心实现。
|
|
5
|
+
* Workflow 代码必须是确定性的,不能有任何 I/O 操作。
|
|
6
|
+
* 所有 I/O 操作都通过 Activity 完成。
|
|
7
|
+
*/
|
|
8
|
+
import { proxyActivities, sleep, condition, defineQuery, defineSignal, setHandler, continueAsNew, ApplicationFailure, } from '@temporalio/workflow';
|
|
9
|
+
// Activity 配置
|
|
10
|
+
const dbActivityOptions = {
|
|
11
|
+
startToCloseTimeout: '5s',
|
|
12
|
+
retry: { maximumAttempts: 3, initialInterval: '100ms', backoffCoefficient: 2 },
|
|
13
|
+
};
|
|
14
|
+
const thinkingActivityOptions = {
|
|
15
|
+
startToCloseTimeout: '60s',
|
|
16
|
+
retry: { maximumAttempts: 2, initialInterval: '1s', backoffCoefficient: 2 },
|
|
17
|
+
};
|
|
18
|
+
const actionActivityOptions = {
|
|
19
|
+
startToCloseTimeout: '180s', // 3 分钟,用于下载图片和调用生成 API
|
|
20
|
+
retry: { maximumAttempts: 3, initialInterval: '500ms', backoffCoefficient: 2 },
|
|
21
|
+
};
|
|
22
|
+
const branchActivityOptions = {
|
|
23
|
+
startToCloseTimeout: '10s',
|
|
24
|
+
retry: { maximumAttempts: 3, initialInterval: '100ms', backoffCoefficient: 2 },
|
|
25
|
+
};
|
|
26
|
+
// 创建 Activity 代理
|
|
27
|
+
const dbActivities = proxyActivities(dbActivityOptions);
|
|
28
|
+
const thinkingActivities = proxyActivities(thinkingActivityOptions);
|
|
29
|
+
const actionActivities = proxyActivities(actionActivityOptions);
|
|
30
|
+
const branchActivities = proxyActivities(branchActivityOptions);
|
|
31
|
+
export const getStatusQuery = defineQuery('getStatus');
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Signal 定义
|
|
34
|
+
// ============================================================================
|
|
35
|
+
export const pauseSignal = defineSignal('pause');
|
|
36
|
+
export const resumeSignal = defineSignal('resume');
|
|
37
|
+
export const cancelSignal = defineSignal('cancel');
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// 配置常量
|
|
40
|
+
// ============================================================================
|
|
41
|
+
const MAX_ITERATIONS_BEFORE_CONTINUE = 100; // 每 100 个节点 continue-as-new
|
|
42
|
+
const MAX_TOTAL_ITERATIONS = 10000; // 总迭代上限
|
|
43
|
+
const LOOP_DETECTION_WINDOW = 10; // 循环检测窗口
|
|
44
|
+
const LOOP_WARNING_THRESHOLD = 5; // 循环警告阈值
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// 异步动作执行
|
|
47
|
+
// ============================================================================
|
|
48
|
+
async function executeAsyncAction(scheduleId, node, schedule, asyncConfig) {
|
|
49
|
+
// 提交异步任务(使用完整的节点和 schedule 信息)
|
|
50
|
+
const taskId = await actionActivities.submitAsyncTask(scheduleId, node, schedule);
|
|
51
|
+
// 轮询等待(使用循环计数器,保证确定性)
|
|
52
|
+
const maxAttempts = Math.ceil(asyncConfig.timeoutMs / asyncConfig.checkIntervalMs);
|
|
53
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
54
|
+
// 使用 Temporal Timer - 在此期间不消耗 Worker
|
|
55
|
+
await sleep(asyncConfig.checkIntervalMs);
|
|
56
|
+
// 检查任务状态
|
|
57
|
+
const status = await actionActivities.checkTaskStatus(taskId);
|
|
58
|
+
if (status.completed) {
|
|
59
|
+
const result = await actionActivities.getTaskResult(taskId);
|
|
60
|
+
return { outputs: result };
|
|
61
|
+
}
|
|
62
|
+
if (status.failed) {
|
|
63
|
+
throw ApplicationFailure.nonRetryable(status.error ?? 'Async task failed');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw ApplicationFailure.nonRetryable('Async task timeout');
|
|
67
|
+
}
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// 主 Workflow
|
|
70
|
+
// ============================================================================
|
|
71
|
+
export async function scheduleWorkflow(input) {
|
|
72
|
+
const { scheduleId, schedule: inputSchedule } = input;
|
|
73
|
+
// =========================================
|
|
74
|
+
// Workflow 顶层状态
|
|
75
|
+
// =========================================
|
|
76
|
+
let currentNodeId = null;
|
|
77
|
+
let totalIterations = 0;
|
|
78
|
+
let isPaused = false;
|
|
79
|
+
let isCancelled = false;
|
|
80
|
+
let loopWarningCount = 0;
|
|
81
|
+
const recentResults = [];
|
|
82
|
+
const recentNodeIds = [];
|
|
83
|
+
// 恢复运行时状态
|
|
84
|
+
const runtimeState = await dbActivities.getRuntimeState(scheduleId);
|
|
85
|
+
if (runtimeState) {
|
|
86
|
+
// Continue-as-New:恢复状态
|
|
87
|
+
totalIterations = runtimeState.totalIterations;
|
|
88
|
+
recentNodeIds.push(...runtimeState.recentNodeIds);
|
|
89
|
+
}
|
|
90
|
+
else if (inputSchedule) {
|
|
91
|
+
// 首次执行:Client 传入了完整 Schedule,需要初始化到数据库
|
|
92
|
+
await dbActivities.initializeSchedule(inputSchedule);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// 首次执行但没有传入 Schedule(兼容 startSchedule 方式)
|
|
96
|
+
// 假设 Schedule 已存在于数据库中,只需更新状态
|
|
97
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'running');
|
|
98
|
+
}
|
|
99
|
+
// =========================================
|
|
100
|
+
// 注册 Query 处理器
|
|
101
|
+
// =========================================
|
|
102
|
+
setHandler(getStatusQuery, () => ({
|
|
103
|
+
scheduleId,
|
|
104
|
+
currentNodeId,
|
|
105
|
+
totalIterations,
|
|
106
|
+
isPaused,
|
|
107
|
+
lastNodeResults: recentResults.slice(-5),
|
|
108
|
+
}));
|
|
109
|
+
// =========================================
|
|
110
|
+
// 注册 Signal 处理器
|
|
111
|
+
// =========================================
|
|
112
|
+
setHandler(pauseSignal, () => { isPaused = true; });
|
|
113
|
+
setHandler(resumeSignal, () => { isPaused = false; });
|
|
114
|
+
setHandler(cancelSignal, () => { isCancelled = true; });
|
|
115
|
+
// =========================================
|
|
116
|
+
// 主执行循环
|
|
117
|
+
// =========================================
|
|
118
|
+
while (true) {
|
|
119
|
+
// 检查取消状态
|
|
120
|
+
if (isCancelled) {
|
|
121
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'cancelled');
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
// 等待暂停结束
|
|
125
|
+
await condition(() => !isPaused || isCancelled);
|
|
126
|
+
if (isCancelled) {
|
|
127
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'cancelled');
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
// 从数据库读取最新状态
|
|
131
|
+
const schedule = await dbActivities.getScheduleFromDB(scheduleId);
|
|
132
|
+
if (!schedule) {
|
|
133
|
+
throw ApplicationFailure.nonRetryable(`Schedule ${scheduleId} not found`);
|
|
134
|
+
}
|
|
135
|
+
if (schedule.status === 'completed' || schedule.status === 'cancelled') {
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
currentNodeId = schedule.currentNodeId;
|
|
139
|
+
if (!currentNodeId) {
|
|
140
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'completed');
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
// =====================================
|
|
144
|
+
// 迭代次数和循环检测
|
|
145
|
+
// =====================================
|
|
146
|
+
totalIterations++;
|
|
147
|
+
if (totalIterations > MAX_TOTAL_ITERATIONS) {
|
|
148
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'failed');
|
|
149
|
+
throw ApplicationFailure.nonRetryable('Exceeded maximum iterations');
|
|
150
|
+
}
|
|
151
|
+
// 循环检测
|
|
152
|
+
recentNodeIds.push(currentNodeId);
|
|
153
|
+
if (recentNodeIds.length > LOOP_DETECTION_WINDOW) {
|
|
154
|
+
recentNodeIds.shift();
|
|
155
|
+
}
|
|
156
|
+
const nodeOccurrences = recentNodeIds.filter(id => id === currentNodeId).length;
|
|
157
|
+
if (nodeOccurrences > LOOP_DETECTION_WINDOW / 2) {
|
|
158
|
+
loopWarningCount++;
|
|
159
|
+
await dbActivities.recordLoopWarning(scheduleId, currentNodeId, recentNodeIds);
|
|
160
|
+
if (loopWarningCount >= LOOP_WARNING_THRESHOLD) {
|
|
161
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'failed');
|
|
162
|
+
throw ApplicationFailure.nonRetryable(`Potential infinite loop detected at node ${currentNodeId}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// =====================================
|
|
166
|
+
// 执行当前节点
|
|
167
|
+
// =====================================
|
|
168
|
+
const node = schedule.nodes[currentNodeId];
|
|
169
|
+
if (!node) {
|
|
170
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'failed');
|
|
171
|
+
throw ApplicationFailure.nonRetryable(`Node ${currentNodeId} not found`);
|
|
172
|
+
}
|
|
173
|
+
let result = null;
|
|
174
|
+
let nextNodeId = null;
|
|
175
|
+
let nodeSkipped = false;
|
|
176
|
+
try {
|
|
177
|
+
switch (node.kind) {
|
|
178
|
+
case 'thinking': {
|
|
179
|
+
const thinkingResult = await thinkingActivities.executeThinkingNode(scheduleId, node, schedule);
|
|
180
|
+
result = thinkingResult;
|
|
181
|
+
nextNodeId = thinkingResult.nextNodeId;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
case 'action': {
|
|
185
|
+
// 此时 TypeScript 已经将 node 窄化为 action 类型
|
|
186
|
+
const actionNode = node;
|
|
187
|
+
// 从 schedule.persona 获取 actionTypes
|
|
188
|
+
const actionTypes = await dbActivities.getActionTypes(scheduleId);
|
|
189
|
+
const actionType = actionTypes[actionNode.actionTypeId];
|
|
190
|
+
const isAsync = actionType?.asyncMode?.isAsync ?? false;
|
|
191
|
+
if (isAsync) {
|
|
192
|
+
const asyncConfig = {
|
|
193
|
+
timeoutMs: actionNode.asyncConfig?.timeoutMs
|
|
194
|
+
?? actionType?.asyncMode?.defaultTimeoutMs
|
|
195
|
+
?? 300000,
|
|
196
|
+
checkIntervalMs: actionNode.asyncConfig?.checkIntervalMs
|
|
197
|
+
?? actionType?.asyncMode?.defaultCheckIntervalMs
|
|
198
|
+
?? 5000,
|
|
199
|
+
};
|
|
200
|
+
// 传递完整的节点和 schedule 信息,由 activity 负责解析输入
|
|
201
|
+
result = await executeAsyncAction(scheduleId, node, schedule, asyncConfig);
|
|
202
|
+
// 异步动作完成后,应用输出映射更新共享数据
|
|
203
|
+
await actionActivities.applyAsyncOutputMappings(scheduleId, node, result.outputs);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
result = await actionActivities.executeActionNode(scheduleId, node, schedule);
|
|
207
|
+
}
|
|
208
|
+
nextNodeId = node.nextNodeId;
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
case 'branch': {
|
|
212
|
+
const branchResult = await branchActivities.executeBranchNode(scheduleId, node, schedule);
|
|
213
|
+
result = branchResult;
|
|
214
|
+
nextNodeId = branchResult.selectedBranchTargetId ?? node.nextNodeId;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
default:
|
|
218
|
+
throw ApplicationFailure.nonRetryable(`Unknown node kind: ${node.kind}`);
|
|
219
|
+
}
|
|
220
|
+
recentResults.push(result);
|
|
221
|
+
if (recentResults.length > 10)
|
|
222
|
+
recentResults.shift();
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
await dbActivities.recordNodeFailure(scheduleId, currentNodeId, error);
|
|
226
|
+
const failurePolicy = node.onFailure ?? 'terminate';
|
|
227
|
+
if (failurePolicy === 'skip') {
|
|
228
|
+
nextNodeId = node.nextNodeId;
|
|
229
|
+
nodeSkipped = true;
|
|
230
|
+
}
|
|
231
|
+
else if (failurePolicy === 'retry') {
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
await dbActivities.updateScheduleStatus(scheduleId, 'failed');
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// 记录执行结果
|
|
240
|
+
if (!nodeSkipped && result) {
|
|
241
|
+
await dbActivities.recordNodeExecution(scheduleId, currentNodeId, result);
|
|
242
|
+
}
|
|
243
|
+
await dbActivities.setCurrentNode(scheduleId, nextNodeId);
|
|
244
|
+
// 保存运行时状态
|
|
245
|
+
await dbActivities.saveRuntimeState(scheduleId, {
|
|
246
|
+
totalIterations,
|
|
247
|
+
recentNodeIds: recentNodeIds.slice(),
|
|
248
|
+
});
|
|
249
|
+
// Continue-as-New: 避免 Event History 过大
|
|
250
|
+
if (totalIterations % MAX_ITERATIONS_BEFORE_CONTINUE === 0) {
|
|
251
|
+
await continueAsNew({ scheduleId });
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=scheduleWorkflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduleWorkflow.js","sourceRoot":"","sources":["../../../src/temporal/workflows/scheduleWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 通用类型定义
|
|
3
|
+
*/
|
|
4
|
+
/** 唯一标识符类型 */
|
|
5
|
+
export type NodeId = string;
|
|
6
|
+
export type NodeInstanceId = string;
|
|
7
|
+
export type ScheduleId = string;
|
|
8
|
+
export type PersonaId = string;
|
|
9
|
+
export type ActionTypeId = string;
|
|
10
|
+
/**
|
|
11
|
+
* 共享数据的值类型
|
|
12
|
+
* 支持基础类型、对象和数组
|
|
13
|
+
*/
|
|
14
|
+
export type SharedDataValue = string | number | boolean | null | {
|
|
15
|
+
[key: string]: SharedDataValue;
|
|
16
|
+
} | SharedDataValue[];
|
|
17
|
+
/**
|
|
18
|
+
* 共享数据字段定义
|
|
19
|
+
* isCollection: true 表示是集合类型,可以不断追加
|
|
20
|
+
* isCollection: false 表示是普通类型,赋值会覆盖
|
|
21
|
+
*/
|
|
22
|
+
export interface SharedDataFieldDefinition {
|
|
23
|
+
name: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
isCollection: boolean;
|
|
26
|
+
/** 可选的初始值 */
|
|
27
|
+
initialValue?: SharedDataValue;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 共享数据声明
|
|
31
|
+
* 由思考节点声明,定义整个 Schedule 中可用的共享数据字段
|
|
32
|
+
*/
|
|
33
|
+
export interface SharedDataDeclaration {
|
|
34
|
+
fields: SharedDataFieldDefinition[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 共享数据实例
|
|
38
|
+
* Schedule 运行时的实际数据存储
|
|
39
|
+
*/
|
|
40
|
+
export interface SharedDataInstance {
|
|
41
|
+
/** 字段名 -> 当前值 */
|
|
42
|
+
data: Record<string, SharedDataValue>;
|
|
43
|
+
/** 字段名 -> 是否为集合类型 */
|
|
44
|
+
fieldTypes: Record<string, boolean>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 数据引用 - 用于节点输入引用共享数据
|
|
48
|
+
*/
|
|
49
|
+
export interface DataReference {
|
|
50
|
+
type: 'reference';
|
|
51
|
+
/** 引用的共享数据字段名 */
|
|
52
|
+
fieldName: string;
|
|
53
|
+
/** 可选的 JSONPath 表达式,用于提取部分数据 */
|
|
54
|
+
path?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 固定值 - 用于节点输入使用固定值
|
|
58
|
+
*/
|
|
59
|
+
export interface FixedValue {
|
|
60
|
+
type: 'fixed';
|
|
61
|
+
value: SharedDataValue;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 节点输入值类型 - 可以是固定值或数据引用
|
|
65
|
+
*/
|
|
66
|
+
export type NodeInputValue = FixedValue | DataReference;
|
|
67
|
+
/**
|
|
68
|
+
* 输出映射 - 定义如何将节点输出写入共享数据
|
|
69
|
+
*/
|
|
70
|
+
export interface OutputMapping {
|
|
71
|
+
/** 节点输出的字段名 */
|
|
72
|
+
outputField: string;
|
|
73
|
+
/** 目标共享数据字段名 */
|
|
74
|
+
targetField: string;
|
|
75
|
+
/**
|
|
76
|
+
* 可选的转换表达式
|
|
77
|
+
* 例如: "value.items[0]" 表示取 value.items 的第一个元素
|
|
78
|
+
*/
|
|
79
|
+
expression?: string;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc;AACd,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAC5B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AACpC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,GAClC,eAAe,EAAE,CAAC;AAEtB;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa;IACb,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtC,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO;AACP,cAAc,aAAa,CAAC;AAE5B,OAAO;AACP,cAAc,YAAY,CAAC;AAE3B,cAAc;AACd,cAAc,eAAe,CAAC;AAE9B,aAAa;AACb,cAAc,cAAc,CAAC"}
|