@nocobase/plugin-ai 2.2.0-alpha.4 → 2.2.0-alpha.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.
Files changed (383) hide show
  1. package/client-v2.d.ts +1 -0
  2. package/dist/ai/docs/nocobase/api/app/env.md +28 -1
  3. package/dist/ai/docs/nocobase/api/cli/config/delete.md +8 -6
  4. package/dist/ai/docs/nocobase/api/cli/config/get.md +8 -6
  5. package/dist/ai/docs/nocobase/api/cli/config/index.md +37 -26
  6. package/dist/ai/docs/nocobase/api/cli/config/set.md +14 -8
  7. package/dist/ai/docs/nocobase/file-manager/field-attachment.md +6 -0
  8. package/dist/ai/docs/nocobase/file-manager/file-preview/index.md +3 -12
  9. package/dist/ai/docs/nocobase/file-manager/storage/aliyun-oss.md +9 -0
  10. package/dist/ai/docs/nocobase/file-manager/storage/amazon-s3.md +9 -0
  11. package/dist/ai/docs/nocobase/file-manager/storage/index.md +23 -0
  12. package/dist/ai/docs/nocobase/file-manager/storage/local.md +9 -0
  13. package/dist/ai/docs/nocobase/file-manager/storage/migrate-to-s3-pro.md +269 -0
  14. package/dist/ai/docs/nocobase/file-manager/storage/tencent-cos.md +9 -0
  15. package/dist/ai/docs/nocobase/get-started/installation/docker-caddy.mdx +175 -0
  16. package/dist/ai/docs/nocobase/get-started/installation/docker-nginx.mdx +176 -0
  17. package/dist/ai/docs/nocobase/get-started/installation/docker.mdx +94 -1
  18. package/dist/ai/docs/nocobase/get-started/installation/env.md +14 -4
  19. package/dist/ai/docs/nocobase/interface-builder/blocks/data-blocks/comment.md +107 -0
  20. package/dist/ai/docs/nocobase/plugins/@nocobase/plugin-block-comment/index.md +14 -0
  21. package/dist/ai/docs/nocobase/workflow/development/api.md +259 -77
  22. package/dist/ai/docs/nocobase/workflow/development/index.md +2 -1
  23. package/dist/ai/docs/nocobase/workflow/development/migration.md +319 -0
  24. package/dist/ai/docs/nocobase/workflow/development/node.md +84 -51
  25. package/dist/ai/docs/nocobase/workflow/development/trigger.md +122 -20
  26. package/dist/client/23.65ea8c37cd4b884b.js +10 -0
  27. package/dist/client/264.cc98933ef65608b6.js +10 -0
  28. package/dist/client/336.7a8a8853196ad779.js +11 -0
  29. package/dist/client/372.da38fe350bf841f4.js +10 -0
  30. package/dist/client/416.92b74ca47e4099c4.js +10 -0
  31. package/dist/client/446.d63c38d0309fe250.js +10 -0
  32. package/dist/client/525.203778500aca5d05.js +10 -0
  33. package/dist/client/663.680bcf6272a8504d.js +10 -0
  34. package/dist/client/681.399948c18d753667.js +10 -0
  35. package/dist/client/705.380279da896021fb.js +10 -0
  36. package/dist/client/ai-employees/1.x/selector/AIContextCollector.d.ts +1 -4
  37. package/dist/client/ai-employees/permissions/PermissionsTab.d.ts +21 -5
  38. package/dist/client/index.d.ts +15 -20
  39. package/dist/client/index.js +8 -8
  40. package/dist/client/workflow/nodes/employee/index.d.ts +2 -23
  41. package/dist/client/workflow/nodes/llm/index.d.ts +2 -52
  42. package/dist/client/workflow/triggers/ai-employee/index.d.ts +2 -83
  43. package/dist/client-v2/23.1bcb6986b40723d8.js +10 -0
  44. package/dist/client-v2/264.be92ff6a4d2612f1.js +10 -0
  45. package/dist/client-v2/336.e406470429e0670e.js +11 -0
  46. package/dist/client-v2/372.d76ea1ceed2be2a4.js +10 -0
  47. package/dist/client-v2/406.341be51205c674e0.js +10 -0
  48. package/dist/client-v2/416.0e1c2d9cde43b83d.js +10 -0
  49. package/dist/client-v2/446.073d450882db29fd.js +10 -0
  50. package/dist/client-v2/457.d72febb89e88fc00.js +10 -0
  51. package/dist/client-v2/663.342341f0b2b412d8.js +10 -0
  52. package/dist/client-v2/681.082f4f1c7b841983.js +10 -0
  53. package/dist/client-v2/705.1d10027ff8cfdf79.js +10 -0
  54. package/dist/{client/ai-employees/admin/AvatarSelect.d.ts → client-v2/ai-employees/AIEmployeeDropdown.d.ts} +8 -9
  55. package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +9 -2
  56. package/dist/{client → client-v2}/ai-employees/AddContextButton.d.ts +1 -1
  57. package/dist/{client → client-v2}/ai-employees/ai-coding/AICodingButton.d.ts +2 -1
  58. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Actions.d.ts +2 -4
  59. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/AddLLMModal.d.ts +2 -4
  60. package/dist/client-v2/ai-employees/chatbox/components/Attachments.d.ts +27 -0
  61. package/dist/{client/ai-employees/permissions/Permissions.d.ts → client-v2/ai-employees/chatbox/components/ChatBox.d.ts} +2 -2
  62. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatBoxLayout.d.ts +1 -1
  63. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ContextItem.d.ts +1 -1
  64. package/dist/{client/ai-employees/admin/Employees.d.ts → client-v2/ai-employees/chatbox/components/DebugPanel.d.ts} +1 -1
  65. package/dist/{client/ai-employees/chatbox/markdown/Code.d.ts → client-v2/ai-employees/chatbox/components/Markdown.d.ts} +12 -5
  66. package/dist/{client/ai-employees/admin/ProfileSettings.d.ts → client-v2/ai-employees/chatbox/components/MessageContent.d.ts} +3 -2
  67. package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +39 -0
  68. package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolCard.d.ts +7 -5
  69. package/dist/{client/ai-employees/admin/datasource/components/basic → client-v2/ai-employees/chatbox/components}/index.d.ts +5 -2
  70. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChat.d.ts +21 -22
  71. package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +3 -2
  72. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +2 -2
  73. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +8 -4
  74. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useToolCallActions.d.ts +1 -1
  75. package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +46 -0
  76. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +1 -1
  77. package/dist/{client → client-v2}/ai-employees/chatbox/model.d.ts +9 -2
  78. package/dist/client-v2/ai-employees/chatbox/roles.d.ts +162 -0
  79. package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +1 -49
  80. package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +2 -19
  81. package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +1 -46
  82. package/dist/{client → client-v2}/ai-employees/chatbox/stores/chat-tool-call.d.ts +1 -15
  83. package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +30 -0
  84. package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +31 -3
  85. package/dist/{client/ai-employees/chatbox/conversations/common.d.ts → client-v2/ai-employees/chatbox/stores/workflow-tasks.d.ts} +21 -4
  86. package/dist/{client → client-v2}/ai-employees/chatbox/utils.d.ts +21 -6
  87. package/dist/{client/ai-employees/data-visualization/context.d.ts → client-v2/ai-employees/context/chart-config.d.ts} +1 -1
  88. package/dist/{client → client-v2}/ai-employees/context/code-editor.d.ts +1 -1
  89. package/dist/{client → client-v2}/ai-employees/context/datasource.d.ts +1 -1
  90. package/dist/{client → client-v2}/ai-employees/context/flow-models.d.ts +1 -1
  91. package/dist/{client/ai-employees/admin/datasource/components/DatasourceSettingDetail.d.ts → client-v2/ai-employees/data-modeling/setup.d.ts} +6 -5
  92. package/dist/{client → client-v2}/ai-employees/datasource/DatasourceSelector.d.ts +6 -2
  93. package/dist/{client/ai-employees/admin/datasource/flow-models/DatasourceSettingModel.d.ts → client-v2/ai-employees/flow/index.d.ts} +4 -6
  94. package/dist/{client → client-v2}/ai-employees/form-filler/tools/index.d.ts +1 -1
  95. package/dist/{client → client-v2}/ai-employees/stores/ai-selection.d.ts +4 -4
  96. package/dist/{client → client-v2}/ai-employees/stores/dialog-controller.d.ts +4 -4
  97. package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportCard.d.ts +2 -2
  98. package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportModal.d.ts +2 -2
  99. package/dist/{client/ai-employees/1.x/selector/withAISelectable.d.ts → client-v2/ai-employees/tools/ChartGeneratorCard.d.ts} +5 -4
  100. package/dist/{client/ai-employees/ai-coding/ui → client-v2/ai-employees/tools}/CodeToolCard.d.ts +1 -1
  101. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingCard.d.ts +3 -5
  102. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingModal.d.ts +4 -6
  103. package/dist/{client/ai-employees/sub-agents/ui → client-v2/ai-employees/tools}/SubAgentDispatchCard.d.ts +4 -9
  104. package/dist/{client/ai-employees/AISettingsProvider.d.ts → client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts} +6 -8
  105. package/dist/{client/ai-employees/workflow-tasks/ui → client-v2/ai-employees/tools}/WorkflowTaskOutputCard.d.ts +7 -2
  106. package/dist/{client/ai-employees/ai-coding/tools/context-tools.d.ts → client-v2/ai-employees/tools/ai-coding.d.ts} +3 -1
  107. package/dist/client-v2/ai-employees/tools/business-report-utils.d.ts +45 -0
  108. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/CollectionNode.d.ts +2 -3
  109. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Diagram.d.ts +1 -1
  110. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Table.d.ts +2 -2
  111. package/dist/client-v2/ai-employees/tools/data-modeling/legacy-template.d.ts +13 -0
  112. package/dist/client-v2/ai-employees/tools/data-modeling/runtime.d.ts +15 -0
  113. package/dist/{client/ai-employees → client-v2/ai-employees/tools}/data-modeling/types.d.ts +27 -4
  114. package/dist/client-v2/ai-employees/tools/data-modeling/useFieldInterfaceOptions.d.ts +150 -0
  115. package/dist/{client/ai-employees/data-visualization/tools/index.d.ts → client-v2/ai-employees/tools/data-visualization.d.ts} +1 -1
  116. package/dist/client-v2/ai-employees/tools/index.d.ts +32 -0
  117. package/dist/client-v2/ai-employees/types.d.ts +101 -7
  118. package/dist/client-v2/components/RemoteSelect.d.ts +43 -0
  119. package/dist/{client → client-v2}/debug-logger.d.ts +2 -2
  120. package/dist/client-v2/f0053e745af0ad03.svg +50 -0
  121. package/dist/client-v2/index.d.ts +9 -8
  122. package/dist/client-v2/index.js +37 -1
  123. package/dist/client-v2/llm-providers/forms.d.ts +42 -0
  124. package/dist/client-v2/llm-providers/index.d.ts +23 -0
  125. package/dist/{client/ai-employees/ai-coding/tools/index.d.ts → client-v2/llm-services/utils.d.ts} +5 -3
  126. package/dist/client-v2/locale.d.ts +14 -0
  127. package/dist/{client → client-v2}/manager/ai-manager.d.ts +4 -5
  128. package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +33 -0
  129. package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +44 -0
  130. package/dist/client-v2/pages/AdminSettingsPage.d.ts +24 -0
  131. package/dist/client-v2/pages/DatasourceSettingsPage.d.ts +62 -0
  132. package/dist/client-v2/pages/EmployeesPage.d.ts +53 -0
  133. package/dist/client-v2/pages/LLMServicesPage.d.ts +75 -0
  134. package/dist/client-v2/pages/MCPSettingsPage.d.ts +73 -0
  135. package/dist/client-v2/pages/drawerWidth.d.ts +10 -0
  136. package/dist/client-v2/pages/permissions/Permissions.d.ts +67 -0
  137. package/dist/client-v2/pages/permissions/PermissionsTab.d.ts +12 -0
  138. package/dist/client-v2/pages/useUnsavedChangesBeforeClose.d.ts +29 -0
  139. package/dist/client-v2/plugin.d.ts +32 -0
  140. package/dist/client-v2/repositories/AIConfigRepository.d.ts +3 -23
  141. package/dist/client-v2/workflow/components/FormValueRegistry.d.ts +12 -0
  142. package/dist/{client/components/ListCollapse.d.ts → client-v2/workflow/components/WorkflowListCollapse.d.ts} +4 -4
  143. package/dist/client-v2/workflow/constants.d.ts +26 -0
  144. package/dist/client-v2/workflow/nodes/employee/components/AIEmployeeFieldset.d.ts +11 -0
  145. package/dist/{client/ai-employees/common/CodeHighlight.d.ts → client-v2/workflow/nodes/employee/components/AIEmployeeSelect.d.ts} +5 -6
  146. package/dist/{client/ai-employees/ContextAwareTooltip.d.ts → client-v2/workflow/nodes/employee/components/Assignees.d.ts} +2 -1
  147. package/dist/client-v2/workflow/nodes/employee/components/FeedbackSettings.d.ts +17 -0
  148. package/dist/client-v2/workflow/nodes/employee/components/FileInputs.d.ts +11 -0
  149. package/dist/{client/ai-employees/AIEmployeesProvider.d.ts → client-v2/workflow/nodes/employee/components/MessageInputs.d.ts} +2 -3
  150. package/dist/client-v2/workflow/nodes/employee/components/ModelOptions.d.ts +17 -0
  151. package/dist/{client/ai-employees/admin/datasource/components/basic/CollectionCascader.d.ts → client-v2/workflow/nodes/employee/components/SkillSettings.d.ts} +6 -3
  152. package/dist/client-v2/workflow/nodes/employee/components/StructuredOutput.d.ts +11 -0
  153. package/dist/client-v2/workflow/nodes/employee/components/UserInput.d.ts +18 -0
  154. package/dist/client-v2/workflow/nodes/employee/components/WebSearchOptions.d.ts +16 -0
  155. package/dist/client-v2/workflow/nodes/employee/index.d.ts +23 -0
  156. package/dist/{client/ai-employees/AIEmployeeListItem.d.ts → client-v2/workflow/nodes/llm/components/LLMFieldset.d.ts} +3 -5
  157. package/dist/{client/admin-settings/AdminSettings.d.ts → client-v2/workflow/nodes/llm/components/Messages.d.ts} +2 -1
  158. package/dist/client-v2/workflow/nodes/llm/components/StructuredOutput.d.ts +11 -0
  159. package/dist/client-v2/workflow/nodes/llm/index.d.ts +30 -0
  160. package/dist/{client/ai-employees/1.x/selector/BlockSelector.d.ts → client-v2/workflow/register.d.ts} +2 -6
  161. package/dist/client-v2/workflow/triggers/ai-employee/AIEmployeeTriggerConfig.d.ts +11 -0
  162. package/dist/client-v2/workflow/triggers/ai-employee/Parameters.d.ts +11 -0
  163. package/dist/client-v2/workflow/triggers/ai-employee/index.d.ts +25 -0
  164. package/dist/client-v2/workflow/types.d.ts +128 -0
  165. package/dist/externalVersion.js +20 -25
  166. package/dist/locale/en-US.json +41 -1
  167. package/dist/locale/zh-CN.json +41 -1
  168. package/dist/node_modules/@langchain/mistralai/package.json +1 -1
  169. package/dist/node_modules/@langchain/xai/package.json +1 -1
  170. package/dist/node_modules/fs-extra/package.json +1 -1
  171. package/dist/node_modules/jsonrepair/package.json +1 -1
  172. package/dist/node_modules/just-bash/package.json +1 -1
  173. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  174. package/dist/node_modules/openai/package.json +1 -1
  175. package/dist/node_modules/zod/package.json +1 -1
  176. package/dist/server/ai-employees/ai-employee.js +5 -0
  177. package/dist/server/ai-employees/checkpoints/cleaner.d.ts +2 -0
  178. package/dist/server/ai-employees/checkpoints/cleaner.js +11 -1
  179. package/dist/server/workflow/nodes/employee/index.js +1 -1
  180. package/dist/server/workflow/nodes/employee/tools.js +8 -1
  181. package/package.json +5 -5
  182. package/dist/client/119.c6bf8c6433167d81.js +0 -10
  183. package/dist/client/170.d98eacdc00d9d527.js +0 -10
  184. package/dist/client/228.b4b709f93b86b6b9.js +0 -10
  185. package/dist/client/280.003b9e9788599244.js +0 -10
  186. package/dist/client/290.0f7f441d8a94f03c.js +0 -10
  187. package/dist/client/331.d547c95410476a69.js +0 -10
  188. package/dist/client/406.15c09d98faa2ccf1.js +0 -10
  189. package/dist/client/428.5eb4f53ddbb6a3b8.js +0 -10
  190. package/dist/client/462.d172d0fe91519e35.js +0 -10
  191. package/dist/client/486.dcac8f3fcec19c33.js +0 -10
  192. package/dist/client/502.2b4a51e0a8122e52.js +0 -10
  193. package/dist/client/525.33a9c8ec28be4ec4.js +0 -10
  194. package/dist/client/559.9f97ebcdb0bd6231.js +0 -10
  195. package/dist/client/561.7ec804ef39ec7dcd.js +0 -10
  196. package/dist/client/580.35ba54ff91b7fe6d.js +0 -10
  197. package/dist/client/597.b0d64948d74cf6cb.js +0 -10
  198. package/dist/client/604.89c674f35b52b4ef.js +0 -10
  199. package/dist/client/614.aa766080f6b99aab.js +0 -10
  200. package/dist/client/646.d4483b4ff23da0a0.js +0 -10
  201. package/dist/client/687.224e569a99cae4bb.js +0 -10
  202. package/dist/client/699.57c0a1acb723202a.js +0 -10
  203. package/dist/client/711.92cd94681fde7e05.js +0 -10
  204. package/dist/client/758.a9741e81911e53c3.js +0 -10
  205. package/dist/client/768.5177bff46ae71a5b.js +0 -10
  206. package/dist/client/792.abb57765453bcbcc.js +0 -10
  207. package/dist/client/820.f72ef2462b61d812.js +0 -10
  208. package/dist/client/832.0cf69e3f43c320b2.js +0 -10
  209. package/dist/client/927.d95c74ebb8fd51c9.js +0 -10
  210. package/dist/client/ai-employees/1.x/selector/AISelectorProvider.d.ts +0 -33
  211. package/dist/client/ai-employees/ProfileCard.d.ts +0 -15
  212. package/dist/client/ai-employees/admin/ChatSettings.d.ts +0 -10
  213. package/dist/client/ai-employees/admin/DataSourceSettings.d.ts +0 -10
  214. package/dist/client/ai-employees/admin/EnableSwitch.d.ts +0 -10
  215. package/dist/client/ai-employees/admin/InputsFormSettings.d.ts +0 -10
  216. package/dist/client/ai-employees/admin/KnowledgeBaseSettings.d.ts +0 -10
  217. package/dist/client/ai-employees/admin/ModelSettings.d.ts +0 -10
  218. package/dist/client/ai-employees/admin/SkillSettings.d.ts +0 -19
  219. package/dist/client/ai-employees/admin/SystemPrompt.d.ts +0 -10
  220. package/dist/client/ai-employees/admin/Templates.d.ts +0 -10
  221. package/dist/client/ai-employees/admin/ToolsSettings.d.ts +0 -17
  222. package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingForm.d.ts +0 -10
  223. package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingGrid.d.ts +0 -10
  224. package/dist/client/ai-employees/admin/datasource/components/basic/FieldsTransfer.d.ts +0 -17
  225. package/dist/client/ai-employees/admin/datasource/components/form-steps/CollectionSetting.d.ts +0 -17
  226. package/dist/client/ai-employees/admin/datasource/components/form-steps/FieldsSetting.d.ts +0 -15
  227. package/dist/client/ai-employees/admin/datasource/components/form-steps/FilterSetting.d.ts +0 -17
  228. package/dist/client/ai-employees/admin/datasource/components/form-steps/Preview.d.ts +0 -13
  229. package/dist/client/ai-employees/admin/datasource/components/form-steps/SortSetting.d.ts +0 -15
  230. package/dist/client/ai-employees/admin/datasource/components/form-steps/index.d.ts +0 -13
  231. package/dist/client/ai-employees/admin/datasource/components/index.d.ts +0 -9
  232. package/dist/client/ai-employees/admin/datasource/context.d.ts +0 -17
  233. package/dist/client/ai-employees/admin/datasource/flow-models/index.d.ts +0 -9
  234. package/dist/client/ai-employees/admin/datasource/index.d.ts +0 -10
  235. package/dist/client/ai-employees/admin/hooks.d.ts +0 -39
  236. package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +0 -10
  237. package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +0 -19
  238. package/dist/client/ai-employees/admin/mcp/context.d.ts +0 -15
  239. package/dist/client/ai-employees/admin/mcp/schemas.d.ts +0 -1314
  240. package/dist/client/ai-employees/ai-coding/CodeHistory.d.ts +0 -10
  241. package/dist/client/ai-employees/ai-coding/markdown/Code.d.ts +0 -16
  242. package/dist/client/ai-employees/avatars.d.ts +0 -9
  243. package/dist/client/ai-employees/built-in/utils.d.ts +0 -15
  244. package/dist/client/ai-employees/business-report/tools/index.d.ts +0 -10
  245. package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +0 -38
  246. package/dist/client/ai-employees/chart-generator/tools/index.d.ts +0 -10
  247. package/dist/client/ai-employees/chart-generator/ui/ECharts.d.ts +0 -13
  248. package/dist/client/ai-employees/chatbox/AIThinking.d.ts +0 -12
  249. package/dist/client/ai-employees/chatbox/Attachment.d.ts +0 -14
  250. package/dist/client/ai-employees/chatbox/AttachmentsHeader.d.ts +0 -10
  251. package/dist/client/ai-employees/chatbox/ChatBox.d.ts +0 -12
  252. package/dist/client/ai-employees/chatbox/ContextItemsHeader.d.ts +0 -10
  253. package/dist/client/ai-employees/chatbox/DebugPanel.d.ts +0 -16
  254. package/dist/client/ai-employees/chatbox/EditMessageHeader.d.ts +0 -10
  255. package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +0 -10
  256. package/dist/client/ai-employees/chatbox/MessageRenderer.d.ts +0 -33
  257. package/dist/client/ai-employees/chatbox/SenderFooter.d.ts +0 -13
  258. package/dist/client/ai-employees/chatbox/SenderHeader.d.ts +0 -10
  259. package/dist/client/ai-employees/chatbox/SenderPrefix.d.ts +0 -10
  260. package/dist/client/ai-employees/chatbox/Upload.d.ts +0 -12
  261. package/dist/client/ai-employees/chatbox/VirtualList.d.ts +0 -28
  262. package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +0 -13
  263. package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +0 -13
  264. package/dist/client/ai-employees/chatbox/conversations/index.d.ts +0 -9
  265. package/dist/client/ai-employees/chatbox/generative-ui/DefaultToolCard.d.ts +0 -16
  266. package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +0 -18
  267. package/dist/client/ai-employees/chatbox/hooks/useUploadFiles.d.ts +0 -12
  268. package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +0 -10
  269. package/dist/client/ai-employees/chatbox/markdown/Form.d.ts +0 -10
  270. package/dist/client/ai-employees/chatbox/markdown/Generating.d.ts +0 -10
  271. package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +0 -13
  272. package/dist/client/ai-employees/chatbox/roles.d.ts +0 -32
  273. package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +0 -9
  274. package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +0 -9
  275. package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +0 -9
  276. package/dist/client/ai-employees/chatbox/stores/chat-tools.d.ts +0 -51
  277. package/dist/client/ai-employees/chatbox/stores/create-selectors.d.ts +0 -18
  278. package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +0 -45
  279. package/dist/client/ai-employees/context/classic-pages.d.ts +0 -10
  280. package/dist/client/ai-employees/data-modeling/Table.d.ts +0 -12
  281. package/dist/client/ai-employees/data-modeling/setup.d.ts +0 -10
  282. package/dist/client/ai-employees/data-modeling/tools/index.d.ts +0 -10
  283. package/dist/client/ai-employees/data-modeling/ui/useFieldInterfaceOptions.d.ts +0 -14
  284. package/dist/client/ai-employees/datasource/DatasourceList.d.ts +0 -17
  285. package/dist/client/ai-employees/datasource/index.d.ts +0 -9
  286. package/dist/client/ai-employees/flow/events/index.d.ts +0 -9
  287. package/dist/client/ai-employees/flow/index.d.ts +0 -36
  288. package/dist/client/ai-employees/flow/models/AIEmployeeActionModel.d.ts +0 -18
  289. package/dist/client/ai-employees/flow/models/AIEmployeeShortcutModel.d.ts +0 -30
  290. package/dist/client/ai-employees/shortcuts/ShortcutList.d.ts +0 -10
  291. package/dist/client/ai-employees/shortcuts/useShortcuts.d.ts +0 -13
  292. package/dist/client/ai-employees/stores/context-aware.d.ts +0 -19
  293. package/dist/client/ai-employees/sub-agents/tools/index.d.ts +0 -10
  294. package/dist/client/ai-employees/suggestions/tools/index.d.ts +0 -10
  295. package/dist/client/ai-employees/suggestions/ui/SuggestionsOptions.d.ts +0 -13
  296. package/dist/client/ai-employees/types.d.ts +0 -259
  297. package/dist/client/ai-employees/workflow-tasks/tools/index.d.ts +0 -10
  298. package/dist/client/chat-settings/Messages.d.ts +0 -11
  299. package/dist/client/chat-settings/StructuredOutput.d.ts +0 -11
  300. package/dist/client/components/skill-settings.d.ts +0 -22
  301. package/dist/client/features/components.d.ts +0 -9
  302. package/dist/client/features/feature-manager.d.ts +0 -9
  303. package/dist/client/features/index.d.ts +0 -9
  304. package/dist/client/features/vector-database-provider.d.ts +0 -9
  305. package/dist/client/features/vector-store-provider.d.ts +0 -9
  306. package/dist/client/llm-providers/anthropic/ModelSettings.d.ts +0 -10
  307. package/dist/client/llm-providers/anthropic/ProviderSettings.d.ts +0 -10
  308. package/dist/client/llm-providers/anthropic/index.d.ts +0 -10
  309. package/dist/client/llm-providers/components/Chat.d.ts +0 -10
  310. package/dist/client/llm-providers/components/ModelSelect.d.ts +0 -10
  311. package/dist/client/llm-providers/dashscope/ModelSettings.d.ts +0 -10
  312. package/dist/client/llm-providers/dashscope/ProviderSettings.d.ts +0 -10
  313. package/dist/client/llm-providers/dashscope/index.d.ts +0 -10
  314. package/dist/client/llm-providers/deepseek/ModelSettings.d.ts +0 -10
  315. package/dist/client/llm-providers/deepseek/index.d.ts +0 -10
  316. package/dist/client/llm-providers/google-genai/MessageRenderer.d.ts +0 -13
  317. package/dist/client/llm-providers/google-genai/ModelSettings.d.ts +0 -10
  318. package/dist/client/llm-providers/google-genai/ProviderSettings.d.ts +0 -10
  319. package/dist/client/llm-providers/google-genai/index.d.ts +0 -10
  320. package/dist/client/llm-providers/kimi/ModelSettings.d.ts +0 -10
  321. package/dist/client/llm-providers/kimi/index.d.ts +0 -10
  322. package/dist/client/llm-providers/mimo/ModelSettings.d.ts +0 -10
  323. package/dist/client/llm-providers/mimo/index.d.ts +0 -10
  324. package/dist/client/llm-providers/mistral/ModelSettings.d.ts +0 -10
  325. package/dist/client/llm-providers/mistral/index.d.ts +0 -10
  326. package/dist/client/llm-providers/ollama/ModelSettings.d.ts +0 -10
  327. package/dist/client/llm-providers/ollama/ProviderSettings.d.ts +0 -10
  328. package/dist/client/llm-providers/ollama/index.d.ts +0 -10
  329. package/dist/client/llm-providers/openai/completions/ModelSettings.d.ts +0 -10
  330. package/dist/client/llm-providers/openai/completions/index.d.ts +0 -10
  331. package/dist/client/llm-providers/openai/components/ProviderSettings.d.ts +0 -10
  332. package/dist/client/llm-providers/openai/responses/ModelSettings.d.ts +0 -10
  333. package/dist/client/llm-providers/openai/responses/index.d.ts +0 -10
  334. package/dist/client/llm-providers/tongyi/ModelSettings.d.ts +0 -10
  335. package/dist/client/llm-providers/tongyi/ProviderSettings.d.ts +0 -10
  336. package/dist/client/llm-providers/tongyi/index.d.ts +0 -10
  337. package/dist/client/llm-providers/xai/ModelSettings.d.ts +0 -10
  338. package/dist/client/llm-providers/xai/index.d.ts +0 -10
  339. package/dist/client/llm-services/LLMServices.d.ts +0 -13
  340. package/dist/client/llm-services/component/DefaultModelSelect.d.ts +0 -10
  341. package/dist/client/llm-services/component/EnabledModelsSelect.d.ts +0 -23
  342. package/dist/client/llm-services/component/LLMTestFlight.d.ts +0 -10
  343. package/dist/client/llm-services/component/ModelOptionsSettings.d.ts +0 -10
  344. package/dist/client/llm-services/component/UnifiedModelSettings.d.ts +0 -10
  345. package/dist/client/llm-services/hooks/useLLMServiceCatalog.d.ts +0 -18
  346. package/dist/client/llm-services/llm-providers.d.ts +0 -27
  347. package/dist/client/llm-services/utils.d.ts +0 -35
  348. package/dist/client/manager/ai-feature-manager.d.ts +0 -9
  349. package/dist/client/repositories/AIConfigRepository.d.ts +0 -60
  350. package/dist/client/repositories/hooks/useAIConfigRepository.d.ts +0 -10
  351. package/dist/client/schemas/llms.d.ts +0 -347
  352. package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +0 -10
  353. package/dist/client/workflow/nodes/employee/components/assigness.d.ts +0 -11
  354. package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +0 -10
  355. package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +0 -12
  356. package/dist/client/workflow/nodes/employee/components/model-options.d.ts +0 -10
  357. package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +0 -10
  358. package/dist/client/workflow/nodes/employee/components/users-select.d.ts +0 -15
  359. package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +0 -10
  360. package/dist/client/workflow/nodes/employee/configuration.d.ts +0 -12
  361. package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +0 -14
  362. package/dist/client/workflow/nodes/employee/flow-models/task.d.ts +0 -13
  363. package/dist/client/workflow/nodes/llm/ModelSettings.d.ts +0 -11
  364. package/dist/client/workflow/triggers/ai-employee/Parameters.d.ts +0 -13
  365. /package/dist/{client → client-v2}/ai-employees/AISelection.d.ts +0 -0
  366. /package/dist/{client → client-v2}/ai-employees/AISelectionControl.d.ts +0 -0
  367. /package/dist/{client → client-v2}/ai-employees/ai-coding/prompts.d.ts +0 -0
  368. /package/dist/{client → client-v2}/ai-employees/ai-coding/setup.d.ts +0 -0
  369. /package/dist/{client/ai-employees/chatbox/AIEmployeeSwitch.d.ts → client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts} +0 -0
  370. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatButton.d.ts +0 -0
  371. /package/dist/{client/ai-employees/chatbox/conversations → client-v2/ai-employees/chatbox/components}/Conversations.d.ts +0 -0
  372. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Messages.d.ts +0 -0
  373. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ModelSwitcher.d.ts +0 -0
  374. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/SearchSwitch.d.ts +0 -0
  375. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Sender.d.ts +0 -0
  376. /package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolModal.d.ts +0 -0
  377. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/UserPrompt.d.ts +0 -0
  378. /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +0 -0
  379. /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useLoadMoreObserver.d.ts +0 -0
  380. /package/dist/client-v2/ai-employees/{chatbox/stores → stores}/global-store.d.ts +0 -0
  381. /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/AIEmployeeShortcutListModel.d.ts +0 -0
  382. /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/index.d.ts +0 -0
  383. /package/dist/{client/ai-employees/flow/events/ai-context-selection.d.ts → client-v2/workflow/components/index.d.ts} +0 -0
