@nocobase/plugin-ai 2.3.0-alpha.1 → 2.3.0-beta.2

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 (307) hide show
  1. package/dist/ai/docs/nocobase/ai-dev/watermark-plugin.md +2 -0
  2. package/dist/ai/docs/nocobase/ai-employees/block/ai-chat-box.md +133 -0
  3. package/dist/ai/docs/nocobase/ai-employees/knowledge-base/knowledge-base/documents.md +1 -1
  4. package/dist/ai/docs/nocobase/ai-employees/knowledge-base/knowledge-base/index.md +11 -7
  5. package/dist/ai/docs/nocobase/ai-employees/knowledge-base/knowledge-base/settings.md +12 -8
  6. package/dist/ai/docs/nocobase/ai-employees/knowledge-base/rag.md +43 -13
  7. package/dist/ai/docs/nocobase/ai-employees/knowledge-base/vector-database.md +3 -3
  8. package/dist/ai/docs/nocobase/ai-employees/workflow/nodes/knowledge/create-document.md +1 -1
  9. package/dist/ai/docs/nocobase/api/app/env.md +2 -0
  10. package/dist/ai/docs/nocobase/api/cli/api/resource/create.md +4 -3
  11. package/dist/ai/docs/nocobase/building-tips/ai-fill-js-block-form.md +1092 -0
  12. package/dist/ai/docs/nocobase/data-sources/calendar/calendar-collection.md +100 -3
  13. package/dist/ai/docs/nocobase/data-sources/collection-comment/index.md +92 -39
  14. package/dist/ai/docs/nocobase/data-sources/collection-sql/index.md +150 -29
  15. package/dist/ai/docs/nocobase/data-sources/collection-tree/index.md +93 -5
  16. package/dist/ai/docs/nocobase/data-sources/collection-view/index.md +226 -4
  17. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/china-region.md +122 -5
  18. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/collection-select.md +105 -4
  19. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/json.md +102 -4
  20. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/nano-id.md +104 -4
  21. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/snowflake-id.md +108 -4
  22. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/sort.md +3 -19
  23. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/uuid.md +104 -4
  24. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/associations/index.md +44 -8
  25. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/color.md +102 -4
  26. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/email.md +104 -4
  27. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/icon.md +102 -4
  28. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/input.md +112 -8
  29. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/integer.md +103 -4
  30. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/number.md +103 -4
  31. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/password.md +102 -4
  32. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/percent.md +104 -5
  33. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/phone.md +104 -4
  34. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/textarea.md +99 -8
  35. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/url.md +103 -4
  36. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/checkbox-group.md +105 -3
  37. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/checkbox.md +102 -4
  38. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/china-region.md +108 -5
  39. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/multiple-select.md +103 -5
  40. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/radio-group.md +106 -4
  41. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/select.md +103 -5
  42. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/date.md +102 -4
  43. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/datetime-without-tz.md +103 -5
  44. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/datetime.md +103 -5
  45. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/index.md +53 -47
  46. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/time.md +102 -4
  47. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/unix-timestamp.md +103 -5
  48. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/circle.md +102 -4
  49. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/line.md +103 -5
  50. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/point.md +102 -4
  51. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/polygon.md +102 -4
  52. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/index.md +62 -16
  53. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/media/markdown.md +104 -4
  54. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/media/rich-text.md +105 -5
  55. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/created-at.md +105 -5
  56. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/created-by.md +103 -5
  57. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/space.md +100 -6
  58. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/table-oid.md +102 -4
  59. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/updated-at.md +104 -5
  60. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/updated-by.md +104 -6
  61. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/validation.md +68 -58
  62. package/dist/ai/docs/nocobase/data-sources/data-modeling/collection.md +32 -13
  63. package/dist/ai/docs/nocobase/data-sources/data-modeling/index.md +41 -33
  64. package/dist/ai/docs/nocobase/data-sources/data-source-external-mariadb/index.md +114 -6
  65. package/dist/ai/docs/nocobase/data-sources/data-source-external-mssql/index.md +117 -6
  66. package/dist/ai/docs/nocobase/data-sources/data-source-external-mysql/index.md +103 -6
  67. package/dist/ai/docs/nocobase/data-sources/data-source-external-nocobase/index.md +75 -73
  68. package/dist/ai/docs/nocobase/data-sources/data-source-external-oracle/index.md +129 -11
  69. package/dist/ai/docs/nocobase/data-sources/data-source-external-postgres/index.md +110 -6
  70. package/dist/ai/docs/nocobase/data-sources/data-source-kingbase/index.md +75 -49
  71. package/dist/ai/docs/nocobase/data-sources/data-source-main/general-collection.md +116 -15
  72. package/dist/ai/docs/nocobase/data-sources/data-source-main/index.md +92 -62
  73. package/dist/ai/docs/nocobase/data-sources/data-source-main/inheritance-collection.md +97 -10
  74. package/dist/ai/docs/nocobase/data-sources/data-source-manager/external-database.md +97 -58
  75. package/dist/ai/docs/nocobase/data-sources/data-source-manager/index.md +32 -24
  76. package/dist/ai/docs/nocobase/data-sources/data-source-rest-api/index.md +115 -153
  77. package/dist/ai/docs/nocobase/data-sources/external/clickhouse.md +124 -0
  78. package/dist/ai/docs/nocobase/data-sources/external/doris.md +130 -0
  79. package/dist/ai/docs/nocobase/data-sources/external/index.md +140 -0
  80. package/dist/ai/docs/nocobase/data-sources/external/kingbase.md +129 -0
  81. package/dist/ai/docs/nocobase/data-sources/external/mariadb.md +126 -0
  82. package/dist/ai/docs/nocobase/data-sources/external/mssql.md +129 -0
  83. package/dist/ai/docs/nocobase/data-sources/external/mysql.md +115 -0
  84. package/dist/ai/docs/nocobase/data-sources/external/nocobase.md +159 -0
  85. package/dist/ai/docs/nocobase/data-sources/external/oceanbase.md +126 -0
  86. package/dist/ai/docs/nocobase/data-sources/external/oracle.md +158 -0
  87. package/dist/ai/docs/nocobase/data-sources/external/postgresql.md +122 -0
  88. package/dist/ai/docs/nocobase/data-sources/external/rest-api.md +245 -0
  89. package/dist/ai/docs/nocobase/data-sources/field-attachment-url/index.md +100 -12
  90. package/dist/ai/docs/nocobase/data-sources/field-encryption/index.md +48 -47
  91. package/dist/ai/docs/nocobase/data-sources/field-formula/index.md +99 -5
  92. package/dist/ai/docs/nocobase/data-sources/field-markdown-vditor/index.md +105 -5
  93. package/dist/ai/docs/nocobase/data-sources/field-sequence/index.md +102 -5
  94. package/dist/ai/docs/nocobase/data-sources/field-signature/index.md +18 -16
  95. package/dist/ai/docs/nocobase/data-sources/field-sort/index.md +76 -73
  96. package/dist/ai/docs/nocobase/data-sources/file-manager/field-attachment.md +101 -7
  97. package/dist/ai/docs/nocobase/data-sources/file-manager/file-collection.md +101 -14
  98. package/dist/ai/docs/nocobase/data-sources/index.md +49 -33
  99. package/dist/ai/docs/nocobase/data-sources/main/index.md +130 -0
  100. package/dist/ai/docs/nocobase/data-sources/main/kingbase.md +147 -0
  101. package/dist/ai/docs/nocobase/data-sources/main/mariadb.md +59 -0
  102. package/dist/ai/docs/nocobase/data-sources/main/mysql.md +59 -0
  103. package/dist/ai/docs/nocobase/data-sources/main/oceanbase.md +62 -0
  104. package/dist/ai/docs/nocobase/data-sources/main/postgresql.md +61 -0
  105. package/dist/ai/docs/nocobase/file-manager/file-preview/index.md +44 -3
  106. package/dist/ai/docs/nocobase/file-manager/storage/aliyun-oss.md +100 -3
  107. package/dist/ai/docs/nocobase/file-manager/storage/index.md +66 -26
  108. package/dist/ai/docs/nocobase/file-manager/storage/s3-pro.md +58 -7
  109. package/dist/ai/docs/nocobase/get-started/installation/env.md +1 -1
  110. package/dist/ai/docs/nocobase/ops-management/migration-manager/built-in-tables.md +1 -2
  111. package/dist/ai/docs/nocobase/plugin-development/build.md +10 -4
  112. package/dist/ai/docs/nocobase/plugin-development/client/appendix/faq.md +1 -1
  113. package/dist/ai/docs/nocobase/plugin-development/client/examples/custom-action.md +2 -0
  114. package/dist/ai/docs/nocobase/plugin-development/client/examples/custom-block.md +2 -0
  115. package/dist/ai/docs/nocobase/plugin-development/client/examples/custom-field.md +2 -0
  116. package/dist/ai/docs/nocobase/plugin-development/client/examples/fullstack-plugin.md +2 -0
  117. package/dist/ai/docs/nocobase/plugin-development/client/examples/settings-page.md +2 -0
  118. package/dist/ai/docs/nocobase/plugin-development/common/i18n.md +3 -3
  119. package/dist/ai/docs/nocobase/plugin-development/server/cache.md +1 -1
  120. package/dist/ai/docs/nocobase/plugin-development/server/collections.md +0 -6
  121. package/dist/ai/docs/nocobase/plugin-development/server/command.md +2 -2
  122. package/dist/ai/docs/nocobase/plugin-development/server/context.md +2 -2
  123. package/dist/ai/docs/nocobase/plugin-development/server/i18n.md +4 -4
  124. package/dist/ai/docs/nocobase/plugin-development/write-your-first-plugin.md +91 -43
  125. package/dist/ai/docs/nocobase/runjs/context/ai.md +194 -4
  126. package/dist/ai/docs/nocobase/users-permissions/sync/index.md +8 -1
  127. package/dist/ai/docs/nocobase/users-permissions/sync/sources/dingtalk.md +138 -0
  128. package/dist/ai/docs/nocobase/users-permissions/sync/sources/ldap.md +87 -0
  129. package/dist/ai/docs/nocobase/workflow/nodes/javascript.md +21 -1
  130. package/dist/ai/tools/executeFrontendTool.d.ts +10 -0
  131. package/dist/ai/tools/executeFrontendTool.js +86 -0
  132. package/dist/ai/tools/getSkill.js +1 -1
  133. package/dist/ai/tools/knowledge-base-retrieve.js +3 -1
  134. package/dist/ai/tools/loadFrontendTool.d.ts +10 -0
  135. package/dist/ai/tools/loadFrontendTool.js +99 -0
  136. package/dist/client/244.28ee769f796b7c2f.js +10 -0
  137. package/dist/client/{525.203778500aca5d05.js → 525.94dd4136c1361477.js} +1 -1
  138. package/dist/client/681.6ffbc9329b9ac242.js +10 -0
  139. package/dist/{client-v2/705.1d10027ff8cfdf79.js → client/705.a4fe26945d175e8a.js} +1 -1
  140. package/dist/client/index.d.ts +1 -3
  141. package/dist/client/index.js +8 -8
  142. package/dist/client-v2/244.39348a95d627d9e3.js +10 -0
  143. package/dist/client-v2/420.a5b929a5e7f330be.js +10 -0
  144. package/dist/client-v2/681.6890caa389564ff7.js +10 -0
  145. package/dist/client-v2/705.f2e1b26a3f000075.js +10 -0
  146. package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +2 -0
  147. package/dist/client-v2/ai-employees/AddContextButton.d.ts +2 -0
  148. package/dist/client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts +1 -0
  149. package/dist/client-v2/ai-employees/chatbox/components/ChatBoxUnreadBadge.d.ts +17 -0
  150. package/dist/client-v2/ai-employees/chatbox/components/Conversations.d.ts +9 -1
  151. package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +1 -1
  152. package/dist/client-v2/ai-employees/chatbox/components/Messages.d.ts +5 -1
  153. package/dist/client-v2/ai-employees/chatbox/components/ModelSwitcher.d.ts +4 -0
  154. package/dist/client-v2/ai-employees/chatbox/components/Sender.d.ts +33 -1
  155. package/dist/client-v2/ai-employees/chatbox/components/index.d.ts +1 -0
  156. package/dist/client-v2/ai-employees/chatbox/hooks/reasoning-stream.d.ts +10 -0
  157. package/dist/client-v2/ai-employees/chatbox/hooks/useChat.d.ts +8 -5
  158. package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +3 -2
  159. package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +2 -1
  160. package/dist/client-v2/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +3 -2
  161. package/dist/client-v2/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +4 -2
  162. package/dist/client-v2/ai-employees/chatbox/hooks/useToolCallActions.d.ts +3 -1
  163. package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +13 -3
  164. package/dist/client-v2/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +3 -2
  165. package/dist/client-v2/ai-employees/chatbox/index.d.ts +17 -0
  166. package/dist/client-v2/ai-employees/chatbox/roles.d.ts +2 -153
  167. package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +46 -33
  168. package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +7 -7
  169. package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +23 -18
  170. package/dist/client-v2/ai-employees/chatbox/stores/chat-sender.d.ts +43 -0
  171. package/dist/client-v2/ai-employees/chatbox/stores/chat-tool-call.d.ts +6 -5
  172. package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +11 -5
  173. package/dist/client-v2/ai-employees/chatbox/stores/mounted-chat-boxes.d.ts +20 -0
  174. package/dist/client-v2/ai-employees/chatbox/stores/runtime.d.ts +43 -0
  175. package/dist/client-v2/ai-employees/chatbox/stores/workflow-tasks.d.ts +22 -10
  176. package/dist/client-v2/ai-employees/chatbox/upload.d.ts +19 -0
  177. package/dist/client-v2/ai-employees/chatbox/utils.d.ts +28 -4
  178. package/dist/client-v2/ai-employees/frontend-tools.d.ts +11 -0
  179. package/dist/client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts +1 -1
  180. package/dist/client-v2/ai-employees/tools/WorkflowTaskOutputCard.d.ts +1 -1
  181. package/dist/client-v2/ai-employees/types.d.ts +30 -0
  182. package/dist/client-v2/block/ai-chat-box/AIChatBoxBlockModel.d.ts +21 -0
  183. package/dist/client-v2/block/ai-chat-box/AIChatBoxCoreModel.d.ts +13 -0
  184. package/dist/client-v2/{ai-employees/chatbox/components/DebugPanel.d.ts → block/ai-chat-box/components/AIChatBoxCoreView.d.ts} +1 -1
  185. package/dist/client-v2/block/ai-chat-box/components/AIChatBoxView.d.ts +12 -0
  186. package/dist/client-v2/block/ai-chat-box/index.d.ts +14 -0
  187. package/dist/client-v2/block/ai-chat-box/settings.d.ts +12 -0
  188. package/dist/client-v2/block/ai-chat-box/sub-models.d.ts +26 -0
  189. package/dist/client-v2/block/ai-chat-box/types.d.ts +38 -0
  190. package/dist/client-v2/block/ai-chat-box/utils.d.ts +26 -0
  191. package/dist/client-v2/index.d.ts +3 -5
  192. package/dist/client-v2/index.js +3 -3
  193. package/dist/client-v2/llm-providers/forms.d.ts +2 -0
  194. package/dist/client-v2/llm-providers/index.d.ts +1 -0
  195. package/dist/client-v2/llm-services/model-select.d.ts +33 -0
  196. package/dist/client-v2/llm-services/utils.d.ts +1 -0
  197. package/dist/client-v2/manager/ai-manager.d.ts +10 -3
  198. package/dist/client-v2/manager/frontend-tool-registry.d.ts +30 -0
  199. package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +4 -1
  200. package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +8 -0
  201. package/dist/client-v2/pages/EmployeesPage.d.ts +12 -0
  202. package/dist/client-v2/pages/LLMServicesPage.d.ts +9 -4
  203. package/dist/client-v2/repositories/AIConfigRepository.d.ts +2 -0
  204. package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +1 -0
  205. package/dist/collections/ai-employees.d.ts +1 -0
  206. package/dist/collections/ai-employees.js +1 -0
  207. package/dist/common/ai-employee-validation.d.ts +15 -0
  208. package/dist/common/ai-employee-validation.js +61 -0
  209. package/dist/common/error-codes.d.ts +13 -0
  210. package/dist/common/error-codes.js +48 -0
  211. package/dist/common/frontend-tools.d.ts +26 -0
  212. package/dist/common/frontend-tools.js +57 -0
  213. package/dist/common/llm-service-models.d.ts +16 -0
  214. package/dist/common/llm-service-models.js +84 -0
  215. package/dist/externalVersion.js +19 -17
  216. package/dist/locale/de-DE.json +2 -1
  217. package/dist/locale/en-US.json +85 -5
  218. package/dist/locale/es-ES.json +2 -1
  219. package/dist/locale/fr-FR.json +2 -1
  220. package/dist/locale/hu-HU.json +2 -1
  221. package/dist/locale/id-ID.json +2 -1
  222. package/dist/locale/it-IT.json +2 -1
  223. package/dist/locale/ja-JP.json +2 -1
  224. package/dist/locale/ko-KR.json +2 -1
  225. package/dist/locale/nl-NL.json +2 -1
  226. package/dist/locale/pt-BR.json +2 -1
  227. package/dist/locale/ru-RU.json +2 -1
  228. package/dist/locale/tr-TR.json +2 -1
  229. package/dist/locale/uk-UA.json +2 -1
  230. package/dist/locale/vi-VN.json +2 -1
  231. package/dist/locale/zh-CN.json +85 -5
  232. package/dist/locale/zh-TW.json +2 -1
  233. package/dist/node_modules/@langchain/mistralai/package.json +1 -1
  234. package/dist/node_modules/@langchain/xai/package.json +1 -1
  235. package/dist/node_modules/fs-extra/package.json +1 -1
  236. package/dist/node_modules/jsonrepair/package.json +1 -1
  237. package/dist/node_modules/just-bash/package.json +1 -1
  238. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  239. package/dist/node_modules/openai/package.json +1 -1
  240. package/dist/node_modules/zod/package.json +1 -1
  241. package/dist/server/ai-employees/ai-conversations.d.ts +4 -1
  242. package/dist/server/ai-employees/ai-conversations.js +2 -0
  243. package/dist/server/ai-employees/ai-employee.d.ts +4 -1
  244. package/dist/server/ai-employees/ai-employee.js +112 -47
  245. package/dist/server/ai-employees/ai-knowledge-base.d.ts +21 -1
  246. package/dist/server/ai-employees/ai-knowledge-base.js +76 -8
  247. package/dist/server/ai-employees/middleware/conversation.js +9 -2
  248. package/dist/server/ai-employees/reasoning-stream-state.d.ts +23 -0
  249. package/dist/server/ai-employees/reasoning-stream-state.js +63 -0
  250. package/dist/server/collections/ai-conversations.js +5 -0
  251. package/dist/server/document-loader/constants.js +1 -1
  252. package/dist/server/features/knowledge-base.d.ts +2 -0
  253. package/dist/server/frontend-tools.d.ts +25 -0
  254. package/dist/server/frontend-tools.js +171 -0
  255. package/dist/server/llm-providers/common/reasoning.js +18 -10
  256. package/dist/server/llm-providers/deepseek/index.d.ts +10 -0
  257. package/dist/server/llm-providers/deepseek/index.js +32 -0
  258. package/dist/server/llm-providers/deepseek/provider.d.ts +57 -0
  259. package/dist/server/llm-providers/deepseek/provider.js +320 -0
  260. package/dist/server/llm-providers/deepseek/reasoning.d.ts +83 -0
  261. package/dist/server/llm-providers/deepseek/reasoning.js +285 -0
  262. package/dist/server/llm-providers/mistral.d.ts +1 -1
  263. package/dist/server/llm-providers/provider.d.ts +1 -0
  264. package/dist/server/llm-providers/provider.js +3 -0
  265. package/dist/server/llm-providers/shengsuanyun.d.ts +29 -0
  266. package/dist/server/llm-providers/shengsuanyun.js +114 -0
  267. package/dist/server/manager/ai-feature-manager.js +1 -1
  268. package/dist/server/manager/ai-manager.d.ts +3 -0
  269. package/dist/server/manager/ai-manager.js +7 -2
  270. package/dist/server/manager/work-context-handler.js +10 -3
  271. package/dist/server/migrations/20260501000000-ai-employee-knowledge-base-retrieval-strategy.d.ts +14 -0
  272. package/dist/server/migrations/20260501000000-ai-employee-knowledge-base-retrieval-strategy.js +49 -0
  273. package/dist/server/plugin.d.ts +1 -0
  274. package/dist/server/plugin.js +31 -0
  275. package/dist/server/resource/aiConversations.d.ts +2 -0
  276. package/dist/server/resource/aiConversations.js +33 -3
  277. package/dist/server/resource/aiEmployees.d.ts +2 -0
  278. package/dist/server/resource/aiEmployees.js +70 -0
  279. package/dist/server/resource/aiWorkflowTasks.js +9 -1
  280. package/dist/server/resource/llmServices.d.ts +11 -0
  281. package/dist/server/resource/llmServices.js +85 -0
  282. package/dist/server/types/ai-message.type.d.ts +4 -0
  283. package/dist/server/types/knowledge-base.type.d.ts +8 -3
  284. package/dist/swagger/common.d.ts +143 -0
  285. package/dist/swagger/common.js +144 -0
  286. package/dist/swagger/employees.d.ts +301 -0
  287. package/dist/swagger/employees.js +131 -0
  288. package/dist/swagger/index.d.ts +1617 -0
  289. package/dist/swagger/index.js +62 -0
  290. package/dist/swagger/llm.d.ts +563 -0
  291. package/dist/swagger/llm.js +255 -0
  292. package/dist/swagger/schemas.d.ts +757 -0
  293. package/dist/swagger/schemas.js +392 -0
  294. package/package.json +2 -2
  295. package/dist/ai/docs/nocobase/ai-employees/knowledge-base/vector-store.md +0 -24
  296. package/dist/ai/docs/nocobase/data-sources/development/index.md +0 -6
  297. package/dist/client/372.40eb52905e3f3049.js +0 -10
  298. package/dist/client/681.399948c18d753667.js +0 -10
  299. package/dist/client/705.380279da896021fb.js +0 -10
  300. package/dist/client-v2/372.8cc3fde09c9bec77.js +0 -10
  301. package/dist/client-v2/406.341be51205c674e0.js +0 -10
  302. package/dist/client-v2/681.082f4f1c7b841983.js +0 -10
  303. package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +0 -46
  304. package/dist/client-v2/ai-employees/chatbox/utils/normalizeTriggerTaskOptions.d.ts +0 -19
  305. package/dist/client-v2/debug-logger.d.ts +0 -52
  306. package/dist/server/llm-providers/deepseek.d.ts +0 -40
  307. package/dist/server/llm-providers/deepseek.js +0 -174
