@yiyi_zhang/reactflow-ui 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +28 -3
  2. package/dist/AiWorkflowIDE.d.ts +21 -0
  3. package/dist/WorkflowIDE.d.ts +34 -0
  4. package/dist/actions/builtin/common.d.ts +8 -0
  5. package/dist/actions/builtin/ecs.d.ts +12 -0
  6. package/dist/actions/fromDefinitions.d.ts +70 -0
  7. package/dist/actions/registry.d.ts +24 -0
  8. package/dist/actions/types.d.ts +71 -0
  9. package/dist/ai.d.ts +9 -0
  10. package/dist/components/AiNative/AiCommandCenter.d.ts +4 -0
  11. package/dist/components/business/ActionForm.d.ts +12 -0
  12. package/dist/components/business/ActionPickerModal.d.ts +25 -0
  13. package/dist/components/business/DataPillInput.d.ts +16 -0
  14. package/dist/components/business/DecisionBranchCard.d.ts +15 -0
  15. package/dist/components/business/ForkJoinCard.d.ts +15 -0
  16. package/dist/components/business/FriendlyErrorCard.d.ts +8 -0
  17. package/dist/components/business/LibraryVersionBadge.d.ts +29 -0
  18. package/dist/components/business/LoopDoWhileCard.d.ts +15 -0
  19. package/dist/components/business/NestedControlStep.d.ts +22 -0
  20. package/dist/components/business/PillPicker.d.ts +11 -0
  21. package/dist/components/business/RunStoryTimeline.d.ts +9 -0
  22. package/dist/components/business/StepFlowEditor.d.ts +20 -0
  23. package/dist/components/business/StepListEditor.d.ts +29 -0
  24. package/dist/components/template/TemplateExtractor.d.ts +10 -0
  25. package/dist/components/template/TemplateGallery.d.ts +10 -0
  26. package/dist/components/template/TemplateSetupWizard.d.ts +9 -0
  27. package/dist/index.d.ts +36 -1
  28. package/dist/library/catalog.d.ts +93 -0
  29. package/dist/library/conductorProvider.d.ts +41 -0
  30. package/dist/library/diff.d.ts +62 -0
  31. package/dist/library/index.d.ts +16 -0
  32. package/dist/library/level.d.ts +6 -0
  33. package/dist/library/naming.d.ts +28 -0
  34. package/dist/library/projections.d.ts +53 -0
  35. package/dist/library/types.d.ts +58 -0
  36. package/dist/library/useLibraryCatalog.d.ts +9 -0
  37. package/dist/library/version.d.ts +17 -0
  38. package/dist/library/versionStatus.d.ts +44 -0
  39. package/dist/product-launch.html +3 -3
  40. package/dist/reactflow-ui-ai.es.js +14330 -8509
  41. package/dist/reactflow-ui.css +1 -1
  42. package/dist/reactflow-ui.es.js +16707 -8202
  43. package/dist/reactflow-ui.umd.js +30 -24
  44. package/dist/sample-workflows/ecs-lifecycle-automation.json +74 -0
  45. package/dist/sample-workflows/library-capabilities-demo.json +66 -0
  46. package/dist/services/ai/agentRunner.d.ts +11 -0
  47. package/dist/services/ai/schemaRegistry.d.ts +7 -1
  48. package/dist/services/ai/systemPrompt.d.ts +11 -0
  49. package/dist/services/ai/toolExecutor.d.ts +12 -0
  50. package/dist/services/ai/workflowSynthesizer.d.ts +28 -3
  51. package/dist/stepmodel/compile.d.ts +11 -0
  52. package/dist/stepmodel/decompile.d.ts +10 -0
  53. package/dist/stepmodel/factory.d.ts +8 -0
  54. package/dist/stepmodel/types.d.ts +64 -0
  55. package/dist/store/ideStoresContext.d.ts +3 -0
  56. package/dist/store/workflowStore.d.ts +1 -0
  57. package/dist/template/applyTemplate.d.ts +10 -0
  58. package/dist/template/builtin/templates.d.ts +37 -0
  59. package/dist/template/sanitizer/anonymize.d.ts +5 -0
  60. package/dist/template/sanitizer/prune.d.ts +10 -0
  61. package/dist/template/sanitizer/rules.d.ts +10 -0
  62. package/dist/template/sanitizer/types.d.ts +55 -0
  63. package/dist/template/templateStore.d.ts +32 -0
  64. package/dist/template/types.d.ts +99 -0
  65. package/dist/types/conductor.d.ts +13 -8
  66. package/dist/types/workflow.d.ts +9 -0
  67. package/dist/types/workflowLibrary.d.ts +2 -0
  68. package/dist/utils/friendlyErrorTranslator.d.ts +26 -0
  69. package/dist/utils/taskTypeMeta.d.ts +3 -3
  70. package/package.json +1 -1
  71. package/dist/components/AiNative/BusinessCanvas.d.ts +0 -15
  72. package/dist/components/Controls/ModeSlider.d.ts +0 -2
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { WorkflowIDE } from './WorkflowIDE';
2
2
  export type { WorkflowIDEProps, WorkflowIDERef } from './WorkflowIDE';
