@nocobase/plugin-ai 2.2.0-beta.8 → 2.3.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.
Files changed (477) hide show
  1. package/client-v2.d.ts +1 -0
  2. package/dist/ai/docs/nocobase/ai-employees/scenarios/company-background-research.md +125 -0
  3. package/dist/ai/docs/nocobase/api/app/env.md +28 -1
  4. package/dist/ai/docs/nocobase/api/cli/config/delete.md +8 -6
  5. package/dist/ai/docs/nocobase/api/cli/config/get.md +8 -6
  6. package/dist/ai/docs/nocobase/api/cli/config/index.md +37 -26
  7. package/dist/ai/docs/nocobase/api/cli/config/set.md +14 -8
  8. package/dist/ai/docs/nocobase/building-tips/operations-dashboard.md +513 -0
  9. package/dist/ai/docs/nocobase/file-manager/field-attachment.md +6 -0
  10. package/dist/ai/docs/nocobase/file-manager/file-preview/index.md +3 -12
  11. package/dist/ai/docs/nocobase/file-manager/stable-url.md +87 -0
  12. package/dist/ai/docs/nocobase/file-manager/storage/aliyun-oss.md +9 -0
  13. package/dist/ai/docs/nocobase/file-manager/storage/amazon-s3.md +9 -0
  14. package/dist/ai/docs/nocobase/file-manager/storage/index.md +23 -0
  15. package/dist/ai/docs/nocobase/file-manager/storage/local.md +12 -1
  16. package/dist/ai/docs/nocobase/file-manager/storage/migrate-to-s3-pro.md +269 -0
  17. package/dist/ai/docs/nocobase/file-manager/storage/tencent-cos.md +9 -0
  18. package/dist/ai/docs/nocobase/get-started/deployment/production.md +24 -2
  19. package/dist/ai/docs/nocobase/get-started/installation/docker-caddy.mdx +178 -0
  20. package/dist/ai/docs/nocobase/get-started/installation/docker-nginx.mdx +179 -0
  21. package/dist/ai/docs/nocobase/get-started/installation/docker.mdx +118 -1
  22. package/dist/ai/docs/nocobase/get-started/installation/env.md +47 -4
  23. package/dist/ai/docs/nocobase/index.md +1 -1
  24. package/dist/ai/docs/nocobase/interface-builder/blocks/data-blocks/comment.md +107 -0
  25. package/dist/ai/docs/nocobase/interface-builder/index.md +7 -6
  26. package/dist/ai/docs/nocobase/interface-builder/ui-layout/desktop.md +97 -0
  27. package/dist/ai/docs/nocobase/interface-builder/ui-layout/index.md +50 -0
  28. package/dist/ai/docs/nocobase/interface-builder/ui-layout/mobile.md +133 -0
  29. package/dist/ai/docs/nocobase/multi-app/multi-app-vs-multi-portal-vs-multi-space.md +159 -0
  30. package/dist/ai/docs/nocobase/multi-app/multi-portal/index.md +195 -0
  31. package/dist/ai/docs/nocobase/nocobase-cli/production/index.md +10 -0
  32. package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/caddy.md +15 -2
  33. package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/index.md +1 -1
  34. package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/nginx.md +16 -2
  35. package/dist/ai/docs/nocobase/ops-management/version-control/index.md +1 -0
  36. package/dist/ai/docs/nocobase/plugins/@nocobase/plugin-block-comment/index.md +14 -0
  37. package/dist/ai/docs/nocobase/runjs/context/ai.md +206 -0
  38. package/dist/ai/docs/nocobase/security/guide.md +23 -0
  39. package/dist/ai/docs/nocobase/tutorials/index.md +20 -1
  40. package/dist/ai/docs/nocobase/workflow/development/api.md +259 -77
  41. package/dist/ai/docs/nocobase/workflow/development/index.md +2 -1
  42. package/dist/ai/docs/nocobase/workflow/development/migration.md +319 -0
  43. package/dist/ai/docs/nocobase/workflow/development/node.md +84 -51
  44. package/dist/ai/docs/nocobase/workflow/development/trigger.md +122 -20
  45. package/dist/ai/tools/formFiller.js +4 -3
  46. package/dist/ai/tools/subAgentWebSearch.js +20 -15
  47. package/dist/client/23.65ea8c37cd4b884b.js +10 -0
  48. package/dist/client/264.cc98933ef65608b6.js +10 -0
  49. package/dist/client/336.7a8a8853196ad779.js +11 -0
  50. package/dist/client/372.40eb52905e3f3049.js +10 -0
  51. package/dist/client/416.92b74ca47e4099c4.js +10 -0
  52. package/dist/client/446.d63c38d0309fe250.js +10 -0
  53. package/dist/client/525.203778500aca5d05.js +10 -0
  54. package/dist/client/663.680bcf6272a8504d.js +10 -0
  55. package/dist/client/681.399948c18d753667.js +10 -0
  56. package/dist/client/705.380279da896021fb.js +10 -0
  57. package/dist/client/ai-employees/1.x/selector/AIContextCollector.d.ts +1 -4
  58. package/dist/client/ai-employees/permissions/PermissionsTab.d.ts +21 -5
  59. package/dist/client/index.d.ts +15 -20
  60. package/dist/client/index.js +8 -8
  61. package/dist/client/workflow/nodes/employee/index.d.ts +2 -23
  62. package/dist/client/workflow/nodes/llm/index.d.ts +2 -52
  63. package/dist/client/workflow/triggers/ai-employee/index.d.ts +2 -83
  64. package/dist/client-v2/23.1bcb6986b40723d8.js +10 -0
  65. package/dist/client-v2/264.be92ff6a4d2612f1.js +10 -0
  66. package/dist/client-v2/336.e406470429e0670e.js +11 -0
  67. package/dist/client-v2/372.8cc3fde09c9bec77.js +10 -0
  68. package/dist/client-v2/406.341be51205c674e0.js +10 -0
  69. package/dist/client-v2/416.0e1c2d9cde43b83d.js +10 -0
  70. package/dist/client-v2/446.073d450882db29fd.js +10 -0
  71. package/dist/client-v2/457.d72febb89e88fc00.js +10 -0
  72. package/dist/client-v2/663.342341f0b2b412d8.js +10 -0
  73. package/dist/client-v2/681.082f4f1c7b841983.js +10 -0
  74. package/dist/client-v2/705.1d10027ff8cfdf79.js +10 -0
  75. package/dist/{client/ai-employees/admin/AvatarSelect.d.ts → client-v2/ai-employees/AIEmployeeDropdown.d.ts} +8 -9
  76. package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +9 -2
  77. package/dist/{client → client-v2}/ai-employees/AddContextButton.d.ts +1 -1
  78. package/dist/{client → client-v2}/ai-employees/ai-coding/AICodingButton.d.ts +2 -1
  79. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Actions.d.ts +2 -4
  80. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/AddLLMModal.d.ts +2 -4
  81. package/dist/client-v2/ai-employees/chatbox/components/Attachments.d.ts +27 -0
  82. package/dist/{client/ai-employees/permissions/Permissions.d.ts → client-v2/ai-employees/chatbox/components/ChatBox.d.ts} +2 -2
  83. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatBoxLayout.d.ts +1 -1
  84. package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ContextItem.d.ts +1 -1
  85. package/dist/{client/ai-employees/admin/Employees.d.ts → client-v2/ai-employees/chatbox/components/DebugPanel.d.ts} +1 -1
  86. package/dist/{client/ai-employees/chatbox/markdown/Code.d.ts → client-v2/ai-employees/chatbox/components/Markdown.d.ts} +12 -5
  87. package/dist/{client/ai-employees/admin/ProfileSettings.d.ts → client-v2/ai-employees/chatbox/components/MessageContent.d.ts} +3 -2
  88. package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +39 -0
  89. package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolCard.d.ts +7 -5
  90. package/dist/{client/ai-employees/admin/datasource/components/basic → client-v2/ai-employees/chatbox/components}/index.d.ts +5 -2
  91. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChat.d.ts +21 -22
  92. package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +3 -2
  93. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +2 -2
  94. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +8 -4
  95. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useToolCallActions.d.ts +1 -1
  96. package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +46 -0
  97. package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +1 -1
  98. package/dist/{client → client-v2}/ai-employees/chatbox/model.d.ts +9 -2
  99. package/dist/client-v2/ai-employees/chatbox/roles.d.ts +162 -0
  100. package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +1 -49
  101. package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +2 -19
  102. package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +1 -46
  103. package/dist/{client → client-v2}/ai-employees/chatbox/stores/chat-tool-call.d.ts +1 -15
  104. package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +30 -0
  105. package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +31 -3
  106. package/dist/{client/ai-employees/chatbox/conversations/common.d.ts → client-v2/ai-employees/chatbox/stores/workflow-tasks.d.ts} +21 -4
  107. package/dist/client-v2/ai-employees/chatbox/utils/normalizeTriggerTaskOptions.d.ts +19 -0
  108. package/dist/{client → client-v2}/ai-employees/chatbox/utils.d.ts +26 -6
  109. package/dist/{client/ai-employees/data-visualization/context.d.ts → client-v2/ai-employees/context/chart-config.d.ts} +1 -1
  110. package/dist/{client → client-v2}/ai-employees/context/code-editor.d.ts +1 -1
  111. package/dist/{client → client-v2}/ai-employees/context/datasource.d.ts +1 -1
  112. package/dist/{client → client-v2}/ai-employees/context/flow-models.d.ts +1 -1
  113. package/dist/{client/ai-employees/admin/datasource/components/DatasourceSettingDetail.d.ts → client-v2/ai-employees/data-modeling/setup.d.ts} +6 -5
  114. package/dist/{client → client-v2}/ai-employees/datasource/DatasourceSelector.d.ts +6 -2
  115. package/dist/{client/ai-employees/admin/datasource/flow-models/DatasourceSettingModel.d.ts → client-v2/ai-employees/flow/index.d.ts} +4 -6
  116. package/dist/{client → client-v2}/ai-employees/form-filler/tools/index.d.ts +1 -1
  117. package/dist/{client → client-v2}/ai-employees/stores/ai-selection.d.ts +4 -4
  118. package/dist/{client → client-v2}/ai-employees/stores/dialog-controller.d.ts +4 -4
  119. package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportCard.d.ts +2 -2
  120. package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportModal.d.ts +2 -2
  121. package/dist/{client/ai-employees/1.x/selector/withAISelectable.d.ts → client-v2/ai-employees/tools/ChartGeneratorCard.d.ts} +5 -4
  122. package/dist/{client/ai-employees/ai-coding/ui → client-v2/ai-employees/tools}/CodeToolCard.d.ts +1 -1
  123. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingCard.d.ts +3 -5
  124. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingModal.d.ts +4 -6
  125. package/dist/{client/ai-employees/sub-agents/ui → client-v2/ai-employees/tools}/SubAgentDispatchCard.d.ts +4 -9
  126. package/dist/{client/ai-employees/AISettingsProvider.d.ts → client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts} +6 -8
  127. package/dist/{client/ai-employees/workflow-tasks/ui → client-v2/ai-employees/tools}/WorkflowTaskOutputCard.d.ts +7 -2
  128. package/dist/{client/ai-employees/ai-coding/tools/context-tools.d.ts → client-v2/ai-employees/tools/ai-coding.d.ts} +3 -1
  129. package/dist/client-v2/ai-employees/tools/business-report-utils.d.ts +45 -0
  130. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/CollectionNode.d.ts +2 -3
  131. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Diagram.d.ts +1 -1
  132. package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Table.d.ts +2 -2
  133. package/dist/client-v2/ai-employees/tools/data-modeling/legacy-template.d.ts +13 -0
  134. package/dist/client-v2/ai-employees/tools/data-modeling/runtime.d.ts +15 -0
  135. package/dist/{client/ai-employees → client-v2/ai-employees/tools}/data-modeling/types.d.ts +27 -4
  136. package/dist/client-v2/ai-employees/tools/data-modeling/useFieldInterfaceOptions.d.ts +151 -0
  137. package/dist/{client/ai-employees/data-visualization/tools/index.d.ts → client-v2/ai-employees/tools/data-visualization.d.ts} +1 -1
  138. package/dist/client-v2/ai-employees/tools/index.d.ts +32 -0
  139. package/dist/client-v2/ai-employees/types.d.ts +101 -7
  140. package/dist/client-v2/components/RemoteSelect.d.ts +43 -0
  141. package/dist/{client → client-v2}/debug-logger.d.ts +2 -2
  142. package/dist/client-v2/f0053e745af0ad03.svg +50 -0
  143. package/dist/client-v2/index.d.ts +9 -9
  144. package/dist/client-v2/index.js +37 -1
  145. package/dist/client-v2/llm-providers/forms.d.ts +44 -0
  146. package/dist/client-v2/llm-providers/index.d.ts +24 -0
  147. package/dist/{client/ai-employees/ai-coding/tools/index.d.ts → client-v2/llm-services/utils.d.ts} +5 -3
  148. package/dist/client-v2/locale.d.ts +14 -0
  149. package/dist/client-v2/manager/ai-manager.d.ts +55 -0
  150. package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +33 -0
  151. package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +44 -0
  152. package/dist/client-v2/pages/AdminSettingsPage.d.ts +24 -0
  153. package/dist/client-v2/pages/DatasourceSettingsPage.d.ts +62 -0
  154. package/dist/client-v2/pages/EmployeesPage.d.ts +62 -0
  155. package/dist/client-v2/pages/LLMServicesPage.d.ts +75 -0
  156. package/dist/client-v2/pages/MCPSettingsPage.d.ts +73 -0
  157. package/dist/client-v2/pages/drawerWidth.d.ts +10 -0
  158. package/dist/client-v2/pages/permissions/Permissions.d.ts +67 -0
  159. package/dist/client-v2/pages/permissions/PermissionsTab.d.ts +12 -0
  160. package/dist/client-v2/pages/useUnsavedChangesBeforeClose.d.ts +29 -0
  161. package/dist/client-v2/plugin.d.ts +33 -0
  162. package/dist/client-v2/repositories/AIConfigRepository.d.ts +3 -23
  163. package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +20 -0
  164. package/dist/client-v2/workflow/components/FormValueRegistry.d.ts +12 -0
  165. package/dist/{client/components/ListCollapse.d.ts → client-v2/workflow/components/WorkflowListCollapse.d.ts} +4 -4
  166. package/dist/client-v2/workflow/constants.d.ts +26 -0
  167. package/dist/client-v2/workflow/nodes/employee/components/AIEmployeeFieldset.d.ts +11 -0
  168. package/dist/{client/ai-employees/common/CodeHighlight.d.ts → client-v2/workflow/nodes/employee/components/AIEmployeeSelect.d.ts} +5 -6
  169. package/dist/{client/ai-employees/ContextAwareTooltip.d.ts → client-v2/workflow/nodes/employee/components/Assignees.d.ts} +2 -1
  170. package/dist/client-v2/workflow/nodes/employee/components/FeedbackSettings.d.ts +17 -0
  171. package/dist/client-v2/workflow/nodes/employee/components/FileInputs.d.ts +11 -0
  172. package/dist/{client/ai-employees/AIEmployeesProvider.d.ts → client-v2/workflow/nodes/employee/components/MessageInputs.d.ts} +2 -3
  173. package/dist/client-v2/workflow/nodes/employee/components/ModelOptions.d.ts +17 -0
  174. package/dist/{client/ai-employees/admin/datasource/components/basic/CollectionCascader.d.ts → client-v2/workflow/nodes/employee/components/SkillSettings.d.ts} +6 -3
  175. package/dist/client-v2/workflow/nodes/employee/components/StructuredOutput.d.ts +11 -0
  176. package/dist/client-v2/workflow/nodes/employee/components/UserInput.d.ts +18 -0
  177. package/dist/client-v2/workflow/nodes/employee/components/WebSearchOptions.d.ts +16 -0
  178. package/dist/client-v2/workflow/nodes/employee/index.d.ts +23 -0
  179. package/dist/{client/ai-employees/AIEmployeeListItem.d.ts → client-v2/workflow/nodes/llm/components/LLMFieldset.d.ts} +3 -5
  180. package/dist/{client/admin-settings/AdminSettings.d.ts → client-v2/workflow/nodes/llm/components/Messages.d.ts} +2 -1
  181. package/dist/client-v2/workflow/nodes/llm/components/StructuredOutput.d.ts +11 -0
  182. package/dist/client-v2/workflow/nodes/llm/index.d.ts +30 -0
  183. package/dist/{client/ai-employees/1.x/selector/BlockSelector.d.ts → client-v2/workflow/register.d.ts} +2 -6
  184. package/dist/client-v2/workflow/triggers/ai-employee/AIEmployeeTriggerConfig.d.ts +11 -0
  185. package/dist/client-v2/workflow/triggers/ai-employee/Parameters.d.ts +11 -0
  186. package/dist/client-v2/workflow/triggers/ai-employee/index.d.ts +25 -0
  187. package/dist/client-v2/workflow/types.d.ts +128 -0
  188. package/dist/externalVersion.js +20 -25
  189. package/dist/locale/en-US.json +50 -1
  190. package/dist/locale/zh-CN.json +50 -1
  191. package/dist/node_modules/@langchain/mistralai/LICENSE +21 -0
  192. package/dist/node_modules/@langchain/mistralai/dist/_virtual/rolldown_runtime.cjs +25 -0
  193. package/dist/node_modules/@langchain/mistralai/dist/chat_models.cjs +859 -0
  194. package/dist/node_modules/@langchain/mistralai/dist/chat_models.d.cts +541 -0
  195. package/dist/node_modules/@langchain/mistralai/dist/chat_models.d.ts +541 -0
  196. package/dist/node_modules/@langchain/mistralai/dist/chat_models.js +857 -0
  197. package/dist/node_modules/@langchain/mistralai/dist/embeddings.cjs +140 -0
  198. package/dist/node_modules/@langchain/mistralai/dist/embeddings.d.cts +116 -0
  199. package/dist/node_modules/@langchain/mistralai/dist/embeddings.d.ts +116 -0
  200. package/dist/node_modules/@langchain/mistralai/dist/embeddings.js +139 -0
  201. package/dist/node_modules/@langchain/mistralai/dist/index.cjs +21 -0
  202. package/dist/node_modules/@langchain/mistralai/dist/index.d.cts +4 -0
  203. package/dist/node_modules/@langchain/mistralai/dist/index.d.ts +4 -0
  204. package/dist/node_modules/@langchain/mistralai/dist/index.js +5 -0
  205. package/dist/node_modules/@langchain/mistralai/dist/llms.cjs +275 -0
  206. package/dist/node_modules/@langchain/mistralai/dist/llms.d.cts +147 -0
  207. package/dist/node_modules/@langchain/mistralai/dist/llms.d.ts +147 -0
  208. package/dist/node_modules/@langchain/mistralai/dist/llms.js +274 -0
  209. package/dist/node_modules/@langchain/mistralai/dist/utils.cjs +61 -0
  210. package/dist/node_modules/@langchain/mistralai/dist/utils.js +59 -0
  211. package/dist/node_modules/@langchain/mistralai/package.json +1 -0
  212. package/dist/node_modules/@langchain/xai/dist/index.cjs +2 -2
  213. package/dist/node_modules/@langchain/xai/package.json +1 -1
  214. package/dist/node_modules/fs-extra/package.json +1 -1
  215. package/dist/node_modules/jsonrepair/package.json +1 -1
  216. package/dist/node_modules/just-bash/package.json +1 -1
  217. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  218. package/dist/node_modules/openai/package.json +1 -1
  219. package/dist/node_modules/zod/package.json +1 -1
  220. package/dist/server/ai-employees/ai-employee.d.ts +1 -0
  221. package/dist/server/ai-employees/ai-employee.js +44 -7
  222. package/dist/server/ai-employees/checkpoints/cleaner.d.ts +2 -0
  223. package/dist/server/ai-employees/checkpoints/cleaner.js +11 -1
  224. package/dist/server/ai-employees/middleware/conversation.d.ts +2 -0
  225. package/dist/server/ai-employees/middleware/conversation.js +2 -1
  226. package/dist/server/ai-employees/prompts.d.ts +2 -1
  227. package/dist/server/ai-employees/prompts.js +8 -2
  228. package/dist/server/ai-employees/tool-call-sanitizer.d.ts +1 -0
  229. package/dist/server/ai-employees/tool-call-sanitizer.js +2 -1
  230. package/dist/server/ai-employees/utils.d.ts +3 -1
  231. package/dist/server/ai-employees/utils.js +13 -5
  232. package/dist/server/attachments.d.ts +24 -0
  233. package/dist/server/attachments.js +204 -0
  234. package/dist/server/collections/ai-usage-events.d.ts +10 -0
  235. package/dist/server/collections/ai-usage-events.js +183 -0
  236. package/dist/server/document-loader/cached.d.ts +1 -0
  237. package/dist/server/document-loader/cached.js +18 -9
  238. package/dist/server/document-loader/loader.d.ts +0 -1
  239. package/dist/server/document-loader/loader.js +25 -8
  240. package/dist/server/document-loader/types.d.ts +7 -0
  241. package/dist/server/llm-providers/anthropic.d.ts +2 -1
  242. package/dist/server/llm-providers/anthropic.js +1 -3
  243. package/dist/server/llm-providers/dashscope.d.ts +2 -1
  244. package/dist/server/llm-providers/dashscope.js +16 -1
  245. package/dist/server/llm-providers/deepseek.d.ts +2 -1
  246. package/dist/server/llm-providers/deepseek.js +33 -2
  247. package/dist/server/llm-providers/google-genai.d.ts +1 -1
  248. package/dist/server/llm-providers/google-genai.js +1 -5
  249. package/dist/server/llm-providers/kimi/provider.d.ts +2 -1
  250. package/dist/server/llm-providers/kimi/provider.js +22 -2
  251. package/dist/server/llm-providers/mistral.d.ts +96 -0
  252. package/dist/server/llm-providers/mistral.js +325 -0
  253. package/dist/server/llm-providers/openai/completions.d.ts +2 -1
  254. package/dist/server/llm-providers/openai/completions.js +17 -1
  255. package/dist/server/llm-providers/openai/responses.d.ts +2 -1
  256. package/dist/server/llm-providers/openai/responses.js +17 -1
  257. package/dist/server/llm-providers/orcarouter.d.ts +35 -0
  258. package/dist/server/llm-providers/orcarouter.js +155 -0
  259. package/dist/server/llm-providers/provider.d.ts +16 -4
  260. package/dist/server/llm-providers/provider.js +60 -18
  261. package/dist/server/manager/ai-chat-conversation.js +2 -0
  262. package/dist/server/manager/ai-context-datasource-manager.js +34 -7
  263. package/dist/server/manager/ai-manager.d.ts +2 -1
  264. package/dist/server/manager/ai-manager.js +4 -1
  265. package/dist/server/manager/ai-usage-events.d.ts +49 -0
  266. package/dist/server/manager/ai-usage-events.js +195 -0
  267. package/dist/server/plugin.js +18 -0
  268. package/dist/server/resource/aiConversations.js +44 -1
  269. package/dist/server/utils.d.ts +5 -2
  270. package/dist/server/utils.js +11 -19
  271. package/dist/server/workflow/nodes/employee/files.d.ts +3 -1
  272. package/dist/server/workflow/nodes/employee/files.js +31 -5
  273. package/dist/server/workflow/nodes/employee/index.js +92 -46
  274. package/dist/server/workflow/nodes/employee/tools.js +8 -1
  275. package/package.json +6 -5
  276. package/dist/client/119.c6bf8c6433167d81.js +0 -10
  277. package/dist/client/170.d98eacdc00d9d527.js +0 -10
  278. package/dist/client/228.b4b709f93b86b6b9.js +0 -10
  279. package/dist/client/280.003b9e9788599244.js +0 -10
  280. package/dist/client/290.0f7f441d8a94f03c.js +0 -10
  281. package/dist/client/331.d547c95410476a69.js +0 -10
  282. package/dist/client/406.15c09d98faa2ccf1.js +0 -10
  283. package/dist/client/428.e9f38da3b0d8b498.js +0 -10
  284. package/dist/client/462.d172d0fe91519e35.js +0 -10
  285. package/dist/client/486.dcac8f3fcec19c33.js +0 -10
  286. package/dist/client/502.2b4a51e0a8122e52.js +0 -10
  287. package/dist/client/525.33a9c8ec28be4ec4.js +0 -10
  288. package/dist/client/559.a0f2f1cc2be3c039.js +0 -10
  289. package/dist/client/561.7ec804ef39ec7dcd.js +0 -10
  290. package/dist/client/580.35ba54ff91b7fe6d.js +0 -10
  291. package/dist/client/597.b0d64948d74cf6cb.js +0 -10
  292. package/dist/client/604.89c674f35b52b4ef.js +0 -10
  293. package/dist/client/614.aa766080f6b99aab.js +0 -10
  294. package/dist/client/646.d4483b4ff23da0a0.js +0 -10
  295. package/dist/client/687.224e569a99cae4bb.js +0 -10
  296. package/dist/client/699.57c0a1acb723202a.js +0 -10
  297. package/dist/client/711.92cd94681fde7e05.js +0 -10
  298. package/dist/client/758.a9741e81911e53c3.js +0 -10
  299. package/dist/client/768.5177bff46ae71a5b.js +0 -10
  300. package/dist/client/792.abb57765453bcbcc.js +0 -10
  301. package/dist/client/820.f72ef2462b61d812.js +0 -10
  302. package/dist/client/832.0cf69e3f43c320b2.js +0 -10
  303. package/dist/client/927.d95c74ebb8fd51c9.js +0 -10
  304. package/dist/client/ai-employees/1.x/selector/AISelectorProvider.d.ts +0 -33
  305. package/dist/client/ai-employees/ProfileCard.d.ts +0 -15
  306. package/dist/client/ai-employees/admin/ChatSettings.d.ts +0 -10
  307. package/dist/client/ai-employees/admin/DataSourceSettings.d.ts +0 -10
  308. package/dist/client/ai-employees/admin/EnableSwitch.d.ts +0 -10
  309. package/dist/client/ai-employees/admin/InputsFormSettings.d.ts +0 -10
  310. package/dist/client/ai-employees/admin/KnowledgeBaseSettings.d.ts +0 -10
  311. package/dist/client/ai-employees/admin/ModelSettings.d.ts +0 -10
  312. package/dist/client/ai-employees/admin/SkillSettings.d.ts +0 -19
  313. package/dist/client/ai-employees/admin/SystemPrompt.d.ts +0 -10
  314. package/dist/client/ai-employees/admin/Templates.d.ts +0 -10
  315. package/dist/client/ai-employees/admin/ToolsSettings.d.ts +0 -17
  316. package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingForm.d.ts +0 -10
  317. package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingGrid.d.ts +0 -10
  318. package/dist/client/ai-employees/admin/datasource/components/basic/FieldsTransfer.d.ts +0 -17
  319. package/dist/client/ai-employees/admin/datasource/components/form-steps/CollectionSetting.d.ts +0 -17
  320. package/dist/client/ai-employees/admin/datasource/components/form-steps/FieldsSetting.d.ts +0 -15
  321. package/dist/client/ai-employees/admin/datasource/components/form-steps/FilterSetting.d.ts +0 -17
  322. package/dist/client/ai-employees/admin/datasource/components/form-steps/Preview.d.ts +0 -13
  323. package/dist/client/ai-employees/admin/datasource/components/form-steps/SortSetting.d.ts +0 -15
  324. package/dist/client/ai-employees/admin/datasource/components/form-steps/index.d.ts +0 -13
  325. package/dist/client/ai-employees/admin/datasource/components/index.d.ts +0 -9
  326. package/dist/client/ai-employees/admin/datasource/context.d.ts +0 -17
  327. package/dist/client/ai-employees/admin/datasource/flow-models/index.d.ts +0 -9
  328. package/dist/client/ai-employees/admin/datasource/index.d.ts +0 -10
  329. package/dist/client/ai-employees/admin/hooks.d.ts +0 -39
  330. package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +0 -10
  331. package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +0 -19
  332. package/dist/client/ai-employees/admin/mcp/context.d.ts +0 -15
  333. package/dist/client/ai-employees/admin/mcp/schemas.d.ts +0 -1314
  334. package/dist/client/ai-employees/ai-coding/CodeHistory.d.ts +0 -10
  335. package/dist/client/ai-employees/ai-coding/markdown/Code.d.ts +0 -16
  336. package/dist/client/ai-employees/avatars.d.ts +0 -9
  337. package/dist/client/ai-employees/built-in/utils.d.ts +0 -15
  338. package/dist/client/ai-employees/business-report/tools/index.d.ts +0 -10
  339. package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +0 -38
  340. package/dist/client/ai-employees/chart-generator/tools/index.d.ts +0 -10
  341. package/dist/client/ai-employees/chart-generator/ui/ECharts.d.ts +0 -13
  342. package/dist/client/ai-employees/chatbox/AIThinking.d.ts +0 -12
  343. package/dist/client/ai-employees/chatbox/Attachment.d.ts +0 -14
  344. package/dist/client/ai-employees/chatbox/AttachmentsHeader.d.ts +0 -10
  345. package/dist/client/ai-employees/chatbox/ChatBox.d.ts +0 -12
  346. package/dist/client/ai-employees/chatbox/ContextItemsHeader.d.ts +0 -10
  347. package/dist/client/ai-employees/chatbox/DebugPanel.d.ts +0 -16
  348. package/dist/client/ai-employees/chatbox/EditMessageHeader.d.ts +0 -10
  349. package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +0 -10
  350. package/dist/client/ai-employees/chatbox/MessageRenderer.d.ts +0 -33
  351. package/dist/client/ai-employees/chatbox/SenderFooter.d.ts +0 -13
  352. package/dist/client/ai-employees/chatbox/SenderHeader.d.ts +0 -10
  353. package/dist/client/ai-employees/chatbox/SenderPrefix.d.ts +0 -10
  354. package/dist/client/ai-employees/chatbox/Upload.d.ts +0 -12
  355. package/dist/client/ai-employees/chatbox/VirtualList.d.ts +0 -28
  356. package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +0 -13
  357. package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +0 -13
  358. package/dist/client/ai-employees/chatbox/conversations/index.d.ts +0 -9
  359. package/dist/client/ai-employees/chatbox/generative-ui/DefaultToolCard.d.ts +0 -16
  360. package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +0 -18
  361. package/dist/client/ai-employees/chatbox/hooks/useUploadFiles.d.ts +0 -12
  362. package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +0 -10
  363. package/dist/client/ai-employees/chatbox/markdown/Form.d.ts +0 -10
  364. package/dist/client/ai-employees/chatbox/markdown/Generating.d.ts +0 -10
  365. package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +0 -13
  366. package/dist/client/ai-employees/chatbox/roles.d.ts +0 -32
  367. package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +0 -9
  368. package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +0 -9
  369. package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +0 -9
  370. package/dist/client/ai-employees/chatbox/stores/chat-tools.d.ts +0 -51
  371. package/dist/client/ai-employees/chatbox/stores/create-selectors.d.ts +0 -18
  372. package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +0 -45
  373. package/dist/client/ai-employees/context/classic-pages.d.ts +0 -10
  374. package/dist/client/ai-employees/data-modeling/Table.d.ts +0 -12
  375. package/dist/client/ai-employees/data-modeling/setup.d.ts +0 -10
  376. package/dist/client/ai-employees/data-modeling/tools/index.d.ts +0 -10
  377. package/dist/client/ai-employees/data-modeling/ui/useFieldInterfaceOptions.d.ts +0 -14
  378. package/dist/client/ai-employees/datasource/DatasourceList.d.ts +0 -17
  379. package/dist/client/ai-employees/datasource/index.d.ts +0 -9
  380. package/dist/client/ai-employees/flow/events/index.d.ts +0 -9
  381. package/dist/client/ai-employees/flow/index.d.ts +0 -36
  382. package/dist/client/ai-employees/flow/models/AIEmployeeActionModel.d.ts +0 -18
  383. package/dist/client/ai-employees/flow/models/AIEmployeeShortcutModel.d.ts +0 -30
  384. package/dist/client/ai-employees/shortcuts/ShortcutList.d.ts +0 -10
  385. package/dist/client/ai-employees/shortcuts/useShortcuts.d.ts +0 -13
  386. package/dist/client/ai-employees/stores/context-aware.d.ts +0 -19
  387. package/dist/client/ai-employees/sub-agents/tools/index.d.ts +0 -10
  388. package/dist/client/ai-employees/suggestions/tools/index.d.ts +0 -10
  389. package/dist/client/ai-employees/suggestions/ui/SuggestionsOptions.d.ts +0 -13
  390. package/dist/client/ai-employees/types.d.ts +0 -259
  391. package/dist/client/ai-employees/workflow-tasks/tools/index.d.ts +0 -10
  392. package/dist/client/chat-settings/Messages.d.ts +0 -11
  393. package/dist/client/chat-settings/StructuredOutput.d.ts +0 -11
  394. package/dist/client/components/skill-settings.d.ts +0 -22
  395. package/dist/client/features/components.d.ts +0 -9
  396. package/dist/client/features/feature-manager.d.ts +0 -9
  397. package/dist/client/features/index.d.ts +0 -9
  398. package/dist/client/features/vector-database-provider.d.ts +0 -9
  399. package/dist/client/features/vector-store-provider.d.ts +0 -9
  400. package/dist/client/llm-providers/anthropic/ModelSettings.d.ts +0 -10
  401. package/dist/client/llm-providers/anthropic/ProviderSettings.d.ts +0 -10
  402. package/dist/client/llm-providers/anthropic/index.d.ts +0 -10
  403. package/dist/client/llm-providers/components/Chat.d.ts +0 -10
  404. package/dist/client/llm-providers/components/ModelSelect.d.ts +0 -10
  405. package/dist/client/llm-providers/dashscope/ModelSettings.d.ts +0 -10
  406. package/dist/client/llm-providers/dashscope/ProviderSettings.d.ts +0 -10
  407. package/dist/client/llm-providers/dashscope/index.d.ts +0 -10
  408. package/dist/client/llm-providers/deepseek/ModelSettings.d.ts +0 -10
  409. package/dist/client/llm-providers/deepseek/index.d.ts +0 -10
  410. package/dist/client/llm-providers/google-genai/MessageRenderer.d.ts +0 -13
  411. package/dist/client/llm-providers/google-genai/ModelSettings.d.ts +0 -10
  412. package/dist/client/llm-providers/google-genai/ProviderSettings.d.ts +0 -10
  413. package/dist/client/llm-providers/google-genai/index.d.ts +0 -10
  414. package/dist/client/llm-providers/kimi/ModelSettings.d.ts +0 -10
  415. package/dist/client/llm-providers/kimi/index.d.ts +0 -10
  416. package/dist/client/llm-providers/mimo/ModelSettings.d.ts +0 -10
  417. package/dist/client/llm-providers/mimo/index.d.ts +0 -10
  418. package/dist/client/llm-providers/ollama/ModelSettings.d.ts +0 -10
  419. package/dist/client/llm-providers/ollama/ProviderSettings.d.ts +0 -10
  420. package/dist/client/llm-providers/ollama/index.d.ts +0 -10
  421. package/dist/client/llm-providers/openai/completions/ModelSettings.d.ts +0 -10
  422. package/dist/client/llm-providers/openai/completions/index.d.ts +0 -10
  423. package/dist/client/llm-providers/openai/components/ProviderSettings.d.ts +0 -10
  424. package/dist/client/llm-providers/openai/responses/ModelSettings.d.ts +0 -10
  425. package/dist/client/llm-providers/openai/responses/index.d.ts +0 -10
  426. package/dist/client/llm-providers/tongyi/ModelSettings.d.ts +0 -10
  427. package/dist/client/llm-providers/tongyi/ProviderSettings.d.ts +0 -10
  428. package/dist/client/llm-providers/tongyi/index.d.ts +0 -10
  429. package/dist/client/llm-providers/xai/ModelSettings.d.ts +0 -10
  430. package/dist/client/llm-providers/xai/index.d.ts +0 -10
  431. package/dist/client/llm-services/LLMServices.d.ts +0 -13
  432. package/dist/client/llm-services/component/DefaultModelSelect.d.ts +0 -10
  433. package/dist/client/llm-services/component/EnabledModelsSelect.d.ts +0 -23
  434. package/dist/client/llm-services/component/LLMTestFlight.d.ts +0 -10
  435. package/dist/client/llm-services/component/ModelOptionsSettings.d.ts +0 -10
  436. package/dist/client/llm-services/component/UnifiedModelSettings.d.ts +0 -10
  437. package/dist/client/llm-services/hooks/useLLMServiceCatalog.d.ts +0 -18
  438. package/dist/client/llm-services/llm-providers.d.ts +0 -27
  439. package/dist/client/llm-services/utils.d.ts +0 -30
  440. package/dist/client/manager/ai-feature-manager.d.ts +0 -9
  441. package/dist/client/manager/ai-manager.d.ts +0 -35
  442. package/dist/client/repositories/AIConfigRepository.d.ts +0 -60
  443. package/dist/client/repositories/hooks/useAIConfigRepository.d.ts +0 -10
  444. package/dist/client/schemas/llms.d.ts +0 -347
  445. package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +0 -10
  446. package/dist/client/workflow/nodes/employee/components/assigness.d.ts +0 -11
  447. package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +0 -10
  448. package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +0 -12
  449. package/dist/client/workflow/nodes/employee/components/model-options.d.ts +0 -10
  450. package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +0 -10
  451. package/dist/client/workflow/nodes/employee/components/users-select.d.ts +0 -15
  452. package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +0 -10
  453. package/dist/client/workflow/nodes/employee/configuration.d.ts +0 -12
  454. package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +0 -14
  455. package/dist/client/workflow/nodes/employee/flow-models/task.d.ts +0 -13
  456. package/dist/client/workflow/nodes/llm/ModelSettings.d.ts +0 -11
  457. package/dist/client/workflow/triggers/ai-employee/Parameters.d.ts +0 -13
  458. package/dist/client-v2/ai-employees/flow/models/AIEmployeeButtonModel.d.ts +0 -32
  459. /package/dist/{client → client-v2}/ai-employees/AISelection.d.ts +0 -0
  460. /package/dist/{client → client-v2}/ai-employees/AISelectionControl.d.ts +0 -0
  461. /package/dist/{client → client-v2}/ai-employees/ai-coding/prompts.d.ts +0 -0
  462. /package/dist/{client → client-v2}/ai-employees/ai-coding/setup.d.ts +0 -0
  463. /package/dist/{client/ai-employees/chatbox/AIEmployeeSwitch.d.ts → client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts} +0 -0
  464. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatButton.d.ts +0 -0
  465. /package/dist/{client/ai-employees/chatbox/conversations → client-v2/ai-employees/chatbox/components}/Conversations.d.ts +0 -0
  466. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Messages.d.ts +0 -0
  467. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ModelSwitcher.d.ts +0 -0
  468. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/SearchSwitch.d.ts +0 -0
  469. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Sender.d.ts +0 -0
  470. /package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolModal.d.ts +0 -0
  471. /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/UserPrompt.d.ts +0 -0
  472. /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +0 -0
  473. /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useLoadMoreObserver.d.ts +0 -0
  474. /package/dist/client-v2/ai-employees/{chatbox/stores → stores}/global-store.d.ts +0 -0
  475. /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/AIEmployeeShortcutListModel.d.ts +0 -0
  476. /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/index.d.ts +0 -0
  477. /package/dist/{client/ai-employees/flow/events/ai-context-selection.d.ts → client-v2/workflow/components/index.d.ts} +0 -0
