@nocobase/plugin-ai 2.1.0-beta.14 → 2.1.0-beta.16

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 (313) hide show
  1. package/dist/ai/ai-employees/atlas/index.d.ts +10 -0
  2. package/dist/{server/ai-employees/built-in/ai-coding/prompt.js → ai/ai-employees/atlas/index.js} +29 -20
  3. package/dist/ai/ai-employees/atlas/prompt.md +84 -0
  4. package/dist/ai/ai-employees/dara.d.ts +10 -0
  5. package/dist/{server/ai-employees/built-in/data-visualization/prompt.js → ai/ai-employees/dara.js} +21 -13
  6. package/dist/ai/ai-employees/dex.d.ts +10 -0
  7. package/dist/{server/ai-employees/built-in/data-organizer/prompt.js → ai/ai-employees/dex.js} +15 -7
  8. package/dist/ai/ai-employees/ellis.d.ts +10 -0
  9. package/dist/{server/ai-employees/built-in/email-assistant/prompt.js → ai/ai-employees/ellis.js} +19 -11
  10. package/dist/ai/ai-employees/lexi.d.ts +10 -0
  11. package/dist/{server/ai-employees/built-in/translator/prompt.js → ai/ai-employees/lexi.js} +15 -7
  12. package/dist/ai/ai-employees/vera.d.ts +10 -0
  13. package/dist/{server/ai-employees/built-in/research-analyst/prompt.js → ai/ai-employees/vera.js} +16 -8
  14. package/dist/ai/ai-employees/viz.d.ts +10 -0
  15. package/dist/{server/ai-employees/built-in/insights-analyst/prompt.js → ai/ai-employees/viz.js} +15 -7
  16. package/dist/ai/skills/business-analysis-report/SKILLS.md +88 -0
  17. package/dist/{server/ai-employees/built-in/ai-coding/prompt.d.ts → ai/skills/business-analysis-report/tools/businessReportGenerator.d.ts} +1 -3
  18. package/dist/ai/skills/business-analysis-report/tools/businessReportGenerator.js +98 -0
  19. package/dist/ai/skills/document-search/SKILLS.md +69 -0
  20. package/dist/ai/tools/chartGenerator.js +15 -3
  21. package/dist/ai/tools/formFiller.js +13 -2
  22. package/dist/{server/ai-employees/built-in/data-modeling/prompt.d.ts → ai/tools/getSkill.d.ts} +1 -3
  23. package/dist/{server/ai-employees/built-in/data-modeling/index.js → ai/tools/getSkill.js} +39 -32
  24. package/dist/{server/ai-employees/built-in/data-organizer/prompt.d.ts → ai/tools/knowledge-base-retrieve.d.ts} +1 -3
  25. package/dist/ai/tools/knowledge-base-retrieve.js +94 -0
  26. package/dist/{server/ai-employees/built-in/data-visualization/prompt.d.ts → ai/tools/sub-agents/dispatch-sub-agent-task.d.ts} +1 -3
  27. package/dist/ai/tools/sub-agents/dispatch-sub-agent-task.js +108 -0
  28. package/dist/ai/tools/sub-agents/get-ai-employee.d.ts +10 -0
  29. package/dist/{server/ai-employees/built-in/translator/profile.js → ai/tools/sub-agents/get-ai-employee.js} +28 -21
  30. package/dist/ai/tools/sub-agents/list-ai-employees.d.ts +10 -0
  31. package/dist/{server/ai-employees/built-in/email-assistant/profile.js → ai/tools/sub-agents/list-ai-employees.js} +25 -21
  32. package/dist/ai/tools/sub-agents/shared.d.ts +33 -0
  33. package/dist/ai/tools/sub-agents/shared.js +169 -0
  34. package/dist/ai/tools/suggestions.js +15 -4
  35. package/dist/client/170.d98eacdc00d9d527.js +10 -0
  36. package/dist/client/228.b18148eb1009d2fb.js +10 -0
  37. package/dist/client/280.029428b83d62155f.js +10 -0
  38. package/dist/client/290.0888139e33c9b7cb.js +10 -0
  39. package/dist/client/{524.954f96ec4fc2fd7a.js → 331.d547c95410476a69.js} +1 -1
  40. package/dist/client/343.83f7d96664e4e038.js +10 -0
  41. package/dist/client/406.15c09d98faa2ccf1.js +10 -0
  42. package/dist/client/428.e9f38da3b0d8b498.js +10 -0
  43. package/dist/client/486.77c26e2e7f8daf28.js +10 -0
  44. package/dist/client/502.2b4a51e0a8122e52.js +10 -0
  45. package/dist/client/525.33a9c8ec28be4ec4.js +10 -0
  46. package/dist/client/559.133d286a0a0a1d93.js +10 -0
  47. package/dist/client/{91.90e7098b7fbd5d00.js → 561.776886c5308e3c26.js} +1 -1
  48. package/dist/client/580.e75f97fb883ad042.js +10 -0
  49. package/dist/client/597.aa363881a325b5c0.js +10 -0
  50. package/dist/client/604.de96f3ec4d471afd.js +10 -0
  51. package/dist/client/614.aa766080f6b99aab.js +10 -0
  52. package/dist/client/646.ef9d7c2ea8641044.js +10 -0
  53. package/dist/client/687.224e569a99cae4bb.js +10 -0
  54. package/dist/client/699.57c0a1acb723202a.js +10 -0
  55. package/dist/client/711.266b8f1c520d467a.js +10 -0
  56. package/dist/client/758.a9741e81911e53c3.js +10 -0
  57. package/dist/client/768.973ce32e15099a48.js +10 -0
  58. package/dist/client/792.ae8ad1fcae9fd974.js +10 -0
  59. package/dist/client/820.6a26239ea96c075a.js +10 -0
  60. package/dist/client/832.0cf69e3f43c320b2.js +10 -0
  61. package/dist/client/927.ff5cd05b14901ae6.js +10 -0
  62. package/dist/client/ai-employees/admin/SkillSettings.d.ts +7 -5
  63. package/dist/client/ai-employees/admin/ToolsSettings.d.ts +17 -0
  64. package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +10 -0
  65. package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +19 -0
  66. package/dist/client/ai-employees/admin/mcp/context.d.ts +15 -0
  67. package/dist/client/ai-employees/admin/mcp/schemas.d.ts +1286 -0
  68. package/dist/client/ai-employees/built-in/utils.d.ts +1 -0
  69. package/dist/client/ai-employees/business-report/tools/index.d.ts +10 -0
  70. package/dist/client/ai-employees/business-report/ui/BusinessReportCard.d.ts +12 -0
  71. package/dist/client/ai-employees/business-report/ui/BusinessReportModal.d.ts +17 -0
  72. package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +38 -0
  73. package/dist/client/ai-employees/chatbox/AIEmployeeSwitch.d.ts +3 -2
  74. package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +10 -0
  75. package/dist/client/ai-employees/chatbox/ModelSwitcher.d.ts +3 -1
  76. package/dist/client/ai-employees/chatbox/SearchSwitch.d.ts +3 -1
  77. package/dist/client/ai-employees/chatbox/Upload.d.ts +3 -1
  78. package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +27 -0
  79. package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +31 -0
  80. package/dist/client/ai-employees/chatbox/conversations/common.d.ts +43 -0
  81. package/dist/{server/document-loader/loader.worker.d.ts → client/ai-employees/chatbox/conversations/index.d.ts} +1 -1
  82. package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +5 -3
  83. package/dist/client/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +24 -0
  84. package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +1 -2
  85. package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +1 -1
  86. package/dist/client/ai-employees/chatbox/roles.d.ts +1 -0
  87. package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +8 -0
  88. package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +4 -0
  89. package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +8 -0
  90. package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +41 -0
  91. package/dist/client/ai-employees/chatbox/utils.d.ts +17 -7
  92. package/dist/client/ai-employees/sub-agents/tools/index.d.ts +10 -0
  93. package/dist/client/ai-employees/sub-agents/ui/SubAgentDispatchCard.d.ts +21 -0
  94. package/dist/client/ai-employees/types.d.ts +24 -4
  95. package/dist/{server/ai-employees/built-in/ai-coding/document/example/js-filter → client/ai-employees/workflow-tasks/tools}/index.d.ts +2 -7
  96. package/dist/client/ai-employees/workflow-tasks/ui/WorkflowTaskOutputCard.d.ts +11 -0
  97. package/dist/client/components/ListCollapse.d.ts +28 -0
  98. package/dist/client/index.js +7 -7
  99. package/dist/client/manager/ai-manager.d.ts +4 -23
  100. package/dist/client/repositories/AIConfigRepository.d.ts +11 -3
  101. package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +10 -0
  102. package/dist/client/workflow/nodes/employee/components/assigness.d.ts +11 -0
  103. package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +10 -0
  104. package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +12 -0
  105. package/dist/client/workflow/nodes/employee/components/model-options.d.ts +10 -0
  106. package/dist/client/workflow/nodes/employee/components/skill-settings.d.ts +10 -0
  107. package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +10 -0
  108. package/dist/client/workflow/nodes/employee/components/users-select.d.ts +15 -0
  109. package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +10 -0
  110. package/dist/client/workflow/nodes/employee/configuration.d.ts +12 -0
  111. package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +13 -0
  112. package/dist/client/workflow/nodes/employee/flow-models/task.d.ts +13 -0
  113. package/dist/client/workflow/nodes/employee/index.d.ts +7 -31
  114. package/dist/collections/ai-employees.js +2 -1
  115. package/dist/collections/ai-mcp-clients.d.ts +51 -0
  116. package/dist/collections/ai-mcp-clients.js +111 -0
  117. package/dist/externalVersion.js +17 -16
  118. package/dist/locale/en-US.json +136 -8
  119. package/dist/locale/zh-CN.json +138 -9
  120. package/dist/node_modules/fast-glob/out/index.js +8 -8
  121. package/dist/node_modules/fast-glob/package.json +1 -1
  122. package/dist/node_modules/flexsearch/dist/flexsearch.bundle.min.js +2 -2
  123. package/dist/node_modules/flexsearch/package.json +1 -1
  124. package/dist/node_modules/fs-extra/lib/index.js +1 -1
  125. package/dist/node_modules/fs-extra/package.json +1 -1
  126. package/dist/node_modules/nodejs-snowflake/nodejs_snowflake.js +1 -1
  127. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  128. package/dist/node_modules/openai/index.js +1 -1
  129. package/dist/node_modules/openai/package.json +1 -1
  130. package/dist/node_modules/zod/index.cjs +1 -1
  131. package/dist/node_modules/zod/package.json +1 -1
  132. package/dist/server/ai-employees/ai-conversations.d.ts +70 -0
  133. package/dist/server/ai-employees/ai-conversations.js +325 -0
  134. package/dist/server/ai-employees/ai-employee.d.ts +100 -19
  135. package/dist/server/ai-employees/ai-employee.js +484 -261
  136. package/dist/server/ai-employees/ai-knowledge-base.d.ts +28 -0
  137. package/dist/server/ai-employees/ai-knowledge-base.js +167 -0
  138. package/dist/server/ai-employees/middleware/conversation.d.ts +2 -0
  139. package/dist/server/ai-employees/middleware/conversation.js +38 -5
  140. package/dist/server/ai-employees/middleware/index.d.ts +2 -0
  141. package/dist/server/ai-employees/middleware/index.js +5 -1
  142. package/dist/server/ai-employees/middleware/skill-tools.d.ts +12 -0
  143. package/dist/server/ai-employees/middleware/skill-tools.js +88 -0
  144. package/dist/server/ai-employees/middleware/tools.js +37 -10
  145. package/dist/server/ai-employees/middleware/workflow-history.d.ts +22 -0
  146. package/dist/server/ai-employees/middleware/workflow-history.js +173 -0
  147. package/dist/server/ai-employees/prompts.d.ts +16 -1
  148. package/dist/server/ai-employees/prompts.js +37 -1
  149. package/dist/server/ai-employees/sub-agents/dispatcher.d.ts +36 -0
  150. package/dist/server/ai-employees/sub-agents/dispatcher.js +225 -0
  151. package/dist/server/ai-employees/sub-agents/index.d.ts +9 -0
  152. package/dist/server/{migrations/20250923221107-setup-build-in.js → ai-employees/sub-agents/index.js} +9 -13
  153. package/dist/server/ai-employees/templates/form-assistant.d.ts +2 -2
  154. package/dist/server/ai-employees/templates/form-assistant.js +2 -2
  155. package/dist/server/ai-employees/utils.js +2 -2
  156. package/dist/server/collections/ai-conversations.js +18 -0
  157. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_contacts_en.d.ts → collections/ai-mcp-clients.d.ts} +1 -4
  158. package/dist/server/{ai-employees/built-in/nocobase-assistant/index.js → collections/ai-mcp-clients.js} +12 -13
  159. package/dist/server/{ai-employees/built-in/ai-coding/document/basic/flow-resource.d.ts → collections/ai-skills.d.ts} +1 -4
  160. package/dist/server/collections/ai-skills.js +73 -0
  161. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_opportunities_en.d.ts → collections/ai-workflow-tasks.d.ts} +1 -4
  162. package/dist/server/collections/ai-workflow-tasks.js +112 -0
  163. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_accounts_en.d.ts → collections/users-ai-workflow-tasks.d.ts} +1 -4
  164. package/dist/server/collections/users-ai-workflow-tasks.js +44 -0
  165. package/dist/server/document-loader/constants.d.ts +1 -2
  166. package/dist/server/document-loader/constants.js +6 -1
  167. package/dist/server/document-loader/loader.d.ts +0 -1
  168. package/dist/server/document-loader/loader.js +2 -55
  169. package/dist/server/document-loader/types.d.ts +0 -1
  170. package/dist/server/llm-providers/anthropic.d.ts +1 -0
  171. package/dist/server/llm-providers/anthropic.js +2 -1
  172. package/dist/server/llm-providers/dashscope.d.ts +1 -0
  173. package/dist/server/llm-providers/deepseek.d.ts +1 -0
  174. package/dist/server/llm-providers/google-genai.d.ts +1 -0
  175. package/dist/server/llm-providers/google-genai.js +2 -1
  176. package/dist/server/llm-providers/kimi/provider.d.ts +1 -0
  177. package/dist/server/llm-providers/openai/responses.d.ts +1 -0
  178. package/dist/server/llm-providers/openai/responses.js +2 -1
  179. package/dist/server/llm-providers/provider.d.ts +1 -10
  180. package/dist/server/llm-providers/provider.js +4 -35
  181. package/dist/server/manager/ai-coding-manager.d.ts +1 -2
  182. package/dist/server/manager/ai-coding-manager.js +0 -41
  183. package/dist/server/manager/ai-context-datasource-manager.js +30 -1
  184. package/dist/server/manager/built-in-manager.d.ts +2 -4
  185. package/dist/server/manager/built-in-manager.js +8 -118
  186. package/dist/server/migrations/20260306000001-migrate-skill-settings-tools.js +68 -0
  187. package/dist/server/migrations/20260319000000-add-ai-conversations-from.d.ts +14 -0
  188. package/dist/server/migrations/20260319000000-add-ai-conversations-from.js +63 -0
  189. package/dist/server/migrations/20260424000000-remove-cole-ai-employee.d.ts +14 -0
  190. package/dist/server/{ai-employees/built-in/email-assistant/index.js → migrations/20260424000000-remove-cole-ai-employee.js} +20 -22
  191. package/dist/server/plugin.d.ts +6 -1
  192. package/dist/server/plugin.js +31 -8
  193. package/dist/server/resource/aiConversations.js +112 -188
  194. package/dist/server/resource/aiEmployees.js +5 -7
  195. package/dist/server/resource/aiMcpClients.d.ts +11 -0
  196. package/dist/server/resource/aiMcpClients.js +78 -0
  197. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/index.d.ts → resource/aiSkills.d.ts} +3 -7
  198. package/dist/server/resource/aiSkills.js +71 -0
  199. package/dist/server/resource/aiTools.js +4 -6
  200. package/dist/server/resource/aiWorkflowTasks.d.ts +12 -0
  201. package/dist/server/resource/aiWorkflowTasks.js +290 -0
  202. package/dist/server/tools/docs.js +4 -3
  203. package/dist/server/tools/workflow-caller.js +1 -0
  204. package/dist/server/types/ai-chat-conversation.type.d.ts +8 -2
  205. package/dist/server/types/ai-message.type.d.ts +7 -0
  206. package/dist/server/utils.d.ts +3 -0
  207. package/dist/server/utils.js +28 -3
  208. package/dist/server/workflow/nodes/employee/files.d.ts +16 -0
  209. package/dist/server/workflow/nodes/employee/files.js +125 -0
  210. package/dist/server/workflow/nodes/employee/handler.d.ts +11 -0
  211. package/dist/server/workflow/nodes/employee/handler.js +107 -0
  212. package/dist/server/workflow/nodes/employee/index.d.ts +17 -0
  213. package/dist/server/workflow/nodes/employee/index.js +391 -0
  214. package/dist/server/workflow/nodes/employee/tools.d.ts +12 -0
  215. package/dist/server/workflow/nodes/employee/tools.js +133 -0
  216. package/dist/server/workflow/nodes/employee/types.d.ts +35 -0
  217. package/dist/server/workflow/nodes/employee/types.js +24 -0
  218. package/dist/server/workflow/utils.d.ts +14 -0
  219. package/dist/server/workflow/utils.js +111 -0
  220. package/package.json +4 -2
  221. package/dist/client/107.64d9efa24d6b9143.js +0 -10
  222. package/dist/client/124.768c8aa5d6e6b461.js +0 -10
  223. package/dist/client/159.d52107c7a34ce2da.js +0 -10
  224. package/dist/client/192.0419770b69678994.js +0 -10
  225. package/dist/client/204.91be8cfc54d91a59.js +0 -10
  226. package/dist/client/238.9f784a7cdb751999.js +0 -10
  227. package/dist/client/263.6e1dfb1cbb1964f5.js +0 -10
  228. package/dist/client/35.5ee7503d9c09daa8.js +0 -10
  229. package/dist/client/47.6bd245f2140efd24.js +0 -10
  230. package/dist/client/481.03b3d2306d409933.js +0 -10
  231. package/dist/client/586.6a1510cabaa84f23.js +0 -10
  232. package/dist/client/650.8871a07b31c307ea.js +0 -10
  233. package/dist/client/755.e295bbd2b2a1cc21.js +0 -10
  234. package/dist/client/772.d51f683c55e18dd4.js +0 -10
  235. package/dist/client/870.84187dcb8c89b4dc.js +0 -10
  236. package/dist/client/933.baab3aa75f30e020.js +0 -10
  237. package/dist/client/987.3aee964e7f406939.js +0 -10
  238. package/dist/server/ai-employees/built-in/ai-coding/document/basic/flow-resource.js +0 -256
  239. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/index.js +0 -48
  240. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_accounts_en.js +0 -452
  241. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_contacts_en.js +0 -363
  242. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_opportunities_en.js +0 -270
  243. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_quotations_en.d.ts +0 -13
  244. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_quotations_en.js +0 -219
  245. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_tickets_en.d.ts +0 -13
  246. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_tickets_en.js +0 -409
  247. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/accounts_filter_ant_style.d.ts +0 -13
  248. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/accounts_filter_ant_style.js +0 -324
  249. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/contacts_filter_ant_style.d.ts +0 -13
  250. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/contacts_filter_ant_style.js +0 -309
  251. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/index.js +0 -50
  252. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/leads_filter_ant_style.d.ts +0 -13
  253. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/leads_filter_ant_style.js +0 -345
  254. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/opportunities_filter_ant_style.d.ts +0 -13
  255. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/opportunities_filter_ant_style.js +0 -381
  256. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/product_categories_ant_style.d.ts +0 -13
  257. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/product_categories_ant_style.js +0 -545
  258. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/tickets_filter_ant_style.d.ts +0 -13
  259. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/tickets_filter_ant_style.js +0 -346
  260. package/dist/server/ai-employees/built-in/ai-coding/document/js-action.d.ts +0 -13
  261. package/dist/server/ai-employees/built-in/ai-coding/document/js-action.js +0 -102
  262. package/dist/server/ai-employees/built-in/ai-coding/document/js-block.d.ts +0 -13
  263. package/dist/server/ai-employees/built-in/ai-coding/document/js-block.js +0 -314
  264. package/dist/server/ai-employees/built-in/ai-coding/document/js-column.d.ts +0 -13
  265. package/dist/server/ai-employees/built-in/ai-coding/document/js-column.js +0 -113
  266. package/dist/server/ai-employees/built-in/ai-coding/document/js-field.d.ts +0 -13
  267. package/dist/server/ai-employees/built-in/ai-coding/document/js-field.js +0 -498
  268. package/dist/server/ai-employees/built-in/ai-coding/document/js-item.d.ts +0 -13
  269. package/dist/server/ai-employees/built-in/ai-coding/document/js-item.js +0 -184
  270. package/dist/server/ai-employees/built-in/ai-coding/index.d.ts +0 -37
  271. package/dist/server/ai-employees/built-in/ai-coding/index.js +0 -99
  272. package/dist/server/ai-employees/built-in/ai-coding/profile.d.ts +0 -27
  273. package/dist/server/ai-employees/built-in/ai-coding/profile.js +0 -60
  274. package/dist/server/ai-employees/built-in/ai-coding/prompt_en.md +0 -110
  275. package/dist/server/ai-employees/built-in/data-modeling/index.d.ts +0 -37
  276. package/dist/server/ai-employees/built-in/data-modeling/profile.d.ts +0 -27
  277. package/dist/server/ai-employees/built-in/data-modeling/profile.js +0 -60
  278. package/dist/server/ai-employees/built-in/data-modeling/prompt.js +0 -283
  279. package/dist/server/ai-employees/built-in/data-organizer/index.d.ts +0 -37
  280. package/dist/server/ai-employees/built-in/data-organizer/index.js +0 -63
  281. package/dist/server/ai-employees/built-in/data-organizer/profile.d.ts +0 -27
  282. package/dist/server/ai-employees/built-in/data-organizer/profile.js +0 -60
  283. package/dist/server/ai-employees/built-in/data-visualization/index.d.ts +0 -37
  284. package/dist/server/ai-employees/built-in/data-visualization/index.js +0 -58
  285. package/dist/server/ai-employees/built-in/data-visualization/profile.d.ts +0 -27
  286. package/dist/server/ai-employees/built-in/data-visualization/profile.js +0 -60
  287. package/dist/server/ai-employees/built-in/email-assistant/index.d.ts +0 -34
  288. package/dist/server/ai-employees/built-in/email-assistant/profile.d.ts +0 -27
  289. package/dist/server/ai-employees/built-in/email-assistant/prompt.d.ts +0 -12
  290. package/dist/server/ai-employees/built-in/insights-analyst/index.d.ts +0 -37
  291. package/dist/server/ai-employees/built-in/insights-analyst/index.js +0 -63
  292. package/dist/server/ai-employees/built-in/insights-analyst/profile.d.ts +0 -27
  293. package/dist/server/ai-employees/built-in/insights-analyst/profile.js +0 -60
  294. package/dist/server/ai-employees/built-in/insights-analyst/prompt.d.ts +0 -12
  295. package/dist/server/ai-employees/built-in/nocobase-assistant/index.d.ts +0 -34
  296. package/dist/server/ai-employees/built-in/nocobase-assistant/profile.d.ts +0 -27
  297. package/dist/server/ai-employees/built-in/nocobase-assistant/profile.js +0 -60
  298. package/dist/server/ai-employees/built-in/nocobase-assistant/prompt.d.ts +0 -12
  299. package/dist/server/ai-employees/built-in/nocobase-assistant/prompt.js +0 -52
  300. package/dist/server/ai-employees/built-in/research-analyst/index.d.ts +0 -37
  301. package/dist/server/ai-employees/built-in/research-analyst/index.js +0 -63
  302. package/dist/server/ai-employees/built-in/research-analyst/profile.d.ts +0 -27
  303. package/dist/server/ai-employees/built-in/research-analyst/profile.js +0 -60
  304. package/dist/server/ai-employees/built-in/research-analyst/prompt.d.ts +0 -12
  305. package/dist/server/ai-employees/built-in/translator/index.d.ts +0 -37
  306. package/dist/server/ai-employees/built-in/translator/index.js +0 -67
  307. package/dist/server/ai-employees/built-in/translator/profile.d.ts +0 -27
  308. package/dist/server/ai-employees/built-in/translator/prompt.d.ts +0 -12
  309. package/dist/server/document-loader/loader.worker.js +0 -68
  310. package/dist/server/document-loader/vendor/langchain/document_loaders/fs/text.d.ts +0 -20
  311. package/dist/server/document-loader/vendor/langchain/document_loaders/fs/text.js +0 -96
  312. /package/dist/client/ai-employees/chatbox/{Conversations.d.ts → conversations/Conversations.d.ts} +0 -0
  313. /package/dist/server/migrations/{20250923221107-setup-build-in.d.ts → 20260306000001-migrate-skill-settings-tools.d.ts} +0 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var files_exports = {};
