@yiyi_zhang/reactflow-ui 1.3.0 → 1.3.1
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/README.md +8 -6
- package/dist/AiWorkflowIDE.d.ts +6 -0
- package/dist/actions/builtin/coerce.d.ts +9 -0
- package/dist/actions/types.d.ts +1 -0
- package/dist/ai.d.ts +5 -2
- package/dist/components/AiNative/AgentTimeline.d.ts +1 -1
- package/dist/components/AiNative/ClarificationCard.d.ts +3 -2
- package/dist/components/AiNative/InlineCanvasCopilot.d.ts +2 -1
- package/dist/components/AiNative/RepairCard.d.ts +3 -2
- package/dist/components/AiNative/mermaidParser.d.ts +31 -0
- package/dist/components/AiNative/repairActions.d.ts +16 -0
- package/dist/components/AiNative/runInputs.d.ts +13 -0
- package/dist/components/BrandLogo.d.ts +2 -3
- package/dist/components/ConfirmDialog.d.ts +3 -1
- package/dist/components/DraftCodeField.d.ts +26 -0
- package/dist/components/PromptDialog.d.ts +3 -1
- package/dist/components/business/ActionPickerModal.d.ts +2 -0
- package/dist/components/business/BusinessEditorContext.d.ts +38 -0
- package/dist/components/business/DataPillInput.d.ts +10 -0
- package/dist/components/business/DecisionBranchCard.d.ts +2 -1
- package/dist/components/business/ForkJoinCard.d.ts +2 -1
- package/dist/components/business/LibraryVersionBadge.d.ts +1 -1
- package/dist/components/business/LoopDoWhileCard.d.ts +2 -1
- package/dist/components/business/NestedControlStep.d.ts +7 -1
- package/dist/components/business/RunStoryTimeline.d.ts +7 -0
- package/dist/components/business/StepCardParts.d.ts +73 -0
- package/dist/components/business/StepFlowEditor.d.ts +12 -1
- package/dist/components/business/StepListEditor.d.ts +6 -2
- package/dist/components/business/deleteMessage.d.ts +6 -0
- package/dist/components/business/runStatus.d.ts +11 -0
- package/dist/components/icons/CmIcon.d.ts +17 -0
- package/dist/components/icons/iconRegistry.d.ts +80 -0
- package/dist/components/onboarding/OnboardingController.d.ts +7 -0
- package/dist/components/onboarding/PromotionPanel.d.ts +9 -1
- package/dist/hooks/useConfirm.d.ts +3 -1
- package/dist/import/common.d.ts +7 -1
- package/dist/import/selection.d.ts +17 -0
- package/dist/index.d.ts +5 -2
- package/dist/library/versionStatus.d.ts +2 -2
- package/dist/logo.svg +9 -36
- package/dist/onboarding/naming.d.ts +5 -0
- package/dist/onboarding/poll.d.ts +6 -3
- package/dist/parser/conductorGenerator.d.ts +17 -2
- package/dist/product-launch.html +10 -1394
- package/dist/providers/types.d.ts +2 -0
- package/dist/reactflow-ui-ai.es.js +18688 -14843
- package/dist/reactflow-ui.css +1 -1
- package/dist/reactflow-ui.es.js +20470 -14658
- package/dist/reactflow-ui.umd.js +183 -41
- package/dist/sample-workflows/ecs-lifecycle-automation.json +36 -4
- package/dist/services/ai/agentRunner.d.ts +42 -1
- package/dist/services/ai/errorMessages.d.ts +9 -1
- package/dist/services/ai/protocolAdapter.d.ts +5 -0
- package/dist/services/ai/systemPrompt.d.ts +1 -1
- package/dist/services/ai/toolExecutor.d.ts +26 -0
- package/dist/services/ai/workflowSynthesizer.d.ts +4 -4
- package/dist/services/aiService.d.ts +5 -1
- package/dist/stepmodel/compile.d.ts +2 -1
- package/dist/stepmodel/factory.d.ts +5 -0
- package/dist/stepmodel/pills.d.ts +32 -0
- package/dist/stepmodel/types.d.ts +10 -0
- package/dist/stepmodel/validate.d.ts +20 -0
- package/dist/store/aiStore.d.ts +10 -3
- package/dist/store/sandboxRunObserver.d.ts +2 -1
- package/dist/store/workflowStore.d.ts +2 -9
- package/dist/template/templateStore.d.ts +6 -0
- package/dist/template/types.d.ts +1 -0
- package/dist/types/conductor.d.ts +25 -1
- package/dist/types/workflow.d.ts +20 -3
- package/dist/types/workflowLibrary.d.ts +5 -5
- package/dist/utils/executionAnalyzer.d.ts +5 -0
- package/dist/utils/executionImport.d.ts +52 -0
- package/dist/utils/executionPoller.d.ts +37 -0
- package/dist/utils/localSandboxEngine.d.ts +43 -6
- package/dist/utils/runStory.d.ts +20 -0
- package/dist/utils/sandbox/jq.d.ts +13 -0
- package/dist/utils/sandbox/scriptRunner.d.ts +34 -0
- package/dist/utils/statusMeta.d.ts +35 -0
- package/dist/utils/taskEditing.d.ts +59 -0
- package/dist/utils/taskTypeMeta.d.ts +1 -0
- package/dist/utils/validationRules.d.ts +19 -5
- package/package.json +6 -2
|
@@ -16,7 +16,18 @@
|
|
|
16
16
|
"instanceType": "ecs.c7.xlarge",
|
|
17
17
|
"imageId": "image-alilinux-3",
|
|
18
18
|
"instanceName": "app-server-node",
|
|
19
|
-
"systemDiskSize": 120
|
|
19
|
+
"systemDiskSize": 120,
|
|
20
|
+
"http_request": {
|
|
21
|
+
"uri": "https://ecs.internal.cloud/api/v2/instances",
|
|
22
|
+
"method": "POST",
|
|
23
|
+
"body": {
|
|
24
|
+
"regionId": "cn-hangzhou",
|
|
25
|
+
"instanceType": "ecs.c7.xlarge",
|
|
26
|
+
"imageId": "image-alilinux-3",
|
|
27
|
+
"instanceName": "app-server-node",
|
|
28
|
+
"systemDiskSize": 120
|
|
29
|
+
}
|
|
30
|
+
}
|
|
20
31
|
}
|
|
21
32
|
},
|
|
22
33
|
{
|
|
@@ -27,7 +38,11 @@
|
|
|
27
38
|
"inputParameters": {
|
|
28
39
|
"_actionId": "ecs.query_instance",
|
|
29
40
|
"actionName": "查询云主机详情",
|
|
30
|
-
"instanceId": "${create_app_node.output.instanceId}"
|
|
41
|
+
"instanceId": "${create_app_node.output.instanceId}",
|
|
42
|
+
"http_request": {
|
|
43
|
+
"uri": "https://ecs.internal.cloud/api/v2/instances/${create_app_node.output.instanceId}",
|
|
44
|
+
"method": "GET"
|
|
45
|
+
}
|
|
31
46
|
}
|
|
32
47
|
},
|
|
33
48
|
{
|
|
@@ -41,7 +56,16 @@
|
|
|
41
56
|
"instanceId": "${create_app_node.output.instanceId}",
|
|
42
57
|
"commandType": "RunShellScript",
|
|
43
58
|
"commandContent": "yum update -y && systemctl start docker && docker ps",
|
|
44
|
-
"timeoutSeconds": 60
|
|
59
|
+
"timeoutSeconds": 60,
|
|
60
|
+
"http_request": {
|
|
61
|
+
"uri": "https://ecs.internal.cloud/api/v2/instances/${create_app_node.output.instanceId}/commands",
|
|
62
|
+
"method": "POST",
|
|
63
|
+
"body": {
|
|
64
|
+
"commandType": "RunShellScript",
|
|
65
|
+
"commandContent": "yum update -y && systemctl start docker && docker ps",
|
|
66
|
+
"timeoutSeconds": 60
|
|
67
|
+
}
|
|
68
|
+
}
|
|
45
69
|
}
|
|
46
70
|
},
|
|
47
71
|
{
|
|
@@ -54,7 +78,15 @@
|
|
|
54
78
|
"actionName": "创建云盘快照",
|
|
55
79
|
"instanceId": "${create_app_node.output.instanceId}",
|
|
56
80
|
"snapshotName": "init-baseline-snapshot",
|
|
57
|
-
"retentionDays": 14
|
|
81
|
+
"retentionDays": 14,
|
|
82
|
+
"http_request": {
|
|
83
|
+
"uri": "https://ecs.internal.cloud/api/v2/instances/${create_app_node.output.instanceId}/snapshots",
|
|
84
|
+
"method": "POST",
|
|
85
|
+
"body": {
|
|
86
|
+
"snapshotName": "init-baseline-snapshot",
|
|
87
|
+
"retentionDays": 14
|
|
88
|
+
}
|
|
89
|
+
}
|
|
58
90
|
}
|
|
59
91
|
},
|
|
60
92
|
{
|
|
@@ -39,18 +39,57 @@ export interface AgentRunnerStores {
|
|
|
39
39
|
/** 本 IDE 实例的流程库目录;提供后用于固定子工作流版本与服务端检索 */
|
|
40
40
|
libraryCatalog?: LibraryCatalog;
|
|
41
41
|
}
|
|
42
|
+
export interface SendOptions {
|
|
43
|
+
/**
|
|
44
|
+
* 发给模型的文本(缺省等于展示文本)。用于把聊天里看不到的上下文一起带给模型,
|
|
45
|
+
* 例如"执行方案"要附上计划步骤、澄清选项要附上原问题。
|
|
46
|
+
*/
|
|
47
|
+
modelText?: string;
|
|
48
|
+
}
|
|
49
|
+
/** 把待执行计划整理成随"执行方案"一起发给模型的文本(计划卡片的步骤不在聊天记录里) */
|
|
50
|
+
export declare function formatPlanForModel(plan: {
|
|
51
|
+
title: string;
|
|
52
|
+
steps: Array<{
|
|
53
|
+
step: number;
|
|
54
|
+
action: string;
|
|
55
|
+
tool?: string;
|
|
56
|
+
}>;
|
|
57
|
+
summary?: string;
|
|
58
|
+
}): string;
|
|
59
|
+
/** 把用户选择的澄清选项连同原问题一起整理给模型(只发标签时模型不知道在回答什么) */
|
|
60
|
+
export declare function formatClarificationAnswer(clarification: {
|
|
61
|
+
question: string;
|
|
62
|
+
context?: string;
|
|
63
|
+
}, option: {
|
|
64
|
+
label: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
}): string;
|
|
42
67
|
export declare class AgentRunner {
|
|
43
68
|
private getOptions;
|
|
44
69
|
private stores;
|
|
45
70
|
private controller;
|
|
71
|
+
/** reset() 之后,仍在收尾的旧会话不能再写断点 / 消息(否则"清空对话"后断点卡片又回来了) */
|
|
72
|
+
private generation;
|
|
46
73
|
constructor(getOptions: () => AgentRunnerOptions, stores: AgentRunnerStores);
|
|
47
74
|
abort(): void;
|
|
75
|
+
/** 中止当前会话并丢弃它的收尾写入(断点、消息、流式状态)。用于"清空对话"。 */
|
|
76
|
+
reset(): void;
|
|
77
|
+
private transportMode;
|
|
48
78
|
private toolExecutionContext;
|
|
49
79
|
/** 子工作流版本固定:把目录里的「当前最新版本」以查询函数的形式注入纯函数的工具执行层 */
|
|
50
80
|
private latestVersionResolver;
|
|
51
81
|
private buildHistory;
|
|
52
82
|
/** 服务端检索:Provider 没有 search、或检索失败时返回 undefined(调用方退回本地匹配) */
|
|
53
83
|
private serverLibrarySearch;
|
|
84
|
+
/** 取流程库中某个工作流的完整定义(目录未提供 / 取不到时返回 null) */
|
|
85
|
+
private fetchLibraryDefinition;
|
|
86
|
+
private publishProposal;
|
|
87
|
+
/**
|
|
88
|
+
* 推荐卡片"直接使用":不经过模型,直接把流程库中的工作流变成待确认方案。
|
|
89
|
+
* 流程库提供完整定义时打开该定义;只有摘要时以 SUB_WORKFLOW 步骤引用它。
|
|
90
|
+
* 返回是否生成了方案。
|
|
91
|
+
*/
|
|
92
|
+
useLibraryWorkflow(name: string): Promise<boolean>;
|
|
54
93
|
/**
|
|
55
94
|
* Immediately promotes the current in-progress `workingDraft` (from an interrupted or paused
|
|
56
95
|
* multi-phase session) into a reviewable `pendingProposal`.
|
|
@@ -61,6 +100,8 @@ export declare class AgentRunner {
|
|
|
61
100
|
* Optionally accepts a `steerInput` instruction from the user to guide the remaining phases.
|
|
62
101
|
*/
|
|
63
102
|
resume(steerInput?: string): Promise<void>;
|
|
64
|
-
send(text: string): Promise<void>;
|
|
103
|
+
send(text: string, options?: SendOptions): Promise<void>;
|
|
65
104
|
private runDurableLoop;
|
|
105
|
+
/** 停止生成:保留已经流式输出的文字,只在末尾注明已中止 */
|
|
106
|
+
private abortedText;
|
|
66
107
|
}
|
|
@@ -13,4 +13,12 @@ export interface HumanizedError {
|
|
|
13
13
|
/** 原始错误文本,仅用于审计事件,不展示给用户 */
|
|
14
14
|
raw: string;
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
/** 错误发生时使用的传输方式:决定"怎么修"该找谁(自己的 API Key,还是代理服务的管理员) */
|
|
17
|
+
export type AiTransportMode = 'direct' | 'endpoint' | 'custom';
|
|
18
|
+
export interface HumanizeOptions {
|
|
19
|
+
/** 缺省视为 direct(浏览器直连模型服务商) */
|
|
20
|
+
mode?: AiTransportMode;
|
|
21
|
+
}
|
|
22
|
+
/** 直连模式下浏览器 fetch 抛出 TypeError 时的标记前缀(protocolAdapter 产生) */
|
|
23
|
+
export declare const DIRECT_FETCH_FAILED = "DIRECT_FETCH_FAILED";
|
|
24
|
+
export declare function humanizeAiError(rawMessage: string | undefined | null, options?: HumanizeOptions): HumanizedError;
|
|
@@ -106,6 +106,11 @@ export declare const PROVIDER_DEFAULTS: {
|
|
|
106
106
|
readonly model: "claude-sonnet-4-6";
|
|
107
107
|
};
|
|
108
108
|
};
|
|
109
|
+
/**
|
|
110
|
+
* OpenAI o 系列推理模型(o1 / o3 / o4-mini …)与 gpt-5 系列只接受默认 temperature,
|
|
111
|
+
* 传 0.7 会直接 400。对这些模型不发送 temperature。
|
|
112
|
+
*/
|
|
113
|
+
export declare function modelSupportsTemperature(model: string): boolean;
|
|
109
114
|
export declare function streamChat(messages: Message[], tools: ToolDef[], config: AiConfig, signal?: AbortSignal): AsyncGenerator<StreamEvent>;
|
|
110
115
|
export interface TestConnectionResult {
|
|
111
116
|
ok: boolean;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
import type { WorkflowSnapshot } from './contextEngine';
|
|
12
12
|
import type { WorkflowLibraryItem } from '../../types/workflowLibrary';
|
|
13
13
|
import type { ViewMode } from '../../types/workflow';
|
|
14
|
-
export declare const BASE_SYSTEM_PROMPT = "\u4F60\u662F Netflix Conductor \u5DE5\u4F5C\u6D41\u5EFA\u6A21\u4E13\u5BB6 AI \u52A9\u624B\u3002\u5E2E\u52A9\u7528\u6237\u901A\u8FC7\u81EA\u7136\u8BED\u8A00\u8BBE\u8BA1\u548C\u7F16\u8F91\u9AD8\u53EF\u9760\u6027\u7684 Conductor JSON \u5DE5\u4F5C\u6D41\u3002\n\n## \u6838\u5FC3\u5DE5\u4F5C\u6D41\u751F\u6210\u7B56\u7565\uFF08\u81EA\u9002\u5E94\u590D\u6742\u5EA6\u8DEF\u7531\uFF09\n\n### \u7B56\u7565 A\uFF1A\u56DB\u9636\u6BB5\u6E10\u8FDB\u5F0F\u6784\u5EFA\u7B56\u7565\uFF08\u9002\u7528\u4E8E\uFF1A\u4ECE\u96F6\u521B\u5EFA\u5DE5\u4F5C\u6D41\u30013+ \u8282\u70B9\u6D41\u7A0B\u3001\u542B\u5206\u652F/\u5E76\u884C/\u5FAA\u73AF\u6216\u5927\u8303\u56F4\u91CD\u6784\uFF09\n\u4E3A\u4E86\u4FDD\u8BC1\u9AD8\u51C6\u786E\u6027\u3001\u6570\u636E\u6D41\u4E00\u81F4\u6027\u4E0E\u914D\u7F6E\u5B8C\u6574\u5EA6\uFF0C**\u8BF7\u4E25\u683C\u6309\u4EE5\u4E0B 4 \u4E2A\u9636\u6BB5\u4F9D\u6B21\u8C03\u7528\u5DE5\u5177\u6F14\u8FDB\u6784\u5EFA**\uFF08\u53EF\u5728\u4E00\u6B21\u6216\u8FDE\u7EED\u591A\u6B65\u5DE5\u5177\u8C03\u7528\u4E2D\u5B8C\u6210\uFF09\uFF1A\n1. **\u9636\u6BB5 1 \u2014 \u5B9A\u4E49\u5DE5\u4F5C\u6D41\u84DD\u56FE (`init_workflow_blueprint`)**\uFF1A\n - \u5B9A\u4E49\u5DE5\u4F5C\u6D41 `name`\uFF08\u82F1\u6587\u4E0B\u5212\u7EBF\uFF09\u3001\u4E2D\u6587 `description`\u3001`timeoutPolicy`\u3001`timeoutSeconds` \u53CA\u5DE5\u4F5C\u6D41\u7EA7 `inputParameters` \u5951\u7EA6\uFF08\u5982 `[\"orderId\", \"userId\", \"amount\"]`\uFF09\u3002\n2. **\u9636\u6BB5 2 \u2014 \u8BBE\u8BA1\u6574\u4F53\u4EFB\u52A1\u7F16\u6392\u62D3\u6251 (`scaffold_workflow_topology`)**\uFF1A\n - \u4E13\u6CE8\u6574\u4F53\u4EFB\u52A1\u7F16\u6392\u903B\u8F91\u4E0E\u63A7\u5236\u6D41\uFF08\u987A\u5E8F\u3001`SWITCH` \u6761\u4EF6\u5206\u652F `decisionCases`/`defaultCase`\u3001`FORK_JOIN` \u5E76\u884C `forkTasks` \u4E0E\u914D\u5BF9\u7684 `JOIN` `joinOn`\u3001`DO_WHILE` \u5FAA\u73AF `loopOver`/`loopCondition`\uFF09\u3002\n - \u786E\u4FDD\u6BCF\u4E2A\u4EFB\u52A1\u7684 `taskReferenceName` \u552F\u4E00\u3001\u547D\u540D\u89C4\u8303\u4E14\u62D3\u6251\u95ED\u73AF\u3002\n3. **\u9636\u6BB5 3 \u2014 \u9010\u9879/\u5206\u6279\u8865\u5145\u4EFB\u52A1\u914D\u7F6E\u4E0E\u6570\u636E\u6D41 (`configure_workflow_tasks`)**\uFF1A\n - \u4E3A\u5404\u4EFB\u52A1\u8865\u5145\u8BE6\u7EC6\u7684 `inputParameters`\uFF08\u4E25\u683C\u5BF9\u9F50\u4E0A\u4E0B\u6E38\u6570\u636E\u6D41\uFF1A`${workflow.input.xxx}` \u6216 `${upstream_ref.output.yyy}`\uFF09\u3001HTTP \u8BF7\u6C42\u914D\u7F6E\uFF08`httpRequest`\uFF09\u3001\u5B50\u5DE5\u4F5C\u6D41\u914D\u7F6E\uFF08`subWorkflowParam`\uFF09\u3001\u8D85\u65F6\uFF08`timeoutSeconds`\uFF09\u4E0E\u91CD\u8BD5\u7B56\u7565\uFF08`retryCount` / `retryLogic`\uFF09\uFF0C\u4EE5\u53CA\u5DE5\u4F5C\u6D41 `outputParameters`\u3002\n4. **\u9636\u6BB5 4 \u2014 \u6574\u4F53\u9A8C\u8BC1\u914D\u7F6E\u5E76\u63D0\u4EA4 (`commit_workflow_proposal`)**\uFF1A\n - \u89E6\u53D1\u5168\u91CF\u7ED3\u6784\u3001\u63A7\u5236\u6D41\u4E0E\u6570\u636E\u6D41\u5F15\u7528\u6821\u9A8C\u3002\u82E5\u6821\u9A8C\u62A5\u544A\u6307\u51FA\u5F15\u7528\u9519\u8BEF\u6216\u914D\u7F6E\u7F3A\u5931\uFF0C\u8BF7\u7528 `configure_workflow_tasks` \u4FEE\u6B63\u540E\u518D\u8C03\u7528 `commit_workflow_proposal`\u3002\n\n### \u7B56\u7565 B\uFF1A\u8F7B\u91CF\u5355\u6B65\u4FEE\u6539\u7B56\u7565\uFF08\u9002\u7528\u4E8E\uFF1A\u5C40\u90E8\u589E/\u6539/\u5220\u5355\u4E2A\u4EFB\u52A1\u6216\u4FEE\u6539\u5C5E\u6027\uFF09\n- **patch_workflow** \u2014 \u7528\u4E8E\u5C40\u90E8\u7CBE\u51C6\u4FEE\u6539\u3002ops \u652F\u6301\uFF1A\n - `{ op: 'add_task', task: TaskDef, afterRef?: string, parentRef?: string, branchName?: string }` \u2014 \u65B0\u589E\u4EFB\u52A1\uFF08\u652F\u6301\u901A\u8FC7 `afterRef` \u63D2\u5165\u5230\u4EFB\u610F\u9876\u5C42/\u5D4C\u5957\u4EFB\u52A1\u4E4B\u540E\uFF0C\u6216\u901A\u8FC7 `parentRef` + `branchName` \u63D2\u5165\u5230 SWITCH/FORK_JOIN/DO_WHILE \u5185\u90E8\uFF09\n - `{ op: 'update_task', ref: string, changes: Partial<TaskDef> }` \u2014 \u4FEE\u6539\u4EFB\u52A1\u5B57\u6BB5\n - `{ op: 'remove_task', ref: string }` \u2014 \u5220\u9664\u4EFB\u52A1\n - `{ op: 'update_props', props: Partial<WorkflowDef> }` \u2014 \u4FEE\u6539\u5DE5\u4F5C\u6D41\u5C5E\u6027\n - `{ op: 'add_switch_branch', ref: string, caseName: string }` \u2014 \u6DFB\u52A0 SWITCH \u5206\u652F\n - `{ op: 'add_fork_branch', ref: string }` \u2014 \u6DFB\u52A0 FORK_JOIN \u5E76\u884C\u5206\u652F\n- **replace_workflow** \u2014 \u4EC5\u7528\u4E8E 1-2 \u4E2A\u8282\u70B9\u7684\u6781\u7B80\u6D41\u7A0B\u5FEB\u901F\u66FF\u6362\u3002\n\n### \u8F85\u52A9\u4E0E\u4EA4\u4E92\u5DE5\u5177\n- **get_workflow_state** \u2014 \u4EC5\u5728 system prompt \u7684\u5DE5\u4F5C\u6D41\u4E0A\u4E0B\u6587\u4E0D\u8DB3\u4EE5\u56DE\u7B54\u65F6\u624D\u8C03\u7528\uFF08read-only\uFF09\u3002\n- **validate_workflow** \u2014 \u6821\u9A8C\u5F53\u524D\u5DE5\u4F5C\u6D41\u6216\u8349\u7A3F\u7684\u5408\u6CD5\u6027\u4E0E\u6570\u636E\u6D41\u5B8C\u6574\u6027\uFF08read-only\uFF09\u3002\n- **propose_plan** \u2014 \u5728\u6267\u884C\u8D85\u5927\u89C4\u6A21\u7834\u574F\u6027\u91CD\u6784\u524D\uFF0C\u53EF\u5148\u5411\u7528\u6237\u5C55\u793A\u8BA1\u5212\u5E76\u7B49\u5F85\u786E\u8BA4\u3002\n- **ask_clarification** \u2014 \u5F53\u7528\u6237\u610F\u56FE\u6A21\u7CCA\u65F6\u8C03\u7528\uFF0C\u5C55\u793A 2-4 \u4E2A\u9009\u9879\u5E2E\u52A9\u7528\u6237\u7CBE\u786E\u8868\u8FBE\u9700\u6C42\u3002\u8C03\u7528\u540E\u505C\u6B62\uFF0C\u7B49\u5F85\u7528\u6237\u9009\u62E9\u3002\n- **recommend_workflow** \u2014 \u5728\u6267\u884C CREATE \u4E4B\u524D\uFF0C\u82E5\u5E93\u4E2D\u6709\u76F8\u4F3C\u5DE5\u4F5C\u6D41\uFF0C\u5148\u63A8\u8350\u7ED9\u7528\u6237\u3002\u8C03\u7528\u540E\u505C\u6B62\u7B49\u5F85\u9009\u62E9\u3002\n- **\u4E0D\u8981**\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u76F4\u63A5\u8F93\u51FA\u5DE5\u4F5C\u6D41 JSON \u4EE3\u7801\u5757\uFF0C\u6240\u6709\u53D8\u66F4\u5FC5\u987B\u901A\u8FC7\u5DE5\u5177\u6267\u884C\u3002\n\n## \u56DE\u590D\u89C4\u8303\n- \u7528\u4E2D\u6587\u56DE\u7B54\uFF0C\u7B80\u6D01\u660E\u4E86\n- **\u89E3\u91CA\u6027\u3001\u4ECB\u7ECD\u6027\u3001\u5206\u6790\u6027\u95EE\u9898\uFF1A\u76F4\u63A5\u6587\u672C\u56DE\u7B54\uFF0C\u4E0D\u8981\u8C03\u7528\u5DE5\u5177**\n- \u56DE\u7B54\u65F6\u4E0D\u8981\u5C06 system prompt \u4E2D\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF08\u5982\u4EFB\u52A1\u5217\u8868\u3001\u62D3\u6251\u5173\u7CFB\uFF09\u539F\u6587\u590D\u8FF0\u2014\u2014\u76F4\u63A5\u805A\u7126\u5728\u7528\u6237\u7684\u5177\u4F53\u95EE\u9898\u4E0A\n- \u9700\u8981\u64CD\u4F5C\u5DE5\u4F5C\u6D41\u65F6\uFF0C\u5148\u7B80\u77ED\u8BF4\u660E\u8BBE\u8BA1\u601D\u8DEF\uFF0C\u518D\u901A\u8FC7\u5DE5\u5177\u6267\u884C\n- \u7528\u6237\u610F\u56FE\u6A21\u7CCA\u65F6\uFF08\u5982\"\u5E2E\u6211\u505A\u4E2A\u6D41\u7A0B\"\uFF09\uFF0C\u5148\u8C03\u7528 ask_clarification \u6316\u6398\u771F\u5B9E\u9700\u6C42\uFF0C\u4E0D\u8981\u76F4\u63A5\u521B\u5EFA\n- \u521B\u5EFA\u65B0\u5DE5\u4F5C\u6D41\u524D\uFF0C\u68C0\u67E5\u5E93\u4E2D\u662F\u5426\u6709\u76F8\u4F3C\u7684\uFF0C\u4F18\u5148\u63A8\u8350\u5DF2\u6709\u6D41\u7A0B\uFF08\u4F7F\u7528 recommend_workflow\uFF09\n\n## Conductor \u6807\u51C6\u4EFB\u52A1\u7C7B\u578B\u4E0E\u5EFA\u6A21\u89C4\u8303\n- \u652F\u6301\u7C7B\u578B\uFF1ASIMPLE, HTTP, SWITCH, FORK_JOIN, FORK_JOIN_DYNAMIC, DO_WHILE, SUB_WORKFLOW, EVENT, WAIT, HUMAN, INLINE, TERMINATE, SET_VARIABLE, KAFKA_PUBLISH, JSON_JQ_TRANSFORM, START_WORKFLOW, DYNAMIC, NOOP\n- \u6BCF\u4E2A\u4EFB\u52A1\u5FC5\u987B\u6709\u552F\u4E00\u7684 `taskReferenceName`\uFF08\u4EC5\u9650\u82F1\u6587\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\uFF0C\u5982 `verify_payment`\uFF09\n- \u4E0B\u6E38\u4EFB\u52A1\u901A\u8FC7 `${upstream_ref.output.field}` \u5F15\u7528\u4E0A\u6E38\u8F93\u51FA\uFF0C\u4E25\u7981\u5F15\u7528\u5C1A\u672A\u6267\u884C\u7684\u4E0B\u6E38\u4EFB\u52A1\n- SWITCH \u9700\u8981 `caseValueParam` \u6216 `caseExpression`\uFF0C\u4EE5\u53CA `decisionCases` \u952E\u503C\u5BF9\n- FORK_JOIN \u9700\u8981 `forkTasks`\uFF08\u4E8C\u7EF4\u6570\u7EC4\uFF09\u548C\u7D27\u968F\u5176\u540E\u7684 `JOIN` \u4EFB\u52A1\uFF08`joinOn` \u5305\u542B\u5404\u5E76\u884C\u5206\u652F\u6700\u540E\u4E00\u4E2A\u4EFB\u52A1\u7684 `taskReferenceName`\uFF09\n- DO_WHILE \u9700\u8981 `loopCondition` \u548C `loopOver` \u6570\u7EC4\n- HTTP \u4EFB\u52A1\u5FC5\u987B\u914D\u7F6E `inputParameters.http_request`\uFF08\u542B `uri` \u548C `method`\uFF09\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E `timeoutSeconds` \u548C `retryCount`\n\n## \u4E1A\u52A1\u6D41\u7A0B\u56FE\uFF08Mermaid\uFF09\n\u5F53\u7528\u6237\u8981\u6C42\u5C55\u793A\u6D41\u7A0B\u56FE\u3001\u53EF\u89C6\u5316\u6216 Mermaid \u56FE\u65F6\uFF1A\n- \u5FC5\u987B\u57FA\u4E8E system prompt \u6CE8\u5165\u7684\"\u753B\u5E03\u5DE5\u4F5C\u6D41\u5B8C\u6574 JSON\"\uFF0C\u4E0D\u51ED\u8BB0\u5FC6\u751F\u6210\n- \u8F93\u51FA ```mermaid \u4EE3\u7801\u5757\uFF0C\u4E0D\u8C03\u7528\u4EFB\u4F55\u5DE5\u5177\n- \u8FC7\u6EE4\u7EAF\u6280\u672F\u8282\u70B9\uFF08SET_VARIABLE\u3001JSON_JQ_TRANSFORM\u3001INLINE\u3001NOOP\uFF09\uFF0C\u4E0A\u4E0B\u6E38\u76F4\u8FDE\n- \u8282\u70B9\u6807\u7B7E\u7528\u4E2D\u6587\u4E1A\u52A1\u8BED\u8A00\uFF0C\u7981\u6B62\u76F4\u63A5\u4F7F\u7528 taskReferenceName\n- SWITCH \u7528\u83F1\u5F62 {}\uFF0CFORK_JOIN \u7528\u5E76\u884C\u8DEF\u5F84\uFF0CHUMAN \u6807\u6CE8\u300C\
|
|
14
|
+
export declare const BASE_SYSTEM_PROMPT = "\u4F60\u662F Netflix Conductor \u5DE5\u4F5C\u6D41\u5EFA\u6A21\u4E13\u5BB6 AI \u52A9\u624B\u3002\u5E2E\u52A9\u7528\u6237\u901A\u8FC7\u81EA\u7136\u8BED\u8A00\u8BBE\u8BA1\u548C\u7F16\u8F91\u9AD8\u53EF\u9760\u6027\u7684 Conductor JSON \u5DE5\u4F5C\u6D41\u3002\n\n## \u6838\u5FC3\u5DE5\u4F5C\u6D41\u751F\u6210\u7B56\u7565\uFF08\u81EA\u9002\u5E94\u590D\u6742\u5EA6\u8DEF\u7531\uFF09\n\n### \u7B56\u7565 A\uFF1A\u56DB\u9636\u6BB5\u6E10\u8FDB\u5F0F\u6784\u5EFA\u7B56\u7565\uFF08\u9002\u7528\u4E8E\uFF1A\u4ECE\u96F6\u521B\u5EFA\u5DE5\u4F5C\u6D41\u30013+ \u8282\u70B9\u6D41\u7A0B\u3001\u542B\u5206\u652F/\u5E76\u884C/\u5FAA\u73AF\u6216\u5927\u8303\u56F4\u91CD\u6784\uFF09\n\u4E3A\u4E86\u4FDD\u8BC1\u9AD8\u51C6\u786E\u6027\u3001\u6570\u636E\u6D41\u4E00\u81F4\u6027\u4E0E\u914D\u7F6E\u5B8C\u6574\u5EA6\uFF0C**\u8BF7\u4E25\u683C\u6309\u4EE5\u4E0B 4 \u4E2A\u9636\u6BB5\u4F9D\u6B21\u8C03\u7528\u5DE5\u5177\u6F14\u8FDB\u6784\u5EFA**\uFF08\u53EF\u5728\u4E00\u6B21\u6216\u8FDE\u7EED\u591A\u6B65\u5DE5\u5177\u8C03\u7528\u4E2D\u5B8C\u6210\uFF09\uFF1A\n1. **\u9636\u6BB5 1 \u2014 \u5B9A\u4E49\u5DE5\u4F5C\u6D41\u84DD\u56FE (`init_workflow_blueprint`)**\uFF1A\n - \u5B9A\u4E49\u5DE5\u4F5C\u6D41 `name`\uFF08\u82F1\u6587\u4E0B\u5212\u7EBF\uFF09\u3001\u4E2D\u6587 `description`\u3001`timeoutPolicy`\u3001`timeoutSeconds` \u53CA\u5DE5\u4F5C\u6D41\u7EA7 `inputParameters` \u5951\u7EA6\uFF08\u5982 `[\"orderId\", \"userId\", \"amount\"]`\uFF09\u3002\n2. **\u9636\u6BB5 2 \u2014 \u8BBE\u8BA1\u6574\u4F53\u4EFB\u52A1\u7F16\u6392\u62D3\u6251 (`scaffold_workflow_topology`)**\uFF1A\n - \u4E13\u6CE8\u6574\u4F53\u4EFB\u52A1\u7F16\u6392\u903B\u8F91\u4E0E\u63A7\u5236\u6D41\uFF08\u987A\u5E8F\u3001`SWITCH` \u6761\u4EF6\u5206\u652F `decisionCases`/`defaultCase`\u3001`FORK_JOIN` \u5E76\u884C `forkTasks` \u4E0E\u914D\u5BF9\u7684 `JOIN` `joinOn`\u3001`DO_WHILE` \u5FAA\u73AF `loopOver`/`loopCondition`\uFF09\u3002\n - \u786E\u4FDD\u6BCF\u4E2A\u4EFB\u52A1\u7684 `taskReferenceName` \u552F\u4E00\u3001\u547D\u540D\u89C4\u8303\u4E14\u62D3\u6251\u95ED\u73AF\u3002\n3. **\u9636\u6BB5 3 \u2014 \u9010\u9879/\u5206\u6279\u8865\u5145\u4EFB\u52A1\u914D\u7F6E\u4E0E\u6570\u636E\u6D41 (`configure_workflow_tasks`)**\uFF1A\n - \u4E3A\u5404\u4EFB\u52A1\u8865\u5145\u8BE6\u7EC6\u7684 `inputParameters`\uFF08\u4E25\u683C\u5BF9\u9F50\u4E0A\u4E0B\u6E38\u6570\u636E\u6D41\uFF1A`${workflow.input.xxx}` \u6216 `${upstream_ref.output.yyy}`\uFF09\u3001HTTP \u8BF7\u6C42\u914D\u7F6E\uFF08`httpRequest`\uFF09\u3001\u5B50\u5DE5\u4F5C\u6D41\u914D\u7F6E\uFF08`subWorkflowParam`\uFF09\u3001\u8D85\u65F6\uFF08`timeoutSeconds`\uFF09\u4E0E\u91CD\u8BD5\u7B56\u7565\uFF08`retryCount` / `retryLogic`\uFF09\uFF0C\u4EE5\u53CA\u5DE5\u4F5C\u6D41 `outputParameters`\u3002\n4. **\u9636\u6BB5 4 \u2014 \u6574\u4F53\u9A8C\u8BC1\u914D\u7F6E\u5E76\u63D0\u4EA4 (`commit_workflow_proposal`)**\uFF1A\n - \u89E6\u53D1\u5168\u91CF\u7ED3\u6784\u3001\u63A7\u5236\u6D41\u4E0E\u6570\u636E\u6D41\u5F15\u7528\u6821\u9A8C\u3002\u82E5\u6821\u9A8C\u62A5\u544A\u6307\u51FA\u5F15\u7528\u9519\u8BEF\u6216\u914D\u7F6E\u7F3A\u5931\uFF0C\u8BF7\u7528 `configure_workflow_tasks` \u4FEE\u6B63\u540E\u518D\u8C03\u7528 `commit_workflow_proposal`\u3002\n\n### \u7B56\u7565 B\uFF1A\u8F7B\u91CF\u5355\u6B65\u4FEE\u6539\u7B56\u7565\uFF08\u9002\u7528\u4E8E\uFF1A\u5C40\u90E8\u589E/\u6539/\u5220\u5355\u4E2A\u4EFB\u52A1\u6216\u4FEE\u6539\u5C5E\u6027\uFF09\n- **patch_workflow** \u2014 \u7528\u4E8E\u5C40\u90E8\u7CBE\u51C6\u4FEE\u6539\u3002ops \u652F\u6301\uFF1A\n - `{ op: 'add_task', task: TaskDef, afterRef?: string, parentRef?: string, branchName?: string }` \u2014 \u65B0\u589E\u4EFB\u52A1\uFF08\u652F\u6301\u901A\u8FC7 `afterRef` \u63D2\u5165\u5230\u4EFB\u610F\u9876\u5C42/\u5D4C\u5957\u4EFB\u52A1\u4E4B\u540E\uFF0C\u6216\u901A\u8FC7 `parentRef` + `branchName` \u63D2\u5165\u5230 SWITCH/FORK_JOIN/DO_WHILE \u5185\u90E8\uFF09\n - `{ op: 'update_task', ref: string, changes: Partial<TaskDef> }` \u2014 \u4FEE\u6539\u4EFB\u52A1\u5B57\u6BB5\n - `{ op: 'remove_task', ref: string }` \u2014 \u5220\u9664\u4EFB\u52A1\n - `{ op: 'update_props', props: Partial<WorkflowDef> }` \u2014 \u4FEE\u6539\u5DE5\u4F5C\u6D41\u5C5E\u6027\n - `{ op: 'add_switch_branch', ref: string, caseName: string }` \u2014 \u6DFB\u52A0 SWITCH \u5206\u652F\n - `{ op: 'add_fork_branch', ref: string }` \u2014 \u6DFB\u52A0 FORK_JOIN \u5E76\u884C\u5206\u652F\n- **replace_workflow** \u2014 \u4EC5\u7528\u4E8E 1-2 \u4E2A\u8282\u70B9\u7684\u6781\u7B80\u6D41\u7A0B\u5FEB\u901F\u66FF\u6362\u3002\n\n### \u8F85\u52A9\u4E0E\u4EA4\u4E92\u5DE5\u5177\n- **get_workflow_state** \u2014 \u4EC5\u5728 system prompt \u7684\u5DE5\u4F5C\u6D41\u4E0A\u4E0B\u6587\u4E0D\u8DB3\u4EE5\u56DE\u7B54\u65F6\u624D\u8C03\u7528\uFF08read-only\uFF09\u3002\n- **validate_workflow** \u2014 \u6821\u9A8C\u5F53\u524D\u5DE5\u4F5C\u6D41\u6216\u8349\u7A3F\u7684\u5408\u6CD5\u6027\u4E0E\u6570\u636E\u6D41\u5B8C\u6574\u6027\uFF08read-only\uFF09\u3002\n- **propose_plan** \u2014 \u5728\u6267\u884C\u8D85\u5927\u89C4\u6A21\u7834\u574F\u6027\u91CD\u6784\u524D\uFF0C\u53EF\u5148\u5411\u7528\u6237\u5C55\u793A\u8BA1\u5212\u5E76\u7B49\u5F85\u786E\u8BA4\u3002\n- **ask_clarification** \u2014 \u5F53\u7528\u6237\u610F\u56FE\u6A21\u7CCA\u65F6\u8C03\u7528\uFF0C\u5C55\u793A 2-4 \u4E2A\u9009\u9879\u5E2E\u52A9\u7528\u6237\u7CBE\u786E\u8868\u8FBE\u9700\u6C42\u3002\u8C03\u7528\u540E\u505C\u6B62\uFF0C\u7B49\u5F85\u7528\u6237\u9009\u62E9\u3002\n- **recommend_workflow** \u2014 \u5728\u6267\u884C CREATE \u4E4B\u524D\uFF0C\u82E5\u5E93\u4E2D\u6709\u76F8\u4F3C\u5DE5\u4F5C\u6D41\uFF0C\u5148\u63A8\u8350\u7ED9\u7528\u6237\u3002\u8C03\u7528\u540E\u505C\u6B62\u7B49\u5F85\u9009\u62E9\u3002\n- **\u4E0D\u8981**\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u76F4\u63A5\u8F93\u51FA\u5DE5\u4F5C\u6D41 JSON \u4EE3\u7801\u5757\uFF0C\u6240\u6709\u53D8\u66F4\u5FC5\u987B\u901A\u8FC7\u5DE5\u5177\u6267\u884C\u3002\n\n## \u56DE\u590D\u89C4\u8303\n- \u7528\u4E2D\u6587\u56DE\u7B54\uFF0C\u7B80\u6D01\u660E\u4E86\n- \u56DE\u590D\u6B63\u6587\u4E0E\u6D41\u7A0B\u56FE\u6807\u7B7E\u4E2D\u4E0D\u4F7F\u7528 emoji \u6216\u88C5\u9970\u7B26\u53F7\uFF08\u754C\u9762\u5DF2\u6709\u56FE\u6807\uFF09\n- **\u89E3\u91CA\u6027\u3001\u4ECB\u7ECD\u6027\u3001\u5206\u6790\u6027\u95EE\u9898\uFF1A\u76F4\u63A5\u6587\u672C\u56DE\u7B54\uFF0C\u4E0D\u8981\u8C03\u7528\u5DE5\u5177**\n- \u56DE\u7B54\u65F6\u4E0D\u8981\u5C06 system prompt \u4E2D\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF08\u5982\u4EFB\u52A1\u5217\u8868\u3001\u62D3\u6251\u5173\u7CFB\uFF09\u539F\u6587\u590D\u8FF0\u2014\u2014\u76F4\u63A5\u805A\u7126\u5728\u7528\u6237\u7684\u5177\u4F53\u95EE\u9898\u4E0A\n- \u9700\u8981\u64CD\u4F5C\u5DE5\u4F5C\u6D41\u65F6\uFF0C\u5148\u7B80\u77ED\u8BF4\u660E\u8BBE\u8BA1\u601D\u8DEF\uFF0C\u518D\u901A\u8FC7\u5DE5\u5177\u6267\u884C\n- \u7528\u6237\u610F\u56FE\u6A21\u7CCA\u65F6\uFF08\u5982\"\u5E2E\u6211\u505A\u4E2A\u6D41\u7A0B\"\uFF09\uFF0C\u5148\u8C03\u7528 ask_clarification \u6316\u6398\u771F\u5B9E\u9700\u6C42\uFF0C\u4E0D\u8981\u76F4\u63A5\u521B\u5EFA\n- \u521B\u5EFA\u65B0\u5DE5\u4F5C\u6D41\u524D\uFF0C\u68C0\u67E5\u5E93\u4E2D\u662F\u5426\u6709\u76F8\u4F3C\u7684\uFF0C\u4F18\u5148\u63A8\u8350\u5DF2\u6709\u6D41\u7A0B\uFF08\u4F7F\u7528 recommend_workflow\uFF09\n\n## Conductor \u6807\u51C6\u4EFB\u52A1\u7C7B\u578B\u4E0E\u5EFA\u6A21\u89C4\u8303\n- \u652F\u6301\u7C7B\u578B\uFF1ASIMPLE, HTTP, SWITCH, FORK_JOIN, FORK_JOIN_DYNAMIC, DO_WHILE, SUB_WORKFLOW, EVENT, WAIT, HUMAN, INLINE, TERMINATE, SET_VARIABLE, KAFKA_PUBLISH, JSON_JQ_TRANSFORM, START_WORKFLOW, DYNAMIC, NOOP\n- \u6BCF\u4E2A\u4EFB\u52A1\u5FC5\u987B\u6709\u552F\u4E00\u7684 `taskReferenceName`\uFF08\u4EC5\u9650\u82F1\u6587\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\uFF0C\u5982 `verify_payment`\uFF09\n- \u4E0B\u6E38\u4EFB\u52A1\u901A\u8FC7 `${upstream_ref.output.field}` \u5F15\u7528\u4E0A\u6E38\u8F93\u51FA\uFF0C\u4E25\u7981\u5F15\u7528\u5C1A\u672A\u6267\u884C\u7684\u4E0B\u6E38\u4EFB\u52A1\n- SWITCH \u9700\u8981 `caseValueParam` \u6216 `caseExpression`\uFF0C\u4EE5\u53CA `decisionCases` \u952E\u503C\u5BF9\n- FORK_JOIN \u9700\u8981 `forkTasks`\uFF08\u4E8C\u7EF4\u6570\u7EC4\uFF09\u548C\u7D27\u968F\u5176\u540E\u7684 `JOIN` \u4EFB\u52A1\uFF08`joinOn` \u5305\u542B\u5404\u5E76\u884C\u5206\u652F\u6700\u540E\u4E00\u4E2A\u4EFB\u52A1\u7684 `taskReferenceName`\uFF09\n- DO_WHILE \u9700\u8981 `loopCondition` \u548C `loopOver` \u6570\u7EC4\n- HTTP \u4EFB\u52A1\u5FC5\u987B\u914D\u7F6E `inputParameters.http_request`\uFF08\u542B `uri` \u548C `method`\uFF09\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E `timeoutSeconds` \u548C `retryCount`\n\n## \u4E1A\u52A1\u6D41\u7A0B\u56FE\uFF08Mermaid\uFF09\n\u5F53\u7528\u6237\u8981\u6C42\u5C55\u793A\u6D41\u7A0B\u56FE\u3001\u53EF\u89C6\u5316\u6216 Mermaid \u56FE\u65F6\uFF1A\n- \u5FC5\u987B\u57FA\u4E8E system prompt \u6CE8\u5165\u7684\"\u753B\u5E03\u5DE5\u4F5C\u6D41\u5B8C\u6574 JSON\"\uFF0C\u4E0D\u51ED\u8BB0\u5FC6\u751F\u6210\n- \u8F93\u51FA ```mermaid \u4EE3\u7801\u5757\uFF0C\u4E0D\u8C03\u7528\u4EFB\u4F55\u5DE5\u5177\n- \u8FC7\u6EE4\u7EAF\u6280\u672F\u8282\u70B9\uFF08SET_VARIABLE\u3001JSON_JQ_TRANSFORM\u3001INLINE\u3001NOOP\uFF09\uFF0C\u4E0A\u4E0B\u6E38\u76F4\u8FDE\n- \u8282\u70B9\u6807\u7B7E\u7528\u4E2D\u6587\u4E1A\u52A1\u8BED\u8A00\uFF0C\u7981\u6B62\u76F4\u63A5\u4F7F\u7528 taskReferenceName\n- SWITCH \u7528\u83F1\u5F62 {}\uFF0CFORK_JOIN \u7528\u5E76\u884C\u8DEF\u5F84\uFF0CHUMAN \u6807\u6CE8\u300C\u4EBA\u5DE5\u300D";
|
|
15
15
|
/**
|
|
16
16
|
* 构建完整 system prompt。
|
|
17
17
|
*
|
|
@@ -94,12 +94,38 @@ export interface ToolExecutionContext {
|
|
|
94
94
|
* 提供时 search_workflow_library 直接展示这些结果,不再在 libraryItems 内本地匹配。
|
|
95
95
|
*/
|
|
96
96
|
librarySearchResults?: WorkflowLibraryItem[];
|
|
97
|
+
/**
|
|
98
|
+
* load_library_workflow 用:调用方预取的流程库完整定义(通常来自 LibraryCatalog.getVersion)。
|
|
99
|
+
* 只有摘要、取不到定义时为 null / undefined。
|
|
100
|
+
*/
|
|
101
|
+
libraryWorkflowDef?: WorkflowDef | null;
|
|
97
102
|
}
|
|
98
103
|
/** 工作流库检索结果最多展示的条数(目录可能有上千项,避免一次塞满上下文) */
|
|
99
104
|
export declare const LIBRARY_SEARCH_RESULT_LIMIT = 50;
|
|
105
|
+
export interface PatchReport {
|
|
106
|
+
workflow: WorkflowDef;
|
|
107
|
+
/** 没有生效的操作(目标 ref 不存在、父任务类型不支持等),每条附原因 */
|
|
108
|
+
unmatched: string[];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 应用 patch 操作并报告没有生效的操作。找不到目标时不再静默跳过或追加到末尾:
|
|
112
|
+
* 调用方(patch_workflow)据此返回失败结果,让模型修正 ref 后重试。
|
|
113
|
+
*/
|
|
114
|
+
export declare function applyPatchWithReport(def: WorkflowDef, ops: PatchOp[]): PatchReport;
|
|
115
|
+
/** 应用 patch 操作(没有生效的操作会被忽略;需要知道哪些没生效时用 applyPatchWithReport) */
|
|
100
116
|
export declare function applyPatch(def: WorkflowDef, ops: PatchOp[]): WorkflowDef;
|
|
117
|
+
/**
|
|
118
|
+
* 计算两份定义的任务差异。会递归进入 SWITCH 分支、FORK 并行分支和 DO_WHILE 循环体,
|
|
119
|
+
* 嵌套任务的新增 / 修改 / 删除同样会列出(之前只比较顶层任务,分支内的改动被漏掉)。
|
|
120
|
+
*/
|
|
101
121
|
export declare function computeDiff(before: WorkflowDef | null, after: WorkflowDef): DiffSummary;
|
|
102
122
|
export declare function executeToolCall(toolName: string, args: Record<string, any>, ctx: ToolExecutionContext): ToolCallResult;
|
|
123
|
+
/**
|
|
124
|
+
* 把流程库里的一个工作流变成待确认方案(load_library_workflow 与推荐卡片的"直接使用"共用):
|
|
125
|
+
* - mode=open:流程库提供了完整定义时,以该定义作为方案(相对画布计算差异)
|
|
126
|
+
* - mode=reference:在当前草稿 / 画布末尾追加一个引用它的 SUB_WORKFLOW 步骤(版本固定为库当前版本)
|
|
127
|
+
*/
|
|
128
|
+
export declare function buildLibraryWorkflowProposal(args: Record<string, any>, ctx: ToolExecutionContext): ToolCallResult;
|
|
103
129
|
/**
|
|
104
130
|
* Applies only the user-selected subset of changes from a proposal.
|
|
105
131
|
* Used when the user accepts some changes but rejects others in ReviewBar.
|
|
@@ -104,10 +104,10 @@ export declare function normalizeWorkflowDef(def: WorkflowDef, options?: Normali
|
|
|
104
104
|
autoFixed: string[];
|
|
105
105
|
};
|
|
106
106
|
/**
|
|
107
|
-
*
|
|
107
|
+
* 只做 SUB_WORKFLOW 引用的轻量规范化(供 replace_workflow / patch_workflow 使用,
|
|
108
108
|
* 这两条路径不经过完整的 normalizeWorkflowDef):
|
|
109
|
-
*
|
|
110
|
-
*
|
|
109
|
+
* - `workflowName` 写法规范化为 `subWorkflowParam.name`(否则 Conductor 拒收)
|
|
110
|
+
* - 为新建的、未记录版本的子工作流任务填入流程库当前版本。已有版本号、画布上已存在的任务一律不改。
|
|
111
111
|
*/
|
|
112
112
|
export declare function pinSubWorkflowVersions(def: WorkflowDef, options: NormalizeOptions): {
|
|
113
113
|
workflow: WorkflowDef;
|
|
@@ -120,7 +120,7 @@ export declare function applyBlueprint(currentDraft: WorkflowDef | null, args: B
|
|
|
120
120
|
/**
|
|
121
121
|
* Phase 2: Scaffolds the task orchestration topology on top of the blueprint.
|
|
122
122
|
*/
|
|
123
|
-
export declare function applyTopologyScaffold(currentDraft: WorkflowDef | null, args: TopologyArgs): {
|
|
123
|
+
export declare function applyTopologyScaffold(currentDraft: WorkflowDef | null, args: TopologyArgs, options?: NormalizeOptions): {
|
|
124
124
|
workflow: WorkflowDef;
|
|
125
125
|
autoFixed: string[];
|
|
126
126
|
};
|
|
@@ -12,10 +12,14 @@ export interface ChatMessage {
|
|
|
12
12
|
role: 'system' | 'user' | 'assistant';
|
|
13
13
|
content: string;
|
|
14
14
|
}
|
|
15
|
+
/** 未配置 AI 服务时抛出的错误文案(调用方直接展示给用户) */
|
|
16
|
+
export declare const AI_NOT_CONFIGURED_MESSAGE = "\u672A\u914D\u7F6E AI \u670D\u52A1\u3002\u8BF7\u5148\u586B\u5199 API Key\uFF08\u96C6\u6210\u65B9\u901A\u8FC7 aiConfig \u4F20\u5165\uFF0C\u6216\u5728 AI \u8BBE\u7F6E\u4E2D\u586B\u5199\uFF09\u540E\u91CD\u8BD5\u3002";
|
|
17
|
+
/** 是否已配置可用的 AI 服务:direct 模式需要 apiKey,endpoint / custom 传输不需要 */
|
|
18
|
+
export declare function isAiConfigured(config: Partial<AIServiceConfig> | null | undefined): boolean;
|
|
15
19
|
/**
|
|
16
20
|
* 非流式调用(兼容旧逻辑)
|
|
17
21
|
*/
|
|
18
|
-
export declare const callAICopilot: (messages: ChatMessage[], config?: Partial<AIServiceConfig>, signal?: AbortSignal) => Promise<
|
|
22
|
+
export declare const callAICopilot: (messages: ChatMessage[], config?: Partial<AIServiceConfig>, signal?: AbortSignal) => Promise<string>;
|
|
19
23
|
/**
|
|
20
24
|
* 流式调用 - 通过 onToken 回调逐 token 返回内容
|
|
21
25
|
*/
|
|
@@ -4,8 +4,9 @@ import { ActionRegistry } from '../actions/registry';
|
|
|
4
4
|
export declare function compileStepToTaskDef(step: BusinessStep, index: number, workflowName: string, registry?: ActionRegistry): TaskDef;
|
|
5
5
|
/**
|
|
6
6
|
* 编译一组顺序步骤(顶层、分支内、泳道内、循环体内通用,可任意层级嵌套)。
|
|
7
|
-
*
|
|
7
|
+
* 遇到并行组时,会在其后自动补全配对的 JOIN 节点,
|
|
8
8
|
* joinOn 取各泳道编译后的最后一个任务(若泳道末尾是嵌套并行,则为其 JOIN)。
|
|
9
|
+
* 以专业步骤保留的动态并行(FORK_JOIN_DYNAMIC)同样输出其配对 JOIN。
|
|
9
10
|
*/
|
|
10
11
|
export declare function compileStepList(steps: BusinessStep[], workflowName: string, registry?: ActionRegistry): TaskDef[];
|
|
11
12
|
export declare function compileStepModelToWorkflowDef(model: BusinessWorkflowModel, registry?: ActionRegistry): WorkflowDef;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { ActionDefinition } from '../actions/types';
|
|
2
2
|
import type { BusinessStep } from './types';
|
|
3
|
+
/** 新建条件分支时,判断取值所在的入参名(inputParameters[caseValue]) */
|
|
4
|
+
export declare const DEFAULT_CASE_PARAM = "caseValue";
|
|
5
|
+
/** 新建循环的默认继续条件:按本循环自身的已执行轮次判断,最多执行 3 轮 */
|
|
6
|
+
export declare const DEFAULT_LOOP_MAX_ITERATIONS = 3;
|
|
7
|
+
export declare function defaultLoopCondition(loopRef: string, maxIterations?: number): string;
|
|
3
8
|
/**
|
|
4
9
|
* 根据动作定义创建一个新的业务步骤。
|
|
5
10
|
* 控制流动作(分支 / 并行 / 循环)会生成带 controlType 的容器步骤,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { BusinessStep } from './types';
|
|
2
|
+
import type { ActionRegistry } from '../actions/registry';
|
|
3
|
+
export interface PillItem {
|
|
4
|
+
/** 引用路径(不含 `${}`),如 "create_vm.output.instanceId" */
|
|
5
|
+
rawRef: string;
|
|
6
|
+
label: string;
|
|
7
|
+
type: string;
|
|
8
|
+
example?: any;
|
|
9
|
+
/** 来源步骤的展示名 */
|
|
10
|
+
stepLabel: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PillGroup {
|
|
13
|
+
/** 分组唯一键(来源引用名) */
|
|
14
|
+
key: string;
|
|
15
|
+
title: string;
|
|
16
|
+
icon: string;
|
|
17
|
+
/** 取值说明,如"仅在分支 A 命中时有值" */
|
|
18
|
+
note?: string;
|
|
19
|
+
items: PillItem[];
|
|
20
|
+
}
|
|
21
|
+
/** 并行组配对的 JOIN 引用名(与编译时补全的 JOIN 一致) */
|
|
22
|
+
export declare const joinRefOf: (step: BusinessStep) => string;
|
|
23
|
+
/**
|
|
24
|
+
* 生成数据胶囊选择器的可选项:
|
|
25
|
+
* - 工作流全局入参
|
|
26
|
+
* - 上游普通步骤的输出
|
|
27
|
+
* - 上游控制流内部(分支 / 泳道 / 循环体,任意层级)的步骤输出,并说明何时有值
|
|
28
|
+
* - 并行组引用其 JOIN 的汇聚输出;循环引用其已执行轮次
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildPillGroups(upstreamSteps: BusinessStep[], registry: ActionRegistry, workflowInputParams?: any[]): PillGroup[];
|
|
31
|
+
/** 把 `${...}` 内的引用翻译成可读标签;找不到时退回较通用的说明 */
|
|
32
|
+
export declare function describePillRef(ref: string, groups: PillGroup[]): string;
|
|
@@ -46,11 +46,21 @@ export interface BusinessStep {
|
|
|
46
46
|
/** 引用流程库能力时记录的名称与版本(首次引用时固定,不随库升级自动变化) */
|
|
47
47
|
libraryRef?: LibraryRef;
|
|
48
48
|
controlType?: StepControlType;
|
|
49
|
+
/**
|
|
50
|
+
* 按参数取值时的参数名(DECISION 的 caseValueParam / SWITCH value-param 的 expression),如 "userType"。
|
|
51
|
+
* 判断用的取值本身绑定在 values[caseParam](编译为 inputParameters[caseParam],可为数据胶囊)。
|
|
52
|
+
*/
|
|
49
53
|
caseParam?: string;
|
|
54
|
+
/**
|
|
55
|
+
* 按表达式判断时的脚本(DECISION 的 caseExpression / SWITCH javascript 的 expression)。
|
|
56
|
+
* 不为 undefined(含空字符串)即表示"表达式模式",此时 caseParam 不参与编译。
|
|
57
|
+
*/
|
|
50
58
|
caseExpression?: string;
|
|
51
59
|
branches?: BranchCase[];
|
|
52
60
|
forkLanes?: ForkLane[];
|
|
53
61
|
pairedJoinTaskRef?: string;
|
|
62
|
+
/** 反编译时配对 JOIN 的原始定义(保留其 name / description 等字段,往返不丢失) */
|
|
63
|
+
pairedJoinTaskDef?: TaskDef;
|
|
54
64
|
loopCondition?: string;
|
|
55
65
|
loopSteps?: BusinessStep[];
|
|
56
66
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BusinessStep } from './types';
|
|
2
|
+
import type { ActionRegistry } from '../actions/registry';
|
|
3
|
+
import type { ValidationResults } from '../types/workflow';
|
|
4
|
+
export interface StepIssue {
|
|
5
|
+
/** 对应的表单字段 key;为空表示整步的问题 */
|
|
6
|
+
field?: string;
|
|
7
|
+
level: 'error' | 'warning';
|
|
8
|
+
message: string;
|
|
9
|
+
}
|
|
10
|
+
/** taskReferenceName -> 该步骤的问题列表 */
|
|
11
|
+
export type StepIssueMap = Record<string, StepIssue[]>;
|
|
12
|
+
/**
|
|
13
|
+
* 业务模式的步骤校验(纯函数):必填字段、数字字段、分支判断依据、循环条件、空泳道。
|
|
14
|
+
* 递归检查分支 / 泳道 / 循环体内的步骤。
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateBusinessSteps(steps: BusinessStep[], registry: ActionRegistry, map?: StepIssueMap): StepIssueMap;
|
|
17
|
+
/** 把工作流校验器(validateWorkflow)的结果按任务引用名归类,合并进业务校验结果 */
|
|
18
|
+
export declare function mergeWorkflowValidation(map: StepIssueMap, results?: ValidationResults | null): StepIssueMap;
|
|
19
|
+
/** 收集一个步骤及其内部所有步骤的问题(容器卡片徽标用) */
|
|
20
|
+
export declare function collectIssues(step: BusinessStep, map: StepIssueMap): StepIssue[];
|
package/dist/store/aiStore.d.ts
CHANGED
|
@@ -213,13 +213,20 @@ interface AiActions {
|
|
|
213
213
|
clearCheckpoint: () => void;
|
|
214
214
|
}
|
|
215
215
|
export type AiStore = AiState & AiActions;
|
|
216
|
+
/** 允许写入 localStorage 的配置字段:只有 provider / baseUrl / model(apiKey、transport、endpoint 请求头一律不落盘) */
|
|
217
|
+
export declare function pickPersistedAiConfig(config: Partial<AiConfig> | undefined | null): Partial<AiConfig>;
|
|
218
|
+
/** 从 localStorage 恢复时只取安全字段(旧版本落盘的 transport / endpoint 请求头被丢弃) */
|
|
219
|
+
export declare function mergePersistedAiState<T extends {
|
|
220
|
+
config: AiConfig;
|
|
221
|
+
metrics: AiMetrics;
|
|
222
|
+
}>(persisted: unknown, current: T): T;
|
|
216
223
|
/**
|
|
217
224
|
* Creates an independent AiStore instance.
|
|
218
225
|
*
|
|
219
226
|
* @param persistKey localStorage key for provider/baseUrl/model + metrics (never
|
|
220
|
-
* the apiKey or conversation itself).
|
|
221
|
-
* instance fully in-memory — no localStorage
|
|
222
|
-
* Defaults to a stable shared key so existing single-instance
|
|
227
|
+
* the apiKey, transport / endpoint headers, or the conversation itself).
|
|
228
|
+
* Pass `false` to keep this instance fully in-memory — no localStorage
|
|
229
|
+
* writes at all. Defaults to a stable shared key so existing single-instance
|
|
223
230
|
* integrations keep their persisted config across reloads;
|
|
224
231
|
* pass a unique key per instance when embedding multiple
|
|
225
232
|
* `<AiWorkflowIDE>` on the same page to avoid them clobbering
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* 不传输入 / 输出数据。业务模式(StepFlowEditor)与模板试跑不经过该 action,由各自的回调上报,因此不会重复。
|
|
7
7
|
* - 新增步骤:画布「+」与 Cmd+K 内联 Copilot 都经过 store 的 `addNode`,来源固定为 'builtin'。
|
|
8
8
|
*
|
|
9
|
-
* 模块级集合:IDE 挂载时订阅、卸载时取消。store
|
|
9
|
+
* 模块级集合:IDE 挂载时订阅、卸载时取消。store 本身是页面内单例,同一页面同时挂载 WorkflowIDE 与 AiWorkflowIDE
|
|
10
|
+
* 时两者都会订阅;一次试跑只应上报一次,所以每次通知只交给最近订阅的那一个观察者(它卸载后,前一个接替)。
|
|
10
11
|
*/
|
|
11
12
|
export type SandboxRunObserver = (result: string) => void;
|
|
12
13
|
export type StepAddedObserver = (source: 'builtin') => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WorkflowStore
|
|
1
|
+
import { WorkflowStore } from '../types/workflow';
|
|
2
2
|
import { WorkflowDef, TaskDef } from '../types/conductor';
|
|
3
3
|
declare const useWorkflowStore: import("zustand").UseBoundStore<Omit<Omit<import("zustand").StoreApi<WorkflowStore>, "setState" | "persist"> & {
|
|
4
4
|
setState(partial: WorkflowStore | Partial<WorkflowStore> | ((state: WorkflowStore) => WorkflowStore | Partial<WorkflowStore>), replace?: false | undefined): unknown;
|
|
@@ -15,17 +15,10 @@ declare const useWorkflowStore: import("zustand").UseBoundStore<Omit<Omit<import
|
|
|
15
15
|
}, "temporal"> & {
|
|
16
16
|
temporal: import("zustand").StoreApi<import("zundo").TemporalState<{
|
|
17
17
|
workflowDef: WorkflowDef | null;
|
|
18
|
-
layoutDirection: LayoutDirection;
|
|
19
18
|
nodes: import("../types/workflow").WorkflowNode[];
|
|
20
|
-
graphStale: boolean;
|
|
21
19
|
edges: import("reactflow").Edge[];
|
|
22
20
|
taskMap: Record<string, TaskDef>;
|
|
23
|
-
|
|
24
|
-
themeColor: ThemeColor;
|
|
25
|
-
mode: EditorMode;
|
|
26
|
-
edgeType: string;
|
|
27
|
-
nodesLocked: boolean;
|
|
28
|
-
copiedTask: TaskDef | null;
|
|
21
|
+
graphStale: boolean;
|
|
29
22
|
}>>;
|
|
30
23
|
}>;
|
|
31
24
|
export default useWorkflowStore;
|
|
@@ -4,11 +4,17 @@ import type { WorkflowTemplate, TemplateCategory } from './types';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class TemplateStore {
|
|
6
6
|
private templates;
|
|
7
|
+
private version;
|
|
8
|
+
private listeners;
|
|
7
9
|
constructor(initialTemplates?: WorkflowTemplate[]);
|
|
8
10
|
/**
|
|
9
11
|
* 注册单个工作流模板
|
|
10
12
|
*/
|
|
11
13
|
register(template: WorkflowTemplate): void;
|
|
14
|
+
/** 每次注册后递增;界面据此刷新(R17) */
|
|
15
|
+
getVersion: () => number;
|
|
16
|
+
/** 订阅模板变化(兼容 React useSyncExternalStore);返回取消订阅函数 */
|
|
17
|
+
subscribe: (listener: () => void) => (() => void);
|
|
12
18
|
/**
|
|
13
19
|
* 批量注册工作流模板
|
|
14
20
|
*/
|
package/dist/template/types.d.ts
CHANGED
|
@@ -63,6 +63,7 @@ export interface WorkflowTemplate {
|
|
|
63
63
|
/** 所属业务分类 */
|
|
64
64
|
category: TemplateCategory;
|
|
65
65
|
/** 模板视觉图标 Emoji */
|
|
66
|
+
/** CMASTER icon name (components/icons/iconRegistry.ts, e.g. 'rocket'); legacy emoji still render via aliases. */
|
|
66
67
|
icon: string;
|
|
67
68
|
/** 一句话核心业务价值主张(拒绝技术罗列,讲清节省的时间与业务成效) */
|
|
68
69
|
valueProposition: string;
|
|
@@ -68,10 +68,20 @@ export interface TaskDef {
|
|
|
68
68
|
assignmentCompletionStrategy?: string;
|
|
69
69
|
displayName?: string;
|
|
70
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* 内嵌任务定义(Conductor WorkflowTask.taskDefinition)。超时 / 重试策略等 TaskDef 字段只在这里或已注册的
|
|
73
|
+
* 任务定义中生效;设置后 Conductor 用它代替同名的已注册任务定义。
|
|
74
|
+
*/
|
|
75
|
+
taskDefinition?: Record<string, any>;
|
|
76
|
+
/** WorkflowTask 自身支持 retryCount(覆盖任务定义里的值) */
|
|
71
77
|
retryCount?: number;
|
|
78
|
+
/** @deprecated 写在 WorkflowTask 顶层会被 Conductor 忽略,请改用 taskDefinition.retryLogic */
|
|
72
79
|
retryLogic?: 'FIXED' | 'EXPONENTIAL_BACKOFF' | 'LINEAR_BACKOFF';
|
|
80
|
+
/** @deprecated 请改用 taskDefinition.retryDelaySeconds */
|
|
73
81
|
retryDelaySeconds?: number;
|
|
82
|
+
/** @deprecated 请改用 taskDefinition.timeoutSeconds */
|
|
74
83
|
timeoutSeconds?: number;
|
|
84
|
+
/** @deprecated 请改用 taskDefinition.timeoutPolicy */
|
|
75
85
|
timeoutPolicy?: 'RETRY' | 'TIME_OUT_WF' | 'ALERT_ONLY' | 'FAIL_WORKFLOW';
|
|
76
86
|
}
|
|
77
87
|
/**
|
|
@@ -105,7 +115,15 @@ export interface WorkflowInputParam {
|
|
|
105
115
|
/**
|
|
106
116
|
* 解析工作流入参声明:兼容 string[] 旧格式与 WorkflowInputParam[] 新格式
|
|
107
117
|
*/
|
|
108
|
-
export declare function parseWorkflowInputParams(raw: any[] | undefined): WorkflowInputParam[];
|
|
118
|
+
export declare function parseWorkflowInputParams(raw: any[] | undefined, def?: Pick<WorkflowDef, 'inputSchema' | 'inputTemplate'> | null): WorkflowInputParam[];
|
|
119
|
+
/**
|
|
120
|
+
* 把结构化入参写回 Conductor 能接受的形态(E22):
|
|
121
|
+
* - `inputParameters` 只保留参数名(Conductor WorkflowDef 只接受 List<String>)
|
|
122
|
+
* - 类型 / 说明 / 必填 / 示例写入 `inputSchema`(JSON Schema,Conductor 标准字段)
|
|
123
|
+
* - 默认值写入 `inputTemplate`(Conductor 启动时用它补齐缺省入参)
|
|
124
|
+
* 只改动由入参列表管理的键,用户手写的其他 schema 属性 / 模板键原样保留。
|
|
125
|
+
*/
|
|
126
|
+
export declare function serializeWorkflowInputParams(params: WorkflowInputParam[], def: Pick<WorkflowDef, 'name' | 'inputParameters' | 'inputSchema' | 'inputTemplate'>): Pick<WorkflowDef, 'inputParameters' | 'inputSchema' | 'inputTemplate'>;
|
|
109
127
|
/**
|
|
110
128
|
* Conductor 工作流定义
|
|
111
129
|
*/
|
|
@@ -184,6 +202,10 @@ export interface TaskInstance {
|
|
|
184
202
|
externalInputPayloadStoragePath?: string;
|
|
185
203
|
externalOutputPayloadStoragePath?: string;
|
|
186
204
|
workflowTask?: TaskDef;
|
|
205
|
+
/** 仅浏览器沙箱:本任务是真实执行、使用模拟数据,还是未执行(同步接口不执行脚本等) */
|
|
206
|
+
sandboxExecution?: 'executed' | 'mocked' | 'not_executed';
|
|
207
|
+
/** 仅浏览器沙箱:执行中的提示(未取到值的引用、走默认分支的原因等) */
|
|
208
|
+
sandboxWarnings?: string[];
|
|
187
209
|
}
|
|
188
210
|
/**
|
|
189
211
|
* Conductor 工作流实例 (运行时)
|
|
@@ -217,4 +239,6 @@ export interface WorkflowInstance {
|
|
|
217
239
|
startTime?: number;
|
|
218
240
|
createdBy?: string;
|
|
219
241
|
updatedBy?: string;
|
|
242
|
+
/** 浏览器沙箱试运行产生的实例(模拟数据,不存在于服务端) */
|
|
243
|
+
isSandbox?: boolean;
|
|
220
244
|
}
|
package/dist/types/workflow.d.ts
CHANGED
|
@@ -228,6 +228,14 @@ export interface WorkflowState {
|
|
|
228
228
|
affectedTasks: string[];
|
|
229
229
|
timestamp: number;
|
|
230
230
|
} | null;
|
|
231
|
+
/** 本地沙箱:试运行进行中(脚本在 Web Worker 中异步执行) */
|
|
232
|
+
sandboxRunning: boolean;
|
|
233
|
+
/** 本地沙箱:最近一次需要提示用户的消息(空流程、执行出错),界面显示后调用 clearSandboxNotice */
|
|
234
|
+
sandboxNotice: {
|
|
235
|
+
text: string;
|
|
236
|
+
type: 'error' | 'info';
|
|
237
|
+
timestamp: number;
|
|
238
|
+
} | null;
|
|
231
239
|
/** 运行态:是否显示底部并发瀑布流与时空回放面板 */
|
|
232
240
|
showWaterfallPanel: boolean;
|
|
233
241
|
/** 运行态:时空旅行回放游标时间戳 (ms),为 null 表示展示最终实时态 */
|
|
@@ -258,7 +266,10 @@ export interface WorkflowActions {
|
|
|
258
266
|
setSelectedTask: (task: TaskDef | null) => void;
|
|
259
267
|
setSelectedTaskInstance: (instance: TaskInstance | null) => void;
|
|
260
268
|
checkTaskRefUniqueness: (newRef: string, currentRef: string) => boolean;
|
|
269
|
+
/** 按字段合并更新任务;引用名改成重复 / 非法值时整次更新被拒绝 */
|
|
261
270
|
updateTask: (taskRef: string, field: string | Record<string, any>, value?: any) => void;
|
|
271
|
+
/** 用新的任务对象整体替换(JSON 面板“应用到画布”使用,删掉的键会真正删除);成功返回 null,失败返回原因 */
|
|
272
|
+
replaceTask: (taskRef: string, nextTask: TaskDef) => string | null;
|
|
262
273
|
updateWorkflowProperties: (properties: Partial<WorkflowDef>) => void;
|
|
263
274
|
addNode: (newNode: any, sourceId: string, targetId: string, edgeId: string, edgeData?: any) => void;
|
|
264
275
|
removeNode: (nodeId: string) => void;
|
|
@@ -266,7 +277,8 @@ export interface WorkflowActions {
|
|
|
266
277
|
removeLoopTask: (loopRef: string, taskRef: string) => void;
|
|
267
278
|
addDecisionBranch: (taskRef: string, caseName: string) => void;
|
|
268
279
|
removeDecisionBranch: (taskRef: string, caseName: string) => void;
|
|
269
|
-
|
|
280
|
+
/** 重命名分支;新名称为空、为保留字 default 或与已有分支重名时拒绝并返回 false */
|
|
281
|
+
renameDecisionBranch: (taskRef: string, oldName: string, newName: string) => boolean;
|
|
270
282
|
addForkBranch: (taskRef: string) => void;
|
|
271
283
|
copyTask: (task: TaskDef) => void;
|
|
272
284
|
pasteTask: (task: TaskDef) => void;
|
|
@@ -295,6 +307,8 @@ export interface WorkflowActions {
|
|
|
295
307
|
setShowDataLineage: (show: boolean) => void;
|
|
296
308
|
/** W-LSP: 清除重构提示文案 */
|
|
297
309
|
clearRefactorNotice: () => void;
|
|
310
|
+
/** 本地沙箱:清除提示消息 */
|
|
311
|
+
clearSandboxNotice: () => void;
|
|
298
312
|
/** 运行态:切换底部并发瀑布流面板 */
|
|
299
313
|
setShowWaterfallPanel: (show: boolean) => void;
|
|
300
314
|
/** 运行态:设置时空旅行时间戳 */
|
|
@@ -303,8 +317,11 @@ export interface WorkflowActions {
|
|
|
303
317
|
setLoopIteration: (loopRef: string, iteration: number) => void;
|
|
304
318
|
/** AI 共驾:打开/关闭画布原位 Cmd+K 浮窗 */
|
|
305
319
|
setInlineCopilotTaskRef: (taskRef: string | null) => void;
|
|
306
|
-
/**
|
|
307
|
-
|
|
320
|
+
/**
|
|
321
|
+
* 本地沙箱:在浏览器内试运行并进入运行视图。INLINE / JQ / SWITCH / DO_WHILE 等无外部依赖的任务真实执行,
|
|
322
|
+
* 调用外部系统的任务使用模拟数据。脚本在隔离的 Web Worker 中运行,因此是异步的。
|
|
323
|
+
*/
|
|
324
|
+
runLocalSandboxDryRun: (mockInput?: Record<string, any>, taskMocks?: Record<string, any>, maxLoopIterations?: number) => Promise<void>;
|
|
308
325
|
}
|
|
309
326
|
/**
|
|
310
327
|
* 重启选项
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
* L3: 端到端编排(跨系统复杂场景,可由 L2/L1 组合而成)
|
|
7
7
|
*
|
|
8
8
|
* 调用规则:高层可调用低层及同层,禁止反向跨层调用
|
|
9
|
-
* L3 → L2/L1/L3(同层)
|
|
10
|
-
* L2 → L1/L2(同层)
|
|
11
|
-
* L1 → L1(同层)
|
|
12
|
-
* L1 → L2/L3
|
|
13
|
-
* L2 → L3
|
|
9
|
+
* L3 → L2/L1/L3(同层) 允许
|
|
10
|
+
* L2 → L1/L2(同层) 允许
|
|
11
|
+
* L1 → L1(同层) 允许
|
|
12
|
+
* L1 → L2/L3 禁止
|
|
13
|
+
* L2 → L3 禁止
|
|
14
14
|
*/
|
|
15
15
|
export type WorkflowLevel = 'L1' | 'L2' | 'L3';
|
|
16
16
|
/** 工作流库元数据(列表/搜索返回) */
|