@meiyukichan/dsh-sandore 0.1.0-rc.6
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/LICENSE +201 -0
- package/cordis.patch.yml +39 -0
- package/dsh.plugin.json +16 -0
- package/lib/client/CommandEditor.d.ts +19 -0
- package/lib/client/DagEditor.d.ts +22 -0
- package/lib/client/DefinitionDetail.d.ts +13 -0
- package/lib/client/DefinitionList.d.ts +19 -0
- package/lib/client/DiscussionInput.d.ts +63 -0
- package/lib/client/DragHandle.d.ts +16 -0
- package/lib/client/EditorPane.d.ts +13 -0
- package/lib/client/FlowEditor.d.ts +31 -0
- package/lib/client/InstanceList.d.ts +24 -0
- package/lib/client/NewInstanceDialog.d.ts +19 -0
- package/lib/client/PreviewPanel.d.ts +13 -0
- package/lib/client/RunView.d.ts +79 -0
- package/lib/client/StepChatPanel.d.ts +34 -0
- package/lib/client/TreeNav.d.ts +27 -0
- package/lib/client/UnifiedTimeline.d.ts +11 -0
- package/lib/client/WorkflowButton.d.ts +11 -0
- package/lib/client/WorkflowList.d.ts +18 -0
- package/lib/client/WorkflowOverlay.d.ts +6 -0
- package/lib/client/chat/AssistantMarkdown.d.ts +22 -0
- package/lib/client/chat/CompactionItem.d.ts +24 -0
- package/lib/client/chat/ContextBody.d.ts +136 -0
- package/lib/client/chat/ContextInjectionRow.d.ts +25 -0
- package/lib/client/chat/GenericCommandCard.d.ts +10 -0
- package/lib/client/chat/MessageIconActions.d.ts +41 -0
- package/lib/client/chat/MessageItem.d.ts +65 -0
- package/lib/client/chat/ReasoningRow.d.ts +13 -0
- package/lib/client/chat/TurnTailNodeView.d.ts +29 -0
- package/lib/client/chat/UserMessageRow.d.ts +18 -0
- package/lib/client/chat/attachment/ImageLightbox.d.ts +26 -0
- package/lib/client/chat/attachment/MessageImage.d.ts +56 -0
- package/lib/client/chat/attachment/image-attachment.d.ts +41 -0
- package/lib/client/chat/attachment/image-labels.d.ts +21 -0
- package/lib/client/chat/message-chrome.d.ts +51 -0
- package/lib/client/chat/reference/ReferenceIcon.d.ts +20 -0
- package/lib/client/chat/turn-assistant.d.ts +12 -0
- package/lib/client/chat/turn-metrics.d.ts +42 -0
- package/lib/client/chat/use-calendar-day.d.ts +5 -0
- package/lib/client/chat/use-throttled-visual-update.d.ts +7 -0
- package/lib/client/chat-flow.d.ts +110 -0
- package/lib/client/composer-selects.d.ts +17 -0
- package/lib/client/dag-editor-model.d.ts +141 -0
- package/lib/client/describe-error.d.ts +9 -0
- package/lib/client/index.d.ts +6 -0
- package/lib/client/locales.d.ts +777 -0
- package/lib/client/model-faces.d.ts +156 -0
- package/lib/client/open-discussion.d.ts +24 -0
- package/lib/client/panel-model.d.ts +34 -0
- package/lib/client/remote.d.ts +34 -0
- package/lib/client/run-view-model.d.ts +304 -0
- package/lib/client/sandore-save.d.ts +41 -0
- package/lib/client/sandore-sse.d.ts +15 -0
- package/lib/client/step-chat-retry.d.ts +44 -0
- package/lib/client/tool/GenericToolCard.d.ts +28 -0
- package/lib/client/tool/ToolRow.d.ts +95 -0
- package/lib/client/tool/diff-card-model.d.ts +63 -0
- package/lib/client/tool/read-card-model.d.ts +67 -0
- package/lib/client/tool/search-card-model.d.ts +94 -0
- package/lib/client/tool/terminal-card-model.d.ts +86 -0
- package/lib/client/tool/tool-call-model.d.ts +74 -0
- package/lib/client/tool/web-card-model.d.ts +44 -0
- package/lib/client/use-focus-refresh.d.ts +1 -0
- package/lib/client/workflow-face.d.ts +68 -0
- package/lib/client/workflow-store.d.ts +80 -0
- package/lib/client/workspace-path.d.ts +15 -0
- package/lib/client.js +38389 -0
- package/lib/index.js +8854 -0
- package/lib/microflow/branch-evaluator.d.ts +290 -0
- package/lib/microflow/concurrency-limiter.d.ts +39 -0
- package/lib/microflow/errors.d.ts +39 -0
- package/lib/microflow/file-utils.d.ts +210 -0
- package/lib/microflow/finalize-manager.d.ts +414 -0
- package/lib/microflow/fork-session.d.ts +151 -0
- package/lib/microflow/index.d.ts +17 -0
- package/lib/microflow/internal.d.ts +56 -0
- package/lib/microflow/loop-manager.d.ts +127 -0
- package/lib/microflow/rules-resolver.d.ts +28 -0
- package/lib/microflow/stage-executor.d.ts +362 -0
- package/lib/microflow/step-navigator.d.ts +108 -0
- package/lib/microflow/step-runner.d.ts +190 -0
- package/lib/microflow/subagents.d.ts +380 -0
- package/lib/tool/index.d.ts +65 -0
- package/lib/typert.host.d.ts +16 -0
- package/lib/typert.host.js +25 -0
- package/lib/typert.remote-client.d.ts +114 -0
- package/lib/typert.remote-client.js +399 -0
- package/lib/workflow/ask-tool.d.ts +78 -0
- package/lib/workflow/dag-navigator.d.ts +136 -0
- package/lib/workflow/domain.d.ts +304 -0
- package/lib/workflow/engine-surface.d.ts +70 -0
- package/lib/workflow/errors.d.ts +13 -0
- package/lib/workflow/host-agent.d.ts +53 -0
- package/lib/workflow/index.d.ts +23 -0
- package/lib/workflow/interaction-manager.d.ts +170 -0
- package/lib/workflow/lifecycle-manager.d.ts +111 -0
- package/lib/workflow/persistence.d.ts +35 -0
- package/lib/workflow/plugin.d.ts +27 -0
- package/lib/workflow/reactive-state.d.ts +27 -0
- package/lib/workflow/recovery-manager.d.ts +158 -0
- package/lib/workflow/remote.d.ts +139 -0
- package/lib/workflow/schema.d.ts +1917 -0
- package/lib/workflow/seam.d.ts +254 -0
- package/lib/workflow/shell.d.ts +127 -0
- package/lib/workflow/sse.d.ts +16 -0
- package/lib/workflow/typert/typert.host.d.ts +16 -0
- package/lib/workflow/typert/typert.remote-client.d.ts +114 -0
- package/lib/workflow/types.d.ts +187 -0
- package/lib/workflow/wire.d.ts +256 -0
- package/lib/workflow/workflow-engine.d.ts +373 -0
- package/lib/workflow/yaml-error.d.ts +22 -0
- package/lib/workflow/yaml-parser.d.ts +23 -0
- package/package.json +140 -0
- package/packages/client/CommandEditor.tsx +73 -0
- package/packages/client/DagEditor.module.css +711 -0
- package/packages/client/DagEditor.tsx +1203 -0
- package/packages/client/DefinitionDetail.module.css +110 -0
- package/packages/client/DefinitionDetail.tsx +126 -0
- package/packages/client/DefinitionList.tsx +173 -0
- package/packages/client/DiscussionInput.tsx +763 -0
- package/packages/client/DragHandle.tsx +92 -0
- package/packages/client/EditorPane.tsx +70 -0
- package/packages/client/FlowEditor.tsx +227 -0
- package/packages/client/InstanceList.tsx +250 -0
- package/packages/client/NewInstanceDialog.module.css +244 -0
- package/packages/client/NewInstanceDialog.tsx +478 -0
- package/packages/client/PreviewPanel.tsx +55 -0
- package/packages/client/RunView.module.css +246 -0
- package/packages/client/RunView.tsx +314 -0
- package/packages/client/StepChatPanel.tsx +486 -0
- package/packages/client/TreeNav.tsx +294 -0
- package/packages/client/UnifiedTimeline.tsx +484 -0
- package/packages/client/WorkflowButton.module.css +72 -0
- package/packages/client/WorkflowButton.tsx +50 -0
- package/packages/client/WorkflowList.tsx +158 -0
- package/packages/client/WorkflowOverlay.module.css +390 -0
- package/packages/client/WorkflowOverlay.tsx +136 -0
- package/packages/client/WorkflowPanel.module.css +247 -0
- package/packages/client/chat/AssistantMarkdown.module.css +38 -0
- package/packages/client/chat/AssistantMarkdown.tsx +120 -0
- package/packages/client/chat/ChatView.module.css +198 -0
- package/packages/client/chat/CompactionItem.tsx +85 -0
- package/packages/client/chat/ContextBody.module.css +162 -0
- package/packages/client/chat/ContextBody.tsx +598 -0
- package/packages/client/chat/ContextInjectionRow.module.css +63 -0
- package/packages/client/chat/ContextInjectionRow.tsx +78 -0
- package/packages/client/chat/GenericCommandCard.module.css +87 -0
- package/packages/client/chat/GenericCommandCard.tsx +76 -0
- package/packages/client/chat/MessageIconActions.module.css +84 -0
- package/packages/client/chat/MessageIconActions.tsx +147 -0
- package/packages/client/chat/MessageItem.module.css +293 -0
- package/packages/client/chat/MessageItem.tsx +384 -0
- package/packages/client/chat/ReasoningRow.module.css +82 -0
- package/packages/client/chat/ReasoningRow.tsx +70 -0
- package/packages/client/chat/TurnTailNodeView.module.css +10 -0
- package/packages/client/chat/TurnTailNodeView.tsx +63 -0
- package/packages/client/chat/UserMessageRow.module.css +75 -0
- package/packages/client/chat/UserMessageRow.tsx +92 -0
- package/packages/client/chat/accessibility.module.css +9 -0
- package/packages/client/chat/attachment/ImageLightbox.module.css +45 -0
- package/packages/client/chat/attachment/ImageLightbox.tsx +70 -0
- package/packages/client/chat/attachment/MessageImage.module.css +70 -0
- package/packages/client/chat/attachment/MessageImage.tsx +136 -0
- package/packages/client/chat/attachment/image-attachment.ts +98 -0
- package/packages/client/chat/attachment/image-labels.ts +34 -0
- package/packages/client/chat/message-chrome.ts +96 -0
- package/packages/client/chat/reference/ReferenceIcon.tsx +40 -0
- package/packages/client/chat/turn-assistant.ts +15 -0
- package/packages/client/chat/turn-metrics.ts +102 -0
- package/packages/client/chat/use-calendar-day.ts +27 -0
- package/packages/client/chat/use-throttled-visual-update.ts +44 -0
- package/packages/client/chat-flow.spec.ts +357 -0
- package/packages/client/chat-flow.ts +278 -0
- package/packages/client/composer-selects.module.css +376 -0
- package/packages/client/composer-selects.tsx +531 -0
- package/packages/client/dag-editor-model.spec.ts +173 -0
- package/packages/client/dag-editor-model.ts +359 -0
- package/packages/client/describe-error.spec.ts +18 -0
- package/packages/client/describe-error.ts +12 -0
- package/packages/client/index.ts +144 -0
- package/packages/client/input.module.css +854 -0
- package/packages/client/is-conditional-check.spec.ts +34 -0
- package/packages/client/locales.ts +789 -0
- package/packages/client/model-faces.ts +225 -0
- package/packages/client/open-discussion.spec.ts +39 -0
- package/packages/client/open-discussion.ts +32 -0
- package/packages/client/panel-model.spec.ts +152 -0
- package/packages/client/panel-model.ts +72 -0
- package/packages/client/preview.module.css +95 -0
- package/packages/client/react-dom.d.ts +11 -0
- package/packages/client/reactflow-theme.css +91 -0
- package/packages/client/remote.spec.ts +41 -0
- package/packages/client/remote.ts +46 -0
- package/packages/client/run-view-model.spec.ts +641 -0
- package/packages/client/run-view-model.ts +636 -0
- package/packages/client/sandore-save.spec.ts +146 -0
- package/packages/client/sandore-save.ts +97 -0
- package/packages/client/sandore-sse.ts +59 -0
- package/packages/client/step-chat-retry.spec.ts +70 -0
- package/packages/client/step-chat-retry.ts +65 -0
- package/packages/client/timeline.module.css +503 -0
- package/packages/client/tool/GenericToolCard.tsx +99 -0
- package/packages/client/tool/ToolRow.module.css +308 -0
- package/packages/client/tool/ToolRow.tsx +328 -0
- package/packages/client/tool/diff-card-model.ts +103 -0
- package/packages/client/tool/read-card-model.ts +86 -0
- package/packages/client/tool/search-card-model.ts +166 -0
- package/packages/client/tool/terminal-card-model.ts +225 -0
- package/packages/client/tool/tool-call-model.ts +267 -0
- package/packages/client/tool/web-card-model.ts +80 -0
- package/packages/client/tree-nav.module.css +282 -0
- package/packages/client/use-focus-refresh.ts +23 -0
- package/packages/client/workflow-face.ts +72 -0
- package/packages/client/workflow-store.spec.ts +49 -0
- package/packages/client/workflow-store.ts +161 -0
- package/packages/client/workspace-path.ts +27 -0
- package/packages/css-modules.d.ts +6 -0
- package/packages/microflow/branch-evaluator.spec.ts +745 -0
- package/packages/microflow/branch-evaluator.ts +1037 -0
- package/packages/microflow/concurrency-limiter.ts +70 -0
- package/packages/microflow/errors.ts +64 -0
- package/packages/microflow/file-utils.spec.ts +604 -0
- package/packages/microflow/file-utils.ts +521 -0
- package/packages/microflow/finalize-manager.spec.ts +1977 -0
- package/packages/microflow/finalize-manager.ts +1464 -0
- package/packages/microflow/fork-session.spec.ts +184 -0
- package/packages/microflow/fork-session.ts +316 -0
- package/packages/microflow/index.ts +17 -0
- package/packages/microflow/internal.ts +166 -0
- package/packages/microflow/loop-manager.spec.ts +294 -0
- package/packages/microflow/loop-manager.ts +255 -0
- package/packages/microflow/rules-resolver.spec.ts +147 -0
- package/packages/microflow/rules-resolver.ts +58 -0
- package/packages/microflow/stage-executor.spec.ts +1577 -0
- package/packages/microflow/stage-executor.ts +1478 -0
- package/packages/microflow/step-navigator.spec.ts +301 -0
- package/packages/microflow/step-navigator.ts +300 -0
- package/packages/microflow/step-runner.spec.ts +1132 -0
- package/packages/microflow/step-runner.ts +752 -0
- package/packages/microflow/subagents.spec.ts +215 -0
- package/packages/microflow/subagents.ts +422 -0
- package/packages/tests/fixtures/test-workflow.yaml +128 -0
- package/packages/tests/mocks/agents.ts +206 -0
- package/packages/tests/mocks/llm.ts +46 -0
- package/packages/tests/mocks/session-title.ts +31 -0
- package/packages/tests/mocks/sessions.ts +131 -0
- package/packages/tests/mocks/shell.ts +60 -0
- package/packages/tests/mocks/storage-domain.ts +101 -0
- package/packages/tests/mocks/subagents.ts +197 -0
- package/packages/tests/mocks/subprocess.ts +59 -0
- package/packages/tests/mocks/user-questions.ts +33 -0
- package/packages/tests/mocks/workspace.ts +52 -0
- package/packages/tool/index.spec.ts +287 -0
- package/packages/tool/index.ts +348 -0
- package/packages/workflow/ask-tool.ts +173 -0
- package/packages/workflow/dag-navigator.spec.ts +236 -0
- package/packages/workflow/dag-navigator.ts +425 -0
- package/packages/workflow/domain.ts +26 -0
- package/packages/workflow/engine-surface.ts +71 -0
- package/packages/workflow/errors.ts +13 -0
- package/packages/workflow/host-agent.spec.ts +92 -0
- package/packages/workflow/host-agent.ts +62 -0
- package/packages/workflow/index.ts +25 -0
- package/packages/workflow/interaction-manager.spec.ts +390 -0
- package/packages/workflow/interaction-manager.ts +397 -0
- package/packages/workflow/lifecycle-manager.spec.ts +683 -0
- package/packages/workflow/lifecycle-manager.ts +288 -0
- package/packages/workflow/persistence.spec.ts +109 -0
- package/packages/workflow/persistence.ts +64 -0
- package/packages/workflow/plugin.ts +39 -0
- package/packages/workflow/reactive-state.spec.ts +69 -0
- package/packages/workflow/reactive-state.ts +52 -0
- package/packages/workflow/recovery-manager.spec.ts +606 -0
- package/packages/workflow/recovery-manager.ts +471 -0
- package/packages/workflow/remote.spec.ts +1045 -0
- package/packages/workflow/remote.ts +479 -0
- package/packages/workflow/schema.spec.ts +303 -0
- package/packages/workflow/schema.ts +562 -0
- package/packages/workflow/seam.ts +293 -0
- package/packages/workflow/shell.ts +142 -0
- package/packages/workflow/sse.ts +110 -0
- package/packages/workflow/typert/typert.host.d.ts +16 -0
- package/packages/workflow/typert/typert.host.js +25 -0
- package/packages/workflow/typert/typert.remote-client.d.ts +114 -0
- package/packages/workflow/typert/typert.remote-client.js +399 -0
- package/packages/workflow/types.ts +258 -0
- package/packages/workflow/wire.ts +267 -0
- package/packages/workflow/workflow-engine-e2e.spec.ts +262 -0
- package/packages/workflow/workflow-engine-real-e2e.spec.ts +922 -0
- package/packages/workflow/workflow-engine.spec.ts +4389 -0
- package/packages/workflow/workflow-engine.ts +2133 -0
- package/packages/workflow/yaml-error.ts +29 -0
- package/packages/workflow/yaml-parser.spec.ts +757 -0
- package/packages/workflow/yaml-parser.ts +287 -0
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工作流引擎的 Zod Schema 与派生 TS 类型(浏览器安全)。
|
|
3
|
+
*
|
|
4
|
+
* 记录 schema(存储域 value / 业务数据模型)用真实 `zod`(`z.infer` 保持类型不重复,
|
|
5
|
+
* 同一 schema 后续可投影为 RPC wire schema);插件 `Config` 才用 schemastery(见
|
|
6
|
+
* `index.ts`)。分三层:定义层(`WorkflowDefinition`/`WorkflowStage`/`WorkflowStep`/
|
|
7
|
+
* `CommandConfig` 五类型 discriminated union)、运行时层(`WorkflowTaskState`,无
|
|
8
|
+
* `permissionMode`)、记录层(`WorkflowDefinitionRecord`/`JobRecord`)。
|
|
9
|
+
*
|
|
10
|
+
* 本模块仅依赖 `zod`(浏览器安全),存储域声明 `sandoreDomainSpec`(依赖 Node 侧
|
|
11
|
+
* `@deepseek-ai/dsh-storage-domain`)已拆至 `./domain.ts`,故可作为 `./schema`
|
|
12
|
+
* 子路径在浏览器侧安全导入。
|
|
13
|
+
* @module dsh-sandore/workflow/src/schema
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod'
|
|
16
|
+
|
|
17
|
+
/** Step 与 Stage 共用的执行状态枚举。 */
|
|
18
|
+
const StepStatusSchema = z.enum(['blocked', 'ready', 'interacting', 'running', 'completed', 'failed', 'paused'])
|
|
19
|
+
|
|
20
|
+
/** 工作流实例生命周期状态枚举。 */
|
|
21
|
+
const DagRunStatusSchema = z.enum(['pending', 'running', 'interacting', 'completed', 'failed', 'aborted', 'paused'])
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 内容块(merge-extensible):只约束 `type` 为字符串、保留其余字段以支持
|
|
25
|
+
* round-trip(对齐 DSH apiproxy 的 `contentBlockSchema` 范式)。
|
|
26
|
+
*/
|
|
27
|
+
const ContentBlockSchema = z.looseObject({ type: z.string() })
|
|
28
|
+
|
|
29
|
+
// ── 定义层 ────────────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 五种 Step 命令的 discriminated union。判别字段为顶层 `type`,变体字段整体
|
|
33
|
+
* 嵌套于 `value`(对齐权威 YAML 示例 `command: { type: shell, value: { command } }`)。
|
|
34
|
+
*/
|
|
35
|
+
export const CommandConfigSchema = z.discriminatedUnion('type', [
|
|
36
|
+
z.object({
|
|
37
|
+
type: z.literal('agent'),
|
|
38
|
+
value: z.object({
|
|
39
|
+
promptText: z.string(),
|
|
40
|
+
agentParamsTemplate: z.string().optional(),
|
|
41
|
+
providerId: z.string().optional(),
|
|
42
|
+
modelId: z.string().optional(),
|
|
43
|
+
}),
|
|
44
|
+
}),
|
|
45
|
+
z.object({
|
|
46
|
+
type: z.literal('prompt'),
|
|
47
|
+
value: z.object({
|
|
48
|
+
promptText: z.string(),
|
|
49
|
+
providerId: z.string().optional(),
|
|
50
|
+
modelId: z.string().optional(),
|
|
51
|
+
}),
|
|
52
|
+
}),
|
|
53
|
+
z.object({
|
|
54
|
+
type: z.literal('shell'),
|
|
55
|
+
value: z.object({ command: z.string() }),
|
|
56
|
+
}),
|
|
57
|
+
z.object({
|
|
58
|
+
type: z.literal('skill'),
|
|
59
|
+
value: z.object({
|
|
60
|
+
promptText: z.string(),
|
|
61
|
+
providerId: z.string().optional(),
|
|
62
|
+
}),
|
|
63
|
+
}),
|
|
64
|
+
z.object({
|
|
65
|
+
type: z.literal('mcp'),
|
|
66
|
+
value: z.object({ promptText: z.string() }),
|
|
67
|
+
}),
|
|
68
|
+
])
|
|
69
|
+
|
|
70
|
+
/** Step 输入绑定项:`path` 为引用的 Step id(简化格式,单段),`regex` 对 Step 输出文本做正则匹配。 */
|
|
71
|
+
export const InputFromItemSchema = z.object({
|
|
72
|
+
id: z.string(),
|
|
73
|
+
path: z.string().optional(),
|
|
74
|
+
regex: z.string().optional(),
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
/** Step 输出绑定项:`path`/`regex` 为产物文件路径(支持 glob/regex)。 */
|
|
78
|
+
export const OutputToItemSchema = z.object({
|
|
79
|
+
id: z.string(),
|
|
80
|
+
path: z.string().optional(),
|
|
81
|
+
regex: z.string().optional(),
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
/** Step 透传变量。 */
|
|
85
|
+
export const PassThroughVarSchema = z.object({
|
|
86
|
+
name: z.string(),
|
|
87
|
+
value: z.string(),
|
|
88
|
+
description: z.string(),
|
|
89
|
+
refresh: z.boolean().optional(),
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
/** 透传变量的键值记录值(运行时状态 / Stage 契约共用)。 */
|
|
93
|
+
const PassThroughVarValueSchema = z.object({
|
|
94
|
+
value: z.string(),
|
|
95
|
+
description: z.string(),
|
|
96
|
+
refresh: z.boolean().optional(),
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
/** DAG 循环控制(挂在分支上的可选属性:该分支 next 指向更早节点 = 回边)。 */
|
|
100
|
+
export const DagLoopSchema = z.object({
|
|
101
|
+
breakCondition: CommandConfigSchema.optional(),
|
|
102
|
+
breakExpectation: z.string().optional(),
|
|
103
|
+
next: z.string().optional(),
|
|
104
|
+
maxIterations: z.number(),
|
|
105
|
+
exitTo: z.string().optional(),
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* DAG 分支:分支是唯一出边单元,统一 `{ next, condition?, loop? }` 三并列字段。
|
|
110
|
+
* - 无 `condition` = 并行分支(始终纳入下一批,多条并发);
|
|
111
|
+
* - 有 `condition` = 条件分支(布尔判定:AI 输出 true/false,shell 走
|
|
112
|
+
* `matchesExpectation(breakExpectation)`,true 才走);
|
|
113
|
+
* - 有 `loop` = 循环分支(该分支 `next` 为回边,`loop` 控制迭代/跳出/exitTo)。
|
|
114
|
+
*/
|
|
115
|
+
export const DagBranchSchema = z.object({
|
|
116
|
+
next: z.string(),
|
|
117
|
+
label: z.string().optional(),
|
|
118
|
+
condition: CommandConfigSchema.optional(),
|
|
119
|
+
loop: DagLoopSchema.optional(),
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
/** 门控配置(Workflow/Stage/Step 三级合并)。 */
|
|
123
|
+
export const GatesSchema = z.object({
|
|
124
|
+
maxRetries: z.number().optional(),
|
|
125
|
+
maxTokens: z.number().optional(),
|
|
126
|
+
primary: z.object({ enabled: z.boolean() }).optional(),
|
|
127
|
+
secondary: z.object({ enabled: z.boolean(), prompt: z.string().optional() }).optional(),
|
|
128
|
+
need_confirm: z.boolean().optional(),
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
/** 工作流默认设置(与 `dynamic-workflow-engine.md` 的 `DEFAULT_SETTINGS` 对齐)。 */
|
|
132
|
+
const DEFAULT_SETTINGS = {
|
|
133
|
+
defaultTimeout: 120,
|
|
134
|
+
maxConcurrentAgents: 4,
|
|
135
|
+
} as const
|
|
136
|
+
|
|
137
|
+
/** 工作流设置:`defaultTimeout`(分钟)默认 120,`maxConcurrentAgents` 默认 4。 */
|
|
138
|
+
export const WorkflowSettingsSchema = z.object({
|
|
139
|
+
defaultTimeout: z.number().default(DEFAULT_SETTINGS.defaultTimeout),
|
|
140
|
+
maxConcurrentAgents: z.number().default(DEFAULT_SETTINGS.maxConcurrentAgents),
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
/** 单个 Step 定义(V2 顶层 `steps[]` 完整定义:命令 + 映射 + 透传变量 + 门控)。 */
|
|
144
|
+
export const WorkflowStepSchema = z.object({
|
|
145
|
+
id: z.string(),
|
|
146
|
+
name: z.string().optional(),
|
|
147
|
+
command: CommandConfigSchema.optional(),
|
|
148
|
+
inputFrom: z.array(InputFromItemSchema).optional(),
|
|
149
|
+
outputTo: z.array(OutputToItemSchema).optional(),
|
|
150
|
+
passThroughVars: z.array(PassThroughVarSchema).optional(),
|
|
151
|
+
timeout: z.number().optional(),
|
|
152
|
+
defaultExpectation: z.string().optional(),
|
|
153
|
+
rules: z.array(z.string()).optional(),
|
|
154
|
+
gates: GatesSchema.optional(),
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Stage 内 Step 位置(V2 分离式:仅 id + 流控 branches;完整定义在顶层 `steps[]`
|
|
159
|
+
* 按 id 交叉引用)。
|
|
160
|
+
*/
|
|
161
|
+
export const StageStepSchema = z.object({
|
|
162
|
+
id: z.string(),
|
|
163
|
+
branches: z.array(DagBranchSchema).optional(),
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
/** 单个 Stage 定义:内部 Step 流控(轻量)+ Stage 级 DAG 字段(出边统一进 branches)。 */
|
|
167
|
+
export const WorkflowStageSchema = z.object({
|
|
168
|
+
id: z.string(),
|
|
169
|
+
name: z.string(),
|
|
170
|
+
rules: z.array(z.string()).optional(),
|
|
171
|
+
gates: GatesSchema.optional(),
|
|
172
|
+
steps: z.array(StageStepSchema),
|
|
173
|
+
defaultExpectation: z.string().optional(),
|
|
174
|
+
branches: z.array(DagBranchSchema).optional(),
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
/** 工作流定义(V2 两级 Stage → Step)。 */
|
|
178
|
+
export const WorkflowDefinitionSchema = z.object({
|
|
179
|
+
id: z.string(),
|
|
180
|
+
name: z.string(),
|
|
181
|
+
version: z.string(),
|
|
182
|
+
description: z.string().optional(),
|
|
183
|
+
engine: z.string().optional(),
|
|
184
|
+
skills: z.array(z.string()).default([]),
|
|
185
|
+
mcps: z.array(z.string()).default([]),
|
|
186
|
+
agents: z.array(z.string()).default([]),
|
|
187
|
+
settings: WorkflowSettingsSchema.default(DEFAULT_SETTINGS),
|
|
188
|
+
rules: z.record(z.string(), z.string()).optional(),
|
|
189
|
+
gates: GatesSchema.optional(),
|
|
190
|
+
stages: z.array(WorkflowStageSchema),
|
|
191
|
+
steps: z.array(WorkflowStepSchema).optional(),
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
// ── 运行时层 ────────────────────────────────────────────────────────────────
|
|
195
|
+
|
|
196
|
+
/** Step 会话合成占位元数据(替代 SDK 时代的 `{sessionId,inputJson,outputJson,partsJson}`)。 */
|
|
197
|
+
export const StepSessionMetaSchema = z.object({
|
|
198
|
+
childId: z.string(),
|
|
199
|
+
synthetic: z.boolean(),
|
|
200
|
+
command: z.enum(['shell', 'prompt', 'agent', 'skill', 'mcp']),
|
|
201
|
+
hostSessionId: z.string().optional(),
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
/** 向用户提问的载荷(对齐 DSH `ask_user_question`)。 */
|
|
205
|
+
export const AskUserQuestionPayloadSchema = z.object({
|
|
206
|
+
questions: z.array(z.object({
|
|
207
|
+
id: z.string(),
|
|
208
|
+
question: z.string(),
|
|
209
|
+
header: z.string().optional(),
|
|
210
|
+
options: z.array(z.object({
|
|
211
|
+
label: z.string(),
|
|
212
|
+
description: z.string().optional(),
|
|
213
|
+
})).optional(),
|
|
214
|
+
multi_select: z.boolean().optional(),
|
|
215
|
+
})),
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
/** pending 交互条目状态:`pending` 待回复、`replied` 已回复、`rejected` 已拒绝。 */
|
|
219
|
+
const PendingInteractionStatusSchema = z.enum(['pending', 'replied', 'rejected'])
|
|
220
|
+
|
|
221
|
+
/** 待回复问答条目(`pendingInteractions` 的 question 变体)。 */
|
|
222
|
+
export const PendingQuestionEntrySchema = z.object({
|
|
223
|
+
id: z.string(),
|
|
224
|
+
stageId: z.string(),
|
|
225
|
+
stepId: z.string(),
|
|
226
|
+
sessionId: z.string(),
|
|
227
|
+
requestId: z.string(),
|
|
228
|
+
kind: z.literal('question'),
|
|
229
|
+
status: PendingInteractionStatusSchema,
|
|
230
|
+
payload: AskUserQuestionPayloadSchema,
|
|
231
|
+
answer: z.array(z.array(z.string())).optional(),
|
|
232
|
+
createdAt: z.string(),
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
/** 待回复权限条目载荷(permission/patterns/metadata/tool)。 */
|
|
236
|
+
const PendingPermissionPayloadSchema = z.object({
|
|
237
|
+
permission: z.string(),
|
|
238
|
+
patterns: z.array(z.string()).optional(),
|
|
239
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
240
|
+
tool: z.string().optional(),
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
/** 待回复权限条目(`pendingInteractions` 的 permission 变体)。 */
|
|
244
|
+
export const PendingPermissionEntrySchema = z.object({
|
|
245
|
+
id: z.string(),
|
|
246
|
+
stageId: z.string(),
|
|
247
|
+
stepId: z.string(),
|
|
248
|
+
sessionId: z.string(),
|
|
249
|
+
requestId: z.string(),
|
|
250
|
+
kind: z.literal('permission'),
|
|
251
|
+
status: PendingInteractionStatusSchema,
|
|
252
|
+
payload: PendingPermissionPayloadSchema,
|
|
253
|
+
answer: z.enum(['once', 'always', 'reject']).optional(),
|
|
254
|
+
createdAt: z.string(),
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
/** 收尾阶段独立 status 枚举(ask/assess/routing 三值)。 */
|
|
258
|
+
export const PhaseStatusSchema = z.enum(['running', 'done'])
|
|
259
|
+
/** 门禁阶段 status 枚举(含失败态)。 */
|
|
260
|
+
export const GatePhaseStatusSchema = z.enum(['running', 'done', 'failed'])
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* 收尾第 1 部分(Assessor)结果。
|
|
264
|
+
*
|
|
265
|
+
* 双通道 ask 重构(Phase A):`hasAsk` 取代旧 `completionType`——`hasAsk=true` 表示
|
|
266
|
+
* 评估判定 Step 未真正完成、需要向用户提问确认后继续(**ask 保底通道**:子代理未在
|
|
267
|
+
* 执行期经 child-scope `ask_user_question` 工具直接提问时的兜底);`false` 表示 Step
|
|
268
|
+
* 已完成。`askQuestion` 为 `hasAsk=true` 时的提问载荷(缺失视为假 ask,回落 completed)。
|
|
269
|
+
* `compressedOutput`(Phase B 收尾处理)为当前 Step 关键产出的压缩摘要(透传变量提取 +
|
|
270
|
+
* 输出压缩合并 JSON 的产物;缺省 undefined——Phase A 临时会话/降级路径可能无压缩)。
|
|
271
|
+
*/
|
|
272
|
+
export const FinalizeAssessResultSchema = z.object({
|
|
273
|
+
/** Round 11:收尾阶段独立 status(running/done)。 */
|
|
274
|
+
status: PhaseStatusSchema.optional(),
|
|
275
|
+
passThroughVars: z.record(z.string(), z.string()),
|
|
276
|
+
askQuestion: AskUserQuestionPayloadSchema.optional(),
|
|
277
|
+
/** Phase B 收尾压缩摘要(合并 JSON 的 compressedOutput;可选)。 */
|
|
278
|
+
compressedOutput: z.string().optional(),
|
|
279
|
+
errorDetail: z.string().optional(),
|
|
280
|
+
forkSessionId: z.string(),
|
|
281
|
+
assessmentRaw: z.string(),
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Phase A ask 判定结果(ask-detect 阶段专用)。
|
|
286
|
+
*
|
|
287
|
+
* `hasAsk=true` 表示评估判定需向用户提问确认后继续;`askQuestion` 为提问载荷;
|
|
288
|
+
* `forkSessionId` 为 Phase A 临时会话 id(用完即删,id 仅供日志/debug)。
|
|
289
|
+
*/
|
|
290
|
+
export const FinalizeAskResultSchema = z.object({
|
|
291
|
+
/** Round 11:ask 阶段独立 status(running/done)。 */
|
|
292
|
+
status: PhaseStatusSchema.optional(),
|
|
293
|
+
hasAsk: z.boolean(),
|
|
294
|
+
askQuestion: AskUserQuestionPayloadSchema.optional(),
|
|
295
|
+
compressedOutput: z.string().optional(),
|
|
296
|
+
passThroughVars: z.record(z.string(), z.string()),
|
|
297
|
+
forkSessionId: z.string(),
|
|
298
|
+
assessmentRaw: z.string(),
|
|
299
|
+
})
|
|
300
|
+
|
|
301
|
+
/** 收尾第 2 部分(GateEvaluator)结果。 */
|
|
302
|
+
export const GateEvalResultSchema = z.object({
|
|
303
|
+
/** Round 11:门禁阶段独立 status(running/done/failed)。 */
|
|
304
|
+
status: GatePhaseStatusSchema.optional(),
|
|
305
|
+
gatesPassed: z.boolean(),
|
|
306
|
+
primaryPassed: z.boolean().optional(),
|
|
307
|
+
secondaryPassed: z.boolean().optional(),
|
|
308
|
+
gateDetails: z.object({
|
|
309
|
+
primary: z.object({ enabled: z.boolean(), passed: z.boolean().optional() }),
|
|
310
|
+
secondary: z.object({ enabled: z.boolean(), passed: z.boolean().optional(), prompt: z.string().optional() }),
|
|
311
|
+
}).optional(),
|
|
312
|
+
errorDetail: z.string().optional(),
|
|
313
|
+
gateSessionId: z.string(),
|
|
314
|
+
assessmentRaw: z.string(),
|
|
315
|
+
})
|
|
316
|
+
|
|
317
|
+
/** 分支/循环评估元数据。 */
|
|
318
|
+
export const BranchMetaSchema = z.object({
|
|
319
|
+
result: z.string().optional(),
|
|
320
|
+
sessionId: z.string().optional(),
|
|
321
|
+
directory: z.string().optional(),
|
|
322
|
+
status: z.enum(['evaluating', 'completed']),
|
|
323
|
+
expectation: z.string().optional(),
|
|
324
|
+
})
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Phase D 路由判断结果。
|
|
328
|
+
*
|
|
329
|
+
* `branchMeta`/`loopMeta` 为条件分支/循环跳出的评估元数据;
|
|
330
|
+
* `routingSessionId` 为 Phase D fork 子代理会话 id(供 UI 打开查看路由判断过程)。
|
|
331
|
+
*/
|
|
332
|
+
export const RoutingResultSchema = z.object({
|
|
333
|
+
/** Round 11:路由阶段独立 status(running/done)。 */
|
|
334
|
+
status: PhaseStatusSchema.optional(),
|
|
335
|
+
branchMeta: BranchMetaSchema.optional(),
|
|
336
|
+
loopMeta: BranchMetaSchema.optional(),
|
|
337
|
+
routingSessionId: z.string().optional(),
|
|
338
|
+
})
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Step 收尾状态元数据。
|
|
342
|
+
*
|
|
343
|
+
* 5 阶段收尾重构后,`status`/`sessionId`/`completionType` 由 `currentPhase` +
|
|
344
|
+
* `assessSessionId`(收尾评估 fork 会话 id,Phase B 收尾时持久化到 state)+
|
|
345
|
+
* `gateSessionId`(Phase C 门禁真实 fork 会话 id,持久化到 state)取代。
|
|
346
|
+
* `currentPhase` 供 UI 展示 Step 当前收尾阶段:
|
|
347
|
+
* `ask-detect`(Phase A 问题检测/评估中,含 ask 保底中断等待)/
|
|
348
|
+
* `finalizing`(Phase B 收尾中)/
|
|
349
|
+
* `gating`(Phase C 门禁中)/
|
|
350
|
+
* `routing`(Phase D 路由中:门禁通过后、completed 前做循环/条件路由判断)/
|
|
351
|
+
* `completed`(全部完成)。
|
|
352
|
+
*
|
|
353
|
+
* 注:Phase A 评估 fork 会话**用完即删**(live 引用评估后释放、不常驻)——计划
|
|
354
|
+
* 「Phase A 不持久化 / Phase B、C 持久化到 state」指会话对象本身;id 字符串仍经
|
|
355
|
+
* `assessResult.forkSessionId` / `assessSessionId` 落 state(schema 强约束)。
|
|
356
|
+
*/
|
|
357
|
+
export const FinalizeMetaSchema = z.object({
|
|
358
|
+
currentPhase: z.enum(['ask-detect', 'finalizing', 'gating', 'routing', 'completed']).optional(),
|
|
359
|
+
/** 前一收尾阶段(commitFinalize 覆盖 currentPhase 前保存旧值;UI 展示阶段流转痕迹)。 */
|
|
360
|
+
previousPhase: z.enum(['ask-detect', 'finalizing', 'gating', 'routing', 'completed']).optional(),
|
|
361
|
+
/** Phase A ask 判定结果(ask-detect 阶段写入)。 */
|
|
362
|
+
askResult: FinalizeAskResultSchema.optional(),
|
|
363
|
+
/** Phase B 收尾评估结果(finalizing 阶段写入,不含 hasAsk)。 */
|
|
364
|
+
assessResult: FinalizeAssessResultSchema.optional(),
|
|
365
|
+
/** Phase C 门禁结果(gating 阶段写入)。 */
|
|
366
|
+
gateResult: GateEvalResultSchema.optional(),
|
|
367
|
+
/** Phase D 路由判断结果(routing/completed 阶段写入)。 */
|
|
368
|
+
routingResult: RoutingResultSchema.optional(),
|
|
369
|
+
directory: z.string().optional(),
|
|
370
|
+
errorDetail: z.string().optional(),
|
|
371
|
+
})
|
|
372
|
+
|
|
373
|
+
/** 会话消息记录。 */
|
|
374
|
+
export const SessionMessageSchema = z.object({
|
|
375
|
+
type: z.enum(['text', 'tool', 'reasoning']),
|
|
376
|
+
text: z.string().optional(),
|
|
377
|
+
tool: z.string().optional(),
|
|
378
|
+
args: z.unknown().optional(),
|
|
379
|
+
output: z.unknown().optional(),
|
|
380
|
+
})
|
|
381
|
+
|
|
382
|
+
/** 重试历史记录。 */
|
|
383
|
+
export const RetryRecordSchema = z.object({
|
|
384
|
+
mode: z.enum(['continue', 'revert', 'fork']),
|
|
385
|
+
timestamp: z.string(),
|
|
386
|
+
userMessage: z.string(),
|
|
387
|
+
revertMessageId: z.string().optional(),
|
|
388
|
+
result: z.enum(['running', 'completed', 'failed']),
|
|
389
|
+
})
|
|
390
|
+
|
|
391
|
+
/** 用户在执行过程中的消息(原始需求 / 恢复 / 重试 / @mention 讨论,统一时间轴渲染)。 */
|
|
392
|
+
export const UserMessageRecordSchema = z.object({
|
|
393
|
+
id: z.string(),
|
|
394
|
+
/**
|
|
395
|
+
* 消息种类:
|
|
396
|
+
* - input=原始需求(makeInitialState 写入)
|
|
397
|
+
* - resume=继续消息(resumeStep/resumeAllSteps)
|
|
398
|
+
* - retry=重试消息(retryStep)
|
|
399
|
+
* - answer=ask 回答(replyQuestion followup 注回)
|
|
400
|
+
* - message=@mention 讨论消息(sendStepMessage,缺陷 31)——独立于 input
|
|
401
|
+
* 以免污染 originalInput 语义;UI 时间轴按 kind 渲染徽标区分。
|
|
402
|
+
*/
|
|
403
|
+
kind: z.enum(['input', 'resume', 'retry', 'answer', 'message']),
|
|
404
|
+
/** 目标:'broadcast'(广播)或 Step 定义 id(定点);input 时为 ''。 */
|
|
405
|
+
target: z.string(),
|
|
406
|
+
/** 用户消息文本。 */
|
|
407
|
+
content: z.string(),
|
|
408
|
+
/** 消息时间(ISO;统一时间轴排序键)。 */
|
|
409
|
+
createdAt: z.string(),
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
/** 已执行 Step 的默认实现快照。 */
|
|
413
|
+
export const ExecutedStepDefaultSchema = z.object({
|
|
414
|
+
id: z.string(),
|
|
415
|
+
stepId: z.string().optional(),
|
|
416
|
+
stageId: z.string(),
|
|
417
|
+
name: z.string(),
|
|
418
|
+
status: StepStatusSchema,
|
|
419
|
+
command: CommandConfigSchema.optional(),
|
|
420
|
+
inputFrom: z.array(InputFromItemSchema).optional(),
|
|
421
|
+
outputTo: z.array(OutputToItemSchema).optional(),
|
|
422
|
+
passThroughVars: z.array(PassThroughVarSchema).optional(),
|
|
423
|
+
sessionMeta: StepSessionMetaSchema.optional(),
|
|
424
|
+
finalizeMeta: FinalizeMetaSchema.optional(),
|
|
425
|
+
visitCount: z.number(),
|
|
426
|
+
/** 本执行段开始时间(ISO;统一时间轴排序键,替代对 startedAt 的可选依赖)。 */
|
|
427
|
+
createdAt: z.string().optional(),
|
|
428
|
+
/** 执行段序号(同 stepId 第几次执行段;0-based,缺省 0 = 首次执行)。 */
|
|
429
|
+
attemptIndex: z.number().int().nonnegative().optional(),
|
|
430
|
+
/** Step 开始执行的时间(ISO;引擎写入,供 UI 展示相对时间)。 */
|
|
431
|
+
startedAt: z.string().optional(),
|
|
432
|
+
/** Step 最近一次状态变更的时间(ISO;running 后每次转态更新,供 UI 展示相对时间)。 */
|
|
433
|
+
updatedAt: z.string().optional(),
|
|
434
|
+
branchMeta: BranchMetaSchema.optional(),
|
|
435
|
+
error: z.string().optional(),
|
|
436
|
+
pausedAt: z.string().optional(),
|
|
437
|
+
sessionMessages: z.array(SessionMessageSchema).optional(),
|
|
438
|
+
pauseEntryId: z.string().optional(),
|
|
439
|
+
loopIteration: z.array(z.number()).optional(),
|
|
440
|
+
loopMeta: BranchMetaSchema.optional(),
|
|
441
|
+
retryHistory: z.array(RetryRecordSchema).optional(),
|
|
442
|
+
parentSessionId: z.string().optional(),
|
|
443
|
+
output: z.array(ContentBlockSchema).optional(),
|
|
444
|
+
/** Round 26:本执行段实际产物文件(进程绝对路径;step 完成收尾时 collectStepArtifacts
|
|
445
|
+
* 收集写入——运行中即可展示,不等 stage 契约;旧数据缺省回退 stageContracts)。 */
|
|
446
|
+
artifacts: z.array(z.string()).optional(),
|
|
447
|
+
})
|
|
448
|
+
|
|
449
|
+
/** 单个 Stage 的状态快照。 */
|
|
450
|
+
export const StageInfoSchema = z.object({
|
|
451
|
+
id: z.string(),
|
|
452
|
+
name: z.string(),
|
|
453
|
+
status: StepStatusSchema,
|
|
454
|
+
})
|
|
455
|
+
|
|
456
|
+
/** Stage 完成时对外暴露的产物契约。 */
|
|
457
|
+
export const StageContractSchema = z.object({
|
|
458
|
+
stageId: z.string(),
|
|
459
|
+
stageName: z.string(),
|
|
460
|
+
status: StepStatusSchema,
|
|
461
|
+
artifacts: z.array(z.object({
|
|
462
|
+
stepId: z.string(),
|
|
463
|
+
outputToId: z.string(),
|
|
464
|
+
files: z.array(z.string()),
|
|
465
|
+
returnPrompt: z.string().optional(),
|
|
466
|
+
})),
|
|
467
|
+
passThroughVars: z.record(z.string(), PassThroughVarValueSchema),
|
|
468
|
+
contractArtifacts: z.record(z.string(), z.array(z.string())),
|
|
469
|
+
completedAt: z.string(),
|
|
470
|
+
errorDetail: z.string().optional(),
|
|
471
|
+
})
|
|
472
|
+
|
|
473
|
+
/** 工作流实例的持久化状态快照(存储域 `state` 表 value)。 */
|
|
474
|
+
export const WorkflowTaskStateSchema = z.object({
|
|
475
|
+
taskId: z.string(),
|
|
476
|
+
/** 兼容旧版 job 关联(去 job 概念后新实例不写;旧快照保留以通过校验)。 */
|
|
477
|
+
jobId: z.string().optional(),
|
|
478
|
+
workflowId: z.string(),
|
|
479
|
+
/** 工作流名称(启动时从定义写入;持久化快照携带,供 UI 树标题展示)。 */
|
|
480
|
+
workflowName: z.string().optional(),
|
|
481
|
+
/** 工作流描述(启动时从定义写入;供执行详情 head 展示,旧实例可能缺)。 */
|
|
482
|
+
description: z.string().optional(),
|
|
483
|
+
/** 创建实例时选择的模型(弹窗传入;作为该实例的 L2 默认模型路由)。 */
|
|
484
|
+
modelSelection: z.object({
|
|
485
|
+
provider: z.string(),
|
|
486
|
+
model: z.string(),
|
|
487
|
+
reasoningEffort: z.string().optional(),
|
|
488
|
+
}).optional(),
|
|
489
|
+
/** 创建实例时选择的权限预设(read-only / workspace-write / danger-full-access)。 */
|
|
490
|
+
permission: z.string().optional(),
|
|
491
|
+
cwd: z.string(),
|
|
492
|
+
status: DagRunStatusSchema,
|
|
493
|
+
originalInput: z.string(),
|
|
494
|
+
currentStageId: z.string(),
|
|
495
|
+
executedSteps: z.array(ExecutedStepDefaultSchema),
|
|
496
|
+
stageInfos: z.array(StageInfoSchema),
|
|
497
|
+
pendingInteractions: z.array(z.union([PendingQuestionEntrySchema, PendingPermissionEntrySchema])),
|
|
498
|
+
pendingQueue: z.array(z.string()).default([]),
|
|
499
|
+
visitCounts: z.record(z.string(), z.number()),
|
|
500
|
+
passThroughVars: z.record(z.string(), PassThroughVarValueSchema),
|
|
501
|
+
activeLoopIterationStack: z.array(z.number()),
|
|
502
|
+
activeLoopNodeId: z.string().nullable(),
|
|
503
|
+
activeLoopStack: z.array(z.string()),
|
|
504
|
+
pausedChildIds: z.array(z.string()),
|
|
505
|
+
/** 用户指令消息(恢复/重试;统一时间轴渲染,初始需求由 originalInput 承载)。 */
|
|
506
|
+
userMessages: z.array(UserMessageRecordSchema).optional(),
|
|
507
|
+
stageContracts: z.record(z.string(), StageContractSchema),
|
|
508
|
+
/** Round 26:是否把 ask/permission 上报宿主主代理(复用 hostSessionId 时 true;
|
|
509
|
+
* overlay 新建 false——只走 discussion composer)。缺省(旧快照)true 兼容。 */
|
|
510
|
+
reportToHost: z.boolean().optional(),
|
|
511
|
+
createdAt: z.string(),
|
|
512
|
+
updatedAt: z.string(),
|
|
513
|
+
})
|
|
514
|
+
|
|
515
|
+
// ── 记录层 ────────────────────────────────────────────────────────────────
|
|
516
|
+
|
|
517
|
+
/** 工作流定义记录(`definitions` 表 value):YAML 文本封顶 65536 字符防失控。 */
|
|
518
|
+
export const WorkflowDefinitionRecordSchema = z.object({
|
|
519
|
+
yaml: z.string().max(65536),
|
|
520
|
+
name: z.string(),
|
|
521
|
+
version: z.string(),
|
|
522
|
+
description: z.string().optional(),
|
|
523
|
+
createdAt: z.string(),
|
|
524
|
+
updatedAt: z.string(),
|
|
525
|
+
})
|
|
526
|
+
|
|
527
|
+
// ── 派生 TS 类型 ───────────────────────────────────────────────────────────
|
|
528
|
+
|
|
529
|
+
export type CommandConfig = z.infer<typeof CommandConfigSchema>
|
|
530
|
+
export type InputFromItem = z.infer<typeof InputFromItemSchema>
|
|
531
|
+
export type OutputToItem = z.infer<typeof OutputToItemSchema>
|
|
532
|
+
export type PassThroughVar = z.infer<typeof PassThroughVarSchema>
|
|
533
|
+
export type DagBranch = z.infer<typeof DagBranchSchema>
|
|
534
|
+
export type DagLoop = z.infer<typeof DagLoopSchema>
|
|
535
|
+
export type Gates = z.infer<typeof GatesSchema>
|
|
536
|
+
export type WorkflowSettings = z.infer<typeof WorkflowSettingsSchema>
|
|
537
|
+
export type WorkflowStep = z.infer<typeof WorkflowStepSchema>
|
|
538
|
+
export type WorkflowStage = z.infer<typeof WorkflowStageSchema>
|
|
539
|
+
export type WorkflowDefinition = z.infer<typeof WorkflowDefinitionSchema>
|
|
540
|
+
export type StepSessionMeta = z.infer<typeof StepSessionMetaSchema>
|
|
541
|
+
export type FinalizeMeta = z.infer<typeof FinalizeMetaSchema>
|
|
542
|
+
/**
|
|
543
|
+
* Step 收尾阶段(`FinalizeMeta.currentPhase` 的非空取值)。
|
|
544
|
+
*
|
|
545
|
+
* 供 `sandore/step-phase` 事件载荷与收尾阶段流转钩子(`onPhaseChange`)使用:
|
|
546
|
+
* `ask-detect`(Phase A 问题检测/评估)/`finalizing`(Phase B 收尾)/
|
|
547
|
+
* `gating`(Phase C 门禁)/`routing`(Phase D 路由)/`completed`(全部完成)。
|
|
548
|
+
*/
|
|
549
|
+
export type FinalizePhase = NonNullable<FinalizeMeta['currentPhase']>
|
|
550
|
+
export type FinalizeAssessResult = z.infer<typeof FinalizeAssessResultSchema>
|
|
551
|
+
export type FinalizeAskResult = z.infer<typeof FinalizeAskResultSchema>
|
|
552
|
+
export type RoutingResult = z.infer<typeof RoutingResultSchema>
|
|
553
|
+
export type GateEvalResult = z.infer<typeof GateEvalResultSchema>
|
|
554
|
+
export type AskUserQuestionPayload = z.infer<typeof AskUserQuestionPayloadSchema>
|
|
555
|
+
export type PendingQuestionEntry = z.infer<typeof PendingQuestionEntrySchema>
|
|
556
|
+
export type PendingPermissionEntry = z.infer<typeof PendingPermissionEntrySchema>
|
|
557
|
+
export type BranchMeta = z.infer<typeof BranchMetaSchema>
|
|
558
|
+
export type SessionMessage = z.infer<typeof SessionMessageSchema>
|
|
559
|
+
export type RetryRecord = z.infer<typeof RetryRecordSchema>
|
|
560
|
+
export type UserMessageRecord = z.infer<typeof UserMessageRecordSchema>
|
|
561
|
+
export type WorkflowTaskState = z.infer<typeof WorkflowTaskStateSchema>
|
|
562
|
+
export type WorkflowDefinitionRecord = z.infer<typeof WorkflowDefinitionRecordSchema>
|