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