@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.
- package/dist/ai/docs/nocobase/ai-dev/watermark-plugin.md +2 -0
- package/dist/ai/docs/nocobase/ai-employees/block/ai-chat-box.md +133 -0
- package/dist/ai/docs/nocobase/ai-employees/knowledge-base/knowledge-base/documents.md +1 -1
- package/dist/ai/docs/nocobase/ai-employees/knowledge-base/knowledge-base/index.md +11 -7
- package/dist/ai/docs/nocobase/ai-employees/knowledge-base/knowledge-base/settings.md +12 -8
- package/dist/ai/docs/nocobase/ai-employees/knowledge-base/rag.md +43 -13
- package/dist/ai/docs/nocobase/ai-employees/knowledge-base/vector-database.md +3 -3
- package/dist/ai/docs/nocobase/ai-employees/workflow/nodes/knowledge/create-document.md +1 -1
- package/dist/ai/docs/nocobase/api/app/env.md +2 -0
- package/dist/ai/docs/nocobase/api/cli/api/resource/create.md +4 -3
- package/dist/ai/docs/nocobase/building-tips/ai-fill-js-block-form.md +1092 -0
- package/dist/ai/docs/nocobase/data-sources/calendar/calendar-collection.md +100 -3
- package/dist/ai/docs/nocobase/data-sources/collection-comment/index.md +92 -39
- package/dist/ai/docs/nocobase/data-sources/collection-sql/index.md +150 -29
- package/dist/ai/docs/nocobase/data-sources/collection-tree/index.md +93 -5
- package/dist/ai/docs/nocobase/data-sources/collection-view/index.md +226 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/china-region.md +122 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/collection-select.md +105 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/json.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/nano-id.md +104 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/snowflake-id.md +108 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/sort.md +3 -19
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/advanced/uuid.md +104 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/associations/index.md +44 -8
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/color.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/email.md +104 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/icon.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/input.md +112 -8
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/integer.md +103 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/number.md +103 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/password.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/percent.md +104 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/phone.md +104 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/textarea.md +99 -8
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/basic/url.md +103 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/checkbox-group.md +105 -3
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/checkbox.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/china-region.md +108 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/multiple-select.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/radio-group.md +106 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/choices/select.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/date.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/datetime-without-tz.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/datetime.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/index.md +53 -47
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/time.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/datetime/unix-timestamp.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/circle.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/line.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/point.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/geometric/polygon.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/index.md +62 -16
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/media/markdown.md +104 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/media/rich-text.md +105 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/created-at.md +105 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/created-by.md +103 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/space.md +100 -6
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/table-oid.md +102 -4
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/updated-at.md +104 -5
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/system-info/updated-by.md +104 -6
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection-fields/validation.md +68 -58
- package/dist/ai/docs/nocobase/data-sources/data-modeling/collection.md +32 -13
- package/dist/ai/docs/nocobase/data-sources/data-modeling/index.md +41 -33
- package/dist/ai/docs/nocobase/data-sources/data-source-external-mariadb/index.md +114 -6
- package/dist/ai/docs/nocobase/data-sources/data-source-external-mssql/index.md +117 -6
- package/dist/ai/docs/nocobase/data-sources/data-source-external-mysql/index.md +103 -6
- package/dist/ai/docs/nocobase/data-sources/data-source-external-nocobase/index.md +75 -73
- package/dist/ai/docs/nocobase/data-sources/data-source-external-oracle/index.md +129 -11
- package/dist/ai/docs/nocobase/data-sources/data-source-external-postgres/index.md +110 -6
- package/dist/ai/docs/nocobase/data-sources/data-source-kingbase/index.md +75 -49
- package/dist/ai/docs/nocobase/data-sources/data-source-main/general-collection.md +116 -15
- package/dist/ai/docs/nocobase/data-sources/data-source-main/index.md +92 -62
- package/dist/ai/docs/nocobase/data-sources/data-source-main/inheritance-collection.md +97 -10
- package/dist/ai/docs/nocobase/data-sources/data-source-manager/external-database.md +97 -58
- package/dist/ai/docs/nocobase/data-sources/data-source-manager/index.md +32 -24
- package/dist/ai/docs/nocobase/data-sources/data-source-rest-api/index.md +115 -153
- package/dist/ai/docs/nocobase/data-sources/external/clickhouse.md +124 -0
- package/dist/ai/docs/nocobase/data-sources/external/doris.md +130 -0
- package/dist/ai/docs/nocobase/data-sources/external/index.md +140 -0
- package/dist/ai/docs/nocobase/data-sources/external/kingbase.md +129 -0
- package/dist/ai/docs/nocobase/data-sources/external/mariadb.md +126 -0
- package/dist/ai/docs/nocobase/data-sources/external/mssql.md +129 -0
- package/dist/ai/docs/nocobase/data-sources/external/mysql.md +115 -0
- package/dist/ai/docs/nocobase/data-sources/external/nocobase.md +159 -0
- package/dist/ai/docs/nocobase/data-sources/external/oceanbase.md +126 -0
- package/dist/ai/docs/nocobase/data-sources/external/oracle.md +158 -0
- package/dist/ai/docs/nocobase/data-sources/external/postgresql.md +122 -0
- package/dist/ai/docs/nocobase/data-sources/external/rest-api.md +245 -0
- package/dist/ai/docs/nocobase/data-sources/field-attachment-url/index.md +100 -12
- package/dist/ai/docs/nocobase/data-sources/field-encryption/index.md +48 -47
- package/dist/ai/docs/nocobase/data-sources/field-formula/index.md +99 -5
- package/dist/ai/docs/nocobase/data-sources/field-markdown-vditor/index.md +105 -5
- package/dist/ai/docs/nocobase/data-sources/field-sequence/index.md +102 -5
- package/dist/ai/docs/nocobase/data-sources/field-signature/index.md +18 -16
- package/dist/ai/docs/nocobase/data-sources/field-sort/index.md +76 -73
- package/dist/ai/docs/nocobase/data-sources/file-manager/field-attachment.md +101 -7
- package/dist/ai/docs/nocobase/data-sources/file-manager/file-collection.md +101 -14
- package/dist/ai/docs/nocobase/data-sources/index.md +49 -33
- package/dist/ai/docs/nocobase/data-sources/main/index.md +130 -0
- package/dist/ai/docs/nocobase/data-sources/main/kingbase.md +147 -0
- package/dist/ai/docs/nocobase/data-sources/main/mariadb.md +59 -0
- package/dist/ai/docs/nocobase/data-sources/main/mysql.md +59 -0
- package/dist/ai/docs/nocobase/data-sources/main/oceanbase.md +62 -0
- package/dist/ai/docs/nocobase/data-sources/main/postgresql.md +61 -0
- package/dist/ai/docs/nocobase/file-manager/file-preview/index.md +44 -3
- package/dist/ai/docs/nocobase/file-manager/storage/aliyun-oss.md +100 -3
- package/dist/ai/docs/nocobase/file-manager/storage/index.md +66 -26
- package/dist/ai/docs/nocobase/file-manager/storage/s3-pro.md +58 -7
- package/dist/ai/docs/nocobase/get-started/installation/env.md +1 -1
- package/dist/ai/docs/nocobase/ops-management/migration-manager/built-in-tables.md +1 -2
- package/dist/ai/docs/nocobase/plugin-development/build.md +10 -4
- package/dist/ai/docs/nocobase/plugin-development/client/appendix/faq.md +1 -1
- package/dist/ai/docs/nocobase/plugin-development/client/examples/custom-action.md +2 -0
- package/dist/ai/docs/nocobase/plugin-development/client/examples/custom-block.md +2 -0
- package/dist/ai/docs/nocobase/plugin-development/client/examples/custom-field.md +2 -0
- package/dist/ai/docs/nocobase/plugin-development/client/examples/fullstack-plugin.md +2 -0
- package/dist/ai/docs/nocobase/plugin-development/client/examples/settings-page.md +2 -0
- package/dist/ai/docs/nocobase/plugin-development/common/i18n.md +3 -3
- package/dist/ai/docs/nocobase/plugin-development/server/cache.md +1 -1
- package/dist/ai/docs/nocobase/plugin-development/server/collections.md +0 -6
- package/dist/ai/docs/nocobase/plugin-development/server/command.md +2 -2
- package/dist/ai/docs/nocobase/plugin-development/server/context.md +2 -2
- package/dist/ai/docs/nocobase/plugin-development/server/i18n.md +4 -4
- package/dist/ai/docs/nocobase/plugin-development/write-your-first-plugin.md +91 -43
- package/dist/ai/docs/nocobase/runjs/context/ai.md +194 -4
- package/dist/ai/docs/nocobase/users-permissions/sync/index.md +8 -1
- package/dist/ai/docs/nocobase/users-permissions/sync/sources/dingtalk.md +138 -0
- package/dist/ai/docs/nocobase/users-permissions/sync/sources/ldap.md +87 -0
- package/dist/ai/docs/nocobase/workflow/nodes/javascript.md +21 -1
- package/dist/ai/tools/executeFrontendTool.d.ts +10 -0
- package/dist/ai/tools/executeFrontendTool.js +86 -0
- package/dist/ai/tools/getSkill.js +1 -1
- package/dist/ai/tools/knowledge-base-retrieve.js +3 -1
- package/dist/ai/tools/loadFrontendTool.d.ts +10 -0
- package/dist/ai/tools/loadFrontendTool.js +99 -0
- package/dist/client/244.28ee769f796b7c2f.js +10 -0
- package/dist/client/{525.203778500aca5d05.js → 525.94dd4136c1361477.js} +1 -1
- package/dist/client/681.6ffbc9329b9ac242.js +10 -0
- package/dist/{client-v2/705.1d10027ff8cfdf79.js → client/705.a4fe26945d175e8a.js} +1 -1
- package/dist/client/index.d.ts +1 -3
- package/dist/client/index.js +8 -8
- package/dist/client-v2/244.39348a95d627d9e3.js +10 -0
- package/dist/client-v2/420.a5b929a5e7f330be.js +10 -0
- package/dist/client-v2/681.6890caa389564ff7.js +10 -0
- package/dist/client-v2/705.f2e1b26a3f000075.js +10 -0
- package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +2 -0
- package/dist/client-v2/ai-employees/AddContextButton.d.ts +2 -0
- package/dist/client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts +1 -0
- package/dist/client-v2/ai-employees/chatbox/components/ChatBoxUnreadBadge.d.ts +17 -0
- package/dist/client-v2/ai-employees/chatbox/components/Conversations.d.ts +9 -1
- package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +1 -1
- package/dist/client-v2/ai-employees/chatbox/components/Messages.d.ts +5 -1
- package/dist/client-v2/ai-employees/chatbox/components/ModelSwitcher.d.ts +4 -0
- package/dist/client-v2/ai-employees/chatbox/components/Sender.d.ts +33 -1
- package/dist/client-v2/ai-employees/chatbox/components/index.d.ts +1 -0
- package/dist/client-v2/ai-employees/chatbox/hooks/reasoning-stream.d.ts +10 -0
- package/dist/client-v2/ai-employees/chatbox/hooks/useChat.d.ts +8 -5
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +3 -2
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +2 -1
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +3 -2
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +4 -2
- package/dist/client-v2/ai-employees/chatbox/hooks/useToolCallActions.d.ts +3 -1
- package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +13 -3
- package/dist/client-v2/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +3 -2
- package/dist/client-v2/ai-employees/chatbox/index.d.ts +17 -0
- package/dist/client-v2/ai-employees/chatbox/roles.d.ts +2 -153
- package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +46 -33
- package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +7 -7
- package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +23 -18
- package/dist/client-v2/ai-employees/chatbox/stores/chat-sender.d.ts +43 -0
- package/dist/client-v2/ai-employees/chatbox/stores/chat-tool-call.d.ts +6 -5
- package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +11 -5
- package/dist/client-v2/ai-employees/chatbox/stores/mounted-chat-boxes.d.ts +20 -0
- package/dist/client-v2/ai-employees/chatbox/stores/runtime.d.ts +43 -0
- package/dist/client-v2/ai-employees/chatbox/stores/workflow-tasks.d.ts +22 -10
- package/dist/client-v2/ai-employees/chatbox/upload.d.ts +19 -0
- package/dist/client-v2/ai-employees/chatbox/utils.d.ts +28 -4
- package/dist/client-v2/ai-employees/frontend-tools.d.ts +11 -0
- package/dist/client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts +1 -1
- package/dist/client-v2/ai-employees/tools/WorkflowTaskOutputCard.d.ts +1 -1
- package/dist/client-v2/ai-employees/types.d.ts +30 -0
- package/dist/client-v2/block/ai-chat-box/AIChatBoxBlockModel.d.ts +21 -0
- package/dist/client-v2/block/ai-chat-box/AIChatBoxCoreModel.d.ts +13 -0
- package/dist/client-v2/{ai-employees/chatbox/components/DebugPanel.d.ts → block/ai-chat-box/components/AIChatBoxCoreView.d.ts} +1 -1
- package/dist/client-v2/block/ai-chat-box/components/AIChatBoxView.d.ts +12 -0
- package/dist/client-v2/block/ai-chat-box/index.d.ts +14 -0
- package/dist/client-v2/block/ai-chat-box/settings.d.ts +12 -0
- package/dist/client-v2/block/ai-chat-box/sub-models.d.ts +26 -0
- package/dist/client-v2/block/ai-chat-box/types.d.ts +38 -0
- package/dist/client-v2/block/ai-chat-box/utils.d.ts +26 -0
- package/dist/client-v2/index.d.ts +3 -5
- package/dist/client-v2/index.js +3 -3
- package/dist/client-v2/llm-providers/forms.d.ts +2 -0
- package/dist/client-v2/llm-providers/index.d.ts +1 -0
- package/dist/client-v2/llm-services/model-select.d.ts +33 -0
- package/dist/client-v2/llm-services/utils.d.ts +1 -0
- package/dist/client-v2/manager/ai-manager.d.ts +10 -3
- package/dist/client-v2/manager/frontend-tool-registry.d.ts +30 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +4 -1
- package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +8 -0
- package/dist/client-v2/pages/EmployeesPage.d.ts +12 -0
- package/dist/client-v2/pages/LLMServicesPage.d.ts +9 -4
- package/dist/client-v2/repositories/AIConfigRepository.d.ts +2 -0
- package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +1 -0
- package/dist/collections/ai-employees.d.ts +1 -0
- package/dist/collections/ai-employees.js +1 -0
- package/dist/common/ai-employee-validation.d.ts +15 -0
- package/dist/common/ai-employee-validation.js +61 -0
- package/dist/common/error-codes.d.ts +13 -0
- package/dist/common/error-codes.js +48 -0
- package/dist/common/frontend-tools.d.ts +26 -0
- package/dist/common/frontend-tools.js +57 -0
- package/dist/common/llm-service-models.d.ts +16 -0
- package/dist/common/llm-service-models.js +84 -0
- package/dist/externalVersion.js +19 -17
- package/dist/locale/de-DE.json +2 -1
- package/dist/locale/en-US.json +85 -5
- package/dist/locale/es-ES.json +2 -1
- package/dist/locale/fr-FR.json +2 -1
- package/dist/locale/hu-HU.json +2 -1
- package/dist/locale/id-ID.json +2 -1
- package/dist/locale/it-IT.json +2 -1
- package/dist/locale/ja-JP.json +2 -1
- package/dist/locale/ko-KR.json +2 -1
- package/dist/locale/nl-NL.json +2 -1
- package/dist/locale/pt-BR.json +2 -1
- package/dist/locale/ru-RU.json +2 -1
- package/dist/locale/tr-TR.json +2 -1
- package/dist/locale/uk-UA.json +2 -1
- package/dist/locale/vi-VN.json +2 -1
- package/dist/locale/zh-CN.json +85 -5
- package/dist/locale/zh-TW.json +2 -1
- package/dist/node_modules/@langchain/mistralai/package.json +1 -1
- package/dist/node_modules/@langchain/xai/package.json +1 -1
- package/dist/node_modules/fs-extra/package.json +1 -1
- package/dist/node_modules/jsonrepair/package.json +1 -1
- package/dist/node_modules/just-bash/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/node_modules/openai/package.json +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/ai-employees/ai-conversations.d.ts +4 -1
- package/dist/server/ai-employees/ai-conversations.js +2 -0
- package/dist/server/ai-employees/ai-employee.d.ts +4 -1
- package/dist/server/ai-employees/ai-employee.js +112 -47
- package/dist/server/ai-employees/ai-knowledge-base.d.ts +21 -1
- package/dist/server/ai-employees/ai-knowledge-base.js +76 -8
- package/dist/server/ai-employees/middleware/conversation.js +9 -2
- package/dist/server/ai-employees/reasoning-stream-state.d.ts +23 -0
- package/dist/server/ai-employees/reasoning-stream-state.js +63 -0
- package/dist/server/collections/ai-conversations.js +5 -0
- package/dist/server/document-loader/constants.js +1 -1
- package/dist/server/features/knowledge-base.d.ts +2 -0
- package/dist/server/frontend-tools.d.ts +25 -0
- package/dist/server/frontend-tools.js +171 -0
- package/dist/server/llm-providers/common/reasoning.js +18 -10
- package/dist/server/llm-providers/deepseek/index.d.ts +10 -0
- package/dist/server/llm-providers/deepseek/index.js +32 -0
- package/dist/server/llm-providers/deepseek/provider.d.ts +57 -0
- package/dist/server/llm-providers/deepseek/provider.js +320 -0
- package/dist/server/llm-providers/deepseek/reasoning.d.ts +83 -0
- package/dist/server/llm-providers/deepseek/reasoning.js +285 -0
- package/dist/server/llm-providers/mistral.d.ts +1 -1
- package/dist/server/llm-providers/provider.d.ts +1 -0
- package/dist/server/llm-providers/provider.js +3 -0
- package/dist/server/llm-providers/shengsuanyun.d.ts +29 -0
- package/dist/server/llm-providers/shengsuanyun.js +114 -0
- package/dist/server/manager/ai-feature-manager.js +1 -1
- package/dist/server/manager/ai-manager.d.ts +3 -0
- package/dist/server/manager/ai-manager.js +7 -2
- package/dist/server/manager/work-context-handler.js +10 -3
- package/dist/server/migrations/20260501000000-ai-employee-knowledge-base-retrieval-strategy.d.ts +14 -0
- package/dist/server/migrations/20260501000000-ai-employee-knowledge-base-retrieval-strategy.js +49 -0
- package/dist/server/plugin.d.ts +1 -0
- package/dist/server/plugin.js +31 -0
- package/dist/server/resource/aiConversations.d.ts +2 -0
- package/dist/server/resource/aiConversations.js +33 -3
- package/dist/server/resource/aiEmployees.d.ts +2 -0
- package/dist/server/resource/aiEmployees.js +70 -0
- package/dist/server/resource/aiWorkflowTasks.js +9 -1
- package/dist/server/resource/llmServices.d.ts +11 -0
- package/dist/server/resource/llmServices.js +85 -0
- package/dist/server/types/ai-message.type.d.ts +4 -0
- package/dist/server/types/knowledge-base.type.d.ts +8 -3
- package/dist/swagger/common.d.ts +143 -0
- package/dist/swagger/common.js +144 -0
- package/dist/swagger/employees.d.ts +301 -0
- package/dist/swagger/employees.js +131 -0
- package/dist/swagger/index.d.ts +1617 -0
- package/dist/swagger/index.js +62 -0
- package/dist/swagger/llm.d.ts +563 -0
- package/dist/swagger/llm.js +255 -0
- package/dist/swagger/schemas.d.ts +757 -0
- package/dist/swagger/schemas.js +392 -0
- package/package.json +2 -2
- package/dist/ai/docs/nocobase/ai-employees/knowledge-base/vector-store.md +0 -24
- package/dist/ai/docs/nocobase/data-sources/development/index.md +0 -6
- package/dist/client/372.40eb52905e3f3049.js +0 -10
- package/dist/client/681.399948c18d753667.js +0 -10
- package/dist/client/705.380279da896021fb.js +0 -10
- package/dist/client-v2/372.8cc3fde09c9bec77.js +0 -10
- package/dist/client-v2/406.341be51205c674e0.js +0 -10
- package/dist/client-v2/681.082f4f1c7b841983.js +0 -10
- package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +0 -46
- package/dist/client-v2/ai-employees/chatbox/utils/normalizeTriggerTaskOptions.d.ts +0 -19
- package/dist/client-v2/debug-logger.d.ts +0 -52
- package/dist/server/llm-providers/deepseek.d.ts +0 -40
- package/dist/server/llm-providers/deepseek.js +0 -174
|
@@ -46,9 +46,9 @@ declare class ReasoningChatMistralAI extends ChatMistralAI {
|
|
|
46
46
|
presencePenalty?: number;
|
|
47
47
|
n?: number;
|
|
48
48
|
stop?: string | string[];
|
|
49
|
+
prediction?: import("@mistralai/mistralai/models/components/prediction").Prediction;
|
|
49
50
|
toolChoice?: import("@mistralai/mistralai/models/components/toolchoice").ToolChoice | import("@mistralai/mistralai/models/components/toolchoiceenum").ToolChoiceEnum;
|
|
50
51
|
randomSeed?: number;
|
|
51
|
-
prediction?: import("@mistralai/mistralai/models/components/prediction").Prediction;
|
|
52
52
|
parallelToolCalls?: boolean;
|
|
53
53
|
promptMode?: import("@mistralai/mistralai/models/components/mistralpromptmode").MistralPromptMode;
|
|
54
54
|
safePrompt?: boolean;
|
|
@@ -98,6 +98,7 @@ export declare abstract class LLMProvider {
|
|
|
98
98
|
} | null;
|
|
99
99
|
parseResponseMetadata(output: LLMResult): any;
|
|
100
100
|
parseResponseError(err: any): any;
|
|
101
|
+
prepareStoredAssistantAdditionalKwargs(additionalKwargs?: Record<string, unknown>): Record<string, unknown> | undefined;
|
|
101
102
|
reshapeAIMessage(_options: {
|
|
102
103
|
aiMessage: AIMessage;
|
|
103
104
|
values: AIMessageInput;
|
|
@@ -367,6 +367,9 @@ ${parsed.text}
|
|
|
367
367
|
parseResponseError(err) {
|
|
368
368
|
return (err == null ? void 0 : err.message) ?? "Unexpected LLM service error";
|
|
369
369
|
}
|
|
370
|
+
prepareStoredAssistantAdditionalKwargs(additionalKwargs) {
|
|
371
|
+
return additionalKwargs;
|
|
372
|
+
}
|
|
370
373
|
reshapeAIMessage(_options) {
|
|
371
374
|
}
|
|
372
375
|
get documentLoader() {
|
|
@@ -0,0 +1,29 @@
|
|
|
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 { ChatOpenAI } from '@langchain/openai';
|
|
10
|
+
import { LLMProviderMeta } from '../manager/ai-manager';
|
|
11
|
+
import { LLMProvider } from './provider';
|
|
12
|
+
export type ShengSuanYunModel = {
|
|
13
|
+
id: string;
|
|
14
|
+
support_apis?: string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function supportsChatCompletions(model: ShengSuanYunModel): boolean;
|
|
17
|
+
export declare class ShengSuanYunProvider extends LLMProvider {
|
|
18
|
+
chatModel: ChatOpenAI;
|
|
19
|
+
get baseURL(): string;
|
|
20
|
+
createModel(): ChatOpenAI<import("@langchain/openai/dist/chat_models/index.cjs").ChatOpenAICallOptions>;
|
|
21
|
+
listModels(): Promise<{
|
|
22
|
+
models?: {
|
|
23
|
+
id: string;
|
|
24
|
+
}[];
|
|
25
|
+
code?: number;
|
|
26
|
+
errMsg?: string;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export declare const shengsuanyunProviderOptions: LLMProviderMeta;
|
|
@@ -0,0 +1,114 @@
|
|
|
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 shengsuanyun_exports = {};
|
|
28
|
+
__export(shengsuanyun_exports, {
|
|
29
|
+
ShengSuanYunProvider: () => ShengSuanYunProvider,
|
|
30
|
+
shengsuanyunProviderOptions: () => shengsuanyunProviderOptions,
|
|
31
|
+
supportsChatCompletions: () => supportsChatCompletions
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(shengsuanyun_exports);
|
|
34
|
+
var import_openai = require("@langchain/openai");
|
|
35
|
+
var import_utils = require("@nocobase/utils");
|
|
36
|
+
var import_ai_manager = require("../manager/ai-manager");
|
|
37
|
+
var import_provider = require("./provider");
|
|
38
|
+
const CHAT_COMPLETIONS_API = "/v1/chat/completions";
|
|
39
|
+
function supportsChatCompletions(model) {
|
|
40
|
+
return !Array.isArray(model.support_apis) || model.support_apis.includes(CHAT_COMPLETIONS_API);
|
|
41
|
+
}
|
|
42
|
+
class ShengSuanYunProvider extends import_provider.LLMProvider {
|
|
43
|
+
get baseURL() {
|
|
44
|
+
return "https://router.shengsuanyun.com/api/v1";
|
|
45
|
+
}
|
|
46
|
+
createModel() {
|
|
47
|
+
const { apiKey, xTitle } = this.serviceOptions || {};
|
|
48
|
+
const { responseFormat, structuredOutput } = this.modelOptions || {};
|
|
49
|
+
const { name, schema } = structuredOutput || {};
|
|
50
|
+
const responseFormatOptions = {
|
|
51
|
+
type: responseFormat ?? "text"
|
|
52
|
+
};
|
|
53
|
+
if (responseFormat === "json_schema" && schema) {
|
|
54
|
+
responseFormatOptions.json_schema = {
|
|
55
|
+
schema,
|
|
56
|
+
name: name ?? "schema"
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return new import_openai.ChatOpenAI({
|
|
60
|
+
apiKey,
|
|
61
|
+
...this.modelOptions,
|
|
62
|
+
modelKwargs: {
|
|
63
|
+
response_format: responseFormatOptions
|
|
64
|
+
},
|
|
65
|
+
configuration: {
|
|
66
|
+
baseURL: this.getResolvedBaseURL(),
|
|
67
|
+
...xTitle ? { defaultHeaders: { "X-Title": xTitle } } : {}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async listModels() {
|
|
72
|
+
var _a;
|
|
73
|
+
const { apiKey, xTitle } = this.serviceOptions || {};
|
|
74
|
+
let url;
|
|
75
|
+
try {
|
|
76
|
+
url = this.buildRequestURL("models");
|
|
77
|
+
} catch (error) {
|
|
78
|
+
return { code: 400, errMsg: error instanceof Error ? error.message : String(error) };
|
|
79
|
+
}
|
|
80
|
+
if (!apiKey) {
|
|
81
|
+
return { code: 400, errMsg: "API Key required" };
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const response = await (0, import_utils.serverRequest)({
|
|
85
|
+
method: "GET",
|
|
86
|
+
url,
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: `Bearer ${apiKey}`,
|
|
89
|
+
...xTitle ? { "X-Title": xTitle } : {}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
const models = Array.isArray((_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) ? response.data.data : [];
|
|
93
|
+
return {
|
|
94
|
+
models: models.filter(supportsChatCompletions).map(({ id }) => ({ id }))
|
|
95
|
+
};
|
|
96
|
+
} catch (error) {
|
|
97
|
+
return {
|
|
98
|
+
code: 500,
|
|
99
|
+
errMsg: error instanceof Error ? error.message : String(error)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const shengsuanyunProviderOptions = {
|
|
105
|
+
title: "SSYCloud",
|
|
106
|
+
supportedModel: [import_ai_manager.SupportedModel.LLM],
|
|
107
|
+
provider: ShengSuanYunProvider
|
|
108
|
+
};
|
|
109
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
110
|
+
0 && (module.exports = {
|
|
111
|
+
ShengSuanYunProvider,
|
|
112
|
+
shengsuanyunProviderOptions,
|
|
113
|
+
supportsChatCompletions
|
|
114
|
+
});
|
|
@@ -51,7 +51,7 @@ class AIPluginFeatureManagerImpl extends import_features.BasePluginFeatureManage
|
|
|
51
51
|
return this.features.vectorStoreProvider;
|
|
52
52
|
}
|
|
53
53
|
get knowledgeBase() {
|
|
54
|
-
if (!this.features.
|
|
54
|
+
if (!this.features.knowledgeBase) {
|
|
55
55
|
throw this.featureNotSupportedError("knowledgeBase");
|
|
56
56
|
}
|
|
57
57
|
return this.features.knowledgeBase;
|
|
@@ -16,6 +16,7 @@ export type LLMProviderMeta = {
|
|
|
16
16
|
provider: new (opts: LLMProviderOptions) => LLMProvider;
|
|
17
17
|
embedding?: new (opts: EmbeddingProviderOptions) => EmbeddingProvider;
|
|
18
18
|
supportWebSearch?: boolean;
|
|
19
|
+
webSearchModels?: string[];
|
|
19
20
|
};
|
|
20
21
|
export declare enum SupportedModel {
|
|
21
22
|
LLM = "LLM",
|
|
@@ -38,6 +39,7 @@ export type EnabledLLMService = {
|
|
|
38
39
|
providerTitle?: string;
|
|
39
40
|
enabledModels: EnabledLLMModel[];
|
|
40
41
|
supportWebSearch: boolean;
|
|
42
|
+
webSearchModels?: string[];
|
|
41
43
|
isToolConflict: boolean;
|
|
42
44
|
};
|
|
43
45
|
export declare class AIManager {
|
|
@@ -51,6 +53,7 @@ export declare class AIManager {
|
|
|
51
53
|
title: string;
|
|
52
54
|
supportedModel: SupportedModel[];
|
|
53
55
|
supportWebSearch: boolean;
|
|
56
|
+
webSearchModels: string[];
|
|
54
57
|
}[];
|
|
55
58
|
getSupportedProvider(model: SupportedModel): string[];
|
|
56
59
|
listAllEnabledModels(): Promise<EnabledLLMService[]>;
|
|
@@ -48,11 +48,12 @@ class AIManager {
|
|
|
48
48
|
}
|
|
49
49
|
listLLMProviders() {
|
|
50
50
|
const providers = this.llmProviders.entries();
|
|
51
|
-
return Array.from(providers).map(([name, { title, supportedModel, supportWebSearch }]) => ({
|
|
51
|
+
return Array.from(providers).map(([name, { title, supportedModel, supportWebSearch, webSearchModels }]) => ({
|
|
52
52
|
name,
|
|
53
53
|
title,
|
|
54
54
|
supportedModel: supportedModel ?? ["LLM" /* LLM */],
|
|
55
|
-
supportWebSearch: supportWebSearch ?? false
|
|
55
|
+
supportWebSearch: supportWebSearch ?? false,
|
|
56
|
+
webSearchModels
|
|
56
57
|
}));
|
|
57
58
|
}
|
|
58
59
|
getSupportedProvider(model) {
|
|
@@ -98,6 +99,7 @@ class AIManager {
|
|
|
98
99
|
providerTitle: providerMeta.title,
|
|
99
100
|
enabledModels,
|
|
100
101
|
supportWebSearch: providerMeta.supportWebSearch ?? false,
|
|
102
|
+
webSearchModels: providerMeta.webSearchModels,
|
|
101
103
|
isToolConflict: providerClient.isToolConflict()
|
|
102
104
|
};
|
|
103
105
|
}
|
|
@@ -149,6 +151,9 @@ class AIManager {
|
|
|
149
151
|
if (!providerOptions) {
|
|
150
152
|
throw new Error("LLM service provider not found");
|
|
151
153
|
}
|
|
154
|
+
if (webSearch === true && providerOptions.webSearchModels && !providerOptions.webSearchModels.includes(model)) {
|
|
155
|
+
throw new Error(`Web search is not supported by model "${model}"`);
|
|
156
|
+
}
|
|
152
157
|
const Provider = providerOptions.provider;
|
|
153
158
|
const provider = new Provider({
|
|
154
159
|
app: this.plugin.app,
|
|
@@ -41,6 +41,7 @@ __export(work_context_handler_exports, {
|
|
|
41
41
|
module.exports = __toCommonJS(work_context_handler_exports);
|
|
42
42
|
var import_utils = require("@nocobase/utils");
|
|
43
43
|
var import_lodash = __toESM(require("lodash"));
|
|
44
|
+
const MODEL_EXCLUDED_FIELDS = /* @__PURE__ */ new Set(["frontendTools"]);
|
|
44
45
|
const createWorkContextHandler = (plugin) => new WorkContextHandlerImpl(plugin);
|
|
45
46
|
class WorkContextHandlerImpl {
|
|
46
47
|
constructor(plugin) {
|
|
@@ -82,11 +83,17 @@ class WorkContextHandlerImpl {
|
|
|
82
83
|
if (!contextItem) {
|
|
83
84
|
return "";
|
|
84
85
|
}
|
|
85
|
-
const
|
|
86
|
+
const modelContext = this.excludeInternalFields(contextItem);
|
|
87
|
+
const { resolve } = this.strategies.get(modelContext.type) ?? {};
|
|
86
88
|
if (resolve) {
|
|
87
|
-
return await resolve(ctx,
|
|
89
|
+
return await resolve(ctx, modelContext);
|
|
88
90
|
}
|
|
89
|
-
return await ((_b = (_a = this.defaultStrategy).resolve) == null ? void 0 : _b.call(_a, ctx,
|
|
91
|
+
return await ((_b = (_a = this.defaultStrategy).resolve) == null ? void 0 : _b.call(_a, ctx, modelContext));
|
|
92
|
+
}
|
|
93
|
+
excludeInternalFields(contextItem) {
|
|
94
|
+
return Object.fromEntries(
|
|
95
|
+
Object.entries(contextItem).filter(([field]) => !MODEL_EXCLUDED_FIELDS.has(field))
|
|
96
|
+
);
|
|
90
97
|
}
|
|
91
98
|
}
|
|
92
99
|
const Stringify = (_plugin) => async (_ctx, contextItem) => {
|
package/dist/server/migrations/20260501000000-ai-employee-knowledge-base-retrieval-strategy.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
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 { Migration } from '@nocobase/server';
|
|
10
|
+
export default class extends Migration {
|
|
11
|
+
on: string;
|
|
12
|
+
appVersion: string;
|
|
13
|
+
up(): Promise<void>;
|
|
14
|
+
}
|
package/dist/server/migrations/20260501000000-ai-employee-knowledge-base-retrieval-strategy.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
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 ai_employee_knowledge_base_retrieval_strategy_exports = {};
|
|
28
|
+
__export(ai_employee_knowledge_base_retrieval_strategy_exports, {
|
|
29
|
+
default: () => ai_employee_knowledge_base_retrieval_strategy_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(ai_employee_knowledge_base_retrieval_strategy_exports);
|
|
32
|
+
var import_server = require("@nocobase/server");
|
|
33
|
+
var import_ai_knowledge_base = require("../ai-employees/ai-knowledge-base");
|
|
34
|
+
const getKnowledgeBaseSettings = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? { ...value } : {};
|
|
35
|
+
class ai_employee_knowledge_base_retrieval_strategy_default extends import_server.Migration {
|
|
36
|
+
on = "afterSync";
|
|
37
|
+
appVersion = "<3.0.0";
|
|
38
|
+
async up() {
|
|
39
|
+
const repository = this.db.getRepository("aiEmployees");
|
|
40
|
+
const employees = await repository.find();
|
|
41
|
+
for (const employee of employees) {
|
|
42
|
+
const knowledgeBase = getKnowledgeBaseSettings(employee.get("knowledgeBase"));
|
|
43
|
+
if ((0, import_ai_knowledge_base.isKnowledgeBaseRetrievalStrategy)(knowledgeBase.retrievalStrategy)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
await employee.update({ knowledgeBase: { ...knowledgeBase, retrievalStrategy: "always" } });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
package/dist/server/plugin.d.ts
CHANGED
|
@@ -62,6 +62,7 @@ export declare class PluginAIServer extends Plugin {
|
|
|
62
62
|
get repositories(): {
|
|
63
63
|
aiContextDatasources: import("@nocobase/database").Repository<any, any>;
|
|
64
64
|
};
|
|
65
|
+
private registerAIFileAccessAuthorizer;
|
|
65
66
|
get fileManager(): PluginFileManagerServer;
|
|
66
67
|
private repository;
|
|
67
68
|
}
|
package/dist/server/plugin.js
CHANGED
|
@@ -56,6 +56,7 @@ var import_ai_employees_manager = require("./ai-employees/ai-employees-manager")
|
|
|
56
56
|
var import_ai_conversations = require("./ai-employees/ai-conversations");
|
|
57
57
|
var import_snowflake = __toESM(require("./snowflake"));
|
|
58
58
|
var aiEmployeeActions = __toESM(require("./resource/aiEmployees"));
|
|
59
|
+
var llmServiceActions = __toESM(require("./resource/llmServices"));
|
|
59
60
|
var import_google_genai = require("./llm-providers/google-genai");
|
|
60
61
|
var import_ai_employee = require("./workflow/triggers/ai-employee");
|
|
61
62
|
var import_tools = require("./tools");
|
|
@@ -76,11 +77,13 @@ var import_checkpoints = require("./ai-employees/checkpoints");
|
|
|
76
77
|
var import_mimo = require("./llm-providers/mimo");
|
|
77
78
|
var import_mistral = require("./llm-providers/mistral");
|
|
78
79
|
var import_orcarouter = require("./llm-providers/orcarouter");
|
|
80
|
+
var import_shengsuanyun = require("./llm-providers/shengsuanyun");
|
|
79
81
|
var import_sub_agents = require("./ai-employees/sub-agents");
|
|
80
82
|
var import_employee = require("./workflow/nodes/employee");
|
|
81
83
|
var import_ai_knowledge_base = require("./ai-employees/ai-knowledge-base");
|
|
82
84
|
var import_llm_stream_manager = require("./manager/llm-stream-manager");
|
|
83
85
|
var import_attachments = require("./attachments");
|
|
86
|
+
var import_ai_knowledge_base2 = require("./ai-employees/ai-knowledge-base");
|
|
84
87
|
class PluginAIServer extends import_server.Plugin {
|
|
85
88
|
features = new import_ai_feature_manager.AIPluginFeatureManagerImpl();
|
|
86
89
|
aiManager = new import_ai_manager.AIManager(this);
|
|
@@ -134,6 +137,9 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
134
137
|
this.app.on("afterUpgrade", async () => {
|
|
135
138
|
await this.resetConversationThreadsWhenCheckpointsEmpty();
|
|
136
139
|
});
|
|
140
|
+
this.db.on("aiEmployees.beforeCreate", (employee) => {
|
|
141
|
+
employee.set("knowledgeBase", (0, import_ai_knowledge_base2.withDefaultKnowledgeBaseRetrievalStrategy)(employee.get("knowledgeBase")));
|
|
142
|
+
});
|
|
137
143
|
}
|
|
138
144
|
async resetConversationThreadsWhenCheckpointsEmpty() {
|
|
139
145
|
const [checkpointCount, checkpointWriteCount, checkpointBlobCount, conversationsWithThreadCount] = await Promise.all([
|
|
@@ -169,6 +175,7 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
169
175
|
this.defineResources();
|
|
170
176
|
this.registerMcpClientEvents();
|
|
171
177
|
this.setPermissions();
|
|
178
|
+
this.registerAIFileAccessAuthorizer();
|
|
172
179
|
this.registerWorkflow();
|
|
173
180
|
this.registerWorkContextResolveStrategy();
|
|
174
181
|
(0, import_employee.registerAIEmployeeTaskNotification)(this);
|
|
@@ -189,6 +196,7 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
189
196
|
this.aiManager.registerLLMProvider("kimi", import_kimi.kimiProviderOptions);
|
|
190
197
|
this.aiManager.registerLLMProvider("xai", import_xai.xaiProviderOptions);
|
|
191
198
|
this.aiManager.registerLLMProvider("orcarouter", import_orcarouter.orcarouterProviderOptions);
|
|
199
|
+
this.aiManager.registerLLMProvider("shengsuanyun", import_shengsuanyun.shengsuanyunProviderOptions);
|
|
192
200
|
}
|
|
193
201
|
registerTools() {
|
|
194
202
|
const toolsManager = this.ai.toolsManager;
|
|
@@ -235,6 +243,9 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
235
243
|
Object.entries(aiEmployeeActions).forEach(([name, action]) => {
|
|
236
244
|
this.app.resourceManager.registerActionHandler(`aiEmployees:${name}`, action);
|
|
237
245
|
});
|
|
246
|
+
Object.entries(llmServiceActions).forEach(([name, action]) => {
|
|
247
|
+
this.app.resourceManager.registerActionHandler(`llmServices:${name}`, action);
|
|
248
|
+
});
|
|
238
249
|
}
|
|
239
250
|
registerMcpClientEvents() {
|
|
240
251
|
this.db.on("aiMcpClients.afterCreate", (model, { transaction } = {}) => {
|
|
@@ -370,6 +381,26 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
370
381
|
aiContextDatasources: this.repository("aiContextDatasources")
|
|
371
382
|
};
|
|
372
383
|
}
|
|
384
|
+
registerAIFileAccessAuthorizer() {
|
|
385
|
+
this.fileManager.registerFileAccessAuthorizer({
|
|
386
|
+
name: "ai-files",
|
|
387
|
+
authorize: async (ctx, params) => {
|
|
388
|
+
var _a;
|
|
389
|
+
const currentUserId = (_a = ctx.state.currentUser) == null ? void 0 : _a.id;
|
|
390
|
+
if (params.dataSourceKey !== "main" || params.collectionName !== "aiFiles" || !currentUserId) {
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
const file = await ctx.db.getRepository("aiFiles").findOne({
|
|
394
|
+
filter: {
|
|
395
|
+
id: params.id,
|
|
396
|
+
createdById: currentUserId
|
|
397
|
+
},
|
|
398
|
+
fields: ["id"]
|
|
399
|
+
});
|
|
400
|
+
return Boolean(file);
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
}
|
|
373
404
|
get fileManager() {
|
|
374
405
|
return this.app.pm.get("file-manager");
|
|
375
406
|
}
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { Context, Next } from '@nocobase/actions';
|
|
10
|
+
import { Model } from '@nocobase/database';
|
|
11
|
+
export declare function isAIEmployeeEnabled(employee: Model | null | undefined): boolean;
|
|
10
12
|
declare function loginInCheck(ctx: Context, next: Next): Promise<never>;
|
|
11
13
|
declare const _default: {
|
|
12
14
|
name: string;
|
|
@@ -36,7 +36,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
36
36
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
37
|
var aiConversations_exports = {};
|
|
38
38
|
__export(aiConversations_exports, {
|
|
39
|
-
default: () => aiConversations_default
|
|
39
|
+
default: () => aiConversations_default,
|
|
40
|
+
isAIEmployeeEnabled: () => isAIEmployeeEnabled
|
|
40
41
|
});
|
|
41
42
|
module.exports = __toCommonJS(aiConversations_exports);
|
|
42
43
|
var import_actions = __toESM(require("@nocobase/actions"));
|
|
@@ -44,6 +45,8 @@ var import_database = require("@nocobase/database");
|
|
|
44
45
|
var import_utils = require("../utils");
|
|
45
46
|
var import_ai_employee = require("../ai-employees/ai-employee");
|
|
46
47
|
var import_ai_chat_conversation = require("../manager/ai-chat-conversation");
|
|
48
|
+
var import_frontend_tools = require("../../common/frontend-tools");
|
|
49
|
+
var import_frontend_tools2 = require("../frontend-tools");
|
|
47
50
|
async function getAIEmployee(ctx, username) {
|
|
48
51
|
var _a;
|
|
49
52
|
const filter = {
|
|
@@ -57,6 +60,10 @@ async function getAIEmployee(ctx, username) {
|
|
|
57
60
|
});
|
|
58
61
|
return employee;
|
|
59
62
|
}
|
|
63
|
+
function isAIEmployeeEnabled(employee) {
|
|
64
|
+
var _a;
|
|
65
|
+
return ((_a = employee == null ? void 0 : employee.get) == null ? void 0 : _a.call(employee, "enabled")) !== false;
|
|
66
|
+
}
|
|
60
67
|
function setupSSEHeaders(ctx) {
|
|
61
68
|
ctx.set({
|
|
62
69
|
"Content-Type": "text/event-stream",
|
|
@@ -142,12 +149,14 @@ var aiConversations_default = {
|
|
|
142
149
|
var _a;
|
|
143
150
|
const userId = (_a = ctx.auth) == null ? void 0 : _a.user.id;
|
|
144
151
|
const filter = ctx.action.params.filter || {};
|
|
152
|
+
const scope = ctx.action.params.scope;
|
|
145
153
|
ctx.action.mergeParams({
|
|
146
154
|
filter: {
|
|
147
155
|
...filter,
|
|
148
156
|
userId,
|
|
149
157
|
from: filter.from ?? "main-agent",
|
|
150
|
-
category: "chat"
|
|
158
|
+
category: "chat",
|
|
159
|
+
...typeof scope === "string" && scope ? { scope } : {}
|
|
151
160
|
}
|
|
152
161
|
});
|
|
153
162
|
return import_actions.default.list(ctx, next);
|
|
@@ -197,15 +206,20 @@ var aiConversations_default = {
|
|
|
197
206
|
var _a;
|
|
198
207
|
const plugin = ctx.app.pm.get("ai");
|
|
199
208
|
const userId = (_a = ctx.auth) == null ? void 0 : _a.user.id;
|
|
200
|
-
const { aiEmployee, systemMessage, skillSettings, conversationSettings, modelSettings } = ctx.action.params.values || {};
|
|
209
|
+
const { aiEmployee, systemMessage, skillSettings, conversationSettings, modelSettings, scope } = ctx.action.params.values || {};
|
|
210
|
+
const normalizedScope = typeof scope === "string" ? scope : void 0;
|
|
201
211
|
const employee = await getAIEmployee(ctx, aiEmployee.username);
|
|
202
212
|
if (!employee) {
|
|
203
213
|
ctx.throw(400, "AI employee not found");
|
|
204
214
|
}
|
|
215
|
+
if (!isAIEmployeeEnabled(employee)) {
|
|
216
|
+
ctx.throw(400, "AI employee is disabled");
|
|
217
|
+
}
|
|
205
218
|
try {
|
|
206
219
|
ctx.body = await plugin.aiConversationsManager.create({
|
|
207
220
|
userId,
|
|
208
221
|
aiEmployee,
|
|
222
|
+
scope: normalizedScope,
|
|
209
223
|
options: {
|
|
210
224
|
systemMessage,
|
|
211
225
|
skillSettings,
|
|
@@ -672,6 +686,17 @@ var aiConversations_default = {
|
|
|
672
686
|
if (!(toolCalls == null ? void 0 : toolCalls.length)) {
|
|
673
687
|
ctx.throw(400);
|
|
674
688
|
}
|
|
689
|
+
const selectedToolCall = toolCalls.find((toolCall2) => toolCall2.id === toolCallId);
|
|
690
|
+
if (!selectedToolCall) {
|
|
691
|
+
ctx.throw(400);
|
|
692
|
+
}
|
|
693
|
+
if (selectedToolCall.name === import_frontend_tools.EXECUTE_FRONTEND_TOOL_NAME) {
|
|
694
|
+
const toolId = isRecord(selectedToolCall.args) ? selectedToolCall.args.toolId : void 0;
|
|
695
|
+
const frontendTool = typeof toolId === "string" ? await (0, import_frontend_tools2.findCurrentFrontendTool)(ctx, toolId, message.sessionId) : void 0;
|
|
696
|
+
if (!frontendTool) {
|
|
697
|
+
ctx.throw(400, ctx.t("Frontend tool is unavailable"));
|
|
698
|
+
}
|
|
699
|
+
}
|
|
675
700
|
const aiToolMessagesModel = ctx.db.getModel("aiToolMessages");
|
|
676
701
|
const toolCall = await aiToolMessagesModel.findOne({
|
|
677
702
|
where: { sessionId: message.sessionId, messageId: message.messageId, toolCallId }
|
|
@@ -715,6 +740,7 @@ var aiConversations_default = {
|
|
|
715
740
|
toolCall2.auto = toolMessage == null ? void 0 : toolMessage.auto;
|
|
716
741
|
toolCall2.status = toolMessage == null ? void 0 : toolMessage.status;
|
|
717
742
|
toolCall2.content = toolMessage == null ? void 0 : toolMessage.content;
|
|
743
|
+
toolCall2.userDecision = toolMessage == null ? void 0 : toolMessage.userDecision;
|
|
718
744
|
toolCall2.execution = tools == null ? void 0 : tools.execution;
|
|
719
745
|
toolCall2.willInterrupt = (tools == null ? void 0 : tools.execution) === "frontend" || (toolMessage == null ? void 0 : toolMessage.auto) === false;
|
|
720
746
|
toolCall2.defaultPermission = tools == null ? void 0 : tools.defaultPermission;
|
|
@@ -801,3 +827,7 @@ var aiConversations_default = {
|
|
|
801
827
|
}
|
|
802
828
|
}
|
|
803
829
|
};
|
|
830
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
831
|
+
0 && (module.exports = {
|
|
832
|
+
isAIEmployeeEnabled
|
|
833
|
+
});
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { Context, Next } from '@nocobase/actions';
|
|
10
|
+
export declare const create: (ctx: Context, next: Next) => Promise<void>;
|
|
11
|
+
export declare const update: (ctx: Context, next: Next) => Promise<void>;
|
|
10
12
|
export declare const list: (ctx: Context, next: Next) => Promise<void>;
|
|
11
13
|
export declare const listByUser: (ctx: Context, next: Next) => Promise<any>;
|
|
12
14
|
export declare const updateUserPrompt: (ctx: Context, next: Next) => Promise<any>;
|
|
@@ -36,16 +36,84 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
36
36
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
37
|
var aiEmployees_exports = {};
|
|
38
38
|
__export(aiEmployees_exports, {
|
|
39
|
+
create: () => create,
|
|
39
40
|
getTemplates: () => getTemplates,
|
|
40
41
|
list: () => list,
|
|
41
42
|
listByUser: () => listByUser,
|
|
43
|
+
update: () => update,
|
|
42
44
|
updateUserPrompt: () => updateUserPrompt
|
|
43
45
|
});
|
|
44
46
|
module.exports = __toCommonJS(aiEmployees_exports);
|
|
45
47
|
var import_actions = __toESM(require("@nocobase/actions"));
|
|
48
|
+
var import_database = require("@nocobase/database");
|
|
46
49
|
var templates = __toESM(require("../ai-employees/templates"));
|
|
47
50
|
var import_lodash = __toESM(require("lodash"));
|
|
48
51
|
var import_ai_feature_manager = require("../manager/ai-feature-manager");
|
|
52
|
+
var import_error_codes = require("../../common/error-codes");
|
|
53
|
+
var import_ai_employee_validation = require("../../common/ai-employee-validation");
|
|
54
|
+
var import_ai_knowledge_base = require("../ai-employees/ai-knowledge-base");
|
|
55
|
+
const isUniqueConstraintError = (error) => error instanceof import_database.UniqueConstraintError || typeof error === "object" && error !== null && "name" in error && error.name === "SequelizeUniqueConstraintError";
|
|
56
|
+
const throwUsernameConflict = (ctx) => ctx.throw(409, {
|
|
57
|
+
code: import_error_codes.AI_EMPLOYEE_USERNAME_CONFLICT,
|
|
58
|
+
message: ctx.t("Username already exists")
|
|
59
|
+
});
|
|
60
|
+
const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
61
|
+
const validateAndNormalizeProfileValues = (ctx) => {
|
|
62
|
+
const values = ctx.action.params.values;
|
|
63
|
+
if (!isRecord(values)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if ("username" in values) {
|
|
67
|
+
if (typeof values.username !== "string" || !(0, import_ai_employee_validation.isValidAIEmployeeUsername)(values.username)) {
|
|
68
|
+
ctx.throw(400, {
|
|
69
|
+
code: import_error_codes.AI_EMPLOYEE_USERNAME_INVALID,
|
|
70
|
+
message: ctx.t("Use 1-64 letters, numbers, underscores, or hyphens.")
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
values.username = (0, import_ai_employee_validation.normalizeAIEmployeeName)(values.username);
|
|
74
|
+
}
|
|
75
|
+
if ("nickname" in values) {
|
|
76
|
+
if (typeof values.nickname !== "string" || !(0, import_ai_employee_validation.isValidAIEmployeeNickname)(values.nickname)) {
|
|
77
|
+
ctx.throw(400, {
|
|
78
|
+
code: import_error_codes.AI_EMPLOYEE_NICKNAME_INVALID,
|
|
79
|
+
message: ctx.t("Use 1-64 letters, numbers, spaces, or . _ - ' ( ) & \xB7.")
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
values.nickname = (0, import_ai_employee_validation.normalizeAIEmployeeName)(values.nickname);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const setDefaultKnowledgeBaseRetrievalStrategy = (ctx) => {
|
|
86
|
+
const values = ctx.action.params.values;
|
|
87
|
+
if (isRecord(values)) {
|
|
88
|
+
values.knowledgeBase = (0, import_ai_knowledge_base.withDefaultKnowledgeBaseRetrievalStrategy)(values.knowledgeBase);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const create = async (ctx, next) => {
|
|
92
|
+
var _a;
|
|
93
|
+
validateAndNormalizeProfileValues(ctx);
|
|
94
|
+
setDefaultKnowledgeBaseRetrievalStrategy(ctx);
|
|
95
|
+
const username = (_a = ctx.action.params.values) == null ? void 0 : _a.username;
|
|
96
|
+
if (typeof username === "string") {
|
|
97
|
+
const existingEmployee = await ctx.db.getRepository("aiEmployees").findOne({
|
|
98
|
+
filter: { username }
|
|
99
|
+
});
|
|
100
|
+
if (existingEmployee) {
|
|
101
|
+
throwUsernameConflict(ctx);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
await import_actions.default.create(ctx, next);
|
|
106
|
+
} catch (error) {
|
|
107
|
+
if (isUniqueConstraintError(error)) {
|
|
108
|
+
throwUsernameConflict(ctx);
|
|
109
|
+
}
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const update = async (ctx, next) => {
|
|
114
|
+
validateAndNormalizeProfileValues(ctx);
|
|
115
|
+
await import_actions.default.update(ctx, next);
|
|
116
|
+
};
|
|
49
117
|
const list = async (ctx, next) => {
|
|
50
118
|
var _a, _b;
|
|
51
119
|
const { paginate } = ctx.action.params || {};
|
|
@@ -227,8 +295,10 @@ const getTemplates = async (ctx, next) => {
|
|
|
227
295
|
};
|
|
228
296
|
// Annotate the CommonJS export names for ESM import in node:
|
|
229
297
|
0 && (module.exports = {
|
|
298
|
+
create,
|
|
230
299
|
getTemplates,
|
|
231
300
|
list,
|
|
232
301
|
listByUser,
|
|
302
|
+
update,
|
|
233
303
|
updateUserPrompt
|
|
234
304
|
});
|