@@ -0,0 +1,319 @@
1
+ ---
2
+ title: "v1 to v2 Migration Guide"
3
+ description: "Workflow extension development: guide for migrating client-side code from v1 to v2."
4
+ keywords: "workflow,migration,v1,v2,NocoBase"
5
+ ---
6
+
7
+ # v1 to v2 Client-side Migration Guide
8
+
9
+ This guide describes how to migrate the client-side code of a workflow extension plugin from v1 to v2. The core change in the v2 client is replacing Formily Schema declarative configuration UIs with a Loader + pure React/antd component approach.
10
+
11
+ ## Overview
12
+
13
+ ### Main Changes
14
+
15
+ 1. **Import path changes**: `@nocobase/plugin-workflow/client` → `@nocobase/plugin-workflow/client-v2`, plugin base class `@nocobase/client` → `@nocobase/client-v2`
16
+ 2. **Configuration UI pattern changes**: From Formily Schema objects (`fieldset`) to Loader lazy-loaded React components (`FieldsetLoader`)
17
+ 3. **`scope`/`components` properties removed**: No longer necessary to inject scope objects or components into the Schema; simply import and use them directly in React components
18
+
19
+ ### Import path mapping
20
+
21
+ ```ts
22
+ // v1
23
+ import { Plugin } from '@nocobase/client';
24
+ import WorkflowPlugin, { Trigger, Instruction } from '@nocobase/plugin-workflow/client';
25
+
26
+ // v2
27
+ import { Plugin } from '@nocobase/client-v2';
28
+ import WorkflowPlugin, { Trigger, Instruction } from '@nocobase/plugin-workflow/client-v2';
29
+ ```
30
+
31
+ ## General Rules
32
+
33
+ ### Loader pattern
34
+
35
+ v2 uses `LoaderOf`-typed properties to replace v1's `fieldset` and other Formily Schema objects. A Loader is essentially a function that returns `Promise<{ default: ComponentType }>`, enabling code splitting and lazy loading via dynamic `import()`:
36
+
37
+ ```ts
38
+ // v1: Formily Schema object
39
+ fieldset = {
40
+ interval: {
41
+ type: 'number',
42
+ title: 'Interval',
43
+ 'x-decorator': 'FormItem',
44
+ 'x-component': 'InputNumber',
45
+ default: 60000,
46
+ },
47
+ };
48
+
49
+ // v2: Loader pointing to a React component
50
+ FieldsetLoader = () => import('./MyConfig');
51
+ ```
52
+
53
+ If you need to point to a named export (rather than the default export), use `.then()` to remap:
54
+
55
+ ```ts
56
+ FieldsetLoader = () => import('./MyConfig').then((m) => ({ default: m.MyPresetConfig }));
57
+ ```
58
+
59
+ ### Configuration component syntax
60
+
61
+ The component loaded by a Loader is a standard React function component that uses antd's `Form.Item` to build forms. Field paths consistently use the nested array format `['config', 'fieldName']`:
62
+
63
+ ```tsx
64
+ // v1: Formily Schema
65
+ fieldset = {
66
+ interval: {
67
+ type: 'number',
68
+ title: '{{t("Interval")}}',
69
+ name: 'config.interval',
70
+ 'x-decorator': 'FormItem',
71
+ 'x-component': 'InputNumber',
72
+ default: 60000,
73
+ },
74
+ };
75
+
76
+ // v2: React component
77
+ import { Form, InputNumber } from 'antd';
78
+
79
+ export default function MyConfig() {
80
+ const { t } = useWorkflowTranslation();
81
+
82
+ return (
83
+ <Form.Item
84
+ name={['config', 'interval']}
85
+ label={t('Interval')}
86
+ initialValue={60000}
87
+ >
88
+ <InputNumber />
89
+ </Form.Item>
90
+ );
91
+ }
92
+ ```
93
+
94
+ ## Trigger Migration
95
+
96
+ ### Property mapping table
97
+
98
+ | v1 Property | v2 Property | Description |
99
+ |---------|---------|------|
100
+ | `fieldset` | `FieldsetLoader` | Trigger configuration form |
101
+ | `presetFieldset` | `PresetFieldsetLoader` | Preset form on creation |
102
+ | `triggerFieldset` | `TriggerFieldsetLoader` | Input form for manual execution |
103
+ | `scope` | Removed | No longer needed; import directly in the component |
104
+ | `components` | Removed | No longer needed; import directly in the component |
105
+ | `view` | Removed | |
106
+ | — | `validate(config)` | New; configuration validation |
107
+ | — | `createDefaultConfig()` | New; provides default configuration values |
108
+
109
+ ### Migration example
110
+
111
+ **v1 syntax:**
112
+
113
+ ```ts
114
+ import { Trigger } from '@nocobase/plugin-workflow/client';
115
+
116
+ class MyTrigger extends Trigger {
117
+ title = '{{t("My Trigger")}}';
118
+ fieldset = {
119
+ collection: {
120
+ type: 'string',
121
+ title: '{{t("Collection")}}',
122
+ 'x-decorator': 'FormItem',
123
+ 'x-component': 'CollectionSelect',
124
+ required: true,
125
+ },
126
+ mode: {
127
+ type: 'number',
128
+ title: '{{t("Mode")}}',
129
+ 'x-decorator': 'FormItem',
130
+ 'x-component': 'Select',
131
+ 'x-component-props': {
132
+ options: [
133
+ { label: '{{t("Created")}}', value: 1 },
134
+ { label: '{{t("Updated")}}', value: 2 },
135
+ ],
136
+ },
137
+ },
138
+ };
139
+ scope = { /* ... */ };
140
+ components = { CollectionSelect };
141
+ }
142
+ ```
143
+
144
+ **v2 syntax:**
145
+
146
+ ```ts
147
+ import { Trigger } from '@nocobase/plugin-workflow/client-v2';
148
+
149
+ class MyTrigger extends Trigger {
150
+ title = '{{t("My Trigger")}}';
151
+
152
+ PresetFieldsetLoader = () =>
153
+ import('./MyTriggerConfig').then((m) => ({ default: m.MyPresetConfig }));
154
+ FieldsetLoader = () => import('./MyTriggerConfig');
155
+ TriggerFieldsetLoader = () => import('./TriggerMyConfig');
156
+
157
+ validate(config) {
158
+ return Boolean(config?.collection && config?.mode);
159
+ }
160
+ }
161
+ ```
162
+
163
+ ```tsx
164
+ // MyTriggerConfig.tsx
165
+ import { Form, Select } from 'antd';
166
+ import { CollectionCascader } from '@nocobase/plugin-workflow/client-v2';
167
+
168
+ export function MyPresetConfig() {
169
+ return (
170
+ <Form.Item name={['config', 'collection']} label="Collection" rules={[{ required: true }]}>
171
+ <CollectionCascader />
172
+ </Form.Item>
173
+ );
174
+ }
175
+
176
+ export default function MyTriggerConfig() {
177
+ return (
178
+ <>
179
+ <Form.Item name={['config', 'collection']} label="Collection">
180
+ <CollectionCascader disabled />
181
+ </Form.Item>
182
+ <Form.Item name={['config', 'mode']} label="Mode">
183
+ <Select
184
+ options={[
185
+ { label: 'Created', value: 1 },
186
+ { label: 'Updated', value: 2 },
187
+ ]}
188
+ />
189
+ </Form.Item>
190
+ </>
191
+ );
192
+ }
193
+ ```
194
+
195
+ ### Plugin registration
196
+
197
+ ```ts
198
+ // v1
199
+ import { Plugin } from '@nocobase/client';
200
+ import WorkflowPlugin from '@nocobase/plugin-workflow/client';
201
+
202
+ export default class extends Plugin {
203
+ async load() {
204
+ const workflow = this.app.pm.get(WorkflowPlugin);
205
+ workflow.registerTrigger('myTrigger', MyTrigger);
206
+ }
207
+ }
208
+
209
+ // v2
210
+ import { Plugin } from '@nocobase/client-v2';
211
+
212
+ export default class extends Plugin {
213
+ async load() {
214
+ const workflow = this.app.pm.get('workflow');
215
+ workflow.registerTrigger('myTrigger', MyTrigger);
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## Node Migration
221
+
222
+ ### Property mapping table
223
+
224
+ | v1 Property | v2 Property | Description |
225
+ |---------|---------|------|
226
+ | `fieldset` | `FieldsetLoader` | Node configuration drawer form |
227
+ | `presetFieldset` | `PresetFieldsetLoader` | Preset form on creation |
228
+ | `Component` | `ComponentLoader` | Custom node rendering on the canvas |
229
+ | `scope` | Removed | No longer needed; import directly in the component |
230
+ | `components` | Removed | No longer needed; import directly in the component |
231
+ | `view` | Removed | |
232
+ | — | `createDefaultConfig()` | New; provides default configuration values |
233
+
234
+ ### Migration example
235
+
236
+ **v1 syntax:**
237
+
238
+ ```ts
239
+ import WorkflowPlugin, { Instruction } from '@nocobase/plugin-workflow/client';
240
+
241
+ class MyInstruction extends Instruction {
242
+ title = 'Random string';
243
+ type = 'randomString';
244
+ group = 'extended';
245
+ fieldset = {
246
+ digit: {
247
+ type: 'number',
248
+ title: 'Digit',
249
+ name: 'digit',
250
+ 'x-decorator': 'FormItem',
251
+ 'x-component': 'InputNumber',
252
+ 'x-component-props': { min: 1, max: 10 },
253
+ default: 6,
254
+ },
255
+ };
256
+ useVariables(node, options) {
257
+ return { value: node.key, label: node.title };
258
+ }
259
+ }
260
+ ```
261
+
262
+ **v2 syntax:**
263
+
264
+ ```ts
265
+ import { Instruction } from '@nocobase/plugin-workflow/client-v2';
266
+
267
+ class MyInstruction extends Instruction {
268
+ title = 'Random string';
269
+ type = 'randomString';
270
+ group = 'extended';
271
+
272
+ FieldsetLoader = () => import('./components/RandomStringConfig');
273
+
274
+ useVariables(node, options) {
275
+ return { value: node.key, label: node.title };
276
+ }
277
+ }
278
+ ```
279
+
280
+ ```tsx
281
+ // components/RandomStringConfig.tsx
282
+ import { Form, InputNumber } from 'antd';
283
+
284
+ export default function RandomStringConfig() {
285
+ return (
286
+ <Form.Item
287
+ name={['config', 'digit']}
288
+ label="Digit"
289
+ initialValue={6}
290
+ rules={[{ required: true }]}
291
+ >
292
+ <InputNumber min={1} max={10} />
293
+ </Form.Item>
294
+ );
295
+ }
296
+ ```
297
+
298
+ ## Other Notes
299
+
300
+ ### Unchanged parts
301
+
302
+ The following properties and methods have essentially the same signatures in v1 and v2, and can be kept as-is during migration:
303
+
304
+ - `useVariables(node/config, options)` — Provides variable options
305
+ - `useScopeVariables(node, options)` — Provides branch-scoped variables
306
+ - `isAvailable(ctx)` — Node availability check (the v2 `NodeAvailableContext` adds a new `engine` property)
307
+
308
+ ### New properties in v2
309
+
310
+ - `getCreateModelMenuItem` — Defines the configuration for creating sub-model menu items for nodes/triggers on the v2 canvas
311
+ - `useTempAssociationSource` — Provides temporary association data source information
312
+ - `validate(config)` — Trigger configuration validation (triggers only)
313
+ - `branching` — Declares whether the node is a branch node (nodes only)
314
+ - `end` — Declares whether the node is a terminal node (nodes only)
315
+ - `testable` — Declares whether the node supports test runs (nodes only)
316
+
317
+ ### Value semantic consistency
318
+
319
+ When migrating, make sure the form values produced by v2 components are consistent with v1, especially the payload shape during manual execution. For example, if the v1 manual execution form stores a complete record object, the v2 version must maintain the same value structure rather than storing only the primary key.
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: "Extending Node Types"
3
+ description: "Extending node types: custom node development, node configuration, execution logic, API and lifecycle."
4
+ keywords: "workflow,extending nodes,custom nodes,node development,NocoBase"
5
+ ---
6
+
1
7
  # Extending Node Types
2
8
 
3
9
  A node's type is essentially an operational instruction. Different instructions represent different operations executed in the workflow.
@@ -111,7 +117,7 @@ export class AsyncInstruction extends Instruction {
111
117
  // 2. Explicitly call exit() to flush the task to the database and commit the transaction
112
118
  await processor.exit();
113
119
 
114
- // 3. Initiate the async operation (the transaction is now committed, no longer holding the database connection)
120
+ // 3. Initiate the async operation (transaction is now committed, no longer holding the DB connection)
115
121
  const jobDone: IJob = { status: JOB_STATUS.PENDING };
116
122
  try {
117
123
  const result = await someAsyncOperation(node.config);
@@ -239,44 +245,78 @@ Similar to triggers, the configuration form for an instruction (node type) needs
239
245
 
240
246
  All instructions need to be derived from the `Instruction` base class. The related properties and methods are used for configuring and using the node.
241
247
 
242
- For example, if we need to provide a configuration interface for the random number string type (`randomString`) node defined on the server-side above, which has a configuration item `digit` representing the number of digits for the random number, we would use a number input box in the configuration form to receive user input.
248
+ For example, if we need to provide a configuration interface for the random number string type (`randomString`) node defined on the server-side above, which has a configuration item `digit` representing the number of digits for the random number:
243
249
 
244
- ```tsx pure
245
- import WorkflowPlugin, { Instruction, VariableOption } from '@nocobase/workflow/client';
250
+ ```ts
251
+ import { Instruction } from '@nocobase/plugin-workflow/client-v2';
246
252
 
247
- class MyInstruction extends Instruction {
253
+ class RandomStringInstruction extends Instruction {
248
254
  title = 'Random number string';
249
255
  type = 'randomString';
250
256
  group = 'extended';
251
- fieldset = {
252
- 'digit': {
253
- type: 'number',
254
- title: 'Digit',
255
- name: 'digit',
256
- 'x-decorator': 'FormItem',
257
- 'x-component': 'InputNumber',
258
- 'x-component-props': {
259
- min: 1,
260
- max: 10,
261
- },
262
- default: 6,
263
- },
264
- };
265
- useVariables(node, options): VariableOption {
266
- return {
267
- value: node.key,
268
- label: node.title,
269
- };
257
+
258
+ // Node config form (lazy-loaded component)
259
+ FieldsetLoader = () => import('./components/RandomStringConfig');
260
+
261
+ useVariables(node, options) {
262
+ return { value: node.key, label: node.title };
270
263
  }
271
264
  }
265
+ ```
272
266
 
