@nocobase/plugin-ai 2.2.0-beta.9 → 3.0.0-alpha.1
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/client-v2.d.ts +1 -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/vector-database.md +3 -3
- package/dist/ai/docs/nocobase/ai-employees/scenarios/company-background-research.md +125 -0
- package/dist/ai/docs/nocobase/ai-employees/workflow/nodes/knowledge/create-document.md +1 -1
- package/dist/ai/docs/nocobase/api/app/env.md +3 -1
- package/dist/ai/docs/nocobase/api/cli/index.md +14 -2
- package/dist/ai/docs/nocobase/api/cli/portal/config.md +44 -0
- package/dist/ai/docs/nocobase/api/cli/portal/create.md +48 -0
- package/dist/ai/docs/nocobase/api/cli/portal/deploy.md +39 -0
- package/dist/ai/docs/nocobase/api/cli/portal/destroy.md +41 -0
- package/dist/ai/docs/nocobase/api/cli/portal/dev.md +39 -0
- package/dist/ai/docs/nocobase/api/cli/portal/index.md +136 -0
- package/dist/ai/docs/nocobase/api/cli/portal/info.md +41 -0
- package/dist/ai/docs/nocobase/api/cli/portal/list.md +40 -0
- package/dist/ai/docs/nocobase/api/cli/portal/pull.md +43 -0
- package/dist/ai/docs/nocobase/api/cli/portal/push.md +41 -0
- package/dist/ai/docs/nocobase/building-tips/ai-fill-js-block-form.md +1092 -0
- package/dist/ai/docs/nocobase/building-tips/operations-dashboard.md +513 -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/stable-url.md +87 -0
- package/dist/ai/docs/nocobase/file-manager/storage/index.md +66 -26
- package/dist/ai/docs/nocobase/file-manager/storage/local.md +3 -1
- package/dist/ai/docs/nocobase/file-manager/storage/s3-pro.md +58 -7
- package/dist/ai/docs/nocobase/get-started/deployment/production.md +24 -2
- package/dist/ai/docs/nocobase/get-started/installation/docker-caddy.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker-nginx.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker.mdx +27 -3
- package/dist/ai/docs/nocobase/get-started/installation/env.md +35 -2
- package/dist/ai/docs/nocobase/index.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/blocks/data-blocks/comment.md +107 -0
- package/dist/ai/docs/nocobase/interface-builder/index.md +7 -6
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/desktop.md +97 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/index.md +50 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/mobile.md +133 -0
- package/dist/ai/docs/nocobase/multi-app/multi-app-vs-multi-portal-vs-multi-space.md +159 -0
- package/dist/ai/docs/nocobase/multi-app/multi-portal/index.md +195 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/index.md +10 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/caddy.md +15 -2
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/index.md +1 -1
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/nginx.md +16 -2
- package/dist/ai/docs/nocobase/ops-management/migration-manager/built-in-tables.md +1 -2
- package/dist/ai/docs/nocobase/plugins/@nocobase/plugin-block-comment/index.md +14 -0
- package/dist/ai/docs/nocobase/runjs/context/ai.md +396 -0
- package/dist/ai/docs/nocobase/security/guide.md +23 -0
- package/dist/ai/docs/nocobase/tutorials/index.md +20 -1
- package/dist/ai/docs/nocobase/workflow/development/api.md +259 -77
- package/dist/ai/docs/nocobase/workflow/development/index.md +2 -1
- package/dist/ai/docs/nocobase/workflow/development/migration.md +319 -0
- package/dist/ai/docs/nocobase/workflow/development/node.md +84 -51
- package/dist/ai/docs/nocobase/workflow/development/trigger.md +122 -20
- package/dist/ai/tools/executeFrontendTool.d.ts +10 -0
- package/dist/ai/tools/executeFrontendTool.js +86 -0
- package/dist/ai/tools/formFiller.js +4 -3
- package/dist/ai/tools/getSkill.js +1 -1
- package/dist/ai/tools/loadFrontendTool.d.ts +10 -0
- package/dist/ai/tools/loadFrontendTool.js +99 -0
- package/dist/ai/tools/subAgentWebSearch.js +20 -15
- package/dist/client/23.65ea8c37cd4b884b.js +10 -0
- package/dist/client/244.8631eb5cf3f05e21.js +10 -0
- package/dist/client/264.cc98933ef65608b6.js +10 -0
- package/dist/client/336.7a8a8853196ad779.js +11 -0
- package/dist/client/416.92b74ca47e4099c4.js +10 -0
- package/dist/client/446.d63c38d0309fe250.js +10 -0
- package/dist/client/525.94dd4136c1361477.js +10 -0
- package/dist/client/663.680bcf6272a8504d.js +10 -0
- package/dist/client/681.6ffbc9329b9ac242.js +10 -0
- package/dist/client/705.19b642db34de438a.js +10 -0
- package/dist/client/ai-employees/1.x/selector/AIContextCollector.d.ts +1 -4
- package/dist/client/ai-employees/permissions/PermissionsTab.d.ts +21 -5
- package/dist/client/index.d.ts +13 -20
- package/dist/client/index.js +8 -8
- package/dist/client/workflow/nodes/employee/index.d.ts +2 -23
- package/dist/client/workflow/nodes/llm/index.d.ts +2 -52
- package/dist/client/workflow/triggers/ai-employee/index.d.ts +2 -83
- package/dist/client-v2/23.1bcb6986b40723d8.js +10 -0
- package/dist/client-v2/244.c428e645ecb94414.js +10 -0
- package/dist/client-v2/264.be92ff6a4d2612f1.js +10 -0
- package/dist/client-v2/336.e406470429e0670e.js +11 -0
- package/dist/client-v2/416.0e1c2d9cde43b83d.js +10 -0
- package/dist/client-v2/420.b2aedb1ff71fca0e.js +10 -0
- package/dist/client-v2/446.073d450882db29fd.js +10 -0
- package/dist/client-v2/457.d72febb89e88fc00.js +10 -0
- package/dist/client-v2/663.342341f0b2b412d8.js +10 -0
- package/dist/client-v2/681.6890caa389564ff7.js +10 -0
- package/dist/client-v2/705.8dc34d43f02f322c.js +10 -0
- package/dist/{client/ai-employees/admin/AvatarSelect.d.ts → client-v2/ai-employees/AIEmployeeDropdown.d.ts} +8 -9
- package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +11 -2
- package/dist/{client → client-v2}/ai-employees/AddContextButton.d.ts +3 -1
- package/dist/{client → client-v2}/ai-employees/ai-coding/AICodingButton.d.ts +2 -1
- package/dist/{client/ai-employees/chatbox/AIEmployeeSwitch.d.ts → client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts} +1 -0
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Actions.d.ts +2 -4
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/AddLLMModal.d.ts +2 -4
- package/dist/client-v2/ai-employees/chatbox/components/Attachments.d.ts +27 -0
- package/dist/{client/ai-employees/permissions/Permissions.d.ts → client-v2/ai-employees/chatbox/components/ChatBox.d.ts} +2 -2
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatBoxLayout.d.ts +1 -1
- package/dist/{client/ai-employees/chatbox/markdown/Code.d.ts → client-v2/ai-employees/chatbox/components/ChatBoxUnreadBadge.d.ts} +6 -7
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ContextItem.d.ts +1 -1
- package/dist/client-v2/ai-employees/chatbox/components/Conversations.d.ts +18 -0
- package/dist/{client/ai-employees/admin/Templates.d.ts → client-v2/ai-employees/chatbox/components/DebugPanel.d.ts} +1 -1
- package/dist/{client/ai-employees/ai-coding/markdown/Code.d.ts → client-v2/ai-employees/chatbox/components/Markdown.d.ts} +12 -3
- package/dist/{client/ai-employees/1.x/selector/BlockSelector.d.ts → client-v2/ai-employees/chatbox/components/MessageContent.d.ts} +3 -4
- package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +39 -0
- package/dist/{client/ai-employees/admin/datasource/components/DatasourceSettingDetail.d.ts → client-v2/ai-employees/chatbox/components/Messages.d.ts} +4 -4
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ModelSwitcher.d.ts +4 -0
- package/dist/client-v2/ai-employees/chatbox/components/Sender.d.ts +42 -0
- package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolCard.d.ts +7 -5
- package/dist/client-v2/ai-employees/chatbox/components/index.d.ts +14 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChat.d.ts +29 -27
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +5 -3
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +2 -1
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +5 -4
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +12 -6
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useToolCallActions.d.ts +4 -2
- package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +56 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +4 -3
- package/dist/client-v2/ai-employees/chatbox/index.d.ts +17 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/model.d.ts +9 -2
- package/dist/client-v2/ai-employees/chatbox/roles.d.ts +11 -0
- package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +46 -79
- package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +8 -25
- package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +23 -63
- package/dist/client-v2/ai-employees/chatbox/stores/chat-sender.d.ts +43 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/stores/chat-tool-call.d.ts +6 -19
- package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +36 -0
- 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 +72 -0
- package/dist/client-v2/ai-employees/chatbox/upload.d.ts +19 -0
- package/dist/client-v2/ai-employees/chatbox/utils.d.ts +85 -0
- package/dist/{client/ai-employees/data-visualization/context.d.ts → client-v2/ai-employees/context/chart-config.d.ts} +1 -1
- package/dist/{client → client-v2}/ai-employees/context/code-editor.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/context/datasource.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/context/flow-models.d.ts +1 -1
- package/dist/client-v2/ai-employees/data-modeling/setup.d.ts +15 -0
- package/dist/{client → client-v2}/ai-employees/datasource/DatasourceSelector.d.ts +6 -2
- package/dist/{client/ai-employees/admin/datasource/flow-models/DatasourceSettingModel.d.ts → client-v2/ai-employees/flow/index.d.ts} +4 -6
- package/dist/{client → client-v2}/ai-employees/form-filler/tools/index.d.ts +1 -1
- package/dist/{client/ai-employees/ai-coding/tools/index.d.ts → client-v2/ai-employees/frontend-tools.d.ts} +3 -3
- package/dist/{client → client-v2}/ai-employees/stores/ai-selection.d.ts +4 -4
- package/dist/{client → client-v2}/ai-employees/stores/dialog-controller.d.ts +4 -4
- package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportCard.d.ts +2 -2
- package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportModal.d.ts +2 -2
- package/dist/{client/ai-employees/1.x/selector/withAISelectable.d.ts → client-v2/ai-employees/tools/ChartGeneratorCard.d.ts} +5 -4
- package/dist/{client/ai-employees/ai-coding/ui → client-v2/ai-employees/tools}/CodeToolCard.d.ts +1 -1
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingCard.d.ts +3 -5
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingModal.d.ts +4 -6
- package/dist/{client/ai-employees/sub-agents/ui → client-v2/ai-employees/tools}/SubAgentDispatchCard.d.ts +4 -9
- package/dist/client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts +16 -0
- package/dist/client-v2/ai-employees/tools/WorkflowTaskOutputCard.d.ts +16 -0
- package/dist/{client/ai-employees/ai-coding/tools/context-tools.d.ts → client-v2/ai-employees/tools/ai-coding.d.ts} +3 -1
- package/dist/client-v2/ai-employees/tools/business-report-utils.d.ts +45 -0
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/CollectionNode.d.ts +2 -3
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Diagram.d.ts +1 -1
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Table.d.ts +2 -2
- package/dist/client-v2/ai-employees/tools/data-modeling/legacy-template.d.ts +13 -0
- package/dist/client-v2/ai-employees/tools/data-modeling/runtime.d.ts +15 -0
- package/dist/{client/ai-employees → client-v2/ai-employees/tools}/data-modeling/types.d.ts +27 -4
- package/dist/client-v2/ai-employees/tools/data-modeling/useFieldInterfaceOptions.d.ts +151 -0
- package/dist/{client/ai-employees/data-visualization/tools/index.d.ts → client-v2/ai-employees/tools/data-visualization.d.ts} +1 -1
- package/dist/client-v2/ai-employees/tools/index.d.ts +32 -0
- package/dist/client-v2/ai-employees/types.d.ts +131 -7
- package/dist/client-v2/block/ai-chat-box/AIChatBoxBlockModel.d.ts +21 -0
- package/dist/{client/workflow/nodes/employee/flow-models/task.d.ts → client-v2/block/ai-chat-box/AIChatBoxCoreModel.d.ts} +1 -1
- package/dist/{client/admin-settings/AdminSettings.d.ts → client-v2/block/ai-chat-box/components/AIChatBoxCoreView.d.ts} +1 -1
- package/dist/{client/ai-employees/AIEmployeeListItem.d.ts → client-v2/block/ai-chat-box/components/AIChatBoxView.d.ts} +3 -5
- 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/components/RemoteSelect.d.ts +43 -0
- package/dist/{client → client-v2}/debug-logger.d.ts +2 -2
- package/dist/client-v2/f0053e745af0ad03.svg +50 -0
- package/dist/client-v2/index.d.ts +11 -12
- package/dist/client-v2/index.js +37 -1
- package/dist/client-v2/llm-providers/forms.d.ts +44 -0
- package/dist/client-v2/llm-providers/index.d.ts +24 -0
- package/dist/client-v2/llm-services/model-select.d.ts +33 -0
- package/dist/client-v2/llm-services/utils.d.ts +14 -0
- package/dist/client-v2/locale.d.ts +14 -0
- package/dist/client-v2/manager/ai-manager.d.ts +62 -0
- package/dist/client-v2/manager/frontend-tool-registry.d.ts +30 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +36 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +49 -0
- package/dist/client-v2/pages/AdminSettingsPage.d.ts +24 -0
- package/dist/client-v2/pages/DatasourceSettingsPage.d.ts +62 -0
- package/dist/client-v2/pages/EmployeesPage.d.ts +64 -0
- package/dist/client-v2/pages/LLMServicesPage.d.ts +75 -0
- package/dist/client-v2/pages/MCPSettingsPage.d.ts +73 -0
- package/dist/client-v2/pages/drawerWidth.d.ts +10 -0
- package/dist/client-v2/pages/permissions/Permissions.d.ts +67 -0
- package/dist/client-v2/pages/permissions/PermissionsTab.d.ts +12 -0
- package/dist/client-v2/pages/useUnsavedChangesBeforeClose.d.ts +29 -0
- package/dist/client-v2/plugin.d.ts +33 -0
- package/dist/client-v2/repositories/AIConfigRepository.d.ts +3 -23
- package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +21 -0
- package/dist/client-v2/workflow/components/FormValueRegistry.d.ts +12 -0
- package/dist/{client/components/ListCollapse.d.ts → client-v2/workflow/components/WorkflowListCollapse.d.ts} +4 -4
- package/dist/client-v2/workflow/constants.d.ts +26 -0
- package/dist/client-v2/workflow/nodes/employee/components/AIEmployeeFieldset.d.ts +11 -0
- package/dist/{client/ai-employees/common/CodeHighlight.d.ts → client-v2/workflow/nodes/employee/components/AIEmployeeSelect.d.ts} +5 -6
- package/dist/{client/ai-employees/ContextAwareTooltip.d.ts → client-v2/workflow/nodes/employee/components/Assignees.d.ts} +2 -1
- package/dist/client-v2/workflow/nodes/employee/components/FeedbackSettings.d.ts +17 -0
- package/dist/client-v2/workflow/nodes/employee/components/FileInputs.d.ts +11 -0
- package/dist/{client/ai-employees/AIEmployeesProvider.d.ts → client-v2/workflow/nodes/employee/components/MessageInputs.d.ts} +2 -3
- package/dist/client-v2/workflow/nodes/employee/components/ModelOptions.d.ts +17 -0
- package/dist/{client/ai-employees/admin/datasource/components/basic/CollectionCascader.d.ts → client-v2/workflow/nodes/employee/components/SkillSettings.d.ts} +6 -3
- package/dist/client-v2/workflow/nodes/employee/components/StructuredOutput.d.ts +11 -0
- package/dist/client-v2/workflow/nodes/employee/components/UserInput.d.ts +18 -0
- package/dist/{client/ai-employees/AISettingsProvider.d.ts → client-v2/workflow/nodes/employee/components/WebSearchOptions.d.ts} +6 -8
- package/dist/client-v2/workflow/nodes/employee/index.d.ts +23 -0
- package/dist/client-v2/workflow/nodes/llm/components/LLMFieldset.d.ts +12 -0
- package/dist/{client/ai-employees/chatbox → client-v2/workflow/nodes/llm/components}/Messages.d.ts +2 -1
- package/dist/client-v2/workflow/nodes/llm/components/StructuredOutput.d.ts +11 -0
- package/dist/client-v2/workflow/nodes/llm/index.d.ts +30 -0
- package/dist/client-v2/workflow/register.d.ts +10 -0
- package/dist/client-v2/workflow/triggers/ai-employee/AIEmployeeTriggerConfig.d.ts +11 -0
- package/dist/client-v2/workflow/triggers/ai-employee/Parameters.d.ts +11 -0
- package/dist/client-v2/workflow/triggers/ai-employee/index.d.ts +25 -0
- package/dist/client-v2/workflow/types.d.ts +128 -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 +20 -25
- package/dist/locale/en-US.json +116 -1
- package/dist/locale/zh-CN.json +116 -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 +3 -1
- package/dist/server/ai-employees/ai-employee.js +63 -9
- package/dist/server/ai-employees/middleware/conversation.js +9 -2
- package/dist/server/ai-employees/prompts.d.ts +2 -1
- package/dist/server/ai-employees/prompts.js +8 -2
- package/dist/server/ai-employees/tool-call-sanitizer.d.ts +1 -0
- package/dist/server/ai-employees/tool-call-sanitizer.js +2 -1
- package/dist/server/ai-employees/utils.js +11 -5
- package/dist/server/attachments.d.ts +24 -0
- package/dist/server/attachments.js +204 -0
- package/dist/server/collections/ai-conversations.js +5 -0
- package/dist/server/collections/ai-usage-events.d.ts +10 -0
- package/dist/server/collections/ai-usage-events.js +183 -0
- package/dist/server/document-loader/cached.d.ts +1 -0
- package/dist/server/document-loader/cached.js +18 -9
- package/dist/server/document-loader/constants.js +1 -1
- package/dist/server/document-loader/loader.d.ts +0 -1
- package/dist/server/document-loader/loader.js +25 -8
- package/dist/server/document-loader/types.d.ts +7 -0
- package/dist/server/frontend-tools.d.ts +25 -0
- package/dist/server/frontend-tools.js +171 -0
- package/dist/server/llm-providers/anthropic.d.ts +2 -1
- package/dist/server/llm-providers/anthropic.js +1 -3
- package/dist/server/llm-providers/dashscope.d.ts +2 -1
- package/dist/server/llm-providers/dashscope.js +16 -1
- package/dist/server/llm-providers/deepseek.d.ts +2 -1
- package/dist/server/llm-providers/deepseek.js +33 -2
- package/dist/server/llm-providers/google-genai.d.ts +1 -1
- package/dist/server/llm-providers/google-genai.js +1 -5
- package/dist/server/llm-providers/kimi/provider.d.ts +2 -1
- package/dist/server/llm-providers/kimi/provider.js +22 -2
- package/dist/server/llm-providers/mistral.d.ts +36 -2
- package/dist/server/llm-providers/mistral.js +62 -2
- package/dist/server/llm-providers/openai/completions.d.ts +2 -1
- package/dist/server/llm-providers/openai/completions.js +17 -1
- package/dist/server/llm-providers/openai/responses.d.ts +2 -1
- package/dist/server/llm-providers/openai/responses.js +17 -1
- package/dist/server/llm-providers/orcarouter.d.ts +35 -0
- package/dist/server/llm-providers/orcarouter.js +155 -0
- package/dist/server/llm-providers/provider.d.ts +10 -2
- package/dist/server/llm-providers/provider.js +33 -4
- package/dist/server/manager/ai-chat-conversation.js +2 -0
- package/dist/server/manager/ai-context-datasource-manager.js +34 -7
- package/dist/server/manager/ai-manager.d.ts +2 -1
- package/dist/server/manager/ai-manager.js +4 -1
- package/dist/server/manager/ai-usage-events.d.ts +49 -0
- package/dist/server/manager/ai-usage-events.js +195 -0
- package/dist/server/manager/work-context-handler.js +10 -3
- package/dist/server/plugin.d.ts +1 -0
- package/dist/server/plugin.js +41 -0
- package/dist/server/resource/aiConversations.d.ts +2 -0
- package/dist/server/resource/aiConversations.js +77 -4
- package/dist/server/resource/aiEmployees.d.ts +2 -0
- package/dist/server/resource/aiEmployees.js +62 -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/knowledge-base.type.d.ts +6 -2
- package/dist/server/utils.d.ts +5 -2
- package/dist/server/utils.js +11 -19
- package/dist/server/workflow/nodes/employee/files.d.ts +3 -1
- package/dist/server/workflow/nodes/employee/files.js +31 -5
- 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 +1588 -0
- package/dist/swagger/index.js +62 -0
- package/dist/swagger/llm.d.ts +555 -0
- package/dist/swagger/llm.js +247 -0
- package/dist/swagger/schemas.d.ts +736 -0
- package/dist/swagger/schemas.js +381 -0
- package/package.json +5 -5
- 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/119.c6bf8c6433167d81.js +0 -10
- package/dist/client/170.d98eacdc00d9d527.js +0 -10
- package/dist/client/228.b4b709f93b86b6b9.js +0 -10
- package/dist/client/280.003b9e9788599244.js +0 -10
- package/dist/client/290.0f7f441d8a94f03c.js +0 -10
- package/dist/client/331.d547c95410476a69.js +0 -10
- package/dist/client/406.15c09d98faa2ccf1.js +0 -10
- package/dist/client/428.5eb4f53ddbb6a3b8.js +0 -10
- package/dist/client/462.d172d0fe91519e35.js +0 -10
- package/dist/client/486.dcac8f3fcec19c33.js +0 -10
- package/dist/client/502.2b4a51e0a8122e52.js +0 -10
- package/dist/client/525.33a9c8ec28be4ec4.js +0 -10
- package/dist/client/559.9f97ebcdb0bd6231.js +0 -10
- package/dist/client/561.7ec804ef39ec7dcd.js +0 -10
- package/dist/client/580.35ba54ff91b7fe6d.js +0 -10
- package/dist/client/597.b0d64948d74cf6cb.js +0 -10
- package/dist/client/604.89c674f35b52b4ef.js +0 -10
- package/dist/client/614.aa766080f6b99aab.js +0 -10
- package/dist/client/646.d4483b4ff23da0a0.js +0 -10
- package/dist/client/687.224e569a99cae4bb.js +0 -10
- package/dist/client/699.57c0a1acb723202a.js +0 -10
- package/dist/client/711.92cd94681fde7e05.js +0 -10
- package/dist/client/758.a9741e81911e53c3.js +0 -10
- package/dist/client/768.5177bff46ae71a5b.js +0 -10
- package/dist/client/792.abb57765453bcbcc.js +0 -10
- package/dist/client/820.f72ef2462b61d812.js +0 -10
- package/dist/client/832.0cf69e3f43c320b2.js +0 -10
- package/dist/client/927.d95c74ebb8fd51c9.js +0 -10
- package/dist/client/ai-employees/1.x/selector/AISelectorProvider.d.ts +0 -33
- package/dist/client/ai-employees/ProfileCard.d.ts +0 -15
- package/dist/client/ai-employees/admin/ChatSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/DataSourceSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/Employees.d.ts +0 -10
- package/dist/client/ai-employees/admin/EnableSwitch.d.ts +0 -10
- package/dist/client/ai-employees/admin/InputsFormSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/KnowledgeBaseSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/ModelSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/ProfileSettings.d.ts +0 -12
- package/dist/client/ai-employees/admin/SkillSettings.d.ts +0 -19
- package/dist/client/ai-employees/admin/SystemPrompt.d.ts +0 -10
- package/dist/client/ai-employees/admin/ToolsSettings.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingForm.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingGrid.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/basic/FieldsTransfer.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/basic/index.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/form-steps/CollectionSetting.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/FieldsSetting.d.ts +0 -15
- package/dist/client/ai-employees/admin/datasource/components/form-steps/FilterSetting.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/Preview.d.ts +0 -13
- package/dist/client/ai-employees/admin/datasource/components/form-steps/SortSetting.d.ts +0 -15
- package/dist/client/ai-employees/admin/datasource/components/form-steps/index.d.ts +0 -13
- package/dist/client/ai-employees/admin/datasource/components/index.d.ts +0 -9
- package/dist/client/ai-employees/admin/datasource/context.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/flow-models/index.d.ts +0 -9
- package/dist/client/ai-employees/admin/datasource/index.d.ts +0 -10
- package/dist/client/ai-employees/admin/hooks.d.ts +0 -39
- package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +0 -19
- package/dist/client/ai-employees/admin/mcp/context.d.ts +0 -15
- package/dist/client/ai-employees/admin/mcp/schemas.d.ts +0 -1314
- package/dist/client/ai-employees/ai-coding/CodeHistory.d.ts +0 -10
- package/dist/client/ai-employees/avatars.d.ts +0 -9
- package/dist/client/ai-employees/built-in/utils.d.ts +0 -15
- package/dist/client/ai-employees/business-report/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +0 -38
- package/dist/client/ai-employees/chart-generator/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/chart-generator/ui/ECharts.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/AIThinking.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/Attachment.d.ts +0 -14
- package/dist/client/ai-employees/chatbox/AttachmentsHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/ChatBox.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/ContextItemsHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/DebugPanel.d.ts +0 -16
- package/dist/client/ai-employees/chatbox/EditMessageHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/MessageRenderer.d.ts +0 -33
- package/dist/client/ai-employees/chatbox/Sender.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/SenderFooter.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/SenderHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/SenderPrefix.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/Upload.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/VirtualList.d.ts +0 -28
- package/dist/client/ai-employees/chatbox/conversations/Conversations.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/conversations/common.d.ts +0 -43
- package/dist/client/ai-employees/chatbox/conversations/index.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/generative-ui/DefaultToolCard.d.ts +0 -16
- package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +0 -18
- package/dist/client/ai-employees/chatbox/hooks/useUploadFiles.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Form.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Generating.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/roles.d.ts +0 -32
- package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-tools.d.ts +0 -51
- package/dist/client/ai-employees/chatbox/stores/create-selectors.d.ts +0 -18
- package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +0 -45
- package/dist/client/ai-employees/chatbox/utils.d.ts +0 -41
- package/dist/client/ai-employees/context/classic-pages.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/Table.d.ts +0 -12
- package/dist/client/ai-employees/data-modeling/setup.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/ui/useFieldInterfaceOptions.d.ts +0 -14
- package/dist/client/ai-employees/datasource/DatasourceList.d.ts +0 -17
- package/dist/client/ai-employees/datasource/index.d.ts +0 -9
- package/dist/client/ai-employees/flow/events/index.d.ts +0 -9
- package/dist/client/ai-employees/flow/index.d.ts +0 -36
- package/dist/client/ai-employees/flow/models/AIEmployeeActionModel.d.ts +0 -18
- package/dist/client/ai-employees/flow/models/AIEmployeeShortcutModel.d.ts +0 -30
- package/dist/client/ai-employees/shortcuts/ShortcutList.d.ts +0 -10
- package/dist/client/ai-employees/shortcuts/useShortcuts.d.ts +0 -13
- package/dist/client/ai-employees/stores/context-aware.d.ts +0 -19
- package/dist/client/ai-employees/sub-agents/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/suggestions/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/suggestions/ui/SuggestionsOptions.d.ts +0 -13
- package/dist/client/ai-employees/types.d.ts +0 -259
- package/dist/client/ai-employees/workflow-tasks/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/workflow-tasks/ui/WorkflowTaskOutputCard.d.ts +0 -11
- package/dist/client/chat-settings/Messages.d.ts +0 -11
- package/dist/client/chat-settings/StructuredOutput.d.ts +0 -11
- package/dist/client/components/skill-settings.d.ts +0 -22
- package/dist/client/features/components.d.ts +0 -9
- package/dist/client/features/feature-manager.d.ts +0 -9
- package/dist/client/features/index.d.ts +0 -9
- package/dist/client/features/vector-database-provider.d.ts +0 -9
- package/dist/client/features/vector-store-provider.d.ts +0 -9
- package/dist/client/llm-providers/anthropic/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/anthropic/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/anthropic/index.d.ts +0 -10
- package/dist/client/llm-providers/components/Chat.d.ts +0 -10
- package/dist/client/llm-providers/components/ModelSelect.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/index.d.ts +0 -10
- package/dist/client/llm-providers/deepseek/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/deepseek/index.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/MessageRenderer.d.ts +0 -13
- package/dist/client/llm-providers/google-genai/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/index.d.ts +0 -10
- package/dist/client/llm-providers/kimi/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/kimi/index.d.ts +0 -10
- package/dist/client/llm-providers/mimo/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/mimo/index.d.ts +0 -10
- package/dist/client/llm-providers/mistral/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/mistral/index.d.ts +0 -10
- package/dist/client/llm-providers/ollama/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/ollama/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/ollama/index.d.ts +0 -10
- package/dist/client/llm-providers/openai/completions/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/completions/index.d.ts +0 -10
- package/dist/client/llm-providers/openai/components/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/responses/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/responses/index.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/index.d.ts +0 -10
- package/dist/client/llm-providers/xai/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/xai/index.d.ts +0 -10
- package/dist/client/llm-services/LLMServices.d.ts +0 -13
- package/dist/client/llm-services/component/DefaultModelSelect.d.ts +0 -10
- package/dist/client/llm-services/component/EnabledModelsSelect.d.ts +0 -23
- package/dist/client/llm-services/component/LLMTestFlight.d.ts +0 -10
- package/dist/client/llm-services/component/ModelOptionsSettings.d.ts +0 -10
- package/dist/client/llm-services/component/UnifiedModelSettings.d.ts +0 -10
- package/dist/client/llm-services/hooks/useLLMServiceCatalog.d.ts +0 -18
- package/dist/client/llm-services/llm-providers.d.ts +0 -27
- package/dist/client/llm-services/utils.d.ts +0 -35
- package/dist/client/manager/ai-feature-manager.d.ts +0 -9
- package/dist/client/manager/ai-manager.d.ts +0 -35
- package/dist/client/repositories/AIConfigRepository.d.ts +0 -60
- package/dist/client/repositories/hooks/useAIConfigRepository.d.ts +0 -10
- package/dist/client/schemas/llms.d.ts +0 -347
- package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/assigness.d.ts +0 -11
- package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +0 -12
- package/dist/client/workflow/nodes/employee/components/model-options.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/users-select.d.ts +0 -15
- package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/configuration.d.ts +0 -12
- package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +0 -14
- package/dist/client/workflow/nodes/llm/ModelSettings.d.ts +0 -11
- package/dist/client/workflow/triggers/ai-employee/Parameters.d.ts +0 -13
- package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +0 -18
- /package/dist/{client → client-v2}/ai-employees/AISelection.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/AISelectionControl.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/ai-coding/prompts.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/ai-coding/setup.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatButton.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/SearchSwitch.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolModal.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/UserPrompt.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useLoadMoreObserver.d.ts +0 -0
- /package/dist/client-v2/ai-employees/{chatbox/stores → stores}/global-store.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/AIEmployeeShortcutListModel.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/index.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/events/ai-context-selection.d.ts → client-v2/workflow/components/index.d.ts} +0 -0
|
@@ -0,0 +1,1092 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'Let AI employees fill custom forms in JS blocks'
|
|
3
|
+
description: 'Use Ant Design Form and a small bridge to let AI employees recognize and fill complex custom forms in JS blocks.'
|
|
4
|
+
keywords: 'NocoBase, AI employee, JS block, Ant Design Form, Fill form, Dex, custom form'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Let AI employees fill custom forms in JS blocks
|
|
8
|
+
|
|
9
|
+
NocoBase AI employees can use the **Fill form** tool to extract information from emails, conversations, or documents and place it into form fields.
|
|
10
|
+
|
|
11
|
+
This works directly with native NocoBase form blocks. A form written inside a JS block is not a native form block, so an AI employee cannot recognize or fill it by default.
|
|
12
|
+
|
|
13
|
+
This guide uses an Event Planning Request form to show how to build a grouped, conditional Ant Design form in a JS block and make it fillable by an AI employee.
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
## How to use it
|
|
18
|
+
|
|
19
|
+
<video width="100%" controls>
|
|
20
|
+
<source src="https://static-docs.nocobase.com/ai-fill-form.mp4" type="video/mp4">
|
|
21
|
+
</video>
|
|
22
|
+
|
|
23
|
+
1. Open an AI employee, such as the built-in [Dex: Data Organizer](/ai-employees/built-in/dex).
|
|
24
|
+
2. Select **Add context**, then **Pick block**.
|
|
25
|
+
3. Select the Event Planning Request block on the page.
|
|
26
|
+
4. Send a description of the event requirements.
|
|
27
|
+
5. The AI employee extracts the information and fills the matching fields.
|
|
28
|
+
|
|
29
|
+
For example, send:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
Please fill in the event planning form:
|
|
33
|
+
The Developer Education team is organizing a hybrid API Design Workshop
|
|
34
|
+
for 80 external developers on October 12–13, 2026. The budget is USD 18,000.
|
|
35
|
+
Use the North Campus Learning Center and provide an online stream for remote
|
|
36
|
+
attendees. Recording, interpretation and catering are required. Please include
|
|
37
|
+
vegetarian and gluten-free meals. The request is currently in review and the
|
|
38
|
+
next action is to confirm the facilitator and publish the registration page.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## How it works
|
|
42
|
+
|
|
43
|
+
The implementation has two parts. First, expose the Ant Design Form instance through the current block model:
|
|
44
|
+
|
|
45
|
+
```jsx
|
|
46
|
+
ctx.model.form = form;
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Second, provide field metadata so the AI knows the field names, types, enum values, date formats, and target block UID.
|
|
50
|
+
|
|
51
|
+
- Field names and data types;
|
|
52
|
+
- Enum values for Select, Radio, and multi-select fields;
|
|
53
|
+
- Date value formats;
|
|
54
|
+
- The UID of the target block.
|
|
55
|
+
|
|
56
|
+
Keep the metadata and the form in the same JS block so they can be updated together.
|
|
57
|
+
|
|
58
|
+
## Add the JS block
|
|
59
|
+
|
|
60
|
+

|
|
61
|
+
|
|
62
|
+
Add a [JS block](/interface-builder/blocks/other-blocks/js-block), open the JavaScript editor, and paste the complete example below.
|
|
63
|
+
|
|
64
|
+
### Complete example code
|
|
65
|
+
|
|
66
|
+
<details>
|
|
67
|
+
<summary>Click to expand and copy</summary>
|
|
68
|
+
|
|
69
|
+
```jsx
|
|
70
|
+
const React = ctx.libs.React;
|
|
71
|
+
const { useEffect, useMemo } = React;
|
|
72
|
+
const {
|
|
73
|
+
Form,
|
|
74
|
+
Input,
|
|
75
|
+
InputNumber,
|
|
76
|
+
Select,
|
|
77
|
+
Button,
|
|
78
|
+
Radio,
|
|
79
|
+
Space,
|
|
80
|
+
Tag,
|
|
81
|
+
DatePicker,
|
|
82
|
+
} = ctx.libs.antd;
|
|
83
|
+
const dayjs = ctx.libs.dayjs;
|
|
84
|
+
|
|
85
|
+
const BRAND = '#5B6CFF';
|
|
86
|
+
|
|
87
|
+
const TEAM_OPTIONS = [
|
|
88
|
+
{ value: 'product-design', label: 'Product Design' },
|
|
89
|
+
{ value: 'developer-education', label: 'Developer Education' },
|
|
90
|
+
{ value: 'customer-learning', label: 'Customer Learning' },
|
|
91
|
+
{ value: 'operations', label: 'Operations' },
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
const EVENT_TYPE_OPTIONS = [
|
|
95
|
+
{ value: 'workshop', label: 'Workshop' },
|
|
96
|
+
{ value: 'conference', label: 'Conference' },
|
|
97
|
+
{ value: 'webinar', label: 'Webinar' },
|
|
98
|
+
{ value: 'community-meetup', label: 'Community Meetup' },
|
|
99
|
+
{ value: 'team-offsite', label: 'Team Offsite' },
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
const FORMAT_OPTIONS = [
|
|
103
|
+
{ value: 'onsite', label: 'On-site' },
|
|
104
|
+
{ value: 'hybrid', label: 'Hybrid' },
|
|
105
|
+
{ value: 'virtual', label: 'Virtual' },
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
const AUDIENCE_OPTIONS = [
|
|
109
|
+
{ value: 'employees', label: 'Employees' },
|
|
110
|
+
{ value: 'customers', label: 'Customers' },
|
|
111
|
+
{ value: 'partners', label: 'Partners' },
|
|
112
|
+
{ value: 'developers', label: 'Developers' },
|
|
113
|
+
{ value: 'public', label: 'General Public' },
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
const STATUS_OPTIONS = [
|
|
117
|
+
{ value: 'draft', label: 'Draft', readiness: 15 },
|
|
118
|
+
{ value: 'in-review', label: 'In Review', readiness: 45 },
|
|
119
|
+
{ value: 'approved', label: 'Approved', readiness: 80 },
|
|
120
|
+
{ value: 'scheduled', label: 'Scheduled', readiness: 100 },
|
|
121
|
+
{ value: 'cancelled', label: 'Cancelled', readiness: 0 },
|
|
122
|
+
];
|
|
123
|
+
|
|
124
|
+
const SERVICE_OPTIONS = [
|
|
125
|
+
{ value: 'catering', label: 'Catering' },
|
|
126
|
+
{ value: 'recording', label: 'Recording' },
|
|
127
|
+
{ value: 'interpretation', label: 'Interpretation' },
|
|
128
|
+
{ value: 'photography', label: 'Photography' },
|
|
129
|
+
{ value: 'printed-materials', label: 'Printed Materials' },
|
|
130
|
+
{ value: 'accessibility-support', label: 'Accessibility Support' },
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
const CANCELLATION_REASON_OPTIONS = [
|
|
134
|
+
{ value: 'schedule-conflict', label: 'Schedule conflict' },
|
|
135
|
+
{ value: 'budget-unavailable', label: 'Budget unavailable' },
|
|
136
|
+
{ value: 'low-registration', label: 'Low registration' },
|
|
137
|
+
{ value: 'venue-unavailable', label: 'Venue unavailable' },
|
|
138
|
+
{ value: 'scope-changed', label: 'Scope changed' },
|
|
139
|
+
{ value: 'other', label: 'Other' },
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
const FORM_FIELDS = [
|
|
143
|
+
{
|
|
144
|
+
name: 'eventTitle',
|
|
145
|
+
title: 'Event Title',
|
|
146
|
+
type: 'string',
|
|
147
|
+
required: true,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'organizerTeam',
|
|
151
|
+
title: 'Organizer Team',
|
|
152
|
+
type: 'string',
|
|
153
|
+
required: true,
|
|
154
|
+
enum: TEAM_OPTIONS,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'eventType',
|
|
158
|
+
title: 'Event Type',
|
|
159
|
+
type: 'string',
|
|
160
|
+
required: true,
|
|
161
|
+
enum: EVENT_TYPE_OPTIONS,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: 'format',
|
|
165
|
+
title: 'Event Format',
|
|
166
|
+
type: 'string',
|
|
167
|
+
required: true,
|
|
168
|
+
enum: FORMAT_OPTIONS,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'audience',
|
|
172
|
+
title: 'Primary Audience',
|
|
173
|
+
type: 'string',
|
|
174
|
+
required: true,
|
|
175
|
+
enum: AUDIENCE_OPTIONS,
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'attendeeCount',
|
|
179
|
+
title: 'Expected Attendees',
|
|
180
|
+
type: 'number',
|
|
181
|
+
required: true,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'budgetUsd',
|
|
185
|
+
title: 'Estimated Budget (USD)',
|
|
186
|
+
type: 'number',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
name: 'startDate',
|
|
190
|
+
title: 'Start Date',
|
|
191
|
+
type: 'string',
|
|
192
|
+
required: true,
|
|
193
|
+
prompt: 'Use YYYY-MM-DD format.',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'endDate',
|
|
197
|
+
title: 'End Date',
|
|
198
|
+
type: 'string',
|
|
199
|
+
required: true,
|
|
200
|
+
prompt: 'Use YYYY-MM-DD format.',
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: 'venueName',
|
|
204
|
+
title: 'Venue Name',
|
|
205
|
+
type: 'string',
|
|
206
|
+
prompt: 'Fill this field only for On-site or Hybrid events.',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: 'streamingNotes',
|
|
210
|
+
title: 'Streaming Requirements',
|
|
211
|
+
type: 'string',
|
|
212
|
+
prompt: 'Fill this field only for Hybrid or Virtual events.',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'services',
|
|
216
|
+
title: 'Required Services',
|
|
217
|
+
type: 'array',
|
|
218
|
+
enum: SERVICE_OPTIONS,
|
|
219
|
+
prompt: 'Use an array containing service option values.',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'dietaryNotes',
|
|
223
|
+
title: 'Dietary Requirements',
|
|
224
|
+
type: 'string',
|
|
225
|
+
prompt: 'Fill this field when Required Services includes Catering.',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: 'status',
|
|
229
|
+
title: 'Request Status',
|
|
230
|
+
type: 'string',
|
|
231
|
+
required: true,
|
|
232
|
+
enum: STATUS_OPTIONS.map(({ value, label }) => ({ value, label })),
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: 'readiness',
|
|
236
|
+
title: 'Readiness (%)',
|
|
237
|
+
type: 'number',
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
name: 'cancellationReason',
|
|
241
|
+
title: 'Cancellation Reason',
|
|
242
|
+
type: 'string',
|
|
243
|
+
enum: CANCELLATION_REASON_OPTIONS,
|
|
244
|
+
prompt: 'Fill this field only when Request Status is Cancelled.',
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: 'objectives',
|
|
248
|
+
title: 'Event Objectives',
|
|
249
|
+
type: 'string',
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
name: 'agendaNotes',
|
|
253
|
+
title: 'Agenda Notes',
|
|
254
|
+
type: 'string',
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
name: 'risks',
|
|
258
|
+
title: 'Risks and Constraints',
|
|
259
|
+
type: 'string',
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
name: 'nextAction',
|
|
263
|
+
title: 'Next Action',
|
|
264
|
+
type: 'string',
|
|
265
|
+
},
|
|
266
|
+
];
|
|
267
|
+
|
|
268
|
+
ctx.model.setTitle('Event Planning Request');
|
|
269
|
+
|
|
270
|
+
ctx.model.setProps({
|
|
271
|
+
aiForm: {
|
|
272
|
+
prompt: `This is a fillable Event Planning Request form. Use the Fill form tool when the user asks to populate it. Use the current block UID as the form target: ${ctx.model.uid}. Always use enum values instead of labels, use YYYY-MM-DD for date fields, and use an array for services.`,
|
|
273
|
+
fields: FORM_FIELDS,
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
const styles = {
|
|
278
|
+
shell: {
|
|
279
|
+
overflow: 'hidden',
|
|
280
|
+
border: '1px solid #E7E8F3',
|
|
281
|
+
borderRadius: 18,
|
|
282
|
+
background: '#F7F8FC',
|
|
283
|
+
boxShadow: '0 16px 42px rgba(31, 35, 76, 0.10)',
|
|
284
|
+
},
|
|
285
|
+
body: {
|
|
286
|
+
padding: 24,
|
|
287
|
+
},
|
|
288
|
+
summary: {
|
|
289
|
+
display: 'grid',
|
|
290
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))',
|
|
291
|
+
gap: 10,
|
|
292
|
+
marginBottom: 18,
|
|
293
|
+
},
|
|
294
|
+
summaryItem: {
|
|
295
|
+
minHeight: 72,
|
|
296
|
+
padding: '12px 14px',
|
|
297
|
+
border: '1px solid #ECECF5',
|
|
298
|
+
borderRadius: 12,
|
|
299
|
+
background: '#FFFFFF',
|
|
300
|
+
},
|
|
301
|
+
summaryLabel: {
|
|
302
|
+
marginBottom: 5,
|
|
303
|
+
color: '#8A8FA8',
|
|
304
|
+
fontSize: 11,
|
|
305
|
+
fontWeight: 600,
|
|
306
|
+
textTransform: 'uppercase',
|
|
307
|
+
letterSpacing: 0.5,
|
|
308
|
+
},
|
|
309
|
+
summaryValue: {
|
|
310
|
+
color: '#252842',
|
|
311
|
+
fontSize: 14,
|
|
312
|
+
fontWeight: 700,
|
|
313
|
+
},
|
|
314
|
+
section: {
|
|
315
|
+
marginBottom: 16,
|
|
316
|
+
padding: '18px 18px 4px',
|
|
317
|
+
border: '1px solid #ECECF5',
|
|
318
|
+
borderRadius: 14,
|
|
319
|
+
background: '#FFFFFF',
|
|
320
|
+
},
|
|
321
|
+
sectionHeader: {
|
|
322
|
+
display: 'flex',
|
|
323
|
+
alignItems: 'center',
|
|
324
|
+
gap: 10,
|
|
325
|
+
marginBottom: 16,
|
|
326
|
+
},
|
|
327
|
+
sectionNumber: {
|
|
328
|
+
display: 'inline-flex',
|
|
329
|
+
width: 26,
|
|
330
|
+
height: 26,
|
|
331
|
+
alignItems: 'center',
|
|
332
|
+
justifyContent: 'center',
|
|
333
|
+
borderRadius: 8,
|
|
334
|
+
color: BRAND,
|
|
335
|
+
background: '#EEF0FF',
|
|
336
|
+
fontSize: 12,
|
|
337
|
+
fontWeight: 800,
|
|
338
|
+
},
|
|
339
|
+
sectionTitle: {
|
|
340
|
+
color: '#30334F',
|
|
341
|
+
fontSize: 14,
|
|
342
|
+
fontWeight: 750,
|
|
343
|
+
},
|
|
344
|
+
sectionHint: {
|
|
345
|
+
marginLeft: 'auto',
|
|
346
|
+
color: '#9A9EB4',
|
|
347
|
+
fontSize: 11,
|
|
348
|
+
},
|
|
349
|
+
grid: {
|
|
350
|
+
display: 'grid',
|
|
351
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(260px, 1fr))',
|
|
352
|
+
columnGap: 18,
|
|
353
|
+
},
|
|
354
|
+
infoPanel: {
|
|
355
|
+
marginBottom: 24,
|
|
356
|
+
padding: '13px 14px',
|
|
357
|
+
border: '1px dashed #D9DDFC',
|
|
358
|
+
borderRadius: 10,
|
|
359
|
+
background: '#F8F9FF',
|
|
360
|
+
},
|
|
361
|
+
actionBar: {
|
|
362
|
+
position: 'sticky',
|
|
363
|
+
bottom: 0,
|
|
364
|
+
zIndex: 2,
|
|
365
|
+
display: 'flex',
|
|
366
|
+
alignItems: 'center',
|
|
367
|
+
gap: 10,
|
|
368
|
+
margin: '18px -24px -24px',
|
|
369
|
+
padding: '13px 24px',
|
|
370
|
+
borderTop: '1px solid #E8E9F2',
|
|
371
|
+
background: 'rgba(255,255,255,0.94)',
|
|
372
|
+
backdropFilter: 'blur(10px)',
|
|
373
|
+
},
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
function Section({ number, title, hint, children }) {
|
|
377
|
+
return (
|
|
378
|
+
<section style={styles.section}>
|
|
379
|
+
<div style={styles.sectionHeader}>
|
|
380
|
+
<span style={styles.sectionNumber}>{number}</span>
|
|
381
|
+
<span style={styles.sectionTitle}>{title}</span>
|
|
382
|
+
{hint ? <span style={styles.sectionHint}>{hint}</span> : null}
|
|
383
|
+
</div>
|
|
384
|
+
{children}
|
|
385
|
+
</section>
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
function SummaryItem({ label, value }) {
|
|
390
|
+
return (
|
|
391
|
+
<div style={styles.summaryItem}>
|
|
392
|
+
<div style={styles.summaryLabel}>{label}</div>
|
|
393
|
+
<div style={styles.summaryValue}>{value || '—'}</div>
|
|
394
|
+
</div>
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function DateField({ name, label, required = false }) {
|
|
399
|
+
return (
|
|
400
|
+
<Form.Item
|
|
401
|
+
name={name}
|
|
402
|
+
label={label}
|
|
403
|
+
rules={
|
|
404
|
+
required ? [{ required: true, message: `Please select ${label}` }] : []
|
|
405
|
+
}
|
|
406
|
+
getValueProps={(value) => ({
|
|
407
|
+
value: value ? dayjs(String(value).slice(0, 10)) : null,
|
|
408
|
+
})}
|
|
409
|
+
getValueFromEvent={(value) => (value ? value.format('YYYY-MM-DD') : null)}
|
|
410
|
+
>
|
|
411
|
+
<DatePicker
|
|
412
|
+
format="YYYY/MM/DD"
|
|
413
|
+
placeholder="YYYY/MM/DD"
|
|
414
|
+
style={{ width: '100%' }}
|
|
415
|
+
/>
|
|
416
|
+
</Form.Item>
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function EventPlanningForm() {
|
|
421
|
+
const [form] = Form.useForm();
|
|
422
|
+
const watchedValues =
|
|
423
|
+
Form.useWatch([], {
|
|
424
|
+
form,
|
|
425
|
+
preserve: true,
|
|
426
|
+
}) || {};
|
|
427
|
+
|
|
428
|
+
const values = {
|
|
429
|
+
format: 'hybrid',
|
|
430
|
+
status: 'draft',
|
|
431
|
+
readiness: 15,
|
|
432
|
+
services: [],
|
|
433
|
+
...watchedValues,
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
const teamLabel = TEAM_OPTIONS.find(
|
|
437
|
+
(item) => item.value === values.organizerTeam,
|
|
438
|
+
)?.label;
|
|
439
|
+
const formatLabel = FORMAT_OPTIONS.find(
|
|
440
|
+
(item) => item.value === values.format,
|
|
441
|
+
)?.label;
|
|
442
|
+
const status = STATUS_OPTIONS.find((item) => item.value === values.status);
|
|
443
|
+
const hasPhysicalVenue =
|
|
444
|
+
values.format === 'onsite' || values.format === 'hybrid';
|
|
445
|
+
const needsStreaming =
|
|
446
|
+
values.format === 'virtual' || values.format === 'hybrid';
|
|
447
|
+
const needsCatering = values.services?.includes('catering');
|
|
448
|
+
const isCancelled = values.status === 'cancelled';
|
|
449
|
+
|
|
450
|
+
const dateRange = [values.startDate, values.endDate]
|
|
451
|
+
.filter(Boolean)
|
|
452
|
+
.join(' — ');
|
|
453
|
+
|
|
454
|
+
const budgetLevel = useMemo(() => {
|
|
455
|
+
const budget = Number(values.budgetUsd || 0);
|
|
456
|
+
|
|
457
|
+
if (budget >= 50000) {
|
|
458
|
+
return 'Large';
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
if (budget >= 10000) {
|
|
462
|
+
return 'Medium';
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
return budget > 0 ? 'Small' : '';
|
|
466
|
+
}, [values.budgetUsd]);
|
|
467
|
+
|
|
468
|
+
useEffect(() => {
|
|
469
|
+
const previousForm = ctx.model.form;
|
|
470
|
+
|
|
471
|
+
// Allow the Fill form tool to write values into this form.
|
|
472
|
+
ctx.model.form = form;
|
|
473
|
+
|
|
474
|
+
return () => {
|
|
475
|
+
if (ctx.model.form === form) {
|
|
476
|
+
ctx.model.form = previousForm;
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
}, [form]);
|
|
480
|
+
|
|
481
|
+
useEffect(() => {
|
|
482
|
+
if (!status) {
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
const currentReadiness = form.getFieldValue('readiness');
|
|
487
|
+
|
|
488
|
+
if (currentReadiness !== status.readiness) {
|
|
489
|
+
form.setFieldsValue({ readiness: status.readiness });
|
|
490
|
+
}
|
|
491
|
+
}, [form, status]);
|
|
492
|
+
|
|
493
|
+
const handleFinish = (formValues) => {
|
|
494
|
+
console.log('Event planning form values:', formValues);
|
|
495
|
+
ctx.message.success('The form is complete and ready for submission.');
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
return (
|
|
499
|
+
<div style={styles.shell}>
|
|
500
|
+
<div style={styles.body}>
|
|
501
|
+
<div style={styles.summary}>
|
|
502
|
+
<SummaryItem
|
|
503
|
+
label="Event"
|
|
504
|
+
value={values.eventTitle || 'Untitled event'}
|
|
505
|
+
/>
|
|
506
|
+
<SummaryItem label="Organizer" value={teamLabel} />
|
|
507
|
+
<SummaryItem label="Format" value={formatLabel} />
|
|
508
|
+
<SummaryItem label="Schedule" value={dateRange} />
|
|
509
|
+
<SummaryItem
|
|
510
|
+
label="Audience Size"
|
|
511
|
+
value={
|
|
512
|
+
values.attendeeCount
|
|
513
|
+
? `${values.attendeeCount} attendees`
|
|
514
|
+
: undefined
|
|
515
|
+
}
|
|
516
|
+
/>
|
|
517
|
+
<SummaryItem label="Budget Level" value={budgetLevel} />
|
|
518
|
+
</div>
|
|
519
|
+
|
|
520
|
+
<Form
|
|
521
|
+
form={form}
|
|
522
|
+
layout="vertical"
|
|
523
|
+
size="large"
|
|
524
|
+
variant="filled"
|
|
525
|
+
initialValues={{
|
|
526
|
+
format: 'hybrid',
|
|
527
|
+
status: 'draft',
|
|
528
|
+
readiness: 15,
|
|
529
|
+
services: [],
|
|
530
|
+
}}
|
|
531
|
+
onFinish={handleFinish}
|
|
532
|
+
>
|
|
533
|
+
<Section
|
|
534
|
+
number="1"
|
|
535
|
+
title="Event Overview"
|
|
536
|
+
hint="Define the event and its audience"
|
|
537
|
+
>
|
|
538
|
+
<div style={styles.grid}>
|
|
539
|
+
<Form.Item
|
|
540
|
+
name="eventTitle"
|
|
541
|
+
label="Event Title"
|
|
542
|
+
rules={[
|
|
543
|
+
{
|
|
544
|
+
required: true,
|
|
545
|
+
message: 'Please enter the event title',
|
|
546
|
+
},
|
|
547
|
+
]}
|
|
548
|
+
>
|
|
549
|
+
<Input placeholder="e.g. API Design Workshop" />
|
|
550
|
+
</Form.Item>
|
|
551
|
+
|
|
552
|
+
<Form.Item
|
|
553
|
+
name="organizerTeam"
|
|
554
|
+
label="Organizer Team"
|
|
555
|
+
rules={[
|
|
556
|
+
{
|
|
557
|
+
required: true,
|
|
558
|
+
message: 'Please select the organizer team',
|
|
559
|
+
},
|
|
560
|
+
]}
|
|
561
|
+
>
|
|
562
|
+
<Select options={TEAM_OPTIONS} placeholder="Select team" />
|
|
563
|
+
</Form.Item>
|
|
564
|
+
|
|
565
|
+
<Form.Item
|
|
566
|
+
name="eventType"
|
|
567
|
+
label="Event Type"
|
|
568
|
+
rules={[
|
|
569
|
+
{
|
|
570
|
+
required: true,
|
|
571
|
+
message: 'Please select the event type',
|
|
572
|
+
},
|
|
573
|
+
]}
|
|
574
|
+
>
|
|
575
|
+
<Select
|
|
576
|
+
options={EVENT_TYPE_OPTIONS}
|
|
577
|
+
placeholder="Select event type"
|
|
578
|
+
/>
|
|
579
|
+
</Form.Item>
|
|
580
|
+
|
|
581
|
+
<Form.Item
|
|
582
|
+
name="audience"
|
|
583
|
+
label="Primary Audience"
|
|
584
|
+
rules={[
|
|
585
|
+
{
|
|
586
|
+
required: true,
|
|
587
|
+
message: 'Please select the primary audience',
|
|
588
|
+
},
|
|
589
|
+
]}
|
|
590
|
+
>
|
|
591
|
+
<Select
|
|
592
|
+
options={AUDIENCE_OPTIONS}
|
|
593
|
+
placeholder="Select audience"
|
|
594
|
+
/>
|
|
595
|
+
</Form.Item>
|
|
596
|
+
|
|
597
|
+
<Form.Item
|
|
598
|
+
name="attendeeCount"
|
|
599
|
+
label="Expected Attendees"
|
|
600
|
+
rules={[
|
|
601
|
+
{
|
|
602
|
+
required: true,
|
|
603
|
+
message: 'Please enter the expected attendee count',
|
|
604
|
+
},
|
|
605
|
+
]}
|
|
606
|
+
>
|
|
607
|
+
<InputNumber
|
|
608
|
+
min={1}
|
|
609
|
+
precision={0}
|
|
610
|
+
style={{ width: '100%' }}
|
|
611
|
+
placeholder="e.g. 80"
|
|
612
|
+
/>
|
|
613
|
+
</Form.Item>
|
|
614
|
+
|
|
615
|
+
<Form.Item name="budgetUsd" label="Estimated Budget">
|
|
616
|
+
<InputNumber
|
|
617
|
+
min={0}
|
|
618
|
+
precision={0}
|
|
619
|
+
addonBefore="USD"
|
|
620
|
+
style={{ width: '100%' }}
|
|
621
|
+
placeholder="e.g. 18000"
|
|
622
|
+
/>
|
|
623
|
+
</Form.Item>
|
|
624
|
+
</div>
|
|
625
|
+
</Section>
|
|
626
|
+
|
|
627
|
+
<Section
|
|
628
|
+
number="2"
|
|
629
|
+
title="Schedule & Format"
|
|
630
|
+
hint="Set dates and delivery requirements"
|
|
631
|
+
>
|
|
632
|
+
<Form.Item
|
|
633
|
+
name="format"
|
|
634
|
+
label="Event Format"
|
|
635
|
+
rules={[
|
|
636
|
+
{
|
|
637
|
+
required: true,
|
|
638
|
+
message: 'Please select the event format',
|
|
639
|
+
},
|
|
640
|
+
]}
|
|
641
|
+
>
|
|
642
|
+
<Radio.Group
|
|
643
|
+
optionType="button"
|
|
644
|
+
buttonStyle="solid"
|
|
645
|
+
options={FORMAT_OPTIONS}
|
|
646
|
+
/>
|
|
647
|
+
</Form.Item>
|
|
648
|
+
|
|
649
|
+
<div style={styles.grid}>
|
|
650
|
+
<DateField name="startDate" label="Start Date" required />
|
|
651
|
+
<DateField name="endDate" label="End Date" required />
|
|
652
|
+
|
|
653
|
+
{hasPhysicalVenue ? (
|
|
654
|
+
<Form.Item
|
|
655
|
+
name="venueName"
|
|
656
|
+
label="Venue Name"
|
|
657
|
+
rules={[
|
|
658
|
+
{
|
|
659
|
+
required: true,
|
|
660
|
+
message: 'Please enter the venue name',
|
|
661
|
+
},
|
|
662
|
+
]}
|
|
663
|
+
>
|
|
664
|
+
<Input placeholder="e.g. North Campus Learning Center" />
|
|
665
|
+
</Form.Item>
|
|
666
|
+
) : null}
|
|
667
|
+
|
|
668
|
+
{needsStreaming ? (
|
|
669
|
+
<Form.Item name="streamingNotes" label="Streaming Requirements">
|
|
670
|
+
<Input placeholder="Access, recording and moderation needs" />
|
|
671
|
+
</Form.Item>
|
|
672
|
+
) : null}
|
|
673
|
+
</div>
|
|
674
|
+
</Section>
|
|
675
|
+
|
|
676
|
+
<Section
|
|
677
|
+
number="3"
|
|
678
|
+
title="Services & Approval"
|
|
679
|
+
hint="Capture operational support and status"
|
|
680
|
+
>
|
|
681
|
+
<div style={styles.grid}>
|
|
682
|
+
<Form.Item name="services" label="Required Services">
|
|
683
|
+
<Select
|
|
684
|
+
mode="multiple"
|
|
685
|
+
showSearch
|
|
686
|
+
optionFilterProp="label"
|
|
687
|
+
options={SERVICE_OPTIONS}
|
|
688
|
+
placeholder="Select services"
|
|
689
|
+
/>
|
|
690
|
+
</Form.Item>
|
|
691
|
+
|
|
692
|
+
{needsCatering ? (
|
|
693
|
+
<Form.Item name="dietaryNotes" label="Dietary Requirements">
|
|
694
|
+
<Input placeholder="Meal preferences and allergies" />
|
|
695
|
+
</Form.Item>
|
|
696
|
+
) : null}
|
|
697
|
+
|
|
698
|
+
<Form.Item
|
|
699
|
+
name="status"
|
|
700
|
+
label="Request Status"
|
|
701
|
+
rules={[
|
|
702
|
+
{
|
|
703
|
+
required: true,
|
|
704
|
+
message: 'Please select the request status',
|
|
705
|
+
},
|
|
706
|
+
]}
|
|
707
|
+
>
|
|
708
|
+
<Select
|
|
709
|
+
options={STATUS_OPTIONS.map(({ value, label }) => ({
|
|
710
|
+
value,
|
|
711
|
+
label,
|
|
712
|
+
}))}
|
|
713
|
+
placeholder="Select status"
|
|
714
|
+
/>
|
|
715
|
+
</Form.Item>
|
|
716
|
+
|
|
717
|
+
<Form.Item name="readiness" label="Readiness (%)">
|
|
718
|
+
<InputNumber
|
|
719
|
+
min={0}
|
|
720
|
+
max={100}
|
|
721
|
+
precision={0}
|
|
722
|
+
addonAfter="%"
|
|
723
|
+
style={{ width: '100%' }}
|
|
724
|
+
disabled
|
|
725
|
+
/>
|
|
726
|
+
</Form.Item>
|
|
727
|
+
|
|
728
|
+
{isCancelled ? (
|
|
729
|
+
<Form.Item
|
|
730
|
+
name="cancellationReason"
|
|
731
|
+
label="Cancellation Reason"
|
|
732
|
+
rules={[
|
|
733
|
+
{
|
|
734
|
+
required: true,
|
|
735
|
+
message: 'Please select the cancellation reason',
|
|
736
|
+
},
|
|
737
|
+
]}
|
|
738
|
+
>
|
|
739
|
+
<Select
|
|
740
|
+
options={CANCELLATION_REASON_OPTIONS}
|
|
741
|
+
placeholder="Select reason"
|
|
742
|
+
/>
|
|
743
|
+
</Form.Item>
|
|
744
|
+
) : (
|
|
745
|
+
<div style={styles.infoPanel}>
|
|
746
|
+
<div
|
|
747
|
+
style={{
|
|
748
|
+
marginBottom: 6,
|
|
749
|
+
color: '#8589A1',
|
|
750
|
+
fontSize: 11,
|
|
751
|
+
fontWeight: 700,
|
|
752
|
+
textTransform: 'uppercase',
|
|
753
|
+
}}
|
|
754
|
+
>
|
|
755
|
+
Current Progress
|
|
756
|
+
</div>
|
|
757
|
+
<Space size={6} wrap>
|
|
758
|
+
<Tag color="geekblue">{status?.label || 'Draft'}</Tag>
|
|
759
|
+
<Tag color="blue">{values.readiness || 0}% ready</Tag>
|
|
760
|
+
</Space>
|
|
761
|
+
</div>
|
|
762
|
+
)}
|
|
763
|
+
</div>
|
|
764
|
+
</Section>
|
|
765
|
+
|
|
766
|
+
<Section
|
|
767
|
+
number="4"
|
|
768
|
+
title="Planning Notes"
|
|
769
|
+
hint="Keep the delivery handoff clear"
|
|
770
|
+
>
|
|
771
|
+
<Form.Item name="objectives" label="Event Objectives">
|
|
772
|
+
<Input.TextArea
|
|
773
|
+
rows={3}
|
|
774
|
+
placeholder="Describe the intended outcomes"
|
|
775
|
+
/>
|
|
776
|
+
</Form.Item>
|
|
777
|
+
|
|
778
|
+
<Form.Item name="agendaNotes" label="Agenda Notes">
|
|
779
|
+
<Input.TextArea
|
|
780
|
+
rows={3}
|
|
781
|
+
placeholder="Outline the sessions and timing"
|
|
782
|
+
/>
|
|
783
|
+
</Form.Item>
|
|
784
|
+
|
|
785
|
+
<Form.Item name="risks" label="Risks and Constraints">
|
|
786
|
+
<Input.TextArea
|
|
787
|
+
rows={3}
|
|
788
|
+
placeholder="Record dependencies, limits and open questions"
|
|
789
|
+
/>
|
|
790
|
+
</Form.Item>
|
|
791
|
+
|
|
792
|
+
<Form.Item name="nextAction" label="Next Action">
|
|
793
|
+
<Input.TextArea
|
|
794
|
+
rows={3}
|
|
795
|
+
placeholder="Describe the next action, owner and due date"
|
|
796
|
+
/>
|
|
797
|
+
</Form.Item>
|
|
798
|
+
</Section>
|
|
799
|
+
|
|
800
|
+
<div style={styles.actionBar}>
|
|
801
|
+
<span
|
|
802
|
+
style={{
|
|
803
|
+
marginRight: 'auto',
|
|
804
|
+
color: '#8C90A7',
|
|
805
|
+
fontSize: 12,
|
|
806
|
+
}}
|
|
807
|
+
>
|
|
808
|
+
Review AI-filled values before submission.
|
|
809
|
+
</span>
|
|
810
|
+
<Button onClick={() => form.resetFields()}>Reset</Button>
|
|
811
|
+
<Button
|
|
812
|
+
type="primary"
|
|
813
|
+
htmlType="submit"
|
|
814
|
+
style={{
|
|
815
|
+
minWidth: 150,
|
|
816
|
+
background: BRAND,
|
|
817
|
+
borderColor: BRAND,
|
|
818
|
+
}}
|
|
819
|
+
>
|
|
820
|
+
Validate Form
|
|
821
|
+
</Button>
|
|
822
|
+
</div>
|
|
823
|
+
</Form>
|
|
824
|
+
</div>
|
|
825
|
+
</div>
|
|
826
|
+
);
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
ctx.render(<EventPlanningForm />);
|
|
830
|
+
```
|
|
831
|
+
|
|
832
|
+
</details>
|
|
833
|
+
|
|
834
|
+
After running the code, the Event Planning Request form appears on the page.
|
|
835
|
+
|
|
836
|
+
## Key implementation details
|
|
837
|
+
|
|
838
|
+
### Expose the Ant Design Form to the AI employee
|
|
839
|
+
|
|
840
|
+
Assigning the form instance to `ctx.model.form` allows the Fill form tool to write values into the form. The cleanup restores the previous value when the component is unmounted.
|
|
841
|
+
|
|
842
|
+
```jsx
|
|
843
|
+
useEffect(() => {
|
|
844
|
+
const previousForm = ctx.model.form;
|
|
845
|
+
ctx.model.form = form;
|
|
846
|
+
|
|
847
|
+
return () => {
|
|
848
|
+
if (ctx.model.form === form) {
|
|
849
|
+
ctx.model.form = previousForm;
|
|
850
|
+
}
|
|
851
|
+
};
|
|
852
|
+
}, [form]);
|
|
853
|
+
```
|
|
854
|
+
|
|
855
|
+
### Set the name shown in Pick block
|
|
856
|
+
|
|
857
|
+
JS blocks are shown as `JS block` by default in Pick block. Use `ctx.model.setTitle()` to provide a name that is easier to recognize:
|
|
858
|
+
|
|
859
|
+
```jsx
|
|
860
|
+
ctx.model.setTitle('Event Planning Request');
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
After this is set, users will see `Event Planning Request` when selecting context, making the target form easier to find when a page contains multiple blocks.
|
|
864
|
+
|
|
865
|
+
Use a short, descriptive name for each JS block and keep this line in the complete example.
|
|
866
|
+
|
|
867
|
+
### Provide form information to the Fill form tool
|
|
868
|
+
|
|
869
|
+
`ctx.model.form` provides the Form instance that receives field values. The tool also needs to know which fields the form contains and which rules apply when filling them.
|
|
870
|
+
|
|
871
|
+
Use `ctx.model.setProps()` to provide this information for the current JS block:
|
|
872
|
+
|
|
873
|
+
```jsx
|
|
874
|
+
ctx.model.setProps({
|
|
875
|
+
aiForm: {
|
|
876
|
+
prompt: `This is a fillable Event Planning Request form. Use the Fill form tool when the user asks to populate it. Use the current block UID as the form target: ${ctx.model.uid}. Always use enum values instead of labels, use YYYY-MM-DD for date fields, and use an array for services.`,
|
|
877
|
+
fields: FORM_FIELDS,
|
|
878
|
+
},
|
|
879
|
+
});
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
`aiForm` contains two parts:
|
|
883
|
+
|
|
884
|
+
- `prompt` describes the form purpose, target block UID, and rules for enum, date, and multi-select fields;
|
|
885
|
+
- `fields` provides field names, types, required states, and available values through `FORM_FIELDS`.
|
|
886
|
+
|
|
887
|
+
When the user adds this JS block as AI employee context, the Fill form tool reads this information to determine which fields should be filled in the target block.
|
|
888
|
+
|
|
889
|
+
Both integration points are required:
|
|
890
|
+
|
|
891
|
+
```jsx
|
|
892
|
+
// Describe the form to the tool
|
|
893
|
+
ctx.model.setProps({
|
|
894
|
+
aiForm: {
|
|
895
|
+
prompt: '...',
|
|
896
|
+
fields: FORM_FIELDS,
|
|
897
|
+
},
|
|
898
|
+
});
|
|
899
|
+
|
|
900
|
+
// Provide the Ant Design Form instance that receives values
|
|
901
|
+
ctx.model.form = form;
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
If options come from an API, load and convert them before defining `FORM_FIELDS` and calling `ctx.model.setProps()`. This keeps the enum values available to the tool aligned with the options shown on the page.
|
|
905
|
+
|
|
906
|
+
### Describe complex form fields
|
|
907
|
+
|
|
908
|
+
`FORM_FIELDS` describes the form to the AI. Every `name` must exactly match the corresponding `Form.Item` name. Select and Radio fields should provide `enum`; the AI writes option values rather than labels. Multi-select fields use arrays.
|
|
909
|
+
|
|
910
|
+
```jsx
|
|
911
|
+
{
|
|
912
|
+
name: 'eventTitle',
|
|
913
|
+
title: 'Event Title',
|
|
914
|
+
type: 'string',
|
|
915
|
+
required: true,
|
|
916
|
+
}
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
```jsx
|
|
920
|
+
<Form.Item name="eventTitle" label="Event Title">
|
|
921
|
+
<Input />
|
|
922
|
+
</Form.Item>
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
```json
|
|
926
|
+
{
|
|
927
|
+
"status": "in-review",
|
|
928
|
+
"services": ["recording", "interpretation", "catering"]
|
|
929
|
+
}
|
|
930
|
+
```
|
|
931
|
+
|
|
932
|
+
### Convert date values
|
|
933
|
+
|
|
934
|
+
Ant Design DatePicker expects a dayjs object, while the AI can reliably provide a `YYYY-MM-DD` string. `getValueProps` and `getValueFromEvent` convert between the two formats.
|
|
935
|
+
|
|
936
|
+
```jsx
|
|
937
|
+
<Form.Item
|
|
938
|
+
name="startDate"
|
|
939
|
+
getValueProps={(value) => ({
|
|
940
|
+
value: value ? dayjs(String(value).slice(0, 10)) : null,
|
|
941
|
+
})}
|
|
942
|
+
getValueFromEvent={(value) =>
|
|
943
|
+
value ? value.format('YYYY-MM-DD') : null
|
|
944
|
+
}
|
|
945
|
+
>
|
|
946
|
+
<DatePicker format="YYYY/MM/DD" />
|
|
947
|
+
</Form.Item>
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
### Keep field reactions working for AI-filled values
|
|
951
|
+
|
|
952
|
+
`setFieldsValue()` does not trigger `onValuesChange`. Use `Form.useWatch()` when fields depend on one another. In this example, Request Status automatically updates Readiness whether the status was selected by a user or filled by AI.
|
|
953
|
+
|
|
954
|
+
```jsx
|
|
955
|
+
const status = STATUS_OPTIONS.find(
|
|
956
|
+
(item) => item.value === values.status,
|
|
957
|
+
);
|
|
958
|
+
|
|
959
|
+
useEffect(() => {
|
|
960
|
+
if (status) {
|
|
961
|
+
form.setFieldsValue({ readiness: status.readiness });
|
|
962
|
+
}
|
|
963
|
+
}, [form, status]);
|
|
964
|
+
```
|
|
965
|
+
|
|
966
|
+
### Render conditional fields
|
|
967
|
+
|
|
968
|
+
Values returned by `Form.useWatch()` can control JSX directly. The example shows Venue Name for on-site or hybrid events, Dietary Requirements when Catering is selected, and Cancellation Reason when the status is Cancelled.
|
|
969
|
+
|
|
970
|
+
```jsx
|
|
971
|
+
{values.services?.includes('catering') ? (
|
|
972
|
+
<Form.Item name="dietaryNotes" label="Dietary Requirements">
|
|
973
|
+
<Input />
|
|
974
|
+
</Form.Item>
|
|
975
|
+
) : null}
|
|
976
|
+
```
|
|
977
|
+
|
|
978
|
+
## Fill the form with an AI employee
|
|
979
|
+
|
|
980
|
+
### 1. Enable the Fill form tool
|
|
981
|
+
|
|
982
|
+
Use the built-in Dex employee, or enable the Fill form tool for another AI employee.
|
|
983
|
+
|
|
984
|
+
### 2. Select the JS block as context
|
|
985
|
+
|
|
986
|
+
Open the AI employee dialog, select **Add context → Pick block**, and choose the Event Planning Request block. See [Add context - Pick block](/ai-employees/features/pick-block).
|
|
987
|
+
|
|
988
|
+
### 3. Send the source material
|
|
989
|
+
|
|
990
|
+
Enter natural language or paste an email, meeting note, or event brief. The AI can extract content in one language and map it to the English field labels and option values.
|
|
991
|
+
|
|
992
|
+
### 4. Review before submitting
|
|
993
|
+
|
|
994
|
+
Verify option mappings, numbers and units, dates, multi-select arrays, conditional fields, and any required information that was not explicit in the source. The Fill form tool writes values only; it does not click Validate Form or submit business data.
|
|
995
|
+
|
|
996
|
+
## Adapt the example to your form
|
|
997
|
+
|
|
998
|
+
### Static options
|
|
999
|
+
|
|
1000
|
+
For a small fixed list, define options in the JS block and reuse the same array in both `FORM_FIELDS` and the Select component.
|
|
1001
|
+
|
|
1002
|
+
```jsx
|
|
1003
|
+
const TEAM_OPTIONS = [
|
|
1004
|
+
{ value: 'team-a', label: 'Team A' },
|
|
1005
|
+
{ value: 'team-b', label: 'Team B' },
|
|
1006
|
+
];
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
### Load options from an API
|
|
1010
|
+
|
|
1011
|
+
Options can also come from a NocoBase API or another endpoint. Complete the request before defining `FORM_FIELDS` and rendering the form, then map records to `{ value, label }`.
|
|
1012
|
+
|
|
1013
|
+
```jsx
|
|
1014
|
+
const { data } = await ctx.request({
|
|
1015
|
+
url: 'eventCategories:list',
|
|
1016
|
+
method: 'get',
|
|
1017
|
+
params: {
|
|
1018
|
+
fields: ['id', 'name'],
|
|
1019
|
+
sort: ['name'],
|
|
1020
|
+
pageSize: 100,
|
|
1021
|
+
},
|
|
1022
|
+
});
|
|
1023
|
+
|
|
1024
|
+
const categoryRecords = Array.isArray(data?.data) ? data.data : [];
|
|
1025
|
+
const CATEGORY_OPTIONS = categoryRecords.map((record) => ({
|
|
1026
|
+
value: record.id,
|
|
1027
|
+
label: record.name,
|
|
1028
|
+
}));
|
|
1029
|
+
|
|
1030
|
+
const FORM_FIELDS = [
|
|
1031
|
+
{
|
|
1032
|
+
name: 'categoryId',
|
|
1033
|
+
title: 'Event Category',
|
|
1034
|
+
type: 'number',
|
|
1035
|
+
enum: CATEGORY_OPTIONS,
|
|
1036
|
+
},
|
|
1037
|
+
];
|
|
1038
|
+
|
|
1039
|
+
ctx.model.setProps({
|
|
1040
|
+
aiForm: {
|
|
1041
|
+
fields: FORM_FIELDS,
|
|
1042
|
+
},
|
|
1043
|
+
});
|
|
1044
|
+
```
|
|
1045
|
+
|
|
1046
|
+
```jsx
|
|
1047
|
+
<Form.Item name="categoryId" label="Event Category">
|
|
1048
|
+
<Select options={CATEGORY_OPTIONS} />
|
|
1049
|
+
</Form.Item>
|
|
1050
|
+
```
|
|
1051
|
+
|
|
1052
|
+
Call `ctx.model.setProps()` after the request and mapping are complete so the AI enum matches the options displayed on the page. Keep the option value type consistent with the field type.
|
|
1053
|
+
|
|
1054
|
+
Requests use the current user identity and permissions. Cross-origin endpoints must allow CORS and may require their own authentication. See [ctx.request](/runjs/context/request).
|
|
1055
|
+
|
|
1056
|
+
### Field metadata
|
|
1057
|
+
|
|
1058
|
+
Update each field name, title, type, enum, requirement, and prompt to match the target form.
|
|
1059
|
+
|
|
1060
|
+
```jsx
|
|
1061
|
+
const FORM_FIELDS = [
|
|
1062
|
+
{
|
|
1063
|
+
name: 'yourFieldName',
|
|
1064
|
+
title: 'Your Field Title',
|
|
1065
|
+
type: 'string',
|
|
1066
|
+
},
|
|
1067
|
+
];
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
### Form fields and layout
|
|
1071
|
+
|
|
1072
|
+
Update the matching `Form.Item` components and layout. `Section`, `SummaryItem`, and `styles.grid` can be reused or adjusted.
|
|
1073
|
+
|
|
1074
|
+
```jsx
|
|
1075
|
+
<Form.Item name="yourFieldName" label="Your Field Title">
|
|
1076
|
+
<Input />
|
|
1077
|
+
</Form.Item>
|
|
1078
|
+
```
|
|
1079
|
+
|
|
1080
|
+
## Scope and considerations
|
|
1081
|
+
|
|
1082
|
+
### One main form per JS block
|
|
1083
|
+
|
|
1084
|
+
Keep one primary form in each JS block so the AI can identify the target clearly. Put independent forms in separate blocks.
|
|
1085
|
+
|
|
1086
|
+
### Do not place very large option lists in context
|
|
1087
|
+
|
|
1088
|
+
Static or API-loaded options both work. For hundreds of teams, venues, or services, limit the query, let the user select a related record first, or use a more focused matching flow instead of sending every option to the AI.
|
|
1089
|
+
|
|
1090
|
+
## Summary
|
|
1091
|
+
|
|
1092
|
+
To make a JS block form fillable, manage its values with Ant Design Form, expose the form instance through the block model, and provide accurate field metadata. The example also demonstrates JSX, responsive grids, grouped cards, summaries, dependent fields, and conditional rendering.
|