@digitalsee-ai/rcs 1.1.2 → 1.1.4

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 (121) hide show
  1. package/dist/components/digitalsee/workflow/Canvas/FlowVersionManager.d.ts +15 -0
  2. package/dist/components/digitalsee/workflow/Canvas/WorkflowCanvas.test.d.ts +1 -0
  3. package/dist/components/digitalsee/workflow/Canvas/WorkflowCanvasHeader.d.ts +3 -1
  4. package/dist/components/digitalsee/workflow/Canvas/actionItemToNodeData.d.ts +14 -0
  5. package/dist/components/digitalsee/workflow/Canvas/constants.d.ts +4 -20
  6. package/dist/components/digitalsee/workflow/Canvas/constants.test.d.ts +1 -0
  7. package/dist/components/digitalsee/workflow/Canvas/flowPayload.d.ts +4 -0
  8. package/dist/components/digitalsee/workflow/Canvas/hooks/classicNodeAddConnection.d.ts +31 -0
  9. package/dist/components/digitalsee/workflow/Canvas/hooks/classicNodeAddConnection.test.d.ts +1 -0
  10. package/dist/components/digitalsee/workflow/Canvas/hooks/createNodeAddHandlerNext.d.ts +1 -16
  11. package/dist/components/digitalsee/workflow/Canvas/hooks/useCanvasApi.d.ts +1 -1
  12. package/dist/components/digitalsee/workflow/Canvas/hooks/useNodeAddCallback.d.ts +4 -17
  13. package/dist/components/digitalsee/workflow/Canvas/hooks/useSaveFlowAfterNodeAdd.d.ts +9 -0
  14. package/dist/components/digitalsee/workflow/Canvas/hooks/useWorkflowCanvasState.d.ts +4 -2
  15. package/dist/components/digitalsee/workflow/Canvas/types.d.ts +8 -1
  16. package/dist/components/digitalsee/workflow/Handles/CustomHandle.d.ts +3 -0
  17. package/dist/components/digitalsee/workflow/Handles/customHandleConnectable.d.ts +35 -0
  18. package/dist/components/digitalsee/workflow/Handles/customHandleConnectable.test.d.ts +1 -0
  19. package/dist/components/digitalsee/workflow/Nodes/ConditionNode.d.ts +1 -1
  20. package/dist/components/digitalsee/workflow/Nodes/SuperBaseNode.d.ts +6 -1
  21. package/dist/components/digitalsee/workflow/Nodes/SwitchNode.d.ts +2 -2
  22. package/dist/components/digitalsee/workflow/Nodes/classicNodePackageNodes.test.d.ts +1 -0
  23. package/dist/components/digitalsee/workflow/Nodes/classicNodePackagePortLayout.d.ts +23 -0
  24. package/dist/components/digitalsee/workflow/Nodes/classicNodePackagePortLayout.test.d.ts +1 -0
  25. package/dist/components/digitalsee/workflow/Nodes/useClassicNodePackagePorts.d.ts +27 -0
  26. package/dist/components/digitalsee/workflow/Nodes/useClassicNodePackagePorts.test.d.ts +1 -0
  27. package/dist/components/digitalsee/workflow/NodesConfig/ActionNodeConfig/index.d.ts +1 -0
  28. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/WorkflowNodeSchemaFieldProvider.d.ts +3 -0
  29. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/fields/WorkflowCodeField.d.ts +1 -0
  30. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/fields/WorkflowCodeField.test.d.ts +1 -0
  31. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/fields/WorkflowProxyField.d.ts +1 -0
  32. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/proxyField.d.ts +18 -0
  33. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/proxyField.test.d.ts +1 -0
  34. package/dist/components/digitalsee/workflow/NodesConfig/components/EditInOnlineIDE/index.d.ts +2 -0
  35. package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/index.d.ts +1 -0
  36. package/dist/components/digitalsee/workflow/NodesConfig/components/online-ide/components/title/index.d.ts +5 -1
  37. package/dist/components/digitalsee/workflow/NodesConfig/components/online-ide/index.d.ts +2 -0
  38. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/EntryTypeSelector.d.ts +8 -0
  39. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCardList.d.ts +19 -0
  40. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useCategories.d.ts +6 -2
  41. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useCategories.test.d.ts +1 -0
  42. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useConnectableNodeSelector.d.ts +40 -0
  43. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNavigation.d.ts +4 -2
  44. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNavigation.test.d.ts +1 -0
  45. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeActionState.d.ts +30 -0
  46. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeSelectorPresentation.d.ts +25 -0
  47. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeSelectorPresentation.test.d.ts +1 -0
  48. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/types.d.ts +19 -1
  49. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableActionLoader.d.ts +16 -0
  50. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableActionLoader.test.d.ts +1 -0
  51. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableDataSource.d.ts +15 -0
  52. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableDataSource.test.d.ts +1 -0
  53. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableFallback.d.ts +2 -0
  54. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableFallback.test.d.ts +1 -0
  55. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableQuery.d.ts +40 -0
  56. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableQuery.test.d.ts +1 -0
  57. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableResponse.d.ts +35 -0
  58. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableResponse.test.d.ts +1 -0
  59. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/dataTransformers.d.ts +13 -2
  60. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/filterEdgeInsertActions.d.ts +62 -0
  61. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/filterEdgeInsertActions.test.d.ts +1 -0
  62. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/nodeAddContext.d.ts +26 -0
  63. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/nodeAddContext.test.d.ts +1 -0
  64. package/dist/components/digitalsee/workflow/api/connectable.test.d.ts +1 -0
  65. package/dist/components/digitalsee/workflow/api/connectable.types.d.ts +75 -0
  66. package/dist/components/digitalsee/workflow/api/dip.types.d.ts +43 -3
  67. package/dist/components/digitalsee/workflow/api/index.d.ts +28 -1
  68. package/dist/components/digitalsee/workflow/config/defaultCanvasEngineConfig.test.d.ts +1 -0
  69. package/dist/components/digitalsee/workflow/config/defaultNodeSelectorConfig.d.ts +9 -0
  70. package/dist/components/digitalsee/workflow/events/eventBus.d.ts +2 -12
  71. package/dist/components/digitalsee/workflow/hooks/usePanel.d.ts +3 -17
  72. package/dist/components/digitalsee/workflow/index.d.ts +3 -1
  73. package/dist/components/digitalsee/workflow/store/panelSlice.d.ts +118 -41
  74. package/dist/components/digitalsee/workflow/store/workflowSlice.d.ts +2 -1
  75. package/dist/components/digitalsee/workflow/types/Node.d.ts +3 -3
  76. package/dist/components/digitalsee/workflow/types/NodeAddContext.d.ts +31 -0
  77. package/dist/components/digitalsee/workflow/types/engine.d.ts +21 -1
  78. package/dist/components/digitalsee/workflow/types/flowVersion.d.ts +53 -0
  79. package/dist/components/digitalsee/workflow/utils/classicNodeActionIdentity.d.ts +7 -0
  80. package/dist/components/digitalsee/workflow/utils/classicNodeActionIdentity.test.d.ts +1 -0
  81. package/dist/components/digitalsee/workflow/utils/classicNodePackageConnection.d.ts +28 -0
  82. package/dist/components/digitalsee/workflow/utils/classicNodePackageConnection.test.d.ts +1 -0
  83. package/dist/components/digitalsee/workflow/utils/classicNodePackageGraphValidation.d.ts +29 -0
  84. package/dist/components/digitalsee/workflow/utils/classicNodePackageGraphValidation.test.d.ts +1 -0
  85. package/dist/components/digitalsee/workflow/utils/compatiblePortSelection.d.ts +79 -0
  86. package/dist/components/digitalsee/workflow/utils/compatiblePortSelection.test.d.ts +1 -0
  87. package/dist/components/digitalsee/workflow/utils/nextNodeSchemaCache.d.ts +8 -0
  88. package/dist/components/digitalsee/workflow/utils/nodeDataFormatter.test.d.ts +1 -0
  89. package/dist/components/digitalsee/workflow/utils/portConnectionValidationMessages.d.ts +48 -0
  90. package/dist/components/digitalsee/workflow/utils/portConnectionValidationMessages.test.d.ts +1 -0
  91. package/dist/components/digitalsee/workflow/utils/portConnectionValidator.d.ts +66 -0
  92. package/dist/components/digitalsee/workflow/utils/portConnectionValidator.test.d.ts +1 -0
  93. package/dist/components/digitalsee/workflow/utils/switchNodePackage.d.ts +43 -0
  94. package/dist/components/digitalsee/workflow/utils/switchNodePackage.test.d.ts +1 -0
  95. package/dist/components/digitalsee/workflow/utils/workflowConnectionValidator.d.ts +20 -0
  96. package/dist/components/digitalsee/workflow/utils/workflowConnectionValidator.test.d.ts +1 -0
  97. package/dist/components/dynamic-form/DynamicForm.d.ts +7 -1
  98. package/dist/components/dynamic-form/components/ValueModeWrapper/ValueModePolicy.test.d.ts +1 -0
  99. package/dist/components/dynamic-form/components/ValueModeWrapper/index.d.ts +23 -3
  100. package/dist/components/dynamic-form/registry/createFieldComponent.d.ts +4 -4
  101. package/dist/components/dynamic-form/types/field-component.d.ts +1 -1
  102. package/dist/components/dynamic-form/types/form-schema.d.ts +10 -1
  103. package/dist/index-DVB8Tfvb.mjs +63909 -0
  104. package/dist/index-DVB8Tfvb.mjs.map +1 -0
  105. package/dist/index-DuXBchhk.mjs +312 -0
  106. package/dist/index-DuXBchhk.mjs.map +1 -0
  107. package/dist/locales/en-US/common.d.ts +52 -0
  108. package/dist/locales/en-US/link/flow.d.ts +25 -0
  109. package/dist/locales/en-US.d.ts +77 -0
  110. package/dist/locales/zh-CN/common.d.ts +52 -0
  111. package/dist/locales/zh-CN/link/flow.d.ts +25 -0
  112. package/dist/locales/zh-CN.d.ts +77 -0
  113. package/dist/locales/zh-TW/common.d.ts +52 -0
  114. package/dist/locales/zh-TW/link/flow.d.ts +25 -0
  115. package/dist/locales/zh-TW.d.ts +77 -0
  116. package/dist/rcs.css +1 -1
  117. package/dist/rcs.es.js +60 -61089
  118. package/dist/rcs.es.js.map +1 -1
  119. package/dist/rcs.umd.js +65 -65
  120. package/dist/rcs.umd.js.map +1 -1
  121. package/package.json +1 -1