273
- export default class MyPlugin extends Plugin {
274
- load() {
275
- // get workflow plugin instance
276
- const workflowPlugin = this.app.getPlugin<WorkflowPlugin>(WorkflowPlugin);
267
+ Here, `FieldsetLoader` is a function that returns `Promise<{ default: ComponentType }>`, implementing lazy loading via dynamic `import()`. The component it points to is a standard React function component that builds the form using antd's `Form.Item`:
268
+
269
+ ```tsx
270
+ // components/RandomStringConfig.tsx
271
+ import { Form, InputNumber } from 'antd';
272
+
273
+ export default function RandomStringConfig() {
274
+ return (
275
+ <Form.Item
276
+ name={['config', 'digit']}
277
+ label="Digit"
278
+ initialValue={6}
279
+ rules={[{ required: true }]}
280
+ >
281
+ <InputNumber min={1} max={10} />
282
+ </Form.Item>
283
+ );
284
+ }
285
+ ```
277
286
 
278
- // register instruction
279
- workflowPlugin.registerInstruction('randomString', MyInstruction);
287
+ Note that the form field's `name` uses the nested array format `['config', 'fieldName']`, which is the standard antd Form convention.
288
+
289
+ ### Multiple Configuration Interfaces
290
+
291
+ A node can provide multiple configuration interfaces for different scenarios:
292
+
293
+ - `FieldsetLoader` — Node configuration drawer form (most commonly used)
294
+ ![FieldsetLoader](https://static-docs.nocobase.com/20260701153106.png)
295
+
296
+ - `PresetFieldsetLoader` — Preset form when creating a node (usually contains only required fields)
297
+ ![PresetFieldsetLoader](https://static-docs.nocobase.com/20260701153041.png)
298
+
299
+ - `ComponentLoader` — Custom node rendering on the canvas (used for branch nodes and other cases requiring special rendering)
300
+ ![ComponentLoader](https://static-docs.nocobase.com/20260701153139.png)
301
+
302
+ When a Loader needs to point to a named export (rather than the default export) in a file, use `.then()` to remap:
303
+
304
+ ```ts
305
+ FieldsetLoader = () => import('./components/MyNodeConfig').then((m) => ({ default: m.MyFieldset }));
306
+ ```
307
+
308
+ ### Register the Node
309
+
310
+ Register the node type with the workflow plugin instance within the extended plugin:
311
+
312
+ ```ts
313
+ import { Plugin } from '@nocobase/client-v2';
314
+ import RandomStringInstruction from './RandomStringInstruction';
315
+
316
+ export default class extends Plugin {
317
+ async load() {
318
+ const workflow = this.app.pm.get('workflow');
319
+ workflow.registerInstruction('randomString', RandomStringInstruction);
280
320
  }
281
321
  }
282
322
  ```
@@ -287,7 +327,7 @@ The node type identifier registered on the client-side must be consistent with t
287
327
 
288
328
  ### Providing Node Results as Variables
289
329
 
290
- You may notice the `useVariables` method in the example above. If you need to use the node's result (the `result` part) as a variable for subsequent nodes, you need to implement this method in the inherited instruction class and return an object that conforms to the `VariableOption` type. This object serves as a structural description of the node's execution result, providing variable name mapping for selection and use in subsequent nodes.
330
+ You may notice the `useVariables` method in the example above. If you need to use the node's result (the `result` part) as a variable for subsequent nodes, you need to implement this method in the derived instruction class and return an object that conforms to the `VariableOption` type. This object serves as a structural description of the node's execution result, providing variable name mapping for selection and use in subsequent nodes.
291
331
 
292
332
  The `VariableOption` type is defined as follows:
293
333
 
@@ -302,7 +342,7 @@ export type VariableOption = {
302
342
 
303
343
  The core is the `value` property, which represents the segmented path value of the variable name. `label` is used for display on the interface, and `children` is used to represent a multi-level variable structure, which is used when the node's result is a deeply nested object.
304
344
 
305
- A usable variable is represented internally in the system as a path template string separated by `.`, for example, `{{jobsMapByNodeKey.2dw92cdf.abc}}`. Here, `jobsMapByNodeKey` represents the result set of all nodes (internally defined, no need to handle), `2dw92cdf` is the node's `key`, and `abc` is a custom property in the node's result object.
345
+ A usable variable is represented internally in the system as a path template string separated by `.`, for example, `{{$jobsMapByNodeKey.2dw92cdf.abc}}`. Here, `$jobsMapByNodeKey` represents the result set of all nodes (internally defined, no need to handle), `2dw92cdf` is the node's `key`, and `abc` is a custom property in the node's result object.
306
346
 
307
347
  Additionally, since a node's result can also be a simple value, when providing node variables, the first level **must** be the description of the node itself:
308
348
 
@@ -313,14 +353,10 @@ Additionally, since a node's result can also be a simple value, when providing n
313
353
  }
314
354
  ```
315
355
 
316
- That is, the first level is the node's `key` and title. For example, in the calculation node's [code reference](https://github.com/nocobase/nocobase/blob/main/packages/plugins/%40nocobase/plugin-workflow/src/client/nodes/calculation.tsx#L77), when using the result of the calculation node, the interface options are as follows:
317
-
318
-
356
+ That is, the first level is the node's `key` and title. For example, in the Calculation node's [code reference](https://github.com/nocobase/nocobase/blob/develop/packages/plugins/%40nocobase/plugin-workflow/src/client-v2/nodes/calculation.tsx), when using the result of the Calculation node, the interface options are as follows:
319
357
 
320
358
  ![Result of Calculation Node](https://static-docs.nocobase.com/20240514230014.png)
321
359
 
322
-
323
-
324
360
  When the node's result is a complex object, you can use `children` to continue describing nested properties. For example, a custom instruction might return the following JSON data:
325
361
 
326
362
  ```json
@@ -328,7 +364,7 @@ When the node's result is a complex object, you can use `children` to continue d
328
364
  "message": "ok",
329
365
  "data": {
330
366
  "id": 1,
331
- "name": "test",
367
+ "name": "test"
332
368
  }
333
369
  }
334
370
  ```
@@ -336,7 +372,7 @@ When the node's result is a complex object, you can use `children` to continue d
336
372
  Then you can return it through the `useVariables` method as follows:
337
373
 
338
374
  ```ts
339
- useVariables(node, options): VariableOption {
375
+ useVariables(node, options) {
340
376
  return {
341
377
  value: node.key,
342
378
  label: node.title,
@@ -366,12 +402,8 @@ useVariables(node, options): VariableOption {
366
402
 
367
403
  This way, in subsequent nodes, you can use the following interface to select variables from it:
368
404
 
369
-
370
-
371
405
  ![Mapped Result Variables](https://static-docs.nocobase.com/20240514230103.png)
372
406
 
373
-
374
-
375
407
  :::info{title="Note"}
376
408
  When a structure in the result is an array of deeply nested objects, you can also use `children` to describe the path, but it cannot include array indices. This is because in NocoBase workflow's variable handling, the variable path description for an array of objects is automatically flattened into an array of deep values when used, and you cannot access a specific value by its index.
377
409
  :::
@@ -381,11 +413,6 @@ When a structure in the result is an array of deeply nested objects, you can als
381
413
  By default, any node can be added to a workflow. However, in some cases, a node may not be applicable in certain types of workflows or branches. In such situations, you can configure the node's availability using `isAvailable`:
382
414
 
383
415
  ```ts
384
- // Type definition
385
- export abstract class Instruction {
386
- isAvailable?(ctx: NodeAvailableContext): boolean;
387
- }
388
-
389
416
  export type NodeAvailableContext = {
390
417
  // Workflow plugin instance
391
418
  engine: WorkflowPlugin;
@@ -393,7 +420,7 @@ export type NodeAvailableContext = {
393
420
  workflow: object;
394
421
  // Upstream node
395
422
  upstream: object;
396
- // Whether it is a branch node (branch number)
423
+ // Whether it is a branch node (branch index)
397
424
  branchIndex: number;
398
425
  };
399
426
  ```
@@ -403,11 +430,17 @@ The `isAvailable` method returns `true` if the node is available, and `false` if
403
430
  If there are no special requirements, you do not need to implement the `isAvailable` method, as nodes are available by default. The most common scenario requiring configuration is when a node might be a time-consuming operation and is not suitable for execution in a synchronous workflow. You can use the `isAvailable` method to restrict its use. For example:
404
431
 
405
432
  ```ts
406
- isAvailable({ engine, workflow, upstream, branchIndex }) {
433
+ isAvailable({ engine, workflow }) {
407
434
  return !engine.isWorkflowSync(workflow);
408
435
  }
409
436
  ```
410
437
 
411
438
  ### Learn More
412
439
 
413
- For the definitions of various parameters for defining node types, see the Workflow API Reference section.
440
+ For a complete real-world example, refer to: [CalculationInstruction source code](https://github.com/nocobase/nocobase/blob/develop/packages/plugins/%40nocobase/plugin-workflow/src/client-v2/nodes/calculation.tsx)
441
+
442
+ For the definitions of various parameters for defining node types, see the [Workflow API Reference](./api) section.
443
+
444
+ :::info{title=Note}
445
+ If you were previously using the legacy (v1) client-side code and want to migrate to the new v2 version, refer to the [v1 to v2 Migration Guide](./migration).
446
+ :::