3
- export type { WorkflowDef, TaskDef, WorkflowInputParam, WorkflowInstance } from './types/conductor';
3
+ export type { WorkflowDef, TaskDef, WorkflowInputParam, WorkflowInstance, SchemaDef } from './types/conductor';
4
4
  export { parseWorkflowInputParams } from './types/conductor';
5
5
  export type { AIServiceConfig } from './services/aiService';
6
6
  export type { ExecutionActions, RestartOptions, ViewMode, RunState, WorkflowExecutionInput } from './types/workflow';
@@ -8,3 +8,38 @@ export { getCompletionItems, buildDataFlowGraph, refactorTaskReferenceName, getU
8
8
  export type { WlspCompletionItem, DataFlowGraph, DataFlowEdge, InferredField, UpstreamTaskInfo, } from './services/wlsp/workflowLsp';
9
9
  export { executeLocalSandboxDryRun, buildDefaultWorkflowMockInput, generateDefaultTaskOutputPreview, } from './utils/localSandboxEngine';
10
10
  export type { SandboxDryRunOptions, TaskMockOverride, } from './utils/localSandboxEngine';
11
+ export * from './actions/types';
12
+ export { ActionRegistry, defaultActionRegistry } from './actions/registry';
13
+ export { BUILTIN_ECS_ACTIONS } from './actions/builtin/ecs';
14
+ export { BUILTIN_COMMON_ACTIONS } from './actions/builtin/common';
15
+ export { buildActionFromWorkflowDef, buildActionFromTaskDef, buildActionsFromLibrary, buildActionsFromTaskDefs, } from './actions/fromDefinitions';
16
+ export type { ActionExtension, RegisteredTaskDef, LibraryWorkflowEntry, RegisteredTaskEntry, } from './actions/fromDefinitions';
17
+ export { createStepFromAction } from './stepmodel/factory';
18
+ export * from './stepmodel/types';
19
+ export { compileStepToTaskDef, compileStepModelToWorkflowDef, } from './stepmodel/compile';
20
+ export { decompileTaskDefToStep, decompileWorkflowDefToStepModel, } from './stepmodel/decompile';
21
+ export { StepFlowEditor } from './components/business/StepFlowEditor';
22
+ export { DecisionBranchCard } from './components/business/DecisionBranchCard';
23
+ export { ForkJoinCard } from './components/business/ForkJoinCard';
24
+ export { LoopDoWhileCard } from './components/business/LoopDoWhileCard';
25
+ export { DataPillInput } from './components/business/DataPillInput';
26
+ export { ActionForm } from './components/business/ActionForm';
27
+ export * from './template/types';
28
+ export { TemplateStore, defaultTemplateStore } from './template/templateStore';
29
+ export { applyTemplateVariables } from './template/applyTemplate';
30
+ export { BUILTIN_WORKFLOW_TEMPLATES } from './template/builtin/templates';
31
+ export { TemplateGallery } from './components/template/TemplateGallery';
32
+ export { TemplateSetupWizard } from './components/template/TemplateSetupWizard';
33
+ export * from './template/sanitizer/types';
34
+ export { scanWorkflowDef, scanObjectForSensitiveFindings } from './template/sanitizer/rules';
35
+ export { analyzeTasksForPruning, applyTaskPruning } from './template/sanitizer/prune';
36
+ export { extractTemplateFromInstance } from './template/sanitizer/anonymize';
37
+ export { TemplateExtractor } from './components/template/TemplateExtractor';
38
+ export * from './utils/friendlyErrorTranslator';
39
+ export { FriendlyErrorCard } from './components/business/FriendlyErrorCard';
40
+ export type { FriendlyErrorCardProps } from './components/business/FriendlyErrorCard';
41
+ export { RunStoryTimeline } from './components/business/RunStoryTimeline';
42
+ export type { RunStoryTimelineProps } from './components/business/RunStoryTimeline';
43
+ export * from './library';
44
+ export type { WorkflowLevel, WorkflowLibraryItem } from './types/workflowLibrary';
45
+ export type { TaskSchema } from './services/ai/schemaRegistry';
@@ -0,0 +1,93 @@
1
+ import type { WorkflowLevel, WorkflowLibraryItem } from '../types/workflowLibrary';
2
+ import type { TaskSchema } from '../services/ai/schemaRegistry';
3
+ import type { LibraryLoadStatus, LibraryProvider, LibrarySearchOptions, LibraryTaskRecord, LibraryWorkflowRecord } from './types';
4
+ /** 规范化后的目录条目(每个 name 只有一个最新版本) */
5
+ export interface LibraryEntry {
6
+ name: string;
7
+ /** 统一为整数 */
8
+ version: number;
9
+ versionLabel?: string;
10
+ description?: string;
11
+ level?: WorkflowLevel;
12
+ /** 业务域展示名:优先取 extension.domain,缺省时从流程名称解析 */
13
+ domain?: string;
14
+ tags: string[];
15
+ deprecated: boolean;
16
+ record: LibraryWorkflowRecord;
17
+ /** 条目来源:Provider 提供,或静态 prop(workflowLibrary)。同名时 Provider 优先 */
18
+ source: 'provider' | 'static';
19
+ }
20
+ /** 目录状态快照(引用在每次变化时更新,供 useSyncExternalStore 使用) */
21
+ export interface LibraryCatalogSnapshot {
22
+ status: LibraryLoadStatus;
23
+ error?: Error;
24
+ /** 每次数据 / 状态变化递增,便于作为 useMemo 依赖 */
25
+ revision: number;
26
+ }
27
+ export interface LibraryCatalogOptions {
28
+ /** 兼容旧 `workflowLibrary` prop 的静态条目 */
29
+ staticItems?: WorkflowLibraryItem[];
30
+ /** 兼容旧 `taskSchemas` prop 的静态 Schema */
31
+ staticTaskSchemas?: TaskSchema[];
32
+ }
33
+ /** 把一条记录规范化为目录条目 */
34
+ export declare function entryFromRecord(record: LibraryWorkflowRecord, source: LibraryEntry['source'], onLossy?: (name: string, label: string) => void): LibraryEntry;
35
+ /**
36
+ * 流程库目录:把 Provider 与静态 prop 规范化成一份数据。
37
+ * 每个实例独立(不是全局单例);通过 subscribe / getSnapshot 接入 React。
38
+ */
39
+ export declare class LibraryCatalog {
40
+ private provider?;
41
+ private staticItems;
42
+ private staticSchemas;
43
+ private providerEntries;
44
+ private providerTasks;
45
+ private merged;
46
+ private versionCache;
47
+ private warned;
48
+ private listeners;
49
+ /** 每次 load / setProvider 递增,用于丢弃过期的异步结果 */
50
+ private generation;
51
+ private controller;
52
+ private snapshot;
53
+ constructor(provider?: LibraryProvider, options?: LibraryCatalogOptions);
54
+ /** 更换数据源:丢弃旧数据与缓存,状态回到 idle(需再调用 load) */
55
+ setProvider(provider?: LibraryProvider): void;
56
+ /** 更新静态条目 / Schema(对应旧 prop 变化) */
57
+ setStatic(options: LibraryCatalogOptions): void;
58
+ hasProvider(): boolean;
59
+ /** Provider 是否支持服务端检索 */
60
+ hasServerSearch(): boolean;
61
+ /**
62
+ * 拉取目录:同名多版本去重取最大 version。
63
+ * 同一时刻只保留最新一次加载:新的 load / reload / setProvider / abort 会取消上一次(abort 其请求并丢弃其结果);
64
+ * 传入的 signal 被 abort 时同样取消。网络错误记为 error 状态,不抛出。
65
+ */
66
+ load(signal?: AbortSignal): Promise<void>;
67
+ /** 重新加载(供 UI「点击重试」使用) */
68
+ reload(): Promise<void>;
69
+ /** 取消进行中的加载(组件卸载时调用);已加载的数据保留 */
70
+ abort(): void;
71
+ latest(name: string): LibraryEntry | undefined;
72
+ entries(): LibraryEntry[];
73
+ /** Provider 提供的原子任务定义 */
74
+ tasks(): LibraryTaskRecord[];
75
+ /** 静态 Schema(Provider 未覆盖的部分由 projections 合并) */
76
+ staticTaskSchemas(): TaskSchema[];
77
+ /**
78
+ * 取指定版本的完整定义(历史版本按需获取并缓存)。
79
+ * 找不到返回 null;网络错误向上抛出,由调用方决定如何提示。
80
+ */
81
+ getVersion(name: string, version: number, signal?: AbortSignal): Promise<LibraryWorkflowRecord | null>;
82
+ /**
83
+ * 服务端检索。Provider 未实现 search 时返回 null,调用方应退回本地匹配。
84
+ * 结果不并入目录(只是一次查询的命中)。
85
+ */
86
+ search(query: string, opts?: LibrarySearchOptions, signal?: AbortSignal): Promise<LibraryEntry[] | null>;
87
+ getSnapshot: () => LibraryCatalogSnapshot;
88
+ subscribe: (listener: () => void) => (() => void);
89
+ private warnLossy;
90
+ /** Provider 条目优先,静态条目补充同名之外的部分 */
91
+ private rebuild;
92
+ private setState;
93
+ }
@@ -0,0 +1,41 @@
1
+ import type { WorkflowDef } from '../types/conductor';
2
+ import type { RegisteredTaskDef } from '../actions/fromDefinitions';
3
+ import type { LibraryExtension, LibraryProvider } from './types';
4
+ export interface ConductorLibraryProviderOptions {
5
+ /** Conductor API 根地址,如 `https://conductor.example.com/api`(尾部斜杠可有可无) */
6
+ baseUrl: string;
7
+ /**
8
+ * 认证头等,由宿主在每次请求前注入(组件库不保存任何凭据)。
9
+ * 可返回 Promise,便于异步刷新 token。
10
+ */
11
+ headers?: () => Record<string, string> | Promise<Record<string, string>>;
12
+ /** 自定义 fetch(测试 / 网关封装);缺省使用全局 fetch */
13
+ fetch?: typeof fetch;
14
+ /** 是否同时拉取已注册的原子任务定义(`/metadata/taskdefs`),默认 false */
15
+ includeTaskDefs?: boolean;
16
+ /** 只暴露「流程库」内的工作流(如按名前缀 / ownerEmail);对列表与单个获取都生效 */
17
+ filter?: (def: WorkflowDef) => boolean;
18
+ /** 补充字段(层级、分类、图标、是否下线等)的来源由宿主决定 */
19
+ resolveExtension?: (def: WorkflowDef) => LibraryExtension | undefined;
20
+ /** 原子任务的补充字段来源(仅 includeTaskDefs 时使用) */
21
+ resolveTaskExtension?: (def: RegisteredTaskDef) => LibraryExtension | undefined;
22
+ /**
23
+ * 网关路径不同可覆盖(相对 baseUrl)。
24
+ * `workflow` 为单个工作流的路径:含 `{name}` 时按模板替换,否则在其后追加 `/{name}`。
25
+ */
26
+ paths?: {
27
+ workflows?: string;
28
+ workflow?: string;
29
+ taskDefs?: string;
30
+ };
31
+ }
32
+ /**
33
+ * Conductor OSS 默认的流程库数据源:
34
+ * - `GET {baseUrl}/metadata/workflow` 列出工作流(同名多版本时客户端取最大 version)
35
+ * - `GET {baseUrl}/metadata/workflow/{name}?version={v}` 取指定版本,404 返回 null
36
+ * - `GET {baseUrl}/metadata/taskdefs` 已注册任务(includeTaskDefs 时)
37
+ *
38
+ * 不内置 `search`(Conductor OSS 元数据接口没有检索能力);需要服务端检索请自行实现 LibraryProvider。
39
+ * 网络错误 / 非 404 的 HTTP 错误会抛出,由目录层捕获为 `error` 状态。
40
+ */
41
+ export declare function createConductorLibraryProvider(options: ConductorLibraryProviderOptions): LibraryProvider;
@@ -0,0 +1,62 @@
1
+ import type { WorkflowDef } from '../types/conductor';
2
+ import type { ActionField } from '../actions/types';
3
+ /**
4
+ * 流程库能力升级差异(纯函数):对比旧、新两个版本的入参 / 出参,
5
+ * 让用户在确认升级前看清「哪些已填内容会受影响」。
6
+ */
7
+ export interface InputChange {
8
+ key: string;
9
+ /** 旧版本的类型描述,如「数字,必填」「可选值 a|b」 */
10
+ from: string;
11
+ /** 新版本的类型描述 */
12
+ to: string;
13
+ /** 该入参是否已填写过值(类型变化后已填值可能不再有效) */
14
+ valueFilled: boolean;
15
+ }
16
+ export interface WorkflowVersionDiff {
17
+ /** 新增入参(field.required 标出必填) */
18
+ addedInputs: ActionField[];
19
+ /** 删除的入参 */
20
+ removedInputs: ActionField[];
21
+ /** 类型 / 枚举 / 必填变化 */
22
+ changedInputs: InputChange[];
23
+ addedOutputs: string[];
24
+ removedOutputs: string[];
25
+ /** removedInputs 中已填值的 key:升级后这些值将丢失 */
26
+ lostValueKeys: string[];
27
+ /** removedOutputs 中被其它步骤引用的 key:升级后下游引用将失效 */
28
+ brokenOutputRefs: string[];
29
+ }
30
+ export interface DiffOptions {
31
+ /** 其它步骤中引用了本步骤哪些出参 key(见 collectReferencedOutputKeys);缺省视为没有引用 */
32
+ referencedOutputs?: Iterable<string>;
33
+ }
34
+ /**
35
+ * @param oldDef 步骤当前固定版本的定义
36
+ * @param newDef 目录最新版本的定义
37
+ * @param filledValues 步骤上已填写的入参值
38
+ */
39
+ export declare function diffWorkflowVersions(oldDef: WorkflowDef, newDef: WorkflowDef, filledValues?: Record<string, unknown>, options?: DiffOptions): WorkflowVersionDiff;
40
+ /** 没有任何入参 / 出参变化 */
41
+ export declare function isDiffEmpty(diff: WorkflowVersionDiff): boolean;
42
+ /**
43
+ * 在若干结构(其它步骤的入参值等)中查找对 `${ref.output.<key>...}` 的引用,返回被引用的出参 key。
44
+ * 用于判断升级删除某个出参后,下游引用是否会失效。
45
+ */
46
+ export declare function collectReferencedOutputKeys(taskReferenceName: string, parts: unknown[]): Set<string>;
47
+ export interface DiffSummary {
48
+ /** 会影响已填内容的条目(置顶显示) */
49
+ impacts: string[];
50
+ /** 其它变化 */
51
+ changes: string[];
52
+ }
53
+ /** 把差异整理为面向用户的文字条目:会影响已填内容的置顶 */
54
+ export declare function summarizeDiff(diff: WorkflowVersionDiff): DiffSummary;
55
+ /** 升级确认框文案(含升级差异)。无差异时提示「入参出参未变化」。 */
56
+ export declare function buildUpgradeConfirmMessage(name: string, pinned: number | undefined, latest: number, diff: WorkflowVersionDiff): string;
57
+ /**
58
+ * 升级后调整步骤已填的入参值:
59
+ * - 删除的入参:移除其值(与差异中「值将丢失」一致)
60
+ * - 新增且有默认值的入参:补上默认值(用户已填的不覆盖)
61
+ */
62
+ export declare function applyUpgradeToValues(values: Record<string, any>, diff: WorkflowVersionDiff): Record<string, any>;
@@ -0,0 +1,16 @@
1
+ export * from './types';
2
+ export { normalizeVersion } from './version';
3
+ export type { NormalizedVersion } from './version';
4
+ export { canCallLevel } from './level';
5
+ export { parseWorkflowName, validateWorkflowName, WORKFLOW_NAME_TYPES } from './naming';
6
+ export type { ParsedWorkflowName, WorkflowNameType } from './naming';
7
+ export { LibraryCatalog, entryFromRecord } from './catalog';
8
+ export type { LibraryEntry, LibraryCatalogSnapshot, LibraryCatalogOptions } from './catalog';
9
+ export { toActions, toActionExtension, toTaskSchemas, toLibraryItems, entriesToLibraryItems, filterPickableActions, libraryDomainOf, collectLibraryDomains, OTHER_DOMAIN, schemaToTypeStrings, } from './projections';
10
+ export { useLibraryCatalogSnapshot, useLibraryCatalogLoader } from './useLibraryCatalog';
11
+ export { createConductorLibraryProvider } from './conductorProvider';
12
+ export type { ConductorLibraryProviderOptions } from './conductorProvider';
13
+ export { diffWorkflowVersions, isDiffEmpty, summarizeDiff, buildUpgradeConfirmMessage, applyUpgradeToValues, collectReferencedOutputKeys, } from './diff';
14
+ export type { WorkflowVersionDiff, InputChange, DiffOptions, DiffSummary } from './diff';
15
+ export { resolveLibraryBadgeState, describeUnavailable } from './versionStatus';
16
+ export type { LibraryBadgeState, LibraryBadgeInputs } from './versionStatus';
@@ -0,0 +1,6 @@
1
+ import type { WorkflowLevel } from '../types/workflowLibrary';
2
+ /**
3
+ * 分层调用规则:高层可调用低层及同层,禁止反向跨层。
4
+ * L3 -> L3/L2/L1;L2 -> L2/L1;L1 -> L1。任一方层级未知时视为允许(不做限制)。
5
+ */
6
+ export declare function canCallLevel(caller: WorkflowLevel | undefined, callee: WorkflowLevel | undefined): boolean;
@@ -0,0 +1,28 @@
1
+ import type { WorkflowLevel } from '../types/workflowLibrary';
2
+ /**
3
+ * 治理平台的流程命名规范:`类型-层级-业务域-产品-功能`,以 `-` 分隔。
4
+ * - 类型:std(通用)/ proxy(代理)/ tmp(临时,自动清理)/ custom(自定义)
5
+ * - 层级:L1 / L2 / L3
6
+ * - 业务域:来自全局可调整的列表(由服务端提供,这里不写死,只当字符串处理)
7
+ * - 产品:自由名称(内部不含 `-`)
8
+ * - 功能:第 4 个 `-` 之后的全部内容(自身可含 `-`)
9
+ */
10
+ export type WorkflowNameType = 'std' | 'proxy' | 'tmp' | 'custom';
11
+ export interface ParsedWorkflowName {
12
+ type: WorkflowNameType;
13
+ level: WorkflowLevel;
14
+ domain: string;
15
+ product: string;
16
+ func: string;
17
+ }
18
+ export declare const WORKFLOW_NAME_TYPES: readonly WorkflowNameType[];
19
+ /**
20
+ * 解析流程名称。段数不足 5、类型或层级不合法时返回 null(不抛错)。
21
+ * 业务域 / 产品 / 功能只做切分,不在此校验是否为空或是否在白名单内(见 validateWorkflowName)。
22
+ */
23
+ export declare function parseWorkflowName(name: string): ParsedWorkflowName | null;
24
+ /**
25
+ * 校验流程名称,返回中文错误列表(空数组 = 合法)。
26
+ * 仅当提供 allowedDomains 时才校验业务域是否在列表内。
27
+ */
28
+ export declare function validateWorkflowName(name: string, allowedDomains?: string[]): string[];
@@ -0,0 +1,53 @@
1
+ import type { ActionDefinition } from '../actions/types';
2
+ import { type ActionExtension } from '../actions/fromDefinitions';
3
+ import type { SchemaDef } from '../types/conductor';
4
+ import type { WorkflowLevel, WorkflowLibraryItem } from '../types/workflowLibrary';
5
+ import type { TaskSchema } from '../services/ai/schemaRegistry';
6
+ import type { LibraryCatalog, LibraryEntry } from './catalog';
7
+ import type { LibraryExtension } from './types';
8
+ /** LibraryExtension → ActionExtension(extension.action 中的显式设置优先) */
9
+ export declare function toActionExtension(ext?: LibraryExtension): ActionExtension;
10
+ /**
11
+ * 目录 → 动作。只投影 Provider 提供的条目(静态 workflowLibrary 条目只有摘要,没有入参定义,
12
+ * 不进入业务模式动作库,以保持原有 `actions` 行为不变)。
13
+ * 已下线条目仍会生成动作(已引用的步骤需要照常显示与编译),但带 `deprecated` 标记,选择器会隐藏。
14
+ */
15
+ export declare function toActions(catalog: LibraryCatalog): ActionDefinition[];
16
+ /** JSON Schema(Conductor SchemaDef)→ { 字段名: 类型串 };`enum` 输出为 `a|b`。无可解析的 properties 返回 undefined */
17
+ export declare function schemaToTypeStrings(schema?: SchemaDef): Record<string, string> | undefined;
18
+ /**
19
+ * 目录 → 任务 Schema。
20
+ * - 有 inputSchema / outputSchema 时展开 properties;没有时退回 inputKeys / 工作流入参名 / outputKeys / outputParameters 的 key
21
+ * - 同名条目 Provider 优先于静态 `taskSchemas`;静态 Schema 在前,保持原有顺序
22
+ * - 已下线条目不输出(避免 AI 继续引用)
23
+ */
24
+ export declare function toTaskSchemas(catalog: LibraryCatalog): TaskSchema[];
25
+ /**
26
+ * 目录 → 旧版 WorkflowLibraryItem。
27
+ * - 未标注层级的条目按 L1 处理(调用规则最保守:只能被同层及更高层引用)
28
+ * - `version` 为字符串以兼容旧类型:静态条目保持原样,Provider 条目输出整数版本(即步骤将固定的版本)
29
+ * - 已下线条目不输出
30
+ */
31
+ export declare function toLibraryItems(catalog: LibraryCatalog): WorkflowLibraryItem[];
32
+ /** 目录条目 → 旧版 WorkflowLibraryItem(规则同 toLibraryItems;也用于服务端检索命中的转换) */
33
+ export declare function entriesToLibraryItems(entries: LibraryEntry[]): WorkflowLibraryItem[];
34
+ /**
35
+ * 动作选择器可见性过滤:
36
+ * - 已下线动作隐藏(已引用的步骤仍可通过 registry 正常显示与编译)
37
+ * - 提供 currentLevel 时,隐藏违反分层调用规则的流程库动作(L1 不显示 L2/L3,L2 不显示 L3);未提供则不按层级过滤
38
+ */
39
+ export declare function filterPickableActions(actions: ActionDefinition[], opts?: {
40
+ currentLevel?: WorkflowLevel;
41
+ }): ActionDefinition[];
42
+ /** 没有业务域的流程库动作所属分组 */
43
+ export declare const OTHER_DOMAIN = "\u5176\u4ED6";
44
+ /**
45
+ * 动作所属的业务域分组:有 domain 取 domain;流程库动作(kind = workflow)无 domain 归入「其他」;
46
+ * 其余(内置 / 非流程库)返回 null,继续按原有分类分组。
47
+ */
48
+ export declare function libraryDomainOf(action: ActionDefinition): string | null;
49
+ /**
50
+ * 收集动作中出现的业务域,按首次出现的顺序排列(顺序即目录顺序,不重新排序),「其他」固定最后。
51
+ * 没有任何动作带 domain 时返回空数组(选择器据此保持旧的分类分组)。
52
+ */
53
+ export declare function collectLibraryDomains(actions: ActionDefinition[]): string[];
@@ -0,0 +1,58 @@
1
+ import type { WorkflowDef } from '../types/conductor';
2
+ import type { WorkflowLevel } from '../types/workflowLibrary';
3
+ import type { ActionExtension, RegisteredTaskDef } from '../actions/fromDefinitions';
4
+ /**
5
+ * 流程库数据源(LibraryProvider)公共类型。
6
+ * 设计见 docs/design/流程库数据源-LibraryProvider设计.md。
7
+ *
8
+ * 原则:来源可换,数据只有一份(LibraryCatalog),消费方只读投影(projections)。
9
+ */
10
+ /** Conductor 标准之外的补充字段(层级、分类、图标等由宿主决定来源) */
11
+ export interface LibraryExtension {
12
+ level?: WorkflowLevel;
13
+ category?: string;
14
+ /** 业务域展示名(如「通知协助」)。取值来自服务端的全局可调整列表,不在组件库内写死;缺省时尝试从流程名称解析 */
15
+ domain?: string;
16
+ icon?: string;
17
+ tags?: string[];
18
+ displayName?: string;
19
+ /** 已下线 / 不建议新引用(等价于 LibraryWorkflowRecord.deprecated,便于由 resolveExtension 一并给出) */
20
+ deprecated?: boolean;
21
+ /** 透传到 ActionExtension(字段级覆盖等) */
22
+ action?: ActionExtension;
23
+ }
24
+ export interface LibraryWorkflowRecord {
25
+ /** Conductor 标准 WorkflowDef(含 version: number) */
26
+ def: WorkflowDef;
27
+ extension?: LibraryExtension;
28
+ /** 宿主侧可读版本号(如 "1.2.0"),仅展示用 */
29
+ versionLabel?: string;
30
+ /** 已下线 / 不建议新引用 */
31
+ deprecated?: boolean;
32
+ }
33
+ export interface LibraryTaskRecord {
34
+ /** Conductor 标准 TaskDef */
35
+ def: RegisteredTaskDef;
36
+ extension?: LibraryExtension;
37
+ }
38
+ export interface LibraryListResult {
39
+ /** 每个 name 只需最新版本;可只含摘要(tasks 可为空) */
40
+ workflows: LibraryWorkflowRecord[];
41
+ tasks?: LibraryTaskRecord[];
42
+ }
43
+ export interface LibrarySearchOptions {
44
+ level?: WorkflowLevel;
45
+ /** 按业务域过滤(与 LibraryExtension.domain 同一取值) */
46
+ domain?: string;
47
+ limit?: number;
48
+ }
49
+ export interface LibraryProvider {
50
+ /** 列出目录(每个流程的最新发布版本) */
51
+ list(signal?: AbortSignal): Promise<LibraryListResult>;
52
+ /** 取指定版本的完整定义;version 缺省为最新。找不到返回 null(不抛错) */
53
+ get(name: string, version?: number, signal?: AbortSignal): Promise<LibraryWorkflowRecord | null>;
54
+ /** 可选:服务端检索,大目录时由 AI 工具与选择器使用 */
55
+ search?(query: string, opts?: LibrarySearchOptions, signal?: AbortSignal): Promise<LibraryWorkflowRecord[]>;
56
+ }
57
+ /** 目录加载状态 */
58
+ export type LibraryLoadStatus = 'idle' | 'loading' | 'ready' | 'error';
@@ -0,0 +1,9 @@
1
+ import { LibraryCatalog, type LibraryCatalogSnapshot } from './catalog';
2
+ import type { LibraryProvider } from './types';
3
+ /** 订阅目录状态(catalog 为空时返回恒定的 idle 快照)。目录数据变化时返回新的快照引用。 */
4
+ export declare function useLibraryCatalogSnapshot(catalog: LibraryCatalog | undefined): LibraryCatalogSnapshot;
5
+ /**
6
+ * 让目录跟随 provider:provider 引用变化时重新加载;卸载 / 更换时 abort 进行中的请求。
7
+ * 每个 IDE 实例自己持有 catalog,这里只负责驱动它。
8
+ */
9
+ export declare function useLibraryCatalogLoader(catalog: LibraryCatalog, provider: LibraryProvider | undefined): void;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 版本号规范化:统一为整数(Conductor 的版本就是整数)。
3
+ *
4
+ * | 输入 | 结果 |
5
+ * |---|---|
6
+ * | 整数 | 原样 |
7
+ * | 静态 "3" | 3,label "3" |
8
+ * | 静态 "1.2.0" 等 | 取 parseInt 主版本号,label 保留原串,warn = true |
9
+ */
10
+ export interface NormalizedVersion {
11
+ version: number;
12
+ /** 原始可读版本串(仅当输入是字符串,或无法原样用作整数时保留) */
13
+ label?: string;
14
+ /** 是否发生了有损转换(调用方据此告警一次) */
15
+ lossy: boolean;
16
+ }
17
+ export declare function normalizeVersion(input: number | string | undefined | null): NormalizedVersion;
@@ -0,0 +1,44 @@
1
+ import type { LibraryLoadStatus } from './types';
2
+ /**
3
+ * 流程库能力徽标的状态(纯函数,便于单测)。
4
+ *
5
+ * | 场景 | 状态 |
6
+ * |---|---|
7
+ * | 步骤未记录版本 | unpinned:沿用原定义,不显示任何提示 |
8
+ * | 库中有更高版本 | upgradable:「⬆ 有新版本 vN」,由用户确认差异后手动升级 |
9
+ * | 固定版本在库中不存在 / 已下线 | unavailable:「⚠ 版本不可用」,保持原样编译,不自动改版本 |
10
+ * | 目录加载中 / 加载失败 | pinned:不显示新版本提示,不影响编辑与编译 |
11
+ */
12
+ export type LibraryBadgeState = {
13
+ kind: 'unpinned';
14
+ } | {
15
+ kind: 'pinned';
16
+ pinned: number;
17
+ } | {
18
+ kind: 'upgradable';
19
+ pinned: number;
20
+ latest: number;
21
+ } | {
22
+ kind: 'unavailable';
23
+ pinned: number;
24
+ reason: 'deprecated' | 'removed' | 'missing-version';
25
+ };
26
+ export interface LibraryBadgeInputs {
27
+ /** 步骤上记录的固定版本 */
28
+ pinned: number | undefined;
29
+ /**
30
+ * 目录加载状态。`undefined` 表示没有流程库目录参与(仅有 `actions` prop),
31
+ * 此时沿用旧行为:只按动作上记录的最新版本提示升级,不判断「版本不可用」。
32
+ */
33
+ catalogStatus: LibraryLoadStatus | undefined;
34
+ /** 库中(或动作上记录的)当前最新版本;不存在时为 undefined */
35
+ latest: {
36
+ version: number;
37
+ deprecated: boolean;
38
+ } | undefined;
39
+ /** 固定版本是否仍存在于库中(异步检查结果;undefined = 未知,按存在处理) */
40
+ pinnedExists: boolean | undefined;
41
+ }
42
+ export declare function resolveLibraryBadgeState(input: LibraryBadgeInputs): LibraryBadgeState;
43
+ /** 「版本不可用」的原因说明(用于徽标 tooltip) */
44
+ export declare function describeUnavailable(name: string, pinned: number, reason: 'deprecated' | 'removed' | 'missing-version'): string;
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <link rel="icon" type="image/svg+xml" href="/logo.svg" />
6
+ <link rel="icon" type="image/svg+xml" href="./logo.svg" />
7
7
  <title>[Product Launch] Conductor Workflow IDE v1.0 GA · 让工作流编排与联调从 4.5 小时缩短至 12 分钟</title>
8
8
  <style>
9
9
  /* ==========================================================================
@@ -738,7 +738,7 @@
738
738
  <!-- Sticky Launch Bar -->
739
739
  <header class="launch-nav">
740
740
  <div class="nav-left">
741
- <a href="/" class="brand-logo">
741
+ <a href="./" class="brand-logo">
742
742
  <svg width="26" height="26" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" style="flex-shrink:0;">
743
743
  <defs>
744
744
  <linearGradient id="nav-bg" x1="0" y1="0" x2="32" y2="32" gradientUnits="userSpaceOnUse">
@@ -772,7 +772,7 @@
772
772
  <span style="color:var(--text-muted);">@yiyi_zhang/reactflow-ui · 下一代 AI 原生工作流编排与本地确定性沙箱 IDE</span>
773
773
  </div>
774
774
  <div class="nav-right">
775
- <a href="/app" class="ghost-btn">🎮 进入在线交互演练场</a>
775
+ <a href="./app" class="ghost-btn">🎮 进入在线交互演练场</a>
776
776
  <button class="cta-btn" onclick="document.getElementById('quickstart').scrollIntoView({behavior:'smooth'})">
777
777
  30 秒极速接入 →
778
778
  </button>