@@ -1,15 +1,17 @@
1
1
  import { CategoryItem, LinkSearchParams, NodeFetchResult, NodeTypeItem } from '../types';
2
- import { NodeAddInfo } from '../../../store/panelSlice';
2
+ import { NodeAddInfo } from '../../../types/NodeAddContext';
3
3
  interface UseNavigationProps {
4
4
  categories: CategoryItem[];
5
+ categoriesReady: boolean;
5
6
  initialCategory?: string;
6
7
  nodeSelectorVisible: boolean;
7
8
  nodeAddInfo?: NodeAddInfo | null;
8
9
  onFetchNodesByCategory: (params?: LinkSearchParams) => Promise<NodeFetchResult>;
9
10
  defaultPageSize?: number;
10
11
  flowId?: string;
12
+ useConnectableDataSource?: boolean;
11
13
  }
12
- export declare const useNavigation: ({ categories, initialCategory, nodeSelectorVisible, nodeAddInfo, onFetchNodesByCategory, defaultPageSize, flowId, }: UseNavigationProps) => {
14
+ export declare const useNavigation: ({ categories, categoriesReady, initialCategory, nodeSelectorVisible, nodeAddInfo, onFetchNodesByCategory, defaultPageSize, flowId, useConnectableDataSource, }: UseNavigationProps) => {
13
15
  categoryNodes: NodeTypeItem[];
14
16
  currentCategory: CategoryItem;
15
17
  isLoadingNodes: boolean;
@@ -0,0 +1,30 @@
1
+ import { ActionItem, NodeTypeItem } from '../types';
2
+ export interface NodeActionMeta {
3
+ actions: ActionItem[];
4
+ loading: boolean;
5
+ source?: 'search-partial' | 'full';
6
+ }
7
+ interface UseNodeActionStateProps {
8
+ actionRequestContextKey: string;
9
+ contextMode?: string;
10
+ fetchNodeActions: (node: NodeTypeItem, options?: {
11
+ suppressLoading?: boolean;
12
+ }) => Promise<ActionItem[]>;
13
+ isMcpServerEntryMode: boolean;
14
+ visibleNodes: NodeTypeItem[];
15
+ searchResults: NodeTypeItem[];
16
+ searchText: string;
17
+ activeCategoryId?: string;
18
+ }
19
+ /**
20
+ * @description 管理连接器的展开状态、动作缓存,以及异步动作请求的竞态保护。
21
+ */
22
+ export declare function useNodeActionState({ actionRequestContextKey, contextMode, fetchNodeActions, isMcpServerEntryMode, visibleNodes, searchResults, searchText, activeCategoryId, }: UseNodeActionStateProps): {
23
+ expandedNodeIds: string[];
24
+ nodeActionsMap: Record<string, NodeActionMeta>;
25
+ handleNodeToggle: (node: NodeTypeItem) => Promise<void>;
26
+ handleLoadAllActions: (node: NodeTypeItem) => Promise<void>;
27
+ resetNodeActionState: () => void;
28
+ setExpandedNodeIds: import('react').Dispatch<import('react').SetStateAction<string[]>>;
29
+ };
30
+ export {};
@@ -0,0 +1,25 @@
1
+ import { CategoryItem, LinkSearchParams, NodeTypeItem } from '../types';
2
+ import { NodeAddInfo } from '../../../types/NodeAddContext';
3
+ interface UseNodeSelectorPresentationProps {
4
+ effectiveNodeAddInfo?: NodeAddInfo | null;
5
+ isEntryTypeSelection: boolean;
6
+ activeCategoryId?: string;
7
+ currentCategory: CategoryItem | null;
8
+ categoryNodes: NodeTypeItem[];
9
+ searchResults: NodeTypeItem[];
10
+ searchText: string;
11
+ isRealTriggerMode: boolean;
12
+ workflowId?: string;
13
+ useConnectableDataSource?: boolean;
14
+ }
15
+ /**
16
+ * @description 汇总节点选择器的协议展示状态和列表/搜索派生参数。
17
+ */
18
+ export declare function useNodeSelectorPresentation({ effectiveNodeAddInfo, isEntryTypeSelection, activeCategoryId, currentCategory, categoryNodes, searchResults, searchText, isRealTriggerMode, workflowId, useConnectableDataSource, }: UseNodeSelectorPresentationProps): {
19
+ panelTitle: string;
20
+ searchPlaceholder: string;
21
+ visibleNodes: NodeTypeItem[];
22
+ buildSearchParams: () => LinkSearchParams;
23
+ isMcpServerEntryMode: boolean;
24
+ };
25
+ export {};
@@ -5,6 +5,9 @@ import { NodeType } from '../../types/Node';
5
5
  */
6
6
  export interface NodeTypeItem {
7
7
  id: string;
8
+ /** 后端返回稳定标识时才允许展开/选择。 */
9
+ selectable?: boolean;
10
+ identifierSource?: string;
8
11
  type: string;
9
12
  name: string;
10
13
  description: string;
@@ -41,6 +44,12 @@ export interface NodeFetchResult {
41
44
  */
42
45
  export interface ActionItem {
43
46
  id: string;
47
+ /** UI 列表使用稳定 id;创建 CLASSIC 节点时必须使用后端原始 Long action_id。 */
48
+ backendActionId?: string;
49
+ action_id?: string;
50
+ /** 后端返回稳定标识时才允许创建节点。 */
51
+ selectable?: boolean;
52
+ identifierSource?: string;
44
53
  type: NodeType;
45
54
  action_type: NodeType;
46
55
  action_key?: string;
@@ -89,6 +98,10 @@ export interface ConnectorInfo {
89
98
  */
90
99
  export interface CategoryItem {
91
100
  id: string;
101
+ /** connectable 接口需要的后端原始分类 name。 */
102
+ categoryName?: string;
103
+ /** 缺少后端原始 name 时仍展示,但不能作为服务端筛选条件。 */
104
+ filterable?: boolean;
92
105
  name: string;
93
106
  description: string;
94
107
  icon?: string;
@@ -101,12 +114,14 @@ export interface CategoryItem {
101
114
  */
102
115
  export interface ApiActionItem {
103
116
  id: string;
117
+ backendActionId?: string;
118
+ action_id?: string;
104
119
  action_key?: string;
105
120
  action_ver?: number;
106
121
  is_trigger: number;
107
122
  name: string;
108
123
  description: string | null;
109
- connector_id: string;
124
+ connector_id: string | null;
110
125
  status: number;
111
126
  protocol: string;
112
127
  config_schema: any;
@@ -134,6 +149,9 @@ export interface ModernNodeSelectorProps {
134
149
  */
135
150
  export interface LinkSearchParams {
136
151
  name?: string;
152
+ keyword?: string;
153
+ linkId?: string;
154
+ categoryName?: string;
137
155
  build_type?: string;
138
156
  deployment_type?: string;
139
157
  app_domain_category?: string;
@@ -0,0 +1,16 @@
1
+ import { QueryConnectableNodePackageDto } from '../../../api/connectable.types';
2
+ import { ActionItem, NodeFetchResult, NodeTypeItem } from '../types';
3
+ interface LoadConnectableNodeActionsOptions {
4
+ node: NodeTypeItem;
5
+ query: QueryConnectableNodePackageDto | null;
6
+ fallbackToLegacy: boolean;
7
+ fetchConnectablePage: (query: QueryConnectableNodePackageDto) => Promise<NodeFetchResult>;
8
+ fetchLegacyActions: () => Promise<ActionItem[]>;
9
+ filterPage?: (page: NodeFetchResult) => NodeFetchResult;
10
+ }
11
+ /**
12
+ * 加载连接器动作;connectable 查询不可用或明确未发布时回退旧 `/actions/v2`。
13
+ * 不能回退 `/links/search`,因为该接口在 linkId 场景不会加载 matchedActions。
14
+ */
15
+ export declare function loadConnectableNodeActions({ node, query, fallbackToLegacy, fetchConnectablePage, fetchLegacyActions, filterPage, }: LoadConnectableNodeActionsOptions): Promise<ActionItem[]>;
16
+ export {};
@@ -0,0 +1,15 @@
1
+ import { EntryMode } from '../components/EntryTypeSelector';
2
+ import { NodeAddInfo } from '../../../types/NodeAddContext';
3
+ interface ConnectableDataSourceInput {
4
+ enabled: boolean;
5
+ hasContext: boolean;
6
+ entryMode: EntryMode;
7
+ protocol?: string | null;
8
+ }
9
+ /** 将初始化入口选择转换为实际查询上下文;MCP Server 仍属于触发节点。 */
10
+ export declare function resolveNodeSelectorEntryContext(nodeAddInfo: NodeAddInfo | null | undefined, entryMode: EntryMode): NodeAddInfo | null | undefined;
11
+ /** 初始化 MCP Server 入口是唯一允许携带 protocol 使用 connectable 接口的特殊入口。 */
12
+ export declare function shouldUseConnectableDataSource({ enabled, hasContext, entryMode, protocol, }: ConnectableDataSourceInput): boolean;
13
+ /** MCP Server 初始化入口固定查询 mcp 场景,其他入口沿用宿主配置。 */
14
+ export declare function resolveConnectableRequestScene(configuredScene: string, entryMode: EntryMode): string;
15
+ export {};
@@ -0,0 +1,2 @@
1
+ /** 只有接口未发布(404)或明确未实现(501)时才允许回退 legacy 数据源。 */
2
+ export declare function shouldFallbackConnectableRequest(error: unknown): boolean;
@@ -0,0 +1,40 @@
1
+ import { QueryConnectableNodePackageDto } from '../../../api/connectable.types';
2
+ type ConnectableNodeId = string | number;
3
+ export type ConnectableQueryContext = {
4
+ mode: 'independent';
5
+ } | {
6
+ mode: 'source';
7
+ sourceId: ConnectableNodeId;
8
+ sourceHandle: string;
9
+ } | {
10
+ mode: 'target';
11
+ targetId: ConnectableNodeId;
12
+ targetHandle: string;
13
+ } | {
14
+ mode: 'edge-insert';
15
+ sourceId: ConnectableNodeId;
16
+ sourceHandle: string;
17
+ targetId: ConnectableNodeId;
18
+ targetHandle: string;
19
+ };
20
+ export interface ConnectableQueryOptions {
21
+ scene: string;
22
+ trigger: boolean;
23
+ categoryName?: string | null;
24
+ linkId?: string | null;
25
+ keyword?: string | null;
26
+ page?: number | null;
27
+ size?: number | null;
28
+ }
29
+ /**
30
+ * 校验后端 Long 节点 ID,并保持字符串原值以避免 19 位雪花 ID 精度丢失。
31
+ * number 只接受 JS 安全正整数;临时 ReactFlow id 返回 undefined。
32
+ */
33
+ export declare const parsePersistedNodeId: (value: ConnectableNodeId) => string | number | undefined;
34
+ /**
35
+ * 将节点新增上下文转换为后端三种合法查询之一。
36
+ *
37
+ * `edge-insert` 暂按 source 查询,原 target 由调用方保留并在本地求交。
38
+ */
39
+ export declare const buildConnectableQuery: (context: ConnectableQueryContext, options: ConnectableQueryOptions) => QueryConnectableNodePackageDto | null;
40
+ export {};
@@ -0,0 +1,35 @@
1
+ import { ApiActionItem, ConnectorInfo } from '../types';
2
+ export interface NormalizedConnectableCategory {
3
+ /** 面板稳定 key;有 categoryName 时与后端原始 name 一致。 */
4
+ id: string;
5
+ /** 后端 category_name 筛选参数;缺失时该分类只能展示,不能用于过滤。 */
6
+ categoryName?: string;
7
+ name: string;
8
+ description: string;
9
+ icon?: string;
10
+ searchAction: boolean;
11
+ filterable: boolean;
12
+ }
13
+ export interface NormalizedConnectableConnector extends ConnectorInfo {
14
+ selectable: boolean;
15
+ identifierSource?: string;
16
+ }
17
+ export interface NormalizedConnectableAction extends ApiActionItem {
18
+ selectable: boolean;
19
+ identifierSource?: string;
20
+ }
21
+ export interface NormalizedConnectablePluginItem {
22
+ connector: NormalizedConnectableConnector;
23
+ matched_actions: NormalizedConnectableAction[];
24
+ default_expanded: boolean;
25
+ match_type?: string;
26
+ }
27
+ export interface NormalizedConnectablePluginPage {
28
+ items: NormalizedConnectablePluginItem[];
29
+ total: number;
30
+ size: number;
31
+ page: number;
32
+ pages: number;
33
+ }
34
+ export declare const normalizeConnectableCategories: (response: unknown) => NormalizedConnectableCategory[];
35
+ export declare const normalizeConnectablePluginPage: (response: unknown) => NormalizedConnectablePluginPage;
@@ -1,7 +1,18 @@
1
- import { ActionItem, ApiActionItem, CategoryRequestType, ConnectorInfo, LinkSearchParams, NodeFetchResult } from '../types';
1
+ import { QueryConnectableNodePackageDto } from '../../../api/connectable.types';
2
+ import { ActionItem, ApiActionItem, CategoryItem, CategoryRequestType, ConnectorInfo, LinkSearchParams, NodeFetchResult } from '../types';
2
3
  export declare const transformAction: (action: ApiActionItem, connector: ConnectorInfo) => ActionItem;
4
+ /**
5
+ * 将 connectable 分类响应转换成现有面板模型。
6
+ */
7
+ export declare const transformConnectableCategoriesResponse: (response: unknown) => CategoryItem[];
8
+ /**
9
+ * 将 connectable 节点包分页响应转换成现有面板模型。
10
+ */
11
+ export declare const transformConnectablePluginResponse: (response: unknown) => NodeFetchResult;
12
+ export declare const fetchConnectableCategories: (query: QueryConnectableNodePackageDto) => Promise<CategoryItem[]>;
13
+ export declare const fetchConnectableNodes: (query: QueryConnectableNodePackageDto) => Promise<NodeFetchResult>;
3
14
  export declare const fetchNodesByCategory: (params?: LinkSearchParams) => Promise<NodeFetchResult>;
4
- export declare const fetchCategories: (type?: CategoryRequestType) => Promise<import('../types').CategoryItem[] | {
15
+ export declare const fetchCategories: (type?: CategoryRequestType) => Promise<CategoryItem[] | {
5
16
  id: any;
6
17
  name: any;
7
18
  description: any;
@@ -0,0 +1,62 @@
1
+ import { DipNodeSchema } from '../../../api/dip';
2
+ import { ActionItem, NodeFetchResult } from '../types';
3
+ import { PortConnectionEdge, PortConnectionNode } from '../../../utils/portConnectionValidator';
4
+ import { Edge, Node } from '@xyflow/react';
5
+ type SourceSchema = Pick<DipNodeSchema, 'outputs'>;
6
+ type TargetSchema = Pick<DipNodeSchema, 'inputs'>;
7
+ /** 边中插入候选动作执行双侧本地校验所需的稳定上下文。 */
8
+ export interface EdgeInsertActionFilterContext {
9
+ sourceNode: PortConnectionNode;
10
+ targetNode: PortConnectionNode;
11
+ sourceSchema: SourceSchema;
12
+ targetSchema: TargetSchema;
13
+ sourceHandle: string;
14
+ targetHandle: string;
15
+ edges?: readonly PortConnectionEdge[];
16
+ replacedEdgeId?: string;
17
+ }
18
+ export interface EdgeInsertActionFilterStats {
19
+ contextReady: boolean;
20
+ serverActionCount: number;
21
+ compatibleActionCount: number;
22
+ filteredActionCount: number;
23
+ sourceCompatibleActionCount: number;
24
+ targetCompatibleActionCount: number;
25
+ missingActionSchemaCount: number;
26
+ }
27
+ export interface EdgeInsertActionFilterResult {
28
+ actions: ActionItem[];
29
+ stats: EdgeInsertActionFilterStats;
30
+ }
31
+ export interface EdgeInsertEndpointContext {
32
+ sourceId: string | number;
33
+ targetId: string | number;
34
+ sourceHandle: string;
35
+ targetHandle: string;
36
+ }
37
+ export type EdgeInsertActionFilterContextResolutionCode = 'READY' | 'SOURCE_NODE_NOT_FOUND' | 'TARGET_NODE_NOT_FOUND' | 'SOURCE_SCHEMA_NOT_READY' | 'TARGET_SCHEMA_NOT_READY';
38
+ export interface EdgeInsertActionFilterContextResolution {
39
+ code: EdgeInsertActionFilterContextResolutionCode;
40
+ context: EdgeInsertActionFilterContext | null;
41
+ }
42
+ export interface ResolveEdgeInsertActionFilterContextInput {
43
+ edgeContext: EdgeInsertEndpointContext;
44
+ nodes: readonly Node[];
45
+ edges: readonly Edge[];
46
+ replacedEdgeId?: string;
47
+ }
48
+ /**
49
+ * 对边中插入动作执行 source→candidate 与 candidate→target 的本地求交。
50
+ *
51
+ * 后端明确禁止同时携带 source/target 端点,因此 target 侧使用动作响应中的完整
52
+ * NodeSchema 在前端二次过滤。
53
+ */
54
+ export declare function filterEdgeInsertActions(actions: readonly ActionItem[], context: EdgeInsertActionFilterContext | null): EdgeInsertActionFilterResult;
55
+ /** 从当前 ReactFlow 快照解析候选过滤所需的原边两端。 */
56
+ export declare function resolveEdgeInsertActionFilterContext({ edgeContext, nodes, edges, replacedEdgeId, }: ResolveEdgeInsertActionFilterContextInput): EdgeInsertActionFilterContextResolution;
57
+ /** 对 connectable 连接器分页中的所有 matchedActions 执行双侧求交并汇总统计。 */
58
+ export declare function filterEdgeInsertNodePage(page: NodeFetchResult, context: EdgeInsertActionFilterContext | null): {
59
+ page: NodeFetchResult;
60
+ stats: EdgeInsertActionFilterStats;
61
+ };
62
+ export {};
@@ -0,0 +1,26 @@
1
+ import { ConnectableQueryContext } from './connectableQuery';
2
+ interface EdgeInsertInfo {
3
+ source?: string | number;
4
+ target?: string | number;
5
+ sourceHandle?: string | null;
6
+ sourceHandleId?: string | null;
7
+ targetHandle?: string | null;
8
+ targetHandleId?: string | null;
9
+ }
10
+ export interface NodeAddContextInput {
11
+ sourceNodeId?: string;
12
+ sourceHandle?: string;
13
+ targetNodeId?: string;
14
+ targetHandle?: string;
15
+ edge?: EdgeInsertInfo | null;
16
+ position?: {
17
+ x: number;
18
+ y: number;
19
+ };
20
+ trigger?: boolean;
21
+ }
22
+ /**
23
+ * 将画布面板上下文收敛为 connectable 查询的四种前端模式。
24
+ */
25
+ export declare const resolveConnectableQueryContext: (info: NodeAddContextInput | null | undefined) => ConnectableQueryContext | null;
26
+ export {};
@@ -0,0 +1,75 @@
1
+ /**
2
+ * ACM 的 Long ID 在 JSON 响应中序列化为字符串,19 位雪花 ID 不能转成 JS number。
3
+ * 请求侧保留字符串可避免精度损失;Jackson 可将纯数字字符串反序列化为 Long。
4
+ */
5
+ export type ConnectablePersistedNodeId = string | number;
6
+ /**
7
+ * 可连线节点包查询的公共筛选条件。
8
+ *
9
+ * `mode` 是前端判别字段,API 方法发送请求前会将它移除。
10
+ */
11
+ export interface ConnectableNodePackageQueryBase {
12
+ scene: string;
13
+ trigger: boolean;
14
+ categoryName?: string;
15
+ linkId?: string;
16
+ keyword?: string;
17
+ page?: number;
18
+ size?: number;
19
+ }
20
+ export interface IndependentConnectableNodePackageQuery extends ConnectableNodePackageQueryBase {
21
+ mode: 'independent';
22
+ sourceId?: never;
23
+ sourceHandle?: never;
24
+ targetId?: never;
25
+ targetHandle?: never;
26
+ }
27
+ export interface SourceConnectableNodePackageQuery extends ConnectableNodePackageQueryBase {
28
+ mode: 'source';
29
+ sourceId: ConnectablePersistedNodeId;
30
+ sourceHandle: string;
31
+ targetId?: never;
32
+ targetHandle?: never;
33
+ }
34
+ export interface TargetConnectableNodePackageQuery extends ConnectableNodePackageQueryBase {
35
+ mode: 'target';
36
+ targetId: ConnectablePersistedNodeId;
37
+ targetHandle: string;
38
+ sourceId?: never;
39
+ sourceHandle?: never;
40
+ }
41
+ /**
42
+ * 前端使用的强类型 QueryConnectableNodePackageDto。
43
+ *
44
+ * 判别联合在编译期排除 source/target 半组参数以及两组参数同时出现的情况。
45
+ */
46
+ export type QueryConnectableNodePackageDto = IndependentConnectableNodePackageQuery | SourceConnectableNodePackageQuery | TargetConnectableNodePackageQuery;
47
+ interface ConnectableNodePackageRequestBase {
48
+ scene: string;
49
+ trigger: boolean;
50
+ category_name?: string;
51
+ link_id?: string;
52
+ keyword?: string;
53
+ page?: number;
54
+ size?: number;
55
+ }
56
+ /** 实际发送给 ACM SNAKE_CASE ObjectMapper 的 wire DTO。 */
57
+ export type QueryConnectableNodePackageRequestBody = (ConnectableNodePackageRequestBase & {
58
+ source_id?: never;
59
+ source_handle?: never;
60
+ target_id?: never;
61
+ target_handle?: never;
62
+ }) | (ConnectableNodePackageRequestBase & {
63
+ source_id: ConnectablePersistedNodeId;
64
+ source_handle: string;
65
+ target_id?: never;
66
+ target_handle?: never;
67
+ }) | (ConnectableNodePackageRequestBase & {
68
+ target_id: ConnectablePersistedNodeId;
69
+ target_handle: string;
70
+ source_id?: never;
71
+ source_handle?: never;
72
+ });
73
+ /** 移除只在前端使用的判别字段,避免污染后端请求体。 */
74
+ export declare const toConnectableNodePackageRequestBody: (query: QueryConnectableNodePackageDto) => QueryConnectableNodePackageRequestBody;
75
+ export {};
@@ -299,11 +299,13 @@ export interface DipWorkflowDefinition {
299
299
  * | `BOOLEAN` | 布尔开关 | Switch |
300
300
  * | `SELECT` | 下拉选择 | Select |
301
301
  * | `DATETIME` | 日期时间 | DatePicker |
302
+ * | `CODE` | 代码/JSON 文本 | 工作流代码编辑器 |
303
+ * | `PROXY` | 代理网关 | 工作流代理网关选择器 |
302
304
  * | `OBJECT` | 嵌套对象 | 递归渲染子字段 |
303
305
  * | `ARRAY` / `DYNAMIC_ARRAY` | 数组/列表 | 动态增减表单项 |
304
306
  * | `KEYVALUE` | 键值对列表 | Key-Value 编辑器 |
305
307
  */
306
- export type DipFieldType = 'STRING' | 'TEXTAREA' | 'PASSWORD' | 'HIDDEN' | 'NUMBER' | 'BOOLEAN' | 'SELECT' | 'DATETIME' | 'OBJECT' | 'ARRAY' | 'DYNAMIC_ARRAY' | 'KEYVALUE';
308
+ export type DipFieldType = 'STRING' | 'TEXTAREA' | 'PASSWORD' | 'HIDDEN' | 'NUMBER' | 'BOOLEAN' | 'SELECT' | 'DATETIME' | 'CODE' | 'PROXY' | 'OBJECT' | 'ARRAY' | 'DYNAMIC_ARRAY' | 'KEYVALUE';
307
309
  /**
308
310
  * 数组元素类型
309
311
  *
@@ -322,6 +324,14 @@ export type DipItemType = 'STRING' | 'NUMBER' | 'BOOLEAN' | 'OBJECT';
322
324
  * - `'DATETIME'` — 同时选择日期和时间
323
325
  */
324
326
  export type DipPickerMode = 'DATE' | 'TIME' | 'DATETIME';
327
+ /**
328
+ * 字段值输入策略
329
+ *
330
+ * - `'TEXT'` — 仅文本模式
331
+ * - `'EXPRESSION'` — 仅表达式模式
332
+ * - `'BOTH'` — 文本和表达式模式均可用
333
+ */
334
+ export type DipValueModePolicy = 'TEXT' | 'EXPRESSION' | 'BOTH';
325
335
  /**
326
336
  * 下拉选项
327
337
  *
@@ -443,8 +453,8 @@ export interface DipFieldSchema {
443
453
  picker_mode?: DipPickerMode;
444
454
  /** 条件显示规则,满足条件时字段才可见 */
445
455
  visible_when?: VisibleWhen;
446
- /** 是否支持变量插值(如 `{{node1.output.field}}`) */
447
- supports_variables?: boolean;
456
+ /** 文本/表达式输入策略(后端 snake_case 字段) */
457
+ value_mode_policy?: DipValueModePolicy;
448
458
  /** 字段值校验规则 */
449
459
  validation?: DipFieldValidation;
450
460
  }
@@ -465,6 +475,36 @@ export interface DipPortSchema {
465
475
  name: string;
466
476
  /** UI 显示名称,如 "输入"、"True 分支"、"默认输出" */
467
477
  displayName?: string;
478
+ /** ACM SNAKE_CASE 传输字段;消费前由 normalizePortSchema 归一化 */
479
+ display_name?: string;
480
+ /**
481
+ * 端口连接能力类型,缺失或空字符串时按 `main` 处理。
482
+ *
483
+ * 常见值:`main`、`trigger`、`control`、`ai_model`、`ai_tool`、`ai_memory`。
484
+ */
485
+ type?: string;
486
+ /** 输入端口是否必须存在至少一条连线 */
487
+ required?: boolean;
488
+ /** 端口允许的最大连线数,`null` 或缺失表示不限制 */
489
+ maxConnections?: number | null;
490
+ /** ACM SNAKE_CASE 传输字段 */
491
+ max_connections?: number | null;
492
+ /** 输入端口允许连接的源节点 schema key 白名单,空列表表示不限制 */
493
+ allowedSourceNodeKeys?: string[];
494
+ /** ACM SNAKE_CASE 传输字段 */
495
+ allowed_source_node_keys?: string[];
496
+ /** 输出端口允许连接的目标节点 schema key 白名单,空列表表示不限制 */
497
+ allowedTargetNodeKeys?: string[];
498
+ /** ACM SNAKE_CASE 传输字段 */
499
+ allowed_target_node_keys?: string[];
500
+ /** 输入端口禁止连接的源节点 schema key 黑名单 */
501
+ deniedSourceNodeKeys?: string[];
502
+ /** ACM SNAKE_CASE 传输字段 */
503
+ denied_source_node_keys?: string[];
504
+ /** 输出端口禁止连接的目标节点 schema key 黑名单 */
505
+ deniedTargetNodeKeys?: string[];
506
+ /** ACM SNAKE_CASE 传输字段 */
507
+ denied_target_node_keys?: string[];
468
508
  }
469
509
  /**
470
510
  * 节点输出字段 Schema
@@ -1,6 +1,9 @@
1
+ import { QueryConnectableNodePackageDto } from './connectable.types';
1
2
  import { DipNodeSchema } from './dip.types';
2
3
  import { LinkSearchParams, LinkSearchResponse } from '../Panels/ModernNodeSelectorPanel/types';
4
+ import { FlowDraftPayload, FlowVersionDetailVO, FlowVersionPage, FlowVersionPublishRequest, FlowVersionStatusVO, FlowVersionVO } from '../types/flowVersion';
3
5
  import { AxiosRequestConfig } from 'axios';
6
+ export type { ConnectableNodePackageQueryBase, ConnectablePersistedNodeId, IndependentConnectableNodePackageQuery, QueryConnectableNodePackageDto, QueryConnectableNodePackageRequestBody, SourceConnectableNodePackageQuery, TargetConnectableNodePackageQuery, } from './connectable.types';
4
7
  export interface WorkflowRequestOptions {
5
8
  method?: AxiosRequestConfig['method'];
6
9
  headers?: Record<string, string>;
@@ -13,6 +16,8 @@ export interface WorkflowApiEndpoints {
13
16
  nodeCategory: string;
14
17
  nodesList: string;
15
18
  searchLinks: string;
19
+ connectableNodePackageCategories: string;
20
+ connectableNodePackagePlugins: string;
16
21
  actions: string;
17
22
  actionNodeSchema: string;
18
23
  createNode: string;
@@ -59,6 +64,12 @@ export interface WorkflowApiEndpoints {
59
64
  templateTagRelation: string;
60
65
  getAppList: string;
61
66
  subFlowList: string;
67
+ flowVersionPublish: string;
68
+ flowVersionList: string;
69
+ flowVersionDetail: string;
70
+ flowVersionRollback: string;
71
+ flowVersionLoadDraft: string;
72
+ flowVersionStatus: string;
62
73
  }
63
74
  export interface WorkflowApiConfig {
64
75
  endpoints: WorkflowApiEndpoints;
@@ -78,6 +89,8 @@ export declare function apiGetNodesList(params: {
78
89
  name?: string;
79
90
  }): Promise<unknown>;
80
91
  export declare function apiSearchLinks(params: LinkSearchParams): Promise<LinkSearchResponse>;
92
+ export declare function apiQueryConnectableNodePackageCategories(query: QueryConnectableNodePackageDto): Promise<unknown>;
93
+ export declare function apiQueryConnectableNodePackagePlugins(query: QueryConnectableNodePackageDto): Promise<unknown>;
81
94
  export declare const apiGetActions: (params: {
82
95
  linkId?: string;
83
96
  name?: string;
@@ -196,7 +209,21 @@ export declare function apiRemoveEdges(flowId: string, edges: string[]): Promise
196
209
  export declare function apiGetSelectOptions(type: string): Promise<unknown>;
197
210
  export declare function updateFlowOpStatus(paramsId: any, opStatus: any): Promise<unknown>;
198
211
  export declare function onlineFlow(id: any): Promise<unknown>;
212
+ /** 发布当前草稿为新的生效版本。 */
213
+ export declare function apiPublishFlowVersion(flowId: string, data: FlowVersionPublishRequest): Promise<FlowVersionVO>;
214
+ /** 查询发布版本历史。 */
215
+ export declare function apiGetFlowVersions(flowId: string, params?: {
216
+ page: number;
217
+ size: number;
218
+ }): Promise<FlowVersionPage>;
219
+ /** 查询历史版本详情。 */
220
+ export declare function apiGetFlowVersionDetail(flowId: string, versionFlowId: string): Promise<FlowVersionDetailVO>;
221
+ /** 将线上生效版本切换到指定历史版本。 */
222
+ export declare function apiRollbackFlowVersion(flowId: string, versionFlowId: string): Promise<FlowVersionVO>;
223
+ /** 使用指定历史版本覆盖唯一草稿。 */
224
+ export declare function apiLoadFlowVersionAsDraft(flowId: string, versionFlowId: string): Promise<FlowDraftPayload>;
225
+ /** 查询草稿与线上生效版本的关系。 */
226
+ export declare function apiGetFlowVersionStatus(flowId: string): Promise<FlowVersionStatusVO>;
199
227
  export declare const apiGetAccountInstanceV2: (linkId?: string | null, actionAccountSchemaId?: string | number) => Promise<unknown>;
200
228
  export declare const getAppList: (params: any, formData?: any) => Promise<unknown>;
201
229
  export declare const fetchSubFlowList: (name: any, formData?: any) => Promise<unknown>;
202
- export {};
@@ -0,0 +1,9 @@
1
+ /** 未显式接入的宿主默认关闭可连线节点包能力。 */
2
+ export declare const defaultNodeSelectorConfig: {
3
+ readonly connectable: {
4
+ readonly enabled: false;
5
+ readonly scene: "normal";
6
+ readonly fallbackToLegacy: true;
7
+ readonly debug: false;
8
+ };
9
+ };
@@ -1,16 +1,6 @@
1
1
  import { NodeTypeItem } from '../Panels/ModernNodeSelectorPanel/types';
2
- export interface NodeAddInfo {
3
- sourceNodeId?: string;
4
- sourceHandle?: string;
5
- targetNodeId?: string;
6
- targetHandle?: string;
7
- position: {
8
- x: number;
9
- y: number;
10
- };
11
- trigger?: boolean;
12
- edge?: any;
13
- }
2
+ import { NodeAddInfo } from '../types/NodeAddContext';
3
+ export type { NodeAddInfo } from '../types/NodeAddContext';
14
4
  export type NodeAddEvent = {
15
5
  info: NodeAddInfo;
16
6
  nodeType: NodeTypeItem;