@@ -0,0 +1,179 @@
1
+ ---
2
+ title: "Docker Installation (External Nginx)"
3
+ description: "Install NocoBase with Docker and use an external Nginx container as the entry point."
4
+ keywords: "Docker,NocoBase,Nginx,installation,reverse proxy"
5
+ ---
6
+
7
+ # Docker Installation (External Nginx)
8
+
9
+ In this setup, the NocoBase app container and the Nginx container run separately. You can start with [Docker Installation (Built-in Nginx)](./docker.mdx) and then switch the entry service to an external Nginx container.
10
+
11
+ ## When to use this setup
12
+
13
+ - You want to deploy NocoBase and the web server separately
14
+ - You want to manage the Nginx config and exposed ports yourself
15
+ - You want to expose only the proxy container to the public network
16
+
17
+ ## docker-compose.yml example
18
+
19
+ If you need the `full` image, replace `latest-no-nginx` with `latest-full-no-nginx`.
20
+
21
+ The `13000:80` mapping is only for convenient local testing, so it does not occupy the standard host ports directly. In production, you usually do not keep using `13000:80`; instead, let the external Nginx container map directly to the host `80` and `443` ports.
22
+ ```yml
23
+ networks:
24
+ nocobase:
25
+ driver: bridge
26
+
27
+ services:
28
+ app:
29
+ image: nocobase/nocobase:latest-no-nginx
30
+ restart: always
31
+ depends_on:
32
+ - postgres
33
+ networks:
34
+ - nocobase
35
+ environment:
36
+ - APP_KEY=your-secret-key
37
+ - DB_DIALECT=postgres
38
+ - DB_HOST=postgres
39
+ - DB_PORT=5432
40
+ - DB_DATABASE=nocobase
41
+ - DB_USER=nocobase
42
+ - DB_PASSWORD=nocobase
43
+ - TZ=Etc/UTC
44
+ - NOCOBASE_EXTRACT_CLIENT_ASSETS=true
45
+ - NOCOBASE_PROXY_PROVIDER=nginx
46
+ - NOCOBASE_PROXY_STORAGE_PATH=/app/nocobase/storage
47
+ - NOCOBASE_PROXY_UPSTREAM_HOST=app
48
+ volumes:
49
+ - ./storage:/app/nocobase/storage
50
+
51
+ nginx:
52
+ image: nginx:latest
53
+ restart: always
54
+ depends_on:
55
+ - app
56
+ networks:
57
+ - nocobase
58
+ volumes:
59
+ - ./storage:/app/nocobase/storage
60
+ command: >
61
+ /bin/sh -c '
62
+ while [ ! -f /app/nocobase/storage/.nocobase/proxy/nginx/nocobase.conf ]; do
63
+ echo "waiting for nocobase.conf..."
64
+ sleep 1
65
+ done
66
+ rm -f /etc/nginx/conf.d/default.conf
67
+ ln -sf /app/nocobase/storage/.nocobase/proxy/nginx/nocobase.conf /etc/nginx/conf.d/default.conf
68
+ nginx -g "daemon off;"
69
+ '
70
+ ports:
71
+ # This is only a local testing example.
72
+ - "13000:80"
73
+ # In production, usually change it to:
74
+ # - "80:80"
75
+ # - "443:443"
76
+
77
+ postgres:
78
+ image: postgres:16
79
+ restart: always
80
+ command: postgres -c wal_level=logical
81
+ environment:
82
+ POSTGRES_USER: nocobase
83
+ POSTGRES_DB: nocobase
84
+ POSTGRES_PASSWORD: nocobase
85
+ volumes:
86
+ - ./storage/db/postgres:/var/lib/postgresql/data
87
+ networks:
88
+ - nocobase
89
+ ```
90
+
91
+ ## Key points
92
+
93
+ - `NOCOBASE_EXTRACT_CLIENT_ASSETS=true` extracts client assets and generates proxy config
94
+ - `NOCOBASE_PROXY_PROVIDER=nginx` tells the app to generate Nginx config
95
+ - `NOCOBASE_PROXY_UPSTREAM_HOST=app` lets the Nginx container reach the `app` service through the Compose network
96
+ - `./storage` must be mounted into both the `app` and `nginx` containers so they can share proxy config, static assets, and uploaded files
97
+ - The `nginx` container should wait until `nocobase.conf` is generated, then link it to `/etc/nginx/conf.d/default.conf` with `ln -sf`
98
+ - The generated config forwards both the `/files/` route under `APP_PUBLIC_PATH` and the root-level `/files/` route to NocoBase for authenticated file previews and downloads
99
+ - If you use an external Nginx container, let the `nginx` container handle the host port mapping. For testing, you can start with `13000:80`; in production, you usually expose the host `80` and `443` ports directly, while the `app` service does not need to expose its port to the host
100
+
101
+ ## If you use a local host Nginx
102
+
103
+ If your Nginx is installed directly on the host instead of running in a Docker container, it is better to use a separate `docker-compose.yml`. In this setup, the `app` service must expose a host port directly, and the proxy-related environment variables should use host-side values.
104
+
105
+ You can use a `docker-compose.yml` like this:
106
+
107
+ ```yml
108
+ networks:
109
+ nocobase:
110
+ driver: bridge
111
+
112
+ services:
113
+ app:
114
+ image: nocobase/nocobase:latest-no-nginx
115
+ restart: always
116
+ depends_on:
117
+ - postgres
118
+ networks:
119
+ - nocobase
120
+ environment:
121
+ - APP_KEY=your-secret-key
122
+ - DB_DIALECT=postgres
123
+ - DB_HOST=postgres
124
+ - DB_PORT=5432
125
+ - DB_DATABASE=nocobase
126
+ - DB_USER=nocobase
127
+ - DB_PASSWORD=nocobase
128
+ - TZ=Etc/UTC
129
+ - NOCOBASE_EXTRACT_CLIENT_ASSETS=true
130
+ - NOCOBASE_PROXY_PROVIDER=nginx
131
+ - NOCOBASE_PROXY_STORAGE_PATH=/path/to/your-project/storage
132
+ - NOCOBASE_PROXY_UPSTREAM_HOST=127.0.0.1
133
+ - NOCOBASE_PROXY_UPSTREAM_PORT=13000
134
+ volumes:
135
+ - ./storage:/app/nocobase/storage
136
+ ports:
137
+ - "13000:13000"
138
+
139
+ postgres:
140
+ image: postgres:16
141
+ restart: always
142
+ command: postgres -c wal_level=logical
143
+ environment:
144
+ POSTGRES_USER: nocobase
145
+ POSTGRES_DB: nocobase
146
+ POSTGRES_PASSWORD: nocobase
147
+ volumes:
148
+ - ./storage/db/postgres:/var/lib/postgresql/data
149
+ networks:
150
+ - nocobase
151
+ ```
152
+
153
+ In this variant:
154
+
155
+ - `NOCOBASE_PROXY_STORAGE_PATH` should be the absolute host path of your `storage` directory
156
+ - `NOCOBASE_PROXY_UPSTREAM_HOST` should be `127.0.0.1`
157
+ - The `app` service must keep `ports`, so the local Nginx can reach the app through `127.0.0.1:13000`
158
+
159
+ After the `app` container starts, wait for the config file to be generated, then link it into the local Nginx config directory:
160
+
161
+ ```bash
162
+ while [ ! -f ./storage/.nocobase/proxy/nginx/nocobase.conf ]; do
163
+ echo "waiting for nocobase.conf..."
164
+ sleep 1
165
+ done
166
+
167
+ sudo ln -sf "$(pwd)/storage/.nocobase/proxy/nginx/nocobase.conf" /etc/nginx/conf.d/nocobase.conf
168
+ sudo nginx -t
169
+ sudo systemctl reload nginx
170
+ ```
171
+
172
+ If your host Nginx does not use the `conf.d` directory, replace the link target with your own config path. Usually it is safer to keep `nocobase.conf` as a file included from the `http {}` context instead of copying its content manually.
173
+
174
+ If you maintain Nginx yourself instead of using the generated config, make sure `/files/` and the corresponding route under `APP_PUBLIC_PATH` are forwarded to NocoBase before the SPA fallback rules. See [Nginx Reverse Proxy](../../nocobase-cli/production/reverse-proxy/nginx.md) for a complete example.
175
+
176
+ ## Related links
177
+
178
+ - [Docker Installation (Built-in Nginx)](./docker.mdx) — Start with the single-container setup
179
+ - [Nginx Static Resource Proxy](../deployment/static-resource-proxy/nginx.md) — Learn more about the generated Nginx config
@@ -617,4 +617,121 @@ Open [http://localhost:13000](http://localhost:13000) in your browser. The initi
617
617
 
618
618
  After logging in for the first time, please change the default password promptly to ensure system security.
619
619
 
620
- :::
620
+ :::
621
+
622
+ ## 5. Production deployment
623
+
624
+ If you use the built-in Nginx image, it is usually better not to expose `13000` directly to the public internet. A more common setup is to keep the container port available only on the host and let the host Nginx handle the domain, HTTPS, and reverse proxy.
625
+
626
+ ### Proxy the root path with Nginx
627
+
628
+ The following config proxies domain requests to `http://127.0.0.1:13000/`:
629
+
630
+ ```nginx
631
+ server {
632
+ listen 80;
633
+ server_name your_domain.com; # Replace your_domain.com with your domain
634
+
635
+ location / {
636
+ proxy_pass http://127.0.0.1:13000/;
637
+ proxy_http_version 1.1;
638
+
639
+ proxy_set_header Upgrade $http_upgrade;
640
+ proxy_set_header Connection $connection_upgrade;
641
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
642
+ proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
643
+ proxy_set_header Host $final_host;
644
+ proxy_set_header Referer $http_referer;
645
+ proxy_set_header User-Agent $http_user_agent;
646
+
647
+ add_header Cache-Control "no-cache, no-store" always;
648
+ proxy_cache_bypass $http_upgrade;
649
+
650
+ proxy_connect_timeout 600;
651
+ proxy_send_timeout 600;
652
+ proxy_read_timeout 600;
653
+ send_timeout 600;
654
+ proxy_buffering off;
655
+ }
656
+ }
657
+ ```
658
+
659
+ If you also want to enable HTTPS, configure `443` and the certificate on the host Nginx. The NocoBase container does not need to handle certificates separately.
660
+
661
+ The `location /` block in this root-path configuration also proxies `/api/`, `/ws`, and `/files/`. If you split static assets from application routes, make sure `/files/` is still forwarded to NocoBase and is not handled as a static directory.
662
+
663
+ ### Subpath deployment
664
+
665
+ If you want to deploy the app under a subpath, such as `https://your_domain.com/nocobase/`, configure the `APP_PUBLIC_PATH` environment variable first:
666
+
667
+ ```diff
668
+ services:
669
+ app:
670
+ image: nocobase/nocobase:latest
671
+ environment:
672
+ + - APP_PUBLIC_PATH=/nocobase/
673
+ ```
674
+
675
+ Keep the leading and trailing `/` in the path. After this is configured, the app URL becomes `http://127.0.0.1:13000/nocobase/`.
676
+
677
+ Then configure the host Nginx with the same subpath proxy:
678
+
679
+ ```nginx
680
+ server {
681
+ listen 80;
682
+ server_name your_domain.com; # Replace your_domain.com with your domain
683
+
684
+ location /nocobase/ {
685
+ proxy_pass http://127.0.0.1:13000/nocobase/;
686
+ proxy_http_version 1.1;
687
+
688
+ proxy_set_header Upgrade $http_upgrade;
689
+ proxy_set_header Connection $connection_upgrade;
690
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
691
+ proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
692
+ proxy_set_header Host $final_host;
693
+ proxy_set_header Referer $http_referer;
694
+ proxy_set_header User-Agent $http_user_agent;
695
+
696
+ add_header Cache-Control "no-cache, no-store" always;
697
+ proxy_cache_bypass $http_upgrade;
698
+
699
+ proxy_connect_timeout 600;
700
+ proxy_send_timeout 600;
701
+ proxy_read_timeout 600;
702
+ send_timeout 600;
703
+ proxy_buffering off;
704
+ }
705
+
706
+ # Keep compatibility with root-level file access URLs.
707
+ location ^~ /files/ {
708
+ proxy_pass http://127.0.0.1:13000;
709
+ proxy_http_version 1.1;
710
+
711
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
712
+ proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
713
+ proxy_set_header Host $final_host;
714
+ proxy_set_header Referer $http_referer;
715
+ proxy_set_header User-Agent $http_user_agent;
716
+
717
+ add_header Cache-Control "no-cache, no-store" always;
718
+
719
+ proxy_connect_timeout 600;
720
+ proxy_send_timeout 600;
721
+ proxy_read_timeout 600;
722
+ send_timeout 600;
723
+ }
724
+ }
725
+ ```
726
+
727
+ Keep these points in mind:
728
+
729
+ - `APP_PUBLIC_PATH` and the path in `proxy_pass` must stay consistent. If either side misses `/nocobase/`, static assets and routing will usually not work correctly
730
+ - `/nocobase/files/` is forwarded by `location /nocobase/`; the compatible root-level `/files/` route must be forwarded to NocoBase separately
731
+
732
+ ### Other options
733
+
734
+ If you do not want to use the built-in Nginx, you can also use one of these separate proxy setups:
735
+
736
+ - [Docker Installation (External Nginx)](./docker-nginx.mdx)
737
+ - [Docker Installation (External Caddy)](./docker-caddy.mdx)
@@ -86,6 +86,39 @@ API_BASE_PATH=/api/
86
86
 
87
87
  ### API_BASE_URL
88
88
 
89
+ Base URL the frontend uses to access the NocoBase API. Empty by default, which means the same-origin `${APP_PUBLIC_PATH}api/` is used.
90
+
91
+ ```bash
92
+ API_BASE_URL=
93
+ ```
94
+
95
+ Only set it to the full API address when the pages and the API service are on different origins (different protocol, domain, or port):
96
+
97
+ ```bash
98
+ API_BASE_URL=https://api.example.com/api/
99
+ ```
100
+
101
+ :::warning{title="Cross-origin deployments"}
102
+ NocoBase uses cookies to maintain login state and to authorize [stable file URLs](../../file-manager/stable-url.md). When `API_BASE_URL` points to a different origin than the pages:
103
+
104
+ - The page origin must be added to [`CORS_ORIGIN_WHITELIST`](#cors_origin_whitelist). Otherwise the browser ignores `Set-Cookie` in API responses, the login cookie is never stored, and cookie-dependent features such as file preview and download fail with `403`.
105
+ - Cookies are stored per `hostname`. If the pages and the API use entirely different domains, requests to `/files/` stable URLs from the page domain will not carry the login cookie stored under the API domain, so file access still fails.
106
+
107
+ Prefer serving the pages and the API from the same origin through a reverse proxy and leaving `API_BASE_URL` empty.
108
+ :::
109
+
110
+ ### CORS_ORIGIN_WHITELIST
111
+
112
+ Whitelist of origins allowed to access the API cross-origin with credentials (cookies). Multiple origins are separated by commas. Empty by default.
113
+
114
+ ```bash
115
+ CORS_ORIGIN_WHITELIST=https://www.example.com,https://admin.example.com
116
+ ```
117
+
118
+ - When not configured, only same-origin requests are treated as trusted; cross-origin requests can still call the API anonymously, but the browser is not allowed to read or write cookies for them.
119
+ - When configured, whitelisted origins receive an exact `Access-Control-Allow-Origin` echo and `Access-Control-Allow-Credentials: true`, which lets the browser send and store login cookies on cross-origin requests.
120
+ - The sign-in API validates the request `Origin` / `Referer`; cross-origin sign-in requests from origins outside the whitelist are rejected with `403`.
121
+
89
122
  ### CLUSTER_MODE
90
123
 
91
124
  > `v1.6.0+`
@@ -349,15 +382,17 @@ TELEMETRY_TRACE_PROCESSOR=console
349
382
 
350
383
  ### SERVER_REQUEST_WHITELIST
351
384
 
352
- Whitelist of allowed targets for server-initiated outbound HTTP requests, used to prevent SSRF (Server-Side Request Forgery) attacks. Accepts a comma-separated list of exact IPs, CIDR ranges, exact hostnames, and single-level wildcard subdomains.
385
+ Whitelist of allowed targets for outbound HTTP requests initiated by the NocoBase server. Accepts a comma-separated list of exact IPs, CIDR ranges, exact hostnames, and single-level wildcard subdomains.
353
386
 
354
387
  ```bash
355
- SERVER_REQUEST_WHITELIST=1.2.3.4,10.0.0.0/8,api.example.com,*.trusted.com
388
+ SERVER_REQUEST_WHITELIST=api.example.com,*.trusted.com,10.0.0.0/8,127.0.0.1
356
389
  ```
357
390
 
358
- **Applies to**: Workflow "HTTP Request" nodes and Custom Request action buttons. Relative-path requests (calls to the NocoBase API itself) are not affected.
391
+ **Applies to**: Workflow "HTTP Request" nodes, Custom Request action buttons, AI services, and other server-side requests. Relative-path requests (calls to the NocoBase API itself) are not affected.
359
392
 
360
- **When not set**: All `http`/`https` outbound requests are allowed (existing behaviour). **When set**: Only requests whose host matches a whitelist entry are permitted; non-matching requests will raise an error.
393
+ **When not set**: All `http` / `https` outbound requests are allowed to keep existing behavior. However, if the target is a loopback, private, link-local, or metadata address, or if a domain resolves to one of these addresses, the server logs a warning.
394
+
395
+ **When set**: Only requests whose host matches a whitelist entry are permitted; non-matching requests will raise an error. Future versions may gradually tighten the default behavior. If your deployment needs to access internal services, configure an explicit whitelist in advance.
361
396
 
362
397
  Supported formats:
363
398
 
@@ -365,9 +400,17 @@ Supported formats:
365
400
  | --- | --- | --- |
366
401
  | Exact IPv4 | `1.2.3.4` | That IP only |
367
402
  | IPv4 CIDR | `10.0.0.0/8` | All IPs in the subnet |
403
+ | Exact IPv6 | `::1` | That IP only |
404
+ | IPv6 CIDR | `fc00::/7` | All IPs in the subnet |
368
405
  | Exact hostname | `api.example.com` | That hostname only |
369
406
  | Wildcard subdomain | `*.example.com` | One subdomain level, e.g. `foo.example.com`; does **not** match `example.com` or `a.b.example.com` |
370
407
 
408
+ :::warning Note
409
+
410
+ If a domain is configured in the whitelist, the whitelist check uses the host in the request URL. In other words, after `internal.example.com` is configured, it is treated as explicitly allowed even if the domain resolves to `127.0.0.1` or a private address.
411
+
412
+ :::
413
+
371
414
  ## Experimental Environment Variables
372
415
 
373
416
  ### APPEND_PRESET_LOCAL_PLUGINS
@@ -28,7 +28,7 @@ features:
28
28
  link: /ai/install-nocobase-app
29
29
  - title: Tutorials
30
30
  details: Step-by-step tutorials to build real projects with NocoBase from scratch.
31
- link: /tutorials/v2/
31
+ link: /tutorials/
32
32
 
33
33
  - title: AI
34
34
  details: An AI-powered new way to get started - use natural language to build, use, and develop.
@@ -0,0 +1,107 @@
1
+ ---
2
+ pkg: "@nocobase/plugin-block-comment"
3
+ title: "Comment Block"
4
+ description: "Comment block: view and create comments in record details, pop-ups, and similar scenarios, with field mapping, pagination, data scope, default sorting, and auto jump to last page."
5
+ keywords: "Comment Block,CommentBlock,comment collection,field mapping,data scope,default sorting,interface builder,NocoBase"
6
+ ---
7
+
8
+ # Comment Block
9
+
10
+ ## Introduction
11
+
12
+ The Comment block adds commenting capabilities to business records. You can add it to detail pages or pop-ups for tasks, articles, tickets, customers, and other records, so users can view, reply to, and create comments around the current record.
13
+
14
+ ![](https://static-docs.nocobase.com/Comments-07-01-2026_12_02_PM.png)
15
+
16
+ :::tip
17
+
18
+ The Comment block does not create a collection by itself. Before using it, prepare a collection for storing comments and configure fields such as comment content, commenter, comment owner, and comment time.
19
+
20
+ :::
21
+
22
+ ## Add a block
23
+
24
+ The Comment block is usually added to the detail page or pop-up of a business record.
25
+
26
+ ![](https://static-docs.nocobase.com/Comments-07-01-2026_12_03_PM.png)
27
+
28
+ 1. Open the target record detail page or pop-up
29
+ 2. Click "Add block"
30
+ 3. Select "Comment"
31
+ 4. Select the collection used to store comments
32
+ 5. Complete field mapping as prompted
33
+
34
+ If the Comment block is created from an association, NocoBase will try to automatically identify the comment owner field and the current record value based on the current association. In this case, "Comment owner field" and "Comment owner field value" are filled automatically, and usually do not need manual configuration.
35
+
36
+ ![](https://static-docs.nocobase.com/Comments-07-01-2026_12_04_PM.png)
37
+
38
+ If the block is created directly from the comment collection, you need to manually configure the comment owner field and value.
39
+
40
+ ![](https://static-docs.nocobase.com/Comments-07-01-2026_12_03_PM%20(1).png)
41
+
42
+ ## Field mapping
43
+
44
+ The Comment block uses "Field mapping" to know how each comment should be displayed and saved.
45
+
46
+ | Configuration | Description |
47
+ | --- | --- |
48
+ | Comment content field | Select the field used to store the comment body. |
49
+ | Commenter field | Select a many-to-one field associated with the users collection. |
50
+ | Comment owner field | Select the field used to store the current business record identifier. |
51
+ | Comment owner field value | Specify the current business record value, such as `{{ ctx.popup.record.id }}`. |
52
+ | Comment date field | Select the comment time field, used for display and default sorting. |
53
+
54
+ ### Comment owner field
55
+
56
+ "Comment owner field" is used to filter comments for the current record, and is also written when a new comment is created.
57
+
58
+ When selected manually, the dropdown only shows ordinary scalar fields and does not show association fields. Common configurations are:
59
+
60
+ | Business collection | Owner field in comment collection | Comment owner field value |
61
+ | --- | --- | --- |
62
+ | Tasks | `taskId` | `{{ ctx.popup.record.id }}` |
63
+ | Articles | `postId` | `{{ ctx.popup.record.id }}` |
64
+ | Tickets | `ticketId` | `{{ ctx.popup.record.id }}` |
65
+
66
+ If the current record uses a unique identifier other than `id`, change "Comment owner field value" to the corresponding field, such as `{{ ctx.popup.record.uuid }}`.
67
+
68
+ ### Automatic mapping from associations
69
+
70
+ If the block is created from an association of the business record, the Comment block prioritizes the foreign key field of that association as the comment owner field, and uses the current record value as the comment owner field value.
71
+
72
+ ![](https://static-docs.nocobase.com/Comments-07-01-2026_12_04_PM.png)
73
+
74
+ For example, if there is a one-to-many association between the task collection and the task comment collection, and the foreign key field in the task comment collection is `taskId`, then when you add a Comment block from the association in the task detail page, the block automatically uses:
75
+
76
+ - Comment owner field: `taskId`
77
+ - Comment owner field value: the identifier of the current task record
78
+
79
+ This approach is suitable for most scenarios and reduces manual configuration errors.
80
+
81
+ ## Block settings
82
+
83
+ ![](https://static-docs.nocobase.com/Comments-07-01-2026_12_07_PM.png)
84
+
85
+ ### Page size
86
+
87
+ Set how many comments are displayed on each page. Available values include `5`, `10`, `20`, `50`, `100`, and `200`.
88
+
89
+ ### Data scope
90
+
91
+ Set the data filtering scope for the comment list. You can add more conditions here, such as showing only comments that match certain status or permission conditions.
92
+
93
+ For more details, see [Set data scope](../block-settings/data-scope.md).
94
+
95
+ ### Default sorting rule
96
+
97
+ Set the default sorting rule for the comment list. Usually, you can sort by the comment date field in ascending or descending order.
98
+
99
+ If no default sorting rule is configured separately, the Comment block prioritizes the "Comment date field" as the default sorting field.
100
+
101
+ For more details, see [Set sorting rule](../block-settings/sorting-rule.md).
102
+
103
+ ### Auto jump to last page
104
+
105
+ Disabled by default. When disabled, the Comment block stays on the first page after opening.
106
+
107
+ When enabled, the Comment block jumps to the last page on first load. This is suitable when you want users to see the latest comments first.
@@ -16,12 +16,9 @@ Edit mode:
16
16
  ![20251023215951](https://static-docs.nocobase.com/20251023215951.png)
17
17
 
18
18
 
19
- ## Layout Template
19
+ ## UI Layout
20
20
 
21
- NocoBase ships with a default layout template: navigation on the top and left, and a content area on the right.
22
-
23
-
24
- ![未命名.002](https://static-docs.nocobase.com/未命名.002.jpeg)
21
+ NocoBase provides desktop and mobile layouts. The desktop layout works well for standard administration and adapts its navigation and page content on phones. The mobile layout provides separate mobile navigation and page configuration. See [UI Layout](./ui-layout/index.md) for details.
25
22
 
26
23
 
27
24
  ## Configuration Options
@@ -55,4 +52,8 @@ Action configuration options:
55
52
  Table column configuration options:
56
53
 
57
54
 
58
- ![20251023221814](https://static-docs.nocobase.com/20251023221814.png)
55
+ ![20251023221814](https://static-docs.nocobase.com/20251023221814.png)
56
+
57
+ ## Related links
58
+
59
+ - [UI Layout](./ui-layout/index.md) — Learn about desktop and mobile layouts
@@ -0,0 +1,97 @@
1
+ ---
2
+ title: "Desktop Layout"
3
+ description: "Learn about the navigation structure, page building, route management, and narrow-screen responsive behavior of the NocoBase desktop layout."
4
+ keywords: "desktop layout,UI layout,narrow-screen responsive,page building,route management,UI Editor,NocoBase"
5
+ ---
6
+
7
+ # Desktop Layout
8
+
9
+ In NocoBase, the **desktop layout** is the default application interface. It is designed for data management, form entry, business configuration, and everyday work on a computer, and can also be used on mobile devices.
10
+
11
+ The desktop layout is available at `/admin` by default. If the application has its own access prefix, the actual URL automatically includes that prefix.
12
+
13
+ ![20260715224020](https://static-docs.nocobase.com/20260715224020.png)
14
+
15
+ ![20260715224603](https://static-docs.nocobase.com/20260715224603.png)
16
+
17
+ ## Build a page
18
+
19
+ ### Step 1: Open the desktop layout
20
+
21
+ Visit `/admin` to open the desktop layout. After signing in, the application usually opens this layout directly.
22
+
23
+ ![20260715225049](https://static-docs.nocobase.com/20260715225049.png)
24
+
25
+ ### Step 2: Open UI Editor
26
+
27
+ Click 「UI Editor」 in the upper-right corner of the page to enter UI building mode. Configuration entries then appear around menus, pages, blocks, fields, and actions.
28
+
29
+ ![20260715225155_rec_](https://static-docs.nocobase.com/20260715225155_rec_.gif)
30
+
31
+ ### Step 3: Create menus and pages
32
+
33
+ You can add groups, pages, or links in the navigation area, and enable tabs for a page. After creating a page, open it and add the blocks you need.
34
+
35
+ Page content is built in the same way as other interfaces: add [blocks](../blocks/index.md) first, then configure [fields](../fields/index.md) and [actions](../actions/index.md) for your business needs.
36
+
37
+ ![20260715225316_rec_](https://static-docs.nocobase.com/20260715225316_rec_.gif)
38
+
39
+ ### Step 4: Configure page content
40
+
41
+ Add table, form, details, filter, or other blocks to the page, then adjust the fields, actions, and arrangement of the blocks. Each change is reflected directly on the current page.
42
+
43
+ ![20260715225424_rec_](https://static-docs.nocobase.com/20260715225424_rec_.gif)
44
+
45
+ ## Manage routes and menus
46
+
47
+ When you add a page or link in the navigation area, it also appears in the [Route Manager](../../routes/index.md). Changes made in the Route Manager also update the menu.
48
+
49
+ The desktop layout supports these common route types:
50
+
51
+ - **Group** — Organizes multiple pages and links under the same navigation group.
52
+ - **Page** — Opens a page where you can continue adding blocks.
53
+ - **Link** — Opens an internal or external URL.
54
+ - **Tab** — Organizes multiple content tabs within a page.
55
+
56
+ In the Route Manager, you can add, edit, delete, show, or hide routes. It is often the more convenient place to reorganize the entire menu structure.
57
+
58
+ ![20260715225711_rec_](https://static-docs.nocobase.com/20260715225711_rec_.gif)
59
+
60
+ ## Responsive behavior on narrow screens
61
+
62
+ The desktop layout can be used directly on a phone or in a narrow browser window. In narrow-screen mode, it still uses the same desktop routes and pages. It does not automatically switch to the mobile layout.
63
+
64
+ ### Layout changes
65
+
66
+ The navigation menu collapses, and top actions move into a more compact entry. Page margins and spacing between blocks also shrink, while the content area adapts to the visible height of the mobile browser.
67
+
68
+ UI Editor is not available on narrow screens. To change menus or pages, you need to return to a desktop browser and make the changes there.
69
+
70
+ ![20260715224603](https://static-docs.nocobase.com/20260715224603.png)
71
+
72
+ ### How page content adapts
73
+
74
+ Common components also adjust their interactions for narrow screens, making them easier to use on a phone. For instance, multi-column blocks switch to a single column, tables allow horizontal scrolling for columns that extend beyond the screen, and pagination and action entries become more compact. Selection, date and time, filter, and subpage interactions also use forms that are easier to operate on a phone.
75
+
76
+ :::tip Desktop responsiveness and the mobile layout
77
+
78
+ If you only access the application from a phone occasionally, the responsive desktop layout is usually enough. If you need separate bottom navigation, mobile pages, and mobile workflows, build a [mobile layout](./mobile.md) as well.
79
+
80
+ :::
81
+
82
+ ## Recommendations
83
+
84
+ - Use the desktop layout by default for work performed mainly on a computer.
85
+ - Finish building the page on a wide screen, then narrow the window to check its responsive behavior.
86
+ - If a page contains many table columns or horizontal actions, keep only the necessary content to reduce the workload on smaller screens.
87
+ - If the desktop and mobile workflows differ significantly, separate pages are usually clearer.
88
+
89
+ ## Related links
90
+
91
+ - [UI layout overview](./index.md) — Compare desktop and mobile layout use cases
92
+ - [Mobile layout](./mobile.md) — Build separate mobile navigation and pages
93
+ - [Blocks](../blocks/index.md) — Add and configure blocks on a page
94
+ - [Fields](../fields/index.md) — Configure fields in tables, forms, and details blocks
95
+ - [Actions](../actions/index.md) — Configure actions on pages and blocks
96
+ - [Route Manager](../../routes/index.md) — Manage desktop menus and routes in one place
97
+ - [Permission configuration](../../users-permissions/acl/permissions.md) — Control which desktop routes each role can access
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: "UI Layout"
3
+ description: "An overview of NocoBase UI layouts, including desktop and mobile layout features, use cases, and how their configurations relate."
4
+ keywords: "UI layout,desktop layout,mobile layout,responsive layout,mobile pages,NocoBase"
5
+ ---
6
+
7
+ # UI Layout
8
+
9
+ NocoBase provides desktop and mobile layouts. Both layouts support UI building, so you can create pages and configure blocks, fields, and actions within them.
10
+
11
+ The desktop layout is the default choice and works well for everyday administration and data processing on a computer. If you need dedicated navigation and pages for mobile devices, you can build a mobile layout as well.
12
+
13
+ ## Desktop layout
14
+
15
+ The [desktop layout](./desktop.md) is available at `/admin` by default. It consists of top navigation, side navigation, and a page content area, making it suitable for common business scenarios such as managing tables, entering form data, and viewing records.
16
+
17
+ The desktop layout also supports responsive behavior on narrow screens. When a page is displayed on a smaller screen, the navigation, spacing, and common components adjust to fit while continuing to use the existing desktop menus and pages.
18
+
19
+ ![20260715224020](https://static-docs.nocobase.com/20260715224020.png)
20
+
21
+ ## Mobile layout
22
+
23
+ The [mobile layout](./mobile.md) is available at `/mobile` by default. It uses a bottom tab bar for primary navigation and provides separate mobile pages, links, and page tabs.
24
+
25
+ The mobile layout works well for frequent phone-based tasks such as on-site data entry, mobile approvals, task processing, and data lookup. You can build and preview pages in a desktop browser, then use a QR code to check the result on a physical device.
26
+
27
+ ![20260715230725](https://static-docs.nocobase.com/20260715230725.png)
28
+
29
+ ## Which layout should I use?
30
+
31
+ Use the desktop layout by default.
32
+
33
+ | I want to... | Recommended layout |
34
+ | --- | --- |
35
+ | Work mainly on a computer and occasionally access pages from a phone | [Desktop layout](./desktop.md) |
36
+ | Design separate navigation, pages, and workflows for phones | [Mobile layout](./mobile.md) |
37
+ | Provide a complete experience for both computers and mobile devices | Build the desktop and mobile layouts separately |
38
+
39
+ ## How the configurations relate
40
+
41
+ The desktop and mobile layouts use the same data sources and business data. You can use the same data table to build separate pages for different devices.
42
+
43
+ Menus, routes, and page configurations are maintained separately. Changes to a desktop page do not automatically update its mobile counterpart, and changes to mobile navigation do not affect desktop navigation. [Route access permissions](../../users-permissions/acl/permissions.md) also need to be configured separately for each layout.
44
+
45
+ ## Related links
46
+
47
+ - [Desktop layout](./desktop.md) — Build desktop pages and learn how they behave on narrow screens
48
+ - [Mobile layout](./mobile.md) — Build separate mobile navigation and pages
49
+ - [Route Manager](../../routes/index.md) — Manage desktop and mobile pages, links, and menus
50
+ - [Permission configuration](../../users-permissions/acl/permissions.md) — Control which menus and pages each role can access