@@ -36,12 +36,64 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
36
36
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
37
  var ai_knowledge_base_exports = {};
38
38
  __export(ai_knowledge_base_exports, {
39
- KnowledgeBaseManager: () => KnowledgeBaseManager
39
+ KNOWLEDGE_BASE_NO_ACCESS_PROMPT: () => KNOWLEDGE_BASE_NO_ACCESS_PROMPT,
40
+ KNOWLEDGE_BASE_ON_DEMAND_PROMPT: () => KNOWLEDGE_BASE_ON_DEMAND_PROMPT,
41
+ KNOWLEDGE_BASE_PRE_RETRIEVED_PROMPT: () => KNOWLEDGE_BASE_PRE_RETRIEVED_PROMPT,
42
+ KNOWLEDGE_BASE_RETRIEVAL_STRATEGIES: () => KNOWLEDGE_BASE_RETRIEVAL_STRATEGIES,
43
+ KnowledgeBaseManager: () => KnowledgeBaseManager,
44
+ getCurrentRoleNames: () => getCurrentRoleNames,
45
+ getKnowledgeBaseBackgroundPrompt: () => getKnowledgeBaseBackgroundPrompt,
46
+ isKnowledgeBaseRetrievalStrategy: () => isKnowledgeBaseRetrievalStrategy,
47
+ normalizeKnowledgeBaseRetrievalStrategy: () => normalizeKnowledgeBaseRetrievalStrategy,
48
+ withDefaultKnowledgeBaseRetrievalStrategy: () => withDefaultKnowledgeBaseRetrievalStrategy
40
49
  });