38
+ __export(files_exports, {
39
+ Files: () => Files
40
+ });
41
+ module.exports = __toCommonJS(files_exports);
42
+ var import_promises = __toESM(require("node:fs/promises"));
43
+ var import_node_os = __toESM(require("node:os"));
44
+ var import_node_path = __toESM(require("node:path"));
45
+ var import_lodash = __toESM(require("lodash"));
46
+ var import_axios = __toESM(require("axios"));
47
+ var import_utils = require("../../utils");
48
+ class Files {
49
+ static resolvers(plugin, attachmentPart) {
50
+ const resolveAttachments = async (files) => {
51
+ var _a;
52
+ const attachments = files.filter((it) => it.type === "file_id");
53
+ if (attachments.length) {
54
+ const attachmentGroup = import_lodash.default.groupBy(attachments, (it) => it.collection);
55
+ for (const collection of import_lodash.default.uniq(attachments.map((it) => it.collection))) {
56
+ const repository = plugin.db.getRepository(collection);
57
+ if (!repository) {
58
+ throw new Error(`Attachment collection [${collection}] not existed`);
59
+ }
60
+ const attachmentKeys = (_a = attachmentGroup[collection]) == null ? void 0 : _a.map((it) => it.value);
61
+ const attachmentModels = await repository.find({
62
+ filter: {
63
+ id: {
64
+ $in: attachmentKeys
65
+ }
66
+ }
67
+ });
68
+ if (!attachmentModels.length) {
69
+ throw new Error(`Attachment [${collection}] record not existed. Keys: [${attachmentKeys.join(",")}]`);
70
+ }
71
+ attachmentPart.attachments = [
72
+ ...attachmentPart.attachments ?? [],
73
+ ...attachmentModels.map((it) => it.toJSON())
74
+ ];
75
+ }
76
+ }
77
+ };
78
+ const resolveUrls = async (files) => {
79
+ var _a;
80
+ const urls = files.filter((it) => it.type === "file_url");
81
+ if (urls.length) {
82
+ const fileManager = plugin.pm.get("file-manager");
83
+ const settings = await plugin.db.getRepository("aiSettings").findOne();
84
+ const storageName = (_a = settings == null ? void 0 : settings.options) == null ? void 0 : _a.storage;
85
+ const attachments = await Promise.all(
86
+ urls.map(async ({ value: url }) => {
87
+ const response = await import_axios.default.get(url, {
88
+ responseType: "arraybuffer"
89
+ });
90
+ const contentType = (0, import_utils.resolveContentType)(response.headers);
91
+ const fileIdentity = (0, import_utils.resolveFileIdentity)(url, response.headers);
92
+ const tempFilePath = import_node_path.default.join(import_node_os.default.tmpdir(), `${Date.now()}-${import_lodash.default.random(1e9)}`);
93
+ await import_promises.default.writeFile(tempFilePath, response.data);
94
+ try {
95
+ const created = await fileManager.createFileRecord({
96
+ collectionName: "aiFiles",
97
+ filePath: tempFilePath,
98
+ storageName,
99
+ values: {
100
+ ...fileIdentity,
101
+ mimetype: contentType,
102
+ meta: {
103
+ sourceUrl: url
104
+ }
105
+ }
106
+ });
107
+ return created.toJSON();
108
+ } finally {
109
+ await import_promises.default.rm(tempFilePath, { force: true });
110
+ }
111
+ })
112
+ );
113
+ attachmentPart.attachments = [...attachmentPart.attachments ?? [], ...attachments];
114
+ }
115
+ };
116
+ return {
117
+ resolveAttachments,
118
+ resolveUrls
119
+ };
120
+ }
121
+ }
122
+ // Annotate the CommonJS export names for ESM import in node:
123
+ 0 && (module.exports = {
124
+ Files
125
+ });
@@ -0,0 +1,11 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import PluginAIServer from '../../../plugin';
10
+ export declare const registerOnJobAbortedHandler: (plugin: PluginAIServer) => void;
11
+ export declare const registerAIEmployeeTaskNotification: (plugin: PluginAIServer) => void;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var handler_exports = {};
28
+ __export(handler_exports, {
29
+ registerAIEmployeeTaskNotification: () => registerAIEmployeeTaskNotification,
30
+ registerOnJobAbortedHandler: () => registerOnJobAbortedHandler
31
+ });
32
+ module.exports = __toCommonJS(handler_exports);
33
+ var import_plugin_workflow = require("@nocobase/plugin-workflow");
34
+ const registerOnJobAbortedHandler = (plugin) => {
35
+ plugin.db.on("jobs.afterBulkUpdate", async (options) => {
36
+ const { model, attributes, where, transaction } = options;
37
+ if (attributes.status !== import_plugin_workflow.JOB_STATUS.ABORTED) {
38
+ return;
39
+ }
40
+ const jobs = await model.findAll({ where, transaction });
41
+ const aiWorkflowTasks = await plugin.db.getRepository("aiWorkflowTasks").find({
42
+ filter: {
43
+ jobId: jobs.map((it) => it.id)
44
+ },
45
+ transaction
46
+ });
47
+ if (!aiWorkflowTasks.length) {
48
+ return;
49
+ }
50
+ for (const aiWorkflowTask of aiWorkflowTasks) {
51
+ await plugin.db.getRepository("aiWorkflowTasks").update({
52
+ values: { status: "aborted" },
53
+ filter: {
54
+ id: aiWorkflowTask.id
55
+ },
56
+ transaction
57
+ });
58
+ }
59
+ });
60
+ };
61
+ const registerAIEmployeeTaskNotification = (plugin) => {
62
+ plugin.db.on("aiWorkflowTasks.beforeSave", async (model, options) => {
63
+ var _a;
64
+ if (!model.isNewRecord && !model.changed("status")) {
65
+ return;
66
+ }
67
+ const values = model.toJSON();
68
+ (_a = options.transaction) == null ? void 0 : _a.afterCommit(async () => {
69
+ const assignees = await plugin.db.getRepository("usersAiWorkflowTasks").find({
70
+ filter: {
71
+ aiWorkflowTaskId: values.id
72
+ }
73
+ });
74
+ if (!(assignees == null ? void 0 : assignees.length)) {
75
+ return;
76
+ }
77
+ if (values.status === "pending_acceptance") {
78
+ await plugin.db.getRepository("usersAiWorkflowTasks").update({
79
+ values: {
80
+ read: false
81
+ },
82
+ filter: {
83
+ aiWorkflowTaskId: values.id
84
+ }
85
+ });
86
+ }
87
+ for (const assignee of assignees) {
88
+ plugin.app.emit("ws:sendToUser", {
89
+ userId: assignee.userId,
90
+ message: {
91
+ type: "ai-employee-tasks:status",
92
+ payload: {
93
+ taskId: values.id,
94
+ sessionId: values.sessionId,
95
+ status: values.status
96
+ }
97
+ }
98
+ });
99
+ }
100
+ });
101
+ });
102
+ };
103
+ // Annotate the CommonJS export names for ESM import in node:
104
+ 0 && (module.exports = {
105
+ registerAIEmployeeTaskNotification,
106
+ registerOnJobAbortedHandler
107
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { FlowNodeModel, Instruction, Processor } from '@nocobase/plugin-workflow';
10
+ export declare class AIEmployeeInstruction extends Instruction {
11
+ run(node: FlowNodeModel, input: any, processor: Processor): Promise<void>;
12
+ resume(node: FlowNodeModel, job: any, processor: Processor): any;
13
+ private createWorkflowTask;
14
+ private checkApproval;
15
+ }
16
+ export * from './handler';
17
+ export * from './tools';
@@ -0,0 +1,391 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
29
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
30
+ // If the importer is in node compatibility mode or this is not an ESM
31
+ // file that has been converted to a CommonJS file using a Babel-
32
+ // compatible transform (i.e. "__esModule" has not been set), then set
33
+ // "default" to the CommonJS "module.exports" for node compatibility.
34
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
35
+ mod
36
+ ));
37
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
38
+ var employee_exports = {};
39
+ __export(employee_exports, {
40
+ AIEmployeeInstruction: () => AIEmployeeInstruction
41
+ });
42
+ module.exports = __toCommonJS(employee_exports);
43
+ var import_plugin_workflow = require("@nocobase/plugin-workflow");
44
+ var import_plugin = __toESM(require("../../../plugin"));
45
+ var import_ai_employee = require("../../../ai-employees/ai-employee");
46
+ var import_files = require("./files");
47
+ var import_utils = require("@nocobase/utils");
48
+ __reExport(employee_exports, require("./handler"), module.exports);
49
+ __reExport(employee_exports, require("./tools"), module.exports);
50
+ class AIEmployeeInstruction extends import_plugin_workflow.Instruction {
51
+ async run(node, input, processor) {
52
+ var _a, _b, _c, _d, _e;
53
+ const {
54
+ username,
55
+ message,
56
+ skillSettings,
57
+ webSearch,
58
+ model,
59
+ requiresApproval = "no_required",
60
+ userId,
61
+ files
62
+ } = processor.getParsedValue(node.config, node.id);
63
+ const toolName = "aiEmployeeWorkflowTaskOutput";
64
+ const workflowSystemPrompt = `
65
+ You are operating inside a workflow.
66
+ Your job is to complete the workflow task and return the final outcome to the workflow, not to reply freely as a normal assistant.
67
+ Use normal assistant messages only for reasoning that leads to tool calls; do not place the final outcome in a normal assistant message.
68
+ When the task is ready to be submitted, you must call **${toolName}** to return it to the workflow.
69
+ Do not treat **${toolName}** as optional, and do not finish the task without calling it.
70
+ `.trim();
71
+ const systemMessage = `${workflowSystemPrompt}
72
+
73
+ ${typeof message.system === "object" ? JSON.stringify(message.system) : message.system}`;
74
+ const userMessage = `Current workflow task description:
75
+
76
+ ${typeof message.user === "object" ? JSON.stringify(message.user) : message.user}`;
77
+ const { id } = processor.saveJob({
78
+ status: import_plugin_workflow.JOB_STATUS.PENDING,
79
+ nodeId: node.id,
80
+ nodeKey: node.key,
81
+ upstreamId: (input == null ? void 0 : input.id) ?? null
82
+ });
83
+ await processor.exit();
84
+ try {
85
+ const { conversation, aiWorkflowTasks } = await this.createWorkflowTask({
86
+ username,
87
+ userMessage,
88
+ systemMessage,
89
+ skillSettings,
90
+ requiresApproval,
91
+ toolName,
92
+ node,
93
+ processor,
94
+ jobId: id
95
+ });
96
+ let currentRoles = (_a = input == null ? void 0 : input.result) == null ? void 0 : _a.roleName;
97
+ if (!currentRoles) {
98
+ const defaultRole = await this.workflow.db.getRepository("rolesUsers").findOne({
99
+ filter: {
100
+ userId: ((_c = (_b = input == null ? void 0 : input.result) == null ? void 0 : _b.user) == null ? void 0 : _c.id) ?? userId,
101
+ default: true
102
+ }
103
+ });
104
+ currentRoles = defaultRole == null ? void 0 : defaultRole.roleName;
105
+ }
106
+ const employee = await this.workflow.db.getRepository("aiEmployees").findOne({
107
+ filter: {
108
+ username
109
+ }
110
+ });
111
+ const aiEmployee = new import_ai_employee.AIEmployee({
112
+ ctx: {
113
+ app: this.workflow.app,
114
+ db: this.workflow.app.db,
115
+ log: this.workflow.app.log,
116
+ logger: this.workflow.app.log,
117
+ state: { currentRoles },
118
+ auth: {
119
+ user: {
120
+ id: ((_e = (_d = input == null ? void 0 : input.result) == null ? void 0 : _d.user) == null ? void 0 : _e.id) ?? userId
121
+ }
122
+ },
123
+ action: {
124
+ params: {
125
+ values: {
126
+ sessionId: conversation.sessionId,
127
+ model
128
+ }
129
+ }
130
+ }
131
+ },
132
+ employee,
133
+ sessionId: conversation.sessionId,
134
+ systemMessage,
135
+ skillSettings,
136
+ webSearch,
137
+ model,
138
+ tools: [{ name: toolName }]
139
+ });
140
+ const attachmentPart = {};
141
+ if (files == null ? void 0 : files.length) {
142
+ const { resolveAttachments, resolveUrls } = import_files.Files.resolvers(this.workflow, attachmentPart);
143
+ await resolveAttachments(files);
144
+ await resolveUrls(files);
145
+ }
146
+ let result;
147
+ let isToolInvoke = false;
148
+ let retry = 0;
149
+ do {
150
+ const userMessages = [
151
+ {
152
+ role: "user",
153
+ content: {
154
+ type: "text",
155
+ content: userMessage
156
+ },
157
+ ...attachmentPart
158
+ }
159
+ ];
160
+ if (retry > 0) {
161
+ if (retry < 2) {
162
+ const firstUserMessage = await this.workflow.db.getRepository("aiConversations.messages", conversation.sessionId).findOne({
163
+ filter: {
164
+ role: "user"
165
+ },
166
+ sort: ["messageId"]
167
+ });
168
+ const messageId = firstUserMessage == null ? void 0 : firstUserMessage.messageId;
169
+ result = await aiEmployee.invoke({ messageId, userMessages });
170
+ } else {
171
+ result = await aiEmployee.invoke({
172
+ userMessages: [
173
+ {
174
+ role: "user",
175
+ content: {
176
+ type: "text",
177
+ content: `You failed to call the required tool "aiEmployeeWorkflowTaskOutput" in your previous response.
178
+ Call "aiEmployeeWorkflowTaskOutput" now to submit the workflow outcome.
179
+ Do not send another normal assistant response without invoking it.
180
+ `
181
+ }
182
+ }
183
+ ]
184
+ });
185
+ }
186
+ } else {
187
+ result = await aiEmployee.invoke({ userMessages });
188
+ }
189
+ isToolInvoke = result.messages.filter((it) => it.type === "ai").flatMap((it) => it.tool_calls).some((it) => it.name === toolName);
190
+ } while (!isToolInvoke && retry++ < 2);
191
+ if (!isToolInvoke) {
192
+ throw new Error("AI employee not do job correctly");
193
+ }
194
+ await this.checkApproval({ requiresApproval, conversation, aiWorkflowTasks, result, aiEmployee, toolName });
195
+ } catch (e) {
196
+ processor.logger.error(`ai employee invoke failed, ${e.message}`, {
197
+ node: node.id,
198
+ stack: e.stack,
199
+ chatOptions: node.config
200
+ });
201
+ const job = await this.workflow.app.db.getRepository("jobs").findOne({
202
+ filterByTk: id
203
+ });
204
+ job.set({
205
+ status: import_plugin_workflow.JOB_STATUS.ERROR,
206
+ result: e.message
207
+ });
208
+ await this.workflow.resume(job);
209
+ }
210
+ }
211
+ resume(node, job, processor) {
212
+ return job;
213
+ }
214
+ async createWorkflowTask({
215
+ username,
216
+ userMessage,
217
+ systemMessage,
218
+ skillSettings,
219
+ requiresApproval,
220
+ toolName,
221
+ node,
222
+ processor,
223
+ jobId
224
+ }) {
225
+ const ai = this.workflow.app.pm.get(import_plugin.default);
226
+ return await this.workflow.db.sequelize.transaction(async (transaction) => {
227
+ var _a;
228
+ const conversation = await ai.aiConversationsManager.create({
229
+ aiEmployee: {
230
+ username
231
+ },
232
+ title: userMessage.slice(0, 30),
233
+ from: "sub-agent",
234
+ options: {
235
+ systemMessage,
236
+ skillSettings,
237
+ tools: [{ name: toolName }]
238
+ },
239
+ transaction,
240
+ category: "task"
241
+ });
242
+ const aiWorkflowTasks = await this.workflow.db.getRepository("aiWorkflowTasks").create({
243
+ values: {
244
+ id: this.workflow.app.snowflakeIdGenerator.generate(),
245
+ workflowTitle: (_a = processor.execution.workflow) == null ? void 0 : _a.title,
246
+ nodeTitle: node.title,
247
+ requiresApproval,
248
+ status: "processing",
249
+ sessionId: conversation.sessionId,
250
+ jobId,
251
+ executionId: processor.execution.id,
252
+ nodeId: node.id,
253
+ workflowId: node.workflowId
254
+ },
255
+ transaction
256
+ });
257
+ const userIds = await parseAssignees(node, processor);
258
+ if (userIds == null ? void 0 : userIds.length) {
259
+ await this.workflow.db.getRepository("usersAiWorkflowTasks").create({
260
+ values: userIds.map((userId) => ({
261
+ userId,
262
+ aiWorkflowTaskId: aiWorkflowTasks.id,
263
+ read: true
264
+ })),
265
+ transaction
266
+ });
267
+ }
268
+ return { conversation, aiWorkflowTasks };
269
+ });
270
+ }
271
+ async checkApproval({
272
+ requiresApproval,
273
+ conversation,
274
+ aiWorkflowTasks,
275
+ result,
276
+ aiEmployee,
277
+ toolName
278
+ }) {
279
+ var _a;
280
+ const ai = this.workflow.app.pm.get(import_plugin.default);
281
+ const aiToolMessage = await this.workflow.db.getRepository("aiToolMessages").findOne({
282
+ filter: {
283
+ sessionId: conversation.sessionId,
284
+ messageId: result.messageId
285
+ }
286
+ });
287
+ if ((aiToolMessage == null ? void 0 : aiToolMessage.invokeStatus) !== "interrupted") {
288
+ return;
289
+ }
290
+ const aiMessage = await this.workflow.db.getRepository("aiMessages").findOne({
291
+ filter: {
292
+ messageId: result.messageId
293
+ }
294
+ });
295
+ const toolCalls = aiMessage == null ? void 0 : aiMessage.toolCalls;
296
+ if (!(toolCalls == null ? void 0 : toolCalls.length)) {
297
+ return;
298
+ }
299
+ const toolCall = toolCalls.find((it) => it.name === toolName);
300
+ if (((_a = toolCall == null ? void 0 : toolCall.args) == null ? void 0 : _a.requiresApproval) === false) {
301
+ const [updated] = await this.workflow.db.getModel("aiToolMessages").update(
302
+ { userDecision: { type: "approve" }, invokeStatus: "waiting" },
303
+ {
304
+ where: {
305
+ sessionId: conversation.sessionId,
306
+ messageId: result.messageId,
307
+ invokeStatus: "interrupted"
308
+ }
309
+ }
310
+ );
311
+ if (!updated) {
312
+ return;
313
+ }
314
+ const userDecisions = await ai.aiConversationsManager.getUserDecisions(result.messageId);
315
+ await aiEmployee.invoke({ userDecisions });
316
+ await this.workflow.db.getRepository("aiWorkflowTasks").update({
317
+ values: { status: "approved" },
318
+ filter: {
319
+ id: aiWorkflowTasks.id,
320
+ status: {
321
+ $ne: "aborted"
322
+ }
323
+ }
324
+ });
325
+ } else if (requiresApproval !== "no_required") {
326
+ await this.workflow.db.getRepository("aiWorkflowTasks").update({
327
+ values: { status: "pending_acceptance" },
328
+ filter: {
329
+ id: aiWorkflowTasks.id,
330
+ status: {
331
+ $ne: "aborted"
332
+ }
333
+ }
334
+ });
335
+ }
336
+ }
337
+ }
338
+ async function parseAssignees(node, processor) {
339
+ const configAssignees = processor.getParsedValue(node.config.assignees ?? [], node.id).flat().filter(Boolean);
340
+ const assignees = [];
341
+ const seen = /* @__PURE__ */ new Set();
342
+ const addAssignee = (id) => {
343
+ if (!seen.has(id)) {
344
+ seen.add(id);
345
+ assignees.push(id);
346
+ }
347
+ };
348
+ const UserRepo = processor.options.plugin.app.db.getRepository("users");
349
+ const plainIds = configAssignees.flatMap(
350
+ (item) => Array.isArray(item) ? item : typeof item !== "object" ? [item] : []
351
+ );
352
+ const validIdSet = /* @__PURE__ */ new Set();
353
+ if (plainIds.length) {
354
+ const users = await UserRepo.find({
355
+ filter: { id: { $in: plainIds } },
356
+ fields: ["id"],
357
+ transaction: processor.mainTransaction
358
+ });
359
+ users.forEach((u) => validIdSet.add(u.id));
360
+ }
361
+ for (const item of configAssignees) {
362
+ if (Array.isArray(item)) {
363
+ for (const id of item) {
364
+ if (validIdSet.has(id)) {
365
+ addAssignee(id);
366
+ }
367
+ }
368
+ } else if (typeof item === "object") {
369
+ if (!(0, import_utils.isValidFilter)(item.filter)) {
370
+ continue;
371
+ }
372
+ const result = await UserRepo.find({
373
+ ...item,
374
+ fields: ["id"],
375
+ transaction: processor.mainTransaction
376
+ });
377
+ result.forEach((user) => addAssignee(user.id));
378
+ } else {
379
+ if (validIdSet.has(item)) {
380
+ addAssignee(item);
381
+ }
382
+ }
383
+ }
384
+ return assignees;
385
+ }
386
+ // Annotate the CommonJS export names for ESM import in node:
387
+ 0 && (module.exports = {
388
+ AIEmployeeInstruction,
389
+ ...require("./handler"),
390
+ ...require("./tools")
391
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { DynamicToolsProvider } from '@nocobase/ai';
10
+ import { Plugin } from '@nocobase/server';
11
+ export type WorkflowTaskToolProvider = (plugin: Plugin) => DynamicToolsProvider;
12
+ export declare const getWorkflowTasks: WorkflowTaskToolProvider;