41
50
  module.exports = __toCommonJS(ai_knowledge_base_exports);
42
51
  var import_prompts = require("@langchain/core/prompts");
43
52
  var import_ai_feature_manager = require("../manager/ai-feature-manager");
44
53
  var import_lodash = __toESM(require("lodash"));
54
+ const KNOWLEDGE_BASE_RETRIEVAL_STRATEGIES = ["always", "onDemand"];
55
+ const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
56
+ const getRoleNames = (roles) => Array.isArray(roles) ? Array.from(
57
+ new Set(
58
+ roles.map((role) => isRecord(role) ? role.name : role).filter((role) => typeof role === "string" && role.length > 0)
59
+ )
60
+ ) : [];
61
+ const isKnowledgeBaseRetrievalStrategy = (value) => typeof value === "string" && KNOWLEDGE_BASE_RETRIEVAL_STRATEGIES.includes(value);
62
+ const normalizeKnowledgeBaseRetrievalStrategy = (value) => isKnowledgeBaseRetrievalStrategy(value) ? value : "always";
63
+ const withDefaultKnowledgeBaseRetrievalStrategy = (knowledgeBase) => {
64
+ const settings = isRecord(knowledgeBase) ? { ...knowledgeBase } : {};
65
+ if (!isKnowledgeBaseRetrievalStrategy(settings.retrievalStrategy)) {
66
+ settings.retrievalStrategy = "onDemand";
67
+ }
68
+ return settings;
69
+ };
70
+ const getCurrentRoleNames = (state) => {
71
+ const { currentRole, currentRoles, currentUser } = isRecord(state) ? state : {};
72
+ const currentUserRoleNames = getRoleNames(isRecord(currentUser) ? currentUser.roles : void 0);
73
+ if (currentUserRoleNames.length) {
74
+ return currentUserRoleNames;
75
+ }
76
+ if (Array.isArray(currentRoles)) {
77
+ return getRoleNames(currentRoles);
78
+ }
79
+ return typeof currentRole === "string" && currentRole.length > 0 ? [currentRole] : [];
80
+ };
81
+ const KNOWLEDGE_BASE_ON_DEMAND_PROMPT = "Use the knowledge base retrieval tool only when the request needs internal knowledge, uploaded documents, or knowledge-base facts. Do not call it for requests that clearly do not need those sources.";
82
+ const KNOWLEDGE_BASE_PRE_RETRIEVED_PROMPT = "The <knowledgeBase> content was retrieved in advance for the current user request. Use it directly when it is sufficient to answer; do not call the knowledge base retrieval tool again unless additional or different knowledge-base information is genuinely needed.";
83
+ const KNOWLEDGE_BASE_NO_ACCESS_PROMPT = "The current user does not have permission to access any knowledge base in this AI employee's configured scope. First answer the user's question as helpfully as possible using only information available without knowledge-base content; do not replace or interrupt the answer with a permission notice, and do not fabricate unavailable facts. Only after completing the answer, append a brief notice in the user's language stating that this response did not use knowledge-base content because the current user does not have permission to access these knowledge bases. Format this notice as a visually prominent Markdown reminder, using a blockquote with a bold warning or reminder heading so that it is easy to notice. If knowledge-base access is needed, advise the user to contact an administrator. Do not claim to have searched or used knowledge-base content.";
84
+ const getKnowledgeBaseBackgroundPrompt = ({
85
+ accessDenied,
86
+ onDemand,
87
+ preRetrieved
88
+ }) => {
89
+ if (accessDenied) {
90
+ return KNOWLEDGE_BASE_NO_ACCESS_PROMPT;
91
+ }
92
+ if (onDemand) {
93
+ return KNOWLEDGE_BASE_ON_DEMAND_PROMPT;
94
+ }
95
+ return preRetrieved ? KNOWLEDGE_BASE_PRE_RETRIEVED_PROMPT : void 0;
96
+ };
45
97
  const normalizeMatchedQuestions = (value) => {
46
98
  if (!Array.isArray(value)) {
47
99
  return [];
@@ -62,17 +114,14 @@ class KnowledgeBaseManager {
62
114
  constructor(plugin) {
63
115
  this.plugin = plugin;
64
116
  }
65
- async retrievePrompt({ username, employee, query }) {
117
+ async retrievePrompt({ username, employee, query, roleNames }) {
66
118
  employee = employee ?? (username ? await this.getEmployee(username) : null);
67
119
  if (!employee) {
68
120
  return "Specified knowledge base not existed";
69
121
  }
70
- const { knowledgeBaseKeys, topK, score } = employee.knowledgeBase ?? {};
71
- if (!knowledgeBaseKeys || import_lodash.default.isEmpty(knowledgeBaseKeys)) {
72
- return "Specified knowledge base not existed";
73
- }
122
+ const { knowledgeBaseKeys = [], topK, score } = employee.knowledgeBase ?? {};
74
123
  const promptTemplate = import_prompts.ChatPromptTemplate.fromTemplate(employee.knowledgeBasePrompt ?? "{knowledgeBaseData}");
75
- const docs = await this.plugin.features.knowledgeBase.search({ knowledgeBaseKeys, query, topK, score });
124
+ const docs = await this.plugin.features.knowledgeBase.search({ knowledgeBaseKeys, query, topK, score, roleNames });
76
125
  if (!(docs == null ? void 0 : docs.length)) {
77
126
  return "No document match in knowledge base";
78
127
  }
@@ -81,6 +130,16 @@ class KnowledgeBaseManager {
81
130
  knowledgeBaseData
82
131
  });
83
132
  }
133
+ async hasAccessibleKnowledgeBase({ employee, roleNames }) {
134
+ var _a;
135
+ const knowledgeBaseKeys = ((_a = employee.knowledgeBase) == null ? void 0 : _a.knowledgeBaseKeys) ?? [];
136
+ const knowledgeBaseFeature = this.plugin.features.knowledgeBase;
137
+ if (!knowledgeBaseFeature.getAccessibleKnowledgeBaseKeys) {
138
+ return true;
139
+ }
140
+ const accessibleKeys = await knowledgeBaseFeature.getAccessibleKnowledgeBaseKeys({ knowledgeBaseKeys, roleNames });
141
+ return accessibleKeys.length > 0;
142
+ }
84
143
  async isEnabledKnowledgeBase(usernameOrEmployee) {
85
144
  const featureEnabled = this.plugin.features.isFeaturesEnabled(Object.values(import_ai_feature_manager.EEFeatures));
86
145
  const employee = typeof usernameOrEmployee === "string" ? await this.getEmployee(usernameOrEmployee) : usernameOrEmployee;
@@ -96,5 +155,14 @@ class KnowledgeBaseManager {
96
155
  }
97
156
  // Annotate the CommonJS export names for ESM import in node:
98
157
  0 && (module.exports = {
99
- KnowledgeBaseManager
158
+ KNOWLEDGE_BASE_NO_ACCESS_PROMPT,
159
+ KNOWLEDGE_BASE_ON_DEMAND_PROMPT,
160
+ KNOWLEDGE_BASE_PRE_RETRIEVED_PROMPT,
161
+ KNOWLEDGE_BASE_RETRIEVAL_STRATEGIES,
162
+ KnowledgeBaseManager,
163
+ getCurrentRoleNames,
164
+ getKnowledgeBaseBackgroundPrompt,
165
+ isKnowledgeBaseRetrievalStrategy,
166
+ normalizeKnowledgeBaseRetrievalStrategy,
167
+ withDefaultKnowledgeBaseRetrievalStrategy
100
168
  });
@@ -98,8 +98,9 @@ const conversationMiddleware = (aiEmployee, options) => {
98
98
  })
99
99
  }),
100
100
  beforeAgent: async (state) => {
101
- const lastHumanMessageIndex = state.lastMessageIndex.lastHumanMessageIndex;
102
- const userMessages = state.messages.filter((x) => x.type === "human").slice(lastHumanMessageIndex).map((x) => x).map(convertHumanMessage);
101
+ const humanMessages = state.messages.filter((x) => x.type === "human");
102
+ const currentHumanMessageIndex = humanMessages.length;
103
+ const userMessages = (aiEmployee.userMessageCount ? humanMessages.slice(-aiEmployee.userMessageCount) : []).map((x) => x).map(convertHumanMessage);
103
104
  await aiEmployee.aiChatConversation.withTransaction(async (conversation, transaction) => {
104
105
  if (agentThread) {
105
106
  await aiEmployee.updateThread(transaction, agentThread);
@@ -111,6 +112,12 @@ const conversationMiddleware = (aiEmployee, options) => {
111
112
  await conversation.addMessages(userMessages);
112
113
  }
113
114
  });
115
+ return {
116
+ lastMessageIndex: {
117
+ ...state.lastMessageIndex,
118
+ lastHumanMessageIndex: currentHumanMessageIndex
119
+ }
120
+ };
114
121
  },
115
122
  afterAgent: async () => {
116
123
  aiEmployee.removeAbortController();
@@ -0,0 +1,23 @@
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
+ export type StreamConversation = {
10
+ sessionId: string;
11
+ from: string;
12
+ username: string;
13
+ };
14
+ export declare class ReasoningStreamState {
15
+ private readonly active;
16
+ start(conversation: StreamConversation): void;
17
+ stop(conversation: StreamConversation): boolean;
18
+ drain(): StreamConversation[];
19
+ }
20
+ export declare const isReasoningFinishChunk: (chunk: {
21
+ response_metadata?: Record<string, unknown>;
22
+ usage_metadata?: Record<string, unknown>;
23
+ }) => boolean;
@@ -0,0 +1,63 @@
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 reasoning_stream_state_exports = {};
28
+ __export(reasoning_stream_state_exports, {
29
+ ReasoningStreamState: () => ReasoningStreamState,
30
+ isReasoningFinishChunk: () => isReasoningFinishChunk
31
+ });
32
+ module.exports = __toCommonJS(reasoning_stream_state_exports);
33
+ const getConversationKey = (conversation) => `${conversation.from}:${conversation.sessionId}:${conversation.username}`;
34
+ class ReasoningStreamState {
35
+ active = /* @__PURE__ */ new Map();
36
+ start(conversation) {
37
+ this.active.set(getConversationKey(conversation), conversation);
38
+ }
39
+ stop(conversation) {
40
+ return this.active.delete(getConversationKey(conversation));
41
+ }
42
+ drain() {
43
+ const conversations = Array.from(this.active.values());
44
+ this.active.clear();
45
+ return conversations;
46
+ }
47
+ }
48
+ const isReasoningFinishChunk = (chunk) => {
49
+ const metadata = chunk.response_metadata;
50
+ if (!metadata) {
51
+ return false;
52
+ }
53
+ const finishReason = metadata.finish_reason ?? metadata.finishReason;
54
+ if (typeof finishReason === "string" && finishReason.length > 0) {
55
+ return true;
56
+ }
57
+ return metadata.status === "completed" || metadata.status === "incomplete" || metadata.status === "failed";
58
+ };
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ ReasoningStreamState,
62
+ isReasoningFinishChunk
63
+ });
@@ -57,6 +57,11 @@ var ai_conversations_default = (0, import_database.defineCollection)({
57
57
  defaultValue: "main-agent",
58
58
  allowNull: false
59
59
  },
60
+ {
61
+ name: "scope",
62
+ type: "string",
63
+ index: true
64
+ },
60
65
  {
61
66
  name: "user",
62
67
  type: "belongsTo",
@@ -33,12 +33,12 @@ module.exports = __toCommonJS(constants_exports);
33
33
  const DOCUMENT_PARSE_META_KEY = "documentParse";
34
34
  const SUPPORTED_DOCUMENT_EXTNAMES = [
35
35
  ".pdf",
36
- ".ppt",
37
36
  ".pptx",
38
37
  ".doc",
39
38
  ".docx",
40
39
  ".xls",
41
40
  ".xlsx",
41
+ ".xlsm",
42
42
  ".txt",
43
43
  ".md",
44
44
  ".json",
@@ -7,8 +7,10 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
  import { DocumentSegmentedWithScore, KnowledgeBase, KnowledgeBaseGroup, SearchOptions } from '../types';
10
+ export type KnowledgeBaseAccessOptions = Pick<SearchOptions, 'knowledgeBaseKeys' | 'roleNames'>;
10
11
  export interface KnowledgeBaseFeature {
11
12
  getKnowledgeBase(knowledgeBaseKeys: string[]): Promise<KnowledgeBase[]>;
12
13
  getKnowledgeBaseGroup(knowledgeBaseKeys: string[]): Promise<KnowledgeBaseGroup[]>;
14
+ getAccessibleKnowledgeBaseKeys(options: KnowledgeBaseAccessOptions): Promise<string[]>;
13
15
  search(options: SearchOptions): Promise<DocumentSegmentedWithScore[]>;
14
16
  }
@@ -0,0 +1,25 @@
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 type { Context } from '@nocobase/actions';
10
+ import { type FrontendToolManifest } from '../common/frontend-tools';
11
+ import type { WorkContext } from './types/ai-message.type';
12
+ export declare const extractFrontendToolManifests: (workContext: WorkContext[]) => FrontendToolManifest[];
13
+ export declare const listCurrentFrontendTools: (ctx: Context, sessionId?: string) => Promise<FrontendToolManifest[]>;
14
+ export declare const findCurrentFrontendTool: (ctx: Context, toolId: string, sessionId?: string) => Promise<FrontendToolManifest | undefined>;
15
+ export declare const shouldAutoExecuteFrontendTool: (tools: FrontendToolManifest[], args: unknown) => boolean;
16
+ export declare const prepareToolsForFrontendConversation: <T extends {
17
+ definition: {
18
+ name: string;
19
+ description: string;
20
+ };
21
+ }>(tools: T[], frontendTools: FrontendToolManifest[]) => T[];
22
+ export declare const readFrontendToolResult: (ctx: Context, toolCallId: string) => {
23
+ provided: true;
24
+ value: unknown;
25
+ } | undefined;
@@ -0,0 +1,171 @@
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 frontend_tools_exports = {};
28
+ __export(frontend_tools_exports, {
29
+ extractFrontendToolManifests: () => extractFrontendToolManifests,
30
+ findCurrentFrontendTool: () => findCurrentFrontendTool,
31
+ listCurrentFrontendTools: () => listCurrentFrontendTools,
32
+ prepareToolsForFrontendConversation: () => prepareToolsForFrontendConversation,
33
+ readFrontendToolResult: () => readFrontendToolResult,
34
+ shouldAutoExecuteFrontendTool: () => shouldAutoExecuteFrontendTool
35
+ });
36
+ module.exports = __toCommonJS(frontend_tools_exports);
37
+ var import_zod = require("zod");
38
+ var import_frontend_tools = require("../common/frontend-tools");
39
+ const isRecord = (value) => !!value && typeof value === "object" && !Array.isArray(value);
40
+ const isMessageLike = (value) => !!value && typeof value === "object";
41
+ const normalizeFrontendToolManifests = (value) => {
42
+ if (!Array.isArray(value)) {
43
+ return [];
44
+ }
45
+ const manifests = /* @__PURE__ */ new Map();
46
+ for (const manifest of value) {
47
+ if ((0, import_frontend_tools.isFrontendToolManifest)(manifest) && manifest.id === `${manifest.blockUid}:${manifest.name}`) {
48
+ manifests.set(manifest.id, manifest);
49
+ }
50
+ }
51
+ return Array.from(manifests.values());
52
+ };
53
+ const extractFrontendToolManifests = (workContext) => {
54
+ const manifests = /* @__PURE__ */ new Map();
55
+ for (const item of workContext) {
56
+ const frontendTools = Array.isArray(item == null ? void 0 : item.frontendTools) ? item.frontendTools : [];
57
+ for (const frontendTool of frontendTools) {
58
+ if ((0, import_frontend_tools.isFrontendToolManifest)(frontendTool) && frontendTool.blockUid === item.uid && frontendTool.id === `${item.uid}:${frontendTool.name}`) {
59
+ manifests.set(frontendTool.id, frontendTool);
60
+ }
61
+ }
62
+ }
63
+ return Array.from(manifests.values());
64
+ };
65
+ const findRequestFrontendTools = (ctx) => {
66
+ var _a, _b;
67
+ const values = (_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values;
68
+ const messages = Array.isArray(values == null ? void 0 : values.messages) ? values.messages.filter(isMessageLike) : [];
69
+ for (const message of messages) {
70
+ if (message.role !== "user") {
71
+ continue;
72
+ }
73
+ const frontendTools = extractFrontendToolManifests(Array.isArray(message.workContext) ? message.workContext : []);
74
+ if (frontendTools.length) {
75
+ return frontendTools;
76
+ }
77
+ }
78
+ return [];
79
+ };
80
+ const listCurrentFrontendTools = async (ctx, sessionId) => {
81
+ var _a, _b, _c;
82
+ const requestSessionId = (_c = (_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values) == null ? void 0 : _c.sessionId;
83
+ const currentSessionId = sessionId ?? (typeof requestSessionId === "string" ? requestSessionId : "");
84
+ if (!currentSessionId) {
85
+ return findRequestFrontendTools(ctx);
86
+ }
87
+ const conversationRepository = ctx.db.getRepository("aiConversations");
88
+ const conversation = await conversationRepository.findOne({
89
+ filter: {
90
+ sessionId: currentSessionId
91
+ }
92
+ });
93
+ const options = conversation == null ? void 0 : conversation.options;
94
+ const boundTools = normalizeFrontendToolManifests(isRecord(options) ? options.frontendTools : void 0);
95
+ if (boundTools.length) {
96
+ return boundTools;
97
+ }
98
+ const frontendTools = findRequestFrontendTools(ctx);
99
+ if (!frontendTools.length || !conversation) {
100
+ return frontendTools;
101
+ }
102
+ await conversationRepository.update({
103
+ filter: {
104
+ sessionId: currentSessionId
105
+ },
106
+ values: {
107
+ options: {
108
+ ...isRecord(options) ? options : {},
109
+ frontendTools
110
+ }
111
+ }
112
+ });
113
+ return frontendTools;
114
+ };
115
+ const findCurrentFrontendTool = async (ctx, toolId, sessionId) => {
116
+ const tools = await listCurrentFrontendTools(ctx, sessionId);
117
+ return tools.find((tool) => tool.id === toolId);
118
+ };
119
+ const shouldAutoExecuteFrontendTool = (tools, args) => {
120
+ var _a;
121
+ if (!isRecord(args) || typeof args.toolId !== "string") {
122
+ return false;
123
+ }
124
+ return ((_a = tools.find((tool) => tool.id === args.toolId)) == null ? void 0 : _a.permission) === "ALLOW";
125
+ };
126
+ const prepareToolsForFrontendConversation = (tools, frontendTools) => {
127
+ if (!frontendTools.length) {
128
+ return tools.filter(
129
+ (tool) => tool.definition.name !== import_frontend_tools.LOAD_FRONTEND_TOOL_NAME && tool.definition.name !== import_frontend_tools.EXECUTE_FRONTEND_TOOL_NAME
130
+ );
131
+ }
132
+ const catalog = frontendTools.map(({ id, name, title, description }) => ({ id, name, title, description }));
133
+ const toolIds = frontendTools.map((tool) => tool.id);
134
+ const toolIdSchema = import_zod.z.enum(toolIds).describe(`Use an exact tool id from this catalog: ${JSON.stringify(catalog)}`);
135
+ return tools.map((tool) => {
136
+ if (tool.definition.name !== import_frontend_tools.LOAD_FRONTEND_TOOL_NAME && tool.definition.name !== import_frontend_tools.EXECUTE_FRONTEND_TOOL_NAME) {
137
+ return tool;
138
+ }
139
+ const isLoader = tool.definition.name === import_frontend_tools.LOAD_FRONTEND_TOOL_NAME;
140
+ return {
141
+ ...tool,
142
+ definition: {
143
+ ...tool.definition,
144
+ description: `${tool.definition.description}
145
+
146
+ frontendToolCatalog: ${JSON.stringify(catalog)}`,
147
+ schema: isLoader ? import_zod.z.object({ toolId: toolIdSchema }) : import_zod.z.object({
148
+ toolId: toolIdSchema,
149
+ args: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).default({})
150
+ })
151
+ }
152
+ };
153
+ });
154
+ };
155
+ const readFrontendToolResult = (ctx, toolCallId) => {
156
+ var _a, _b, _c;
157
+ const toolCallResults = (_c = (_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values) == null ? void 0 : _c.toolCallResults;
158
+ const result = Array.isArray(toolCallResults) ? toolCallResults.find(
159
+ (item) => isRecord(item) && item.id === toolCallId && "result" in item
160
+ ) : void 0;
161
+ return result ? { provided: true, value: result.result } : void 0;
162
+ };
163
+ // Annotate the CommonJS export names for ESM import in node:
164
+ 0 && (module.exports = {
165
+ extractFrontendToolManifests,
166
+ findCurrentFrontendTool,
167
+ listCurrentFrontendTools,
168
+ prepareToolsForFrontendConversation,
169
+ readFrontendToolResult,
170
+ shouldAutoExecuteFrontendTool
171
+ });
@@ -55,19 +55,27 @@ const collectReasoningMap = (messages) => {
55
55
  return reasoningMap;
56
56
  };
57
57
  const patchRequestMessagesReasoning = (request, reasoningMap) => {
58
+ var _a;
58
59
  if (!(reasoningMap == null ? void 0 : reasoningMap.size) || !Array.isArray(request == null ? void 0 : request.messages)) {
59
60
  return;
60
61
  }
61
- if (request.messages.some((msg) => msg.role === "tool")) {
62
- for (let i = 0; i < request.messages.length; i++) {
63
- const message = request.messages[i];
64
- if ((message == null ? void 0 : message.role) !== "assistant") {
65
- continue;
66
- }
67
- if (message.reasoning_content) {
68
- continue;
69
- }
70
- const reasoningContent = reasoningMap.get(String(i));
62
+ let lastUserMessageIndex = -1;
63
+ for (let i = request.messages.length - 1; i >= 0; i--) {
64
+ if (((_a = request.messages[i]) == null ? void 0 : _a.role) === "user") {
65
+ lastUserMessageIndex = i;
66
+ break;
67
+ }
68
+ }
69
+ for (let i = lastUserMessageIndex + 1; i < request.messages.length; i++) {
70
+ const message = request.messages[i];
71
+ if ((message == null ? void 0 : message.role) !== "assistant" || !Array.isArray(message.tool_calls) || message.tool_calls.length === 0) {
72
+ continue;
73
+ }
74
+ if (typeof message.reasoning_content === "string" && message.reasoning_content.length > 0) {
75
+ continue;
76
+ }
77
+ const reasoningContent = reasoningMap.get(String(i));
78
+ if (typeof reasoningContent === "string" && reasoningContent.length > 0) {
71
79
  message.reasoning_content = reasoningContent;
72
80
  }
73
81
  }
@@ -0,0 +1,10 @@
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
+ export * from './provider';
10
+ export * from './reasoning';
@@ -0,0 +1,32 @@
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 __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var deepseek_exports = {};
25
+ module.exports = __toCommonJS(deepseek_exports);
26
+ __reExport(deepseek_exports, require("./provider"), module.exports);
27
+ __reExport(deepseek_exports, require("./reasoning"), module.exports);
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ ...require("./provider"),
31
+ ...require("./reasoning")
32
+ });
@@ -0,0 +1,57 @@
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 { ChatDeepSeek, type ChatDeepSeekInput } from '@langchain/deepseek';
10
+ import { AIMessage, AIMessageChunk, BaseMessage } from '@langchain/core/messages';
11
+ import { ChatOpenAI } from '@langchain/openai';
12
+ import type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
13
+ import type OpenAI from 'openai';
14
+ import { Model } from '@nocobase/database';
15
+ import { LLMProvider, ReasoningOptions, ResolvedReasoningOptions } from '../provider';
16
+ import { LLMProviderMeta } from '../../manager/ai-manager';
17
+ import { DeepSeekReasoningConfig } from './reasoning';
18
+ import type { AIMessageInput } from '../../types';
19
+ declare class ReasoningDeepSeek extends ChatDeepSeek {
20
+ private readonly reasoningConfig;
21
+ constructor(fields: ChatDeepSeekInput, reasoningConfig: DeepSeekReasoningConfig);
22
+ _generate(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): Promise<import("@langchain/core/dist/outputs").ChatResult>;
23
+ _streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<import("@langchain/core/dist/outputs").ChatGenerationChunk, void, unknown>;
24
+ completionWithRetry(request: OpenAI.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAI.RequestOptions): Promise<AsyncIterable<OpenAI.Chat.Completions.ChatCompletionChunk>>;
25
+ completionWithRetry(request: OpenAI.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAI.RequestOptions): Promise<OpenAI.Chat.Completions.ChatCompletion>;
26
+ }
27
+ export declare class DeepSeekProvider extends LLMProvider {
28
+ chatModel: ChatDeepSeek | ChatOpenAI;
29
+ get baseURL(): string;
30
+ createModel(): ChatOpenAI<import("@langchain/openai/dist/chat_models/index.cjs").ChatOpenAICallOptions> | ReasoningDeepSeek;
31
+ parseResponseChunk(chunk: unknown): string;
32
+ parseResponseMessage(message: Model): {
33
+ key: any;
34
+ createdAt: any;
35
+ content: any;
36
+ role: any;
37
+ };
38
+ parseReasoningContent(chunk: AIMessageChunk): {
39
+ status: string;
40
+ content: string;
41
+ } | null;
42
+ reshapeAIMessage({ aiMessage, values }: {
43
+ aiMessage: AIMessage;
44
+ values: AIMessageInput;
45
+ }): void;
46
+ prepareStoredAssistantAdditionalKwargs(additionalKwargs?: Record<string, unknown>): Record<string, unknown> | undefined;
47
+ protected builtInTools(): Record<string, unknown>[];
48
+ parseWebSearchAction(chunk: AIMessageChunk): {
49
+ type: string;
50
+ query: string;
51
+ }[];
52
+ protected resolveReasoningOptions(reasoning?: ReasoningOptions): ResolvedReasoningOptions;
53
+ isToolConflict(): boolean;
54
+ protected isApiSupportedAttachment(): boolean;
55
+ }
56
+ export declare const deepseekProviderOptions: LLMProviderMeta;
57
+ export {};