plugin-build-guide-block 1.0.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/README.md +74 -0
- package/client.d.ts +2 -0
- package/client.js +1 -0
- package/dist/client/index.js +10 -0
- package/dist/externalVersion.js +26 -0
- package/dist/index.js +48 -0
- package/dist/locale/en-US.json +27 -0
- package/dist/locale/vi-VN.json +27 -0
- package/dist/locale/zh-CN.json +27 -0
- package/dist/server/actions/build.js +207 -0
- package/dist/server/actions/getHtml.js +53 -0
- package/dist/server/collections/ai-build-guide-spaces.js +79 -0
- package/dist/server/index.js +42 -0
- package/dist/server/plugin.js +84 -0
- package/package.json +23 -0
- package/server.d.ts +2 -0
- package/server.js +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# @nocobase/plugin-build-guide-block
|
|
2
|
+
|
|
3
|
+
Plugin tạo **User Guide (Hướng dẫn sử dụng)** dạng HTML từ tài liệu đính kèm bằng LLM, hiển thị dưới dạng block trên trang NocoBase.
|
|
4
|
+
|
|
5
|
+
## Tính năng
|
|
6
|
+
|
|
7
|
+
### Quản lý Space
|
|
8
|
+
- **Tạo Space**: Mỗi Space đại diện cho một bộ hướng dẫn, bao gồm tiêu đề, dịch vụ LLM, model, system prompt, và tài liệu đính kèm (tối đa 10 file).
|
|
9
|
+
- **Build bất đồng bộ**: Nhấn "Build" sẽ gửi tài liệu tới LLM để sinh HTML. Quá trình chạy nền — không block request, tránh timeout.
|
|
10
|
+
- **Trạng thái**: `draft` → `building` → `completed` | `error`. Build log hiển thị trực tiếp trên bảng quản lý.
|
|
11
|
+
- **CRUD đầy đủ**: Tạo, sửa, xóa Space (có xác nhận trước khi xóa).
|
|
12
|
+
|
|
13
|
+
### User Guide Block
|
|
14
|
+
- Thêm block **"User Guide"** vào bất kỳ trang NocoBase nào qua menu "Add Block".
|
|
15
|
+
- Chọn Space (chỉ hiển thị các Space đã `completed`) trong cài đặt block.
|
|
16
|
+
- HTML được sanitize ở cả server (sanitize-html) và client (DOMPurify) để đảm bảo an toàn.
|
|
17
|
+
|
|
18
|
+
### Bảo mật
|
|
19
|
+
- **ACL**: Chỉ admin với snippet `pm.ai-build-guide` mới CRUD/build được. User `loggedIn` chỉ đọc được HTML (`getHtml`).
|
|
20
|
+
- **HTML Sanitization**: Hai lớp bảo vệ — server-side (sanitize-html) + client-side (DOMPurify).
|
|
21
|
+
- **Status guard**: API `getHtml` chỉ trả HTML khi Space ở trạng thái `completed`.
|
|
22
|
+
|
|
23
|
+
### Đa ngôn ngữ
|
|
24
|
+
- Hỗ trợ 3 ngôn ngữ: English (`en-US`), Tiếng Việt (`vi-VN`), 中文 (`zh-CN`).
|
|
25
|
+
|
|
26
|
+
## Kiến trúc
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
src/
|
|
30
|
+
├── server/
|
|
31
|
+
│ ├── plugin.ts # Đăng ký actions, ACL
|
|
32
|
+
│ ├── actions/
|
|
33
|
+
│ │ ├── build.ts # Build async: đọc docs → gọi LLM → sanitize → lưu HTML
|
|
34
|
+
│ │ └── getHtml.ts # Trả raw HTML (Content-Type: text/html)
|
|
35
|
+
│ └── collections/
|
|
36
|
+
│ └── ai-build-guide-spaces.ts # Collection definition
|
|
37
|
+
├── client/
|
|
38
|
+
│ ├── plugin.tsx # Đăng ký settings page, block initializer, FlowEngine model
|
|
39
|
+
│ ├── UserGuideBlock.tsx # Render HTML với DOMPurify
|
|
40
|
+
│ ├── UserGuideManager.tsx # Trang quản lý CRUD
|
|
41
|
+
│ ├── UserGuideBlockInitializer.tsx
|
|
42
|
+
│ ├── UserGuideBlockProvider.tsx
|
|
43
|
+
│ ├── schemas/
|
|
44
|
+
│ │ └── spacesSchema.ts # UI schema cho bảng + form
|
|
45
|
+
│ ├── components/
|
|
46
|
+
│ │ ├── BuildButton.tsx # Nút Build với auto-refresh
|
|
47
|
+
│ │ ├── LLMServiceSelect.tsx
|
|
48
|
+
│ │ ├── ModelSelect.tsx
|
|
49
|
+
│ │ └── StatusTag.tsx
|
|
50
|
+
│ └── models/
|
|
51
|
+
│ └── UserGuideBlockModel.ts # FlowEngine block model
|
|
52
|
+
└── locale/
|
|
53
|
+
├── en-US.json
|
|
54
|
+
├── vi-VN.json
|
|
55
|
+
└── zh-CN.json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Dependencies
|
|
59
|
+
|
|
60
|
+
| Package | Loại | Mục đích |
|
|
61
|
+
|---------|------|----------|
|
|
62
|
+
| `sanitize-html` | dependency | Sanitize HTML phía server |
|
|
63
|
+
| `dompurify` | dependency | Sanitize HTML phía client |
|
|
64
|
+
| `@nocobase/plugin-ai` | peerDependency | Kết nối LLM service |
|
|
65
|
+
| `@nocobase/plugin-file-manager` | peerDependency | Đọc file đính kèm |
|
|
66
|
+
| `@langchain/core` | peerDependency | Message types cho LLM |
|
|
67
|
+
| `axios` | peerDependency | Fetch file từ URL |
|
|
68
|
+
|
|
69
|
+
## Cách sử dụng
|
|
70
|
+
|
|
71
|
+
1. Bật plugin trong Plugin Manager.
|
|
72
|
+
2. Vào **Settings → Build Guide Block** để tạo Space.
|
|
73
|
+
3. Chọn LLM Service, Model, upload tài liệu, nhấn **Build**.
|
|
74
|
+
4. Khi status = `completed`, vào trang bất kỳ → **Add Block → User Guide** → chọn Space.
|
package/client.d.ts
ADDED
package/client.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/client/index.js');
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@formily/core"),require("react-i18next"),require("@nocobase/client"),require("react"),require("@nocobase/flow-engine"),require("@formily/react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-build-guide-block",["@formily/core","react-i18next","@nocobase/client","react","@nocobase/flow-engine","@formily/react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-build-guide-block"]=t(require("@formily/core"),require("react-i18next"),require("@nocobase/client"),require("react"),require("@nocobase/flow-engine"),require("@formily/react"),require("@ant-design/icons"),require("antd")):e["plugin-build-guide-block"]=t(e["@formily/core"],e["react-i18next"],e["@nocobase/client"],e.react,e["@nocobase/flow-engine"],e["@formily/react"],e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,o,i,a,l){return function(){"use strict";var c={482:function(e){e.exports=a},563:function(t){t.exports=e},505:function(e){e.exports=i},772:function(e){e.exports=n},667:function(e){e.exports=o},721:function(e){e.exports=l},156:function(e){e.exports=r},238:function(e){e.exports=t}},u={};function s(e){var t=u[e];if(void 0!==t)return t.exports;var n=u[e]={exports:{}};return c[e](n,n.exports,s),n.exports}s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var p={};return!function(){s.r(p),s.d(p,{default:function(){return eB}});var e,t=s(772),n=s(156),r=s.n(n),o=s(563),i=s(721),a=s(238),l={type:"object",properties:{page:{type:"void","x-component":"Page","x-component-props":{ghost:!0},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{create:{type:"void","x-component":"Action","x-component-props":{type:"primary",title:'{{t("Create space")}}',icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-component-props":{title:'{{t("Create space")}}'},properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useCreateFormProps",properties:{title:{type:"string",title:'{{t("Title")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},llmService:{type:"string",title:'{{t("LLM Service")}}',required:!0,"x-decorator":"FormItem","x-component":"LLMServiceSelect"},model:{type:"string",title:'{{t("Model")}}',required:!0,"x-decorator":"FormItem","x-component":"ModelSelect","x-reactions":{dependencies:["llmService"],fulfill:{state:{value:"{{$deps[0] ? $self.value : undefined}}"}}}},systemPrompt:{type:"string",title:'{{t("System Prompt")}}',"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{rows:4},default:"You are an expert technical writer. Please generate a comprehensive HTML user guide based on the provided documents. Ensure the output is valid HTML and does not include Markdown syntax like ```html blocks."},documents:{type:"array",title:'{{t("Documents")}}',"x-decorator":"FormItem","x-component":"Upload.Attachment","x-component-props":{multiple:!0,action:"attachments:create",maxCount:10}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{type:"void",title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{type:"void",title:'{{t("Submit")}}',"x-component":"Action","x-use-component-props":"useCreateActionProps"}}}}}}}}}}},table:{type:"array","x-decorator":"TableBlockProvider","x-use-decorator-props":"useTableBlockProps","x-component":"TableV2","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},status:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{status:{type:"string","x-component":"StatusTag","x-read-pretty":!0}}},buildLog:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{buildLog:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{build:{type:"void","x-component":"BuildButton"},update:{type:"void",title:'{{t("Edit")}}',"x-component":"Action.Link","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-component-props":{title:'{{t("Edit space")}}'},properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useEditFormProps",properties:{title:{type:"string",title:'{{t("Title")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},llmService:{type:"string",title:'{{t("LLM Service")}}',required:!0,"x-decorator":"FormItem","x-component":"LLMServiceSelect"},model:{type:"string",title:'{{t("Model")}}',required:!0,"x-decorator":"FormItem","x-component":"ModelSelect"},systemPrompt:{type:"string",title:'{{t("System Prompt")}}',"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{rows:4}},documents:{type:"array",title:'{{t("Documents")}}',"x-decorator":"FormItem","x-component":"Upload.Attachment","x-component-props":{multiple:!0,action:"attachments:create",maxCount:10}},generatedHtml:{type:"string",title:'{{t("Generated HTML")}}',"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{rows:6},"x-read-pretty":!0},buildLog:{type:"string",title:'{{t("Build Log")}}',"x-decorator":"FormItem","x-component":"Input.TextArea","x-read-pretty":!0},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{type:"void",title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{type:"void",title:'{{t("Submit")}}',"x-component":"Action","x-use-component-props":"useUpdateActionProps"}}}}}}}}},delete:{type:"void",title:'{{t("Delete")}}',"x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{confirm:{title:'{{t("Delete")}}',content:'{{t("Are you sure you want to delete this space?")}}'}}}}}}}}}}}}},c=s(505);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,l=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){l=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(l)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var m=function(e){var o,a,l=f((0,n.useState)([]),2),u=l[0],s=l[1],p=f((0,n.useState)(!1),2),m=p[0],d=p[1],y=(0,t.useAPIClient)(),h=(0,c.useField)();return(0,n.useEffect)(function(){var e=!0;return d(!0),y.resource("ai").listLLMServices().then(function(t){if(e){var n;s(((null==t||null==(n=t.data)?void 0:n.data)||[]).map(function(e){return{label:e.title||e.name,value:e.name}}))}}).catch(function(t){e&&console.error("Failed to load LLM services:",t)}).finally(function(){e&&d(!1)}),function(){e=!1}},[y]),r().createElement(i.Select,(o=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},e),a=a={options:u,loading:m,value:h.value,onChange:function(e){var t;h.setValue(e),null==(t=h.query(".model").take())||t.setValue(void 0)}},Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(a)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(a)).forEach(function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(a,e))}),o))};function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var y=function(e){var o,a,l,u=(o=(0,n.useState)([]),function(e){if(Array.isArray(e))return e}(o)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,l=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),i.length!==t);a=!0);}catch(e){l=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(l)throw r}}return i}}(o,2)||function(e,t){if(e){if("string"==typeof e)return d(e,2);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}}(o,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=u[0],p=u[1],f=(0,t.useAPIClient)(),m=(0,c.useField)(),y=(0,c.useForm)().values.llmService;return(0,n.useEffect)(function(){var e=!0;return y?(f.resource("ai").listModels({llmService:y}).then(function(t){if(e){var n;p(((null==t||null==(n=t.data)?void 0:n.data)||[]).map(function(e){return{label:e.id||e.name,value:e.id||e.name}}))}}).catch(console.error),function(){e=!1}):void p([])},[f,y]),r().createElement(i.Select,(a=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},e),l=l={options:s,value:m.value,onChange:function(e){m.setValue(e)},disabled:!y},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(l)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(l)).forEach(function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(l,e))}),a))},h={draft:"default",building:"blue",completed:"success",error:"error"},b=function(e){var t=(0,c.useField)(),n=e.value||t.value;return n?r().createElement(i.Tag,{color:h[n]||"default"},String(n).toUpperCase()):null},g=s(482);function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function x(e,t,n,r,o,i,a){try{var l=e[i](a),c=l.value}catch(e){n(e);return}l.done?t(c):Promise.resolve(c).then(r,o)}var S=function(){var e,o,l,c=(e=(0,n.useState)(!1),function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,l=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),i.length!==t);a=!0);}catch(e){l=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(l)throw r}}return i}}(e,2)||function(e,t){if(e){if("string"==typeof e)return v(e,2);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return v(e,t)}}(e,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=c[0],s=c[1],p=(0,t.useAPIClient)(),f=i.App.useApp().message,m=(0,a.useTranslation)().t,d=(0,t.useCollectionRecordData)(),y=(0,t.useDataBlockRequest)().refresh,h=(o=function(){var e,t,n,r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){var c=[i,l];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(o){switch(o.label){case 0:if(!(null==d?void 0:d.id))return[2];s(!0),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,p.resource("aiBuildGuideSpaces").build({filterByTk:d.id})];case 2:return o.sent(),f.success(m("Build started")),setTimeout(function(){return null==y?void 0:y()},1500),[3,5];case 3:return console.error(e=o.sent()),f.error((null==e||null==(r=e.response)||null==(n=r.data)||null==(t=n.error)?void 0:t.message)||m("Build failed")),[3,5];case 4:return s(!1),[7];case 5:return[2]}})},l=function(){var e=this,t=arguments;return new Promise(function(n,r){var i=o.apply(e,t);function a(e){x(i,n,r,a,l,"next",e)}function l(e){x(i,n,r,a,l,"throw",e)}a(void 0)})},function(){return l.apply(this,arguments)});return r().createElement(i.Button,{type:"primary",icon:r().createElement(g.PlayCircleOutlined,null),loading:u,onClick:h},m("Build"))};function T(e,t,n,r,o,i,a){try{var l=e[i](a),c=l.value}catch(e){n(e);return}l.done?t(c):Promise.resolve(c).then(r,o)}function w(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){T(i,r,o,a,l,"next",e)}function l(e){T(i,r,o,a,l,"throw",e)}a(void 0)})}}function A(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){var c=[i,l];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var O=function(){var e=(0,a.useTranslation)().t;return r().createElement(t.ExtendCollectionsProvider,{collections:[{name:"aiBuildGuideSpaces",fields:[{name:"title",type:"string"},{name:"llmService",type:"string"},{name:"model",type:"string"},{name:"status",type:"string"},{name:"buildLog",type:"string"}]}]},r().createElement(t.SchemaComponent,{schema:l,components:{LLMServiceSelect:m,ModelSelect:y,StatusTag:b,BuildButton:S},scope:{t:e,useCreateFormProps:function(){return{form:(0,n.useMemo)(function(){return(0,o.createForm)()},[])}},useEditFormProps:function(){var e=(0,t.useCollectionRecordData)();return{form:(0,n.useMemo)(function(){return(0,o.createForm)({initialValues:e})},[e])}},useCancelActionProps:function(){var e=(0,t.useActionContext)().setVisible;return{type:"default",onClick:function(){e(!1)}}},useCreateActionProps:function(){var n=(0,t.useActionContext)().setVisible,r=i.App.useApp().message,o=(0,t.useDataBlockResource)(),a=(0,t.useDataBlockRequest)().refresh;return{type:"primary",onClick:function(){var t=this;return w(function(){var i;return A(this,function(l){switch(l.label){case 0:return[4,(i=t.form).submit()];case 1:return l.sent(),[4,o.create({values:i.values})];case 2:return l.sent(),a(),r.success(e("Saved successfully")),n(!1),[2]}})})()}}},useUpdateActionProps:function(){var n=(0,t.useActionContext)().setVisible,r=i.App.useApp().message,o=(0,t.useDataBlockResource)(),a=(0,t.useDataBlockRequest)().refresh,l=(0,t.useCollectionRecordData)();return{type:"primary",onClick:function(){var t=this;return w(function(){var i;return A(this,function(c){switch(c.label){case 0:return[4,(i=t.form).submit()];case 1:return c.sent(),[4,o.update({filterByTk:l.id,values:i.values})];case 2:return c.sent(),a(),r.success(e("Saved successfully")),n(!1),[2]}})})()}}},useDestroyActionProps:t.useDestroyActionProps,useTableBlockProps:function(){return{collection:"aiBuildGuideSpaces",request:{resource:"aiBuildGuideSpaces",action:"list",params:{appends:["documents"],sort:["-createdAt"]}}}}}}))};let{entries:E,setPrototypeOf:_,isFrozen:k,getPrototypeOf:C,getOwnPropertyDescriptor:N}=Object,{freeze:P,seal:I,create:D}=Object,{apply:L,construct:R}="undefined"!=typeof Reflect&&Reflect;P||(P=function(e){return e}),I||(I=function(e){return e}),L||(L=function(e,t,n){return e.apply(t,n)}),R||(R=function(e,t){return new e(...t)});let M=K(Array.prototype.forEach),j=K(Array.prototype.lastIndexOf),U=K(Array.prototype.pop),F=K(Array.prototype.push),B=K(Array.prototype.splice),z=K(String.prototype.toLowerCase),G=K(String.prototype.toString),H=K(String.prototype.match),q=K(String.prototype.replace),W=K(String.prototype.indexOf),V=K(String.prototype.trim),Y=K(Object.prototype.hasOwnProperty),$=K(RegExp.prototype.test),X=(e=TypeError,function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return R(e,n)});function K(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return L(e,t,r)}}function Z(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:z;_&&_(e,null);let r=t.length;for(;r--;){let o=t[r];if("string"==typeof o){let e=n(o);e!==o&&(k(t)||(t[r]=e),o=e)}e[o]=!0}return e}function J(e){let t=D(null);for(let[n,r]of E(e))Y(e,n)&&(Array.isArray(r)?t[n]=function(e){for(let t=0;t<e.length;t++)Y(e,t)||(e[t]=null);return e}(r):r&&"object"==typeof r&&r.constructor===Object?t[n]=J(r):t[n]=r);return t}function Q(e,t){for(;null!==e;){let n=N(e,t);if(n){if(n.get)return K(n.get);if("function"==typeof n.value)return K(n.value)}e=C(e)}return function(){return null}}let ee=P(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),et=P(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),en=P(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),er=P(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),eo=P(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),ei=P(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),ea=P(["#text"]),el=P(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),ec=P(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),eu=P(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),es=P(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),ep=I(/\{\{[\w\W]*|[\w\W]*\}\}/gm),ef=I(/<%[\w\W]*|[\w\W]*%>/gm),em=I(/\$\{[\w\W]*/gm),ed=I(/^data-[\-\w.\u00B7-\uFFFF]+$/),ey=I(/^aria-[\-\w]+$/),eh=I(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),eb=I(/^(?:\w+script|data):/i),eg=I(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ev=I(/^html$/i);var ex=Object.freeze({__proto__:null,ARIA_ATTR:ey,ATTR_WHITESPACE:eg,CUSTOM_ELEMENT:I(/^[a-z][.\w]*(-[.\w]+)+$/i),DATA_ATTR:ed,DOCTYPE_NAME:ev,ERB_EXPR:ef,IS_ALLOWED_URI:eh,IS_SCRIPT_OR_DATA:eb,MUSTACHE_EXPR:ep,TMPLIT_EXPR:em});let eS={element:1,text:3,progressingInstruction:7,comment:8,document:9},eT=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null,r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let o="dompurify"+(n?"#"+n:"");try{return e.createPolicy(o,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+o+" could not be created."),null}},ew=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};var eA=function e(){let t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window,r=t=>e(t);if(r.version="3.2.6",r.removed=[],!n||!n.document||n.document.nodeType!==eS.document||!n.Element)return r.isSupported=!1,r;let{document:o}=n,i=o,a=i.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:u,Element:s,NodeFilter:p,NamedNodeMap:f=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:m,DOMParser:d,trustedTypes:y}=n,h=s.prototype,b=Q(h,"cloneNode"),g=Q(h,"remove"),v=Q(h,"nextSibling"),x=Q(h,"childNodes"),S=Q(h,"parentNode");if("function"==typeof c){let e=o.createElement("template");e.content&&e.content.ownerDocument&&(o=e.content.ownerDocument)}let T="",{implementation:w,createNodeIterator:A,createDocumentFragment:O,getElementsByTagName:_}=o,{importNode:k}=i,C=ew();r.isSupported="function"==typeof E&&"function"==typeof S&&w&&void 0!==w.createHTMLDocument;let{MUSTACHE_EXPR:N,ERB_EXPR:I,TMPLIT_EXPR:L,DATA_ATTR:R,ARIA_ATTR:K,IS_SCRIPT_OR_DATA:ep,ATTR_WHITESPACE:ef,CUSTOM_ELEMENT:em}=ex,{IS_ALLOWED_URI:ed}=ex,ey=null,eb=Z({},[...ee,...et,...en,...eo,...ea]),eg=null,eA=Z({},[...el,...ec,...eu,...es]),eO=Object.seal(D(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),eE=null,e_=null,ek=!0,eC=!0,eN=!1,eP=!0,eI=!1,eD=!0,eL=!1,eR=!1,eM=!1,ej=!1,eU=!1,eF=!1,eB=!0,ez=!1,eG=!0,eH=!1,eq={},eW=null,eV=Z({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),eY=null,e$=Z({},["audio","video","img","source","image","track"]),eX=null,eK=Z({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),eZ="http://www.w3.org/1998/Math/MathML",eJ="http://www.w3.org/2000/svg",eQ="http://www.w3.org/1999/xhtml",e0=eQ,e1=!1,e2=null,e3=Z({},[eZ,eJ,eQ],G),e6=Z({},["mi","mo","mn","ms","mtext"]),e5=Z({},["annotation-xml"]),e8=Z({},["title","style","font","a","script"]),e4=null,e7=["application/xhtml+xml","text/html"],e9=null,te=null,tt=o.createElement("form"),tn=function(e){return e instanceof RegExp||e instanceof Function},tr=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!te||te!==e){if(e&&"object"==typeof e||(e={}),e=J(e),e9="application/xhtml+xml"===(e4=-1===e7.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE)?G:z,ey=Y(e,"ALLOWED_TAGS")?Z({},e.ALLOWED_TAGS,e9):eb,eg=Y(e,"ALLOWED_ATTR")?Z({},e.ALLOWED_ATTR,e9):eA,e2=Y(e,"ALLOWED_NAMESPACES")?Z({},e.ALLOWED_NAMESPACES,G):e3,eX=Y(e,"ADD_URI_SAFE_ATTR")?Z(J(eK),e.ADD_URI_SAFE_ATTR,e9):eK,eY=Y(e,"ADD_DATA_URI_TAGS")?Z(J(e$),e.ADD_DATA_URI_TAGS,e9):e$,eW=Y(e,"FORBID_CONTENTS")?Z({},e.FORBID_CONTENTS,e9):eV,eE=Y(e,"FORBID_TAGS")?Z({},e.FORBID_TAGS,e9):J({}),e_=Y(e,"FORBID_ATTR")?Z({},e.FORBID_ATTR,e9):J({}),eq=!!Y(e,"USE_PROFILES")&&e.USE_PROFILES,ek=!1!==e.ALLOW_ARIA_ATTR,eC=!1!==e.ALLOW_DATA_ATTR,eN=e.ALLOW_UNKNOWN_PROTOCOLS||!1,eP=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,eI=e.SAFE_FOR_TEMPLATES||!1,eD=!1!==e.SAFE_FOR_XML,eL=e.WHOLE_DOCUMENT||!1,ej=e.RETURN_DOM||!1,eU=e.RETURN_DOM_FRAGMENT||!1,eF=e.RETURN_TRUSTED_TYPE||!1,eM=e.FORCE_BODY||!1,eB=!1!==e.SANITIZE_DOM,ez=e.SANITIZE_NAMED_PROPS||!1,eG=!1!==e.KEEP_CONTENT,eH=e.IN_PLACE||!1,ed=e.ALLOWED_URI_REGEXP||eh,e0=e.NAMESPACE||eQ,e6=e.MATHML_TEXT_INTEGRATION_POINTS||e6,e5=e.HTML_INTEGRATION_POINTS||e5,eO=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&tn(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(eO.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&tn(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(eO.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(eO.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),eI&&(eC=!1),eU&&(ej=!0),eq&&(ey=Z({},ea),eg=[],!0===eq.html&&(Z(ey,ee),Z(eg,el)),!0===eq.svg&&(Z(ey,et),Z(eg,ec),Z(eg,es)),!0===eq.svgFilters&&(Z(ey,en),Z(eg,ec),Z(eg,es)),!0===eq.mathMl&&(Z(ey,eo),Z(eg,eu),Z(eg,es))),e.ADD_TAGS&&(ey===eb&&(ey=J(ey)),Z(ey,e.ADD_TAGS,e9)),e.ADD_ATTR&&(eg===eA&&(eg=J(eg)),Z(eg,e.ADD_ATTR,e9)),e.ADD_URI_SAFE_ATTR&&Z(eX,e.ADD_URI_SAFE_ATTR,e9),e.FORBID_CONTENTS&&(eW===eV&&(eW=J(eW)),Z(eW,e.FORBID_CONTENTS,e9)),eG&&(ey["#text"]=!0),eL&&Z(ey,["html","head","body"]),ey.table&&(Z(ey,["tbody"]),delete eE.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw X('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw X('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');T=(t=e.TRUSTED_TYPES_POLICY).createHTML("")}else void 0===t&&(t=eT(y,a)),null!==t&&"string"==typeof T&&(T=t.createHTML(""));P&&P(e),te=e}},to=Z({},[...et,...en,...er]),ti=Z({},[...eo,...ei]),ta=function(e){let t=S(e);t&&t.tagName||(t={namespaceURI:e0,tagName:"template"});let n=z(e.tagName),r=z(t.tagName);return!!e2[e.namespaceURI]&&(e.namespaceURI===eJ?t.namespaceURI===eQ?"svg"===n:t.namespaceURI===eZ?"svg"===n&&("annotation-xml"===r||e6[r]):!!to[n]:e.namespaceURI===eZ?t.namespaceURI===eQ?"math"===n:t.namespaceURI===eJ?"math"===n&&e5[r]:!!ti[n]:e.namespaceURI===eQ?(t.namespaceURI!==eJ||!!e5[r])&&(t.namespaceURI!==eZ||!!e6[r])&&!ti[n]&&(e8[n]||!to[n]):"application/xhtml+xml"===e4&&!!e2[e.namespaceURI])},tl=function(e){F(r.removed,{element:e});try{S(e).removeChild(e)}catch(t){g(e)}},tc=function(e,t){try{F(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){F(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(ej||eU)try{tl(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},tu=function(e){let n=null,r=null;if(eM)e="<remove></remove>"+e;else{let t=H(e,/^[\r\n\t ]+/);r=t&&t[0]}"application/xhtml+xml"===e4&&e0===eQ&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let i=t?t.createHTML(e):e;if(e0===eQ)try{n=new d().parseFromString(i,e4)}catch(e){}if(!n||!n.documentElement){n=w.createDocument(e0,"template",null);try{n.documentElement.innerHTML=e1?T:i}catch(e){}}let a=n.body||n.documentElement;return(e&&r&&a.insertBefore(o.createTextNode(r),a.childNodes[0]||null),e0===eQ)?_.call(n,eL?"html":"body")[0]:eL?n.documentElement:a},ts=function(e){return A.call(e.ownerDocument||e,e,p.SHOW_ELEMENT|p.SHOW_COMMENT|p.SHOW_TEXT|p.SHOW_PROCESSING_INSTRUCTION|p.SHOW_CDATA_SECTION,null)},tp=function(e){return e instanceof m&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof f)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},tf=function(e){return"function"==typeof u&&e instanceof u};function tm(e,t,n){M(e,e=>{e.call(r,t,n,te)})}let td=function(e){let t=null;if(tm(C.beforeSanitizeElements,e,null),tp(e))return tl(e),!0;let n=e9(e.nodeName);if(tm(C.uponSanitizeElement,e,{tagName:n,allowedTags:ey}),eD&&e.hasChildNodes()&&!tf(e.firstElementChild)&&$(/<[/\w!]/g,e.innerHTML)&&$(/<[/\w!]/g,e.textContent)||e.nodeType===eS.progressingInstruction||eD&&e.nodeType===eS.comment&&$(/<[/\w]/g,e.data))return tl(e),!0;if(!ey[n]||eE[n]){if(!eE[n]&&th(n)&&(eO.tagNameCheck instanceof RegExp&&$(eO.tagNameCheck,n)||eO.tagNameCheck instanceof Function&&eO.tagNameCheck(n)))return!1;if(eG&&!eW[n]){let t=S(e)||e.parentNode,n=x(e)||e.childNodes;if(n&&t){let r=n.length;for(let o=r-1;o>=0;--o){let r=b(n[o],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,v(e))}}}return tl(e),!0}return e instanceof s&&!ta(e)||("noscript"===n||"noembed"===n||"noframes"===n)&&$(/<\/no(script|embed|frames)/i,e.innerHTML)?(tl(e),!0):(eI&&e.nodeType===eS.text&&(t=e.textContent,M([N,I,L],e=>{t=q(t,e," ")}),e.textContent!==t&&(F(r.removed,{element:e.cloneNode()}),e.textContent=t)),tm(C.afterSanitizeElements,e,null),!1)},ty=function(e,t,n){if(eB&&("id"===t||"name"===t)&&(n in o||n in tt))return!1;if(eC&&!e_[t]&&$(R,t));else if(ek&&$(K,t));else if(!eg[t]||e_[t]){if(!(th(e)&&(eO.tagNameCheck instanceof RegExp&&$(eO.tagNameCheck,e)||eO.tagNameCheck instanceof Function&&eO.tagNameCheck(e))&&(eO.attributeNameCheck instanceof RegExp&&$(eO.attributeNameCheck,t)||eO.attributeNameCheck instanceof Function&&eO.attributeNameCheck(t))||"is"===t&&eO.allowCustomizedBuiltInElements&&(eO.tagNameCheck instanceof RegExp&&$(eO.tagNameCheck,n)||eO.tagNameCheck instanceof Function&&eO.tagNameCheck(n))))return!1}else if(eX[t]);else if($(ed,q(n,ef,"")));else if(("src"===t||"xlink:href"===t||"href"===t)&&"script"!==e&&0===W(n,"data:")&&eY[e]);else if(eN&&!$(ep,q(n,ef,"")));else if(n)return!1;return!0},th=function(e){return"annotation-xml"!==e&&H(e,em)},tb=function(e){tm(C.beforeSanitizeAttributes,e,null);let{attributes:n}=e;if(!n||tp(e))return;let o={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:eg,forceKeepAttr:void 0},i=n.length;for(;i--;){let{name:a,namespaceURI:l,value:c}=n[i],u=e9(a),s="value"===a?c:V(c);if(o.attrName=u,o.attrValue=s,o.keepAttr=!0,o.forceKeepAttr=void 0,tm(C.uponSanitizeAttribute,e,o),s=o.attrValue,ez&&("id"===u||"name"===u)&&(tc(a,e),s="user-content-"+s),eD&&$(/((--!?|])>)|<\/(style|title)/i,s)){tc(a,e);continue}if(o.forceKeepAttr)continue;if(!o.keepAttr||!eP&&$(/\/>/i,s)){tc(a,e);continue}eI&&M([N,I,L],e=>{s=q(s,e," ")});let p=e9(e.nodeName);if(!ty(p,u,s)){tc(a,e);continue}if(t&&"object"==typeof y&&"function"==typeof y.getAttributeType)if(l);else switch(y.getAttributeType(p,u)){case"TrustedHTML":s=t.createHTML(s);break;case"TrustedScriptURL":s=t.createScriptURL(s)}if(s!==c)try{l?e.setAttributeNS(l,a,s):e.setAttribute(a,s),tp(e)?tl(e):U(r.removed)}catch(t){tc(a,e)}}tm(C.afterSanitizeAttributes,e,null)},tg=function e(t){let n=null,r=ts(t);for(tm(C.beforeSanitizeShadowDOM,t,null);n=r.nextNode();)tm(C.uponSanitizeShadowNode,n,null),td(n),tb(n),n.content instanceof l&&e(n.content);tm(C.afterSanitizeShadowDOM,t,null)};return r.sanitize=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=null,a=null,c=null,s=null;if((e1=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!tf(e))if("function"==typeof e.toString){if("string"!=typeof(e=e.toString()))throw X("dirty is not a string, aborting")}else throw X("toString is not a function");if(!r.isSupported)return e;if(eR||tr(n),r.removed=[],"string"==typeof e&&(eH=!1),eH){if(e.nodeName){let t=e9(e.nodeName);if(!ey[t]||eE[t])throw X("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof u)(a=(o=tu("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType===eS.element&&"BODY"===a.nodeName||"HTML"===a.nodeName?o=a:o.appendChild(a);else{if(!ej&&!eI&&!eL&&-1===e.indexOf("<"))return t&&eF?t.createHTML(e):e;if(!(o=tu(e)))return ej?null:eF?T:""}o&&eM&&tl(o.firstChild);let p=ts(eH?e:o);for(;c=p.nextNode();)td(c),tb(c),c.content instanceof l&&tg(c.content);if(eH)return e;if(ej){if(eU)for(s=O.call(o.ownerDocument);o.firstChild;)s.appendChild(o.firstChild);else s=o;return(eg.shadowroot||eg.shadowrootmode)&&(s=k.call(i,s,!0)),s}let f=eL?o.outerHTML:o.innerHTML;return eL&&ey["!doctype"]&&o.ownerDocument&&o.ownerDocument.doctype&&o.ownerDocument.doctype.name&&$(ev,o.ownerDocument.doctype.name)&&(f="<!DOCTYPE "+o.ownerDocument.doctype.name+">\n"+f),eI&&M([N,I,L],e=>{f=q(f,e," ")}),t&&eF?t.createHTML(f):f},r.setConfig=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};tr(e),eR=!0},r.clearConfig=function(){te=null,eR=!1},r.isValidAttribute=function(e,t,n){return te||tr({}),ty(e9(e),e9(t),n)},r.addHook=function(e,t){"function"==typeof t&&F(C[e],t)},r.removeHook=function(e,t){if(void 0!==t){let n=j(C[e],t);return -1===n?void 0:B(C[e],n,1)[0]}return U(C[e])},r.removeHooks=function(e){C[e]=[]},r.removeAllHooks=function(){C=ew()},r}(),eO=(0,c.observer)(function(e){var n=e.spaceId,o=(0,a.useTranslation)().t,l=(0,t.useRequest)({url:"aiBuildGuideSpaces:getHtml/".concat(n)},{refreshDeps:[n],ready:!!n}),c=l.loading,u=l.data;return n?c?r().createElement(i.Card,{style:{padding:24,textAlign:"center"}},r().createElement(i.Spin,{size:"large"})):r().createElement(i.Card,{bordered:!1,className:"user-guide-block",style:{width:"100%",minHeight:300}},r().createElement("div",{className:"user-guide-content",dangerouslySetInnerHTML:{__html:eA.sanitize((null==u?void 0:u.data)||"")}})):r().createElement(i.Card,{style:{padding:24,textAlign:"center",color:"#888"}},o("Please select a User Guide Space in block settings"))},{displayName:"UserGuideBlock"}),eE=function(){var e,n,o=(0,t.useSchemaInitializer)().insert,i=(0,t.useSchemaInitializerItem)();return r().createElement(t.SchemaInitializerItem,(e=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},i),n=n={icon:r().createElement(g.ReadOutlined,null),onClick:function(){o({type:"void","x-settings":"userGuideBlockSettings","x-decorator":"BlockItem","x-decorator-props":{name:"userGuide"},"x-component":"UserGuideBlock","x-component-props":{}})}},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e))},e_=function(e){return r().createElement(t.SchemaComponentOptions,{components:{UserGuideBlock:eO,UserGuideBlockInitializer:eE}},e.children)},ek=s(667);function eC(e,t,n,r,o,i,a){try{var l=e[i](a),c=l.value}catch(e){n(e);return}l.done?t(c):Promise.resolve(c).then(r,o)}function eN(e){return(eN=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function eP(e,t){return(eP=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function eI(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(eI=function(){return!!e})()}var eD=function(e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function t(){var e,n;if(!(this instanceof t))throw TypeError("Cannot call a class as a function");return e=t,n=arguments,e=eN(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,eI()?Reflect.construct(e,n||[],eN(this).constructor):e.apply(this,n))}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&eP(t,e),t}(t.BlockModel);function eL(e,t,n,r,o,i,a){try{var l=e[i](a),c=l.value}catch(e){n(e);return}l.done?t(c):Promise.resolve(c).then(r,o)}function eR(e,t,n){return(eR=eF()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&ej(o,n.prototype),o}).apply(null,arguments)}eD.registerFlow({key:"userGuideBlockSettings",title:(0,ek.escapeT)("User guide block setting",{ns:"build-guide-block"}),steps:{editUserGuide:{title:(0,ek.escapeT)("Edit user guide settings",{ns:"build-guide-block"}),uiSchema:function(e){return{spaceId:{title:(0,e.t)("Space"),type:"string","x-decorator":"FormItem","x-component":"RemoteSelect","x-component-props":{showSearch:!0,fieldNames:{label:"title",value:"id"},service:{resource:"aiBuildGuideSpaces",action:"list",params:{filter:{status:"completed"}}}},required:!0}}},handler:function(e,t){var n;return(n=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){var c=[i,l];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(r){return n=t.spaceId,e.model.setProps({spaceId:n}),[2]})},function(){var e=this,t=arguments;return new Promise(function(r,o){var i=n.apply(e,t);function a(e){eC(i,r,o,a,l,"next",e)}function l(e){eC(i,r,o,a,l,"throw",e)}a(void 0)})})()}}}}),eD.define({label:(0,ek.escapeT)("User Guide")});function eM(e){return(eM=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function ej(e,t){return(ej=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function eU(e){var t="function"==typeof Map?new Map:void 0;return(eU=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return eR(e,arguments,eM(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),ej(n,e)})(e)}function eF(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(eF=function(){return!!e})()}var eB=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=eM(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,eF()?Reflect.construct(e,t||[],eM(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&ej(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){var e;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){var c=[i,l];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){return t.app.pluginSettingsManager.add("ai-build-guide",{icon:"ReadOutlined",title:'{{t("Build Guide Block", { ns: "build-guide-block" })}}',Component:O}),t.app.use(e_),null==(e=t.app.schemaInitializerManager.get("page:addBlock"))||e.add("otherBlocks.aiUserGuide",{title:'{{t("User Guide", { ns: "build-guide-block" })}}',Component:"UserGuideBlockInitializer"}),t.flowEngine.registerModels({UserGuideBlockModel:eD}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){eL(i,r,o,a,l,"next",e)}function l(e){eL(i,r,o,a,l,"throw",e)}a(void 0)})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(eU(t.Plugin))}(),p}()});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
"@nocobase/client": "2.0.32",
|
|
12
|
+
"react": "18.2.0",
|
|
13
|
+
"antd": "5.24.2",
|
|
14
|
+
"@formily/react": "2.3.7",
|
|
15
|
+
"react-i18next": "11.18.6",
|
|
16
|
+
"@ant-design/icons": "5.6.1",
|
|
17
|
+
"@formily/core": "2.3.7",
|
|
18
|
+
"@nocobase/server": "2.0.32",
|
|
19
|
+
"@nocobase/flow-engine": "2.0.32",
|
|
20
|
+
"@nocobase/actions": "2.0.32",
|
|
21
|
+
"@nocobase/database": "2.0.32",
|
|
22
|
+
"@nocobase/plugin-ai": "2.0.32",
|
|
23
|
+
"@nocobase/plugin-file-manager": "2.0.32",
|
|
24
|
+
"@langchain/core": "1.1.24",
|
|
25
|
+
"axios": "1.7.7"
|
|
26
|
+
};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __create = Object.create;
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
13
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
15
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
16
|
+
var __export = (target, all) => {
|
|
17
|
+
for (var name in all)
|
|
18
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
19
|
+
};
|
|
20
|
+
var __copyProps = (to, from, except, desc) => {
|
|
21
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
22
|
+
for (let key of __getOwnPropNames(from))
|
|
23
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
24
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
25
|
+
}
|
|
26
|
+
return to;
|
|
27
|
+
};
|
|
28
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
29
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
30
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
31
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
32
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
33
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
34
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
35
|
+
mod
|
|
36
|
+
));
|
|
37
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
38
|
+
var src_exports = {};
|
|
39
|
+
__export(src_exports, {
|
|
40
|
+
default: () => import_server.default
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(src_exports);
|
|
43
|
+
__reExport(src_exports, require("./server"), module.exports);
|
|
44
|
+
var import_server = __toESM(require("./server"));
|
|
45
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
+
0 && (module.exports = {
|
|
47
|
+
...require("./server")
|
|
48
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Build Guide Block": "Build Guide Block",
|
|
3
|
+
"User guide block setting": "User guide block setting",
|
|
4
|
+
"Edit user guide settings": "Edit user guide settings",
|
|
5
|
+
"Space": "Space",
|
|
6
|
+
"User Guide": "User Guide",
|
|
7
|
+
"Create space": "Create space",
|
|
8
|
+
"Title": "Title",
|
|
9
|
+
"LLM Service": "LLM Service",
|
|
10
|
+
"Model": "Model",
|
|
11
|
+
"System Prompt": "System Prompt",
|
|
12
|
+
"Documents": "Documents",
|
|
13
|
+
"Cancel": "Cancel",
|
|
14
|
+
"Submit": "Submit",
|
|
15
|
+
"Actions": "Actions",
|
|
16
|
+
"Edit": "Edit",
|
|
17
|
+
"Edit space": "Edit space",
|
|
18
|
+
"Generated HTML": "Generated HTML",
|
|
19
|
+
"Build Log": "Build Log",
|
|
20
|
+
"Delete": "Delete",
|
|
21
|
+
"Saved successfully": "Saved successfully",
|
|
22
|
+
"Please select a User Guide Space in block settings": "Please select a User Guide Space in block settings",
|
|
23
|
+
"Build": "Build",
|
|
24
|
+
"Build started": "Build started",
|
|
25
|
+
"Build failed": "Build failed",
|
|
26
|
+
"Are you sure you want to delete this space?": "Are you sure you want to delete this space?"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Build Guide Block": "Block Hướng dẫn sử dụng",
|
|
3
|
+
"User guide block setting": "Cài đặt Block Hướng dẫn",
|
|
4
|
+
"Edit user guide settings": "Chỉnh sửa cài đặt",
|
|
5
|
+
"Space": "Không gian (Space)",
|
|
6
|
+
"User Guide": "Hướng dẫn sử dụng",
|
|
7
|
+
"Create space": "Tạo Space",
|
|
8
|
+
"Title": "Tiêu đề",
|
|
9
|
+
"LLM Service": "Dịch vụ LLM",
|
|
10
|
+
"Model": "Mô hình (Model)",
|
|
11
|
+
"System Prompt": "Prompt hệ thống",
|
|
12
|
+
"Documents": "Tài liệu",
|
|
13
|
+
"Cancel": "Hủy",
|
|
14
|
+
"Submit": "Xác nhận",
|
|
15
|
+
"Actions": "Hành động",
|
|
16
|
+
"Edit": "Sửa",
|
|
17
|
+
"Edit space": "Sửa Space",
|
|
18
|
+
"Generated HTML": "HTML Đã tạo",
|
|
19
|
+
"Build Log": "Log quá trình Build",
|
|
20
|
+
"Delete": "Xóa",
|
|
21
|
+
"Saved successfully": "Lưu thành công",
|
|
22
|
+
"Please select a User Guide Space in block settings": "Vui lòng chọn Space trong cài đặt block",
|
|
23
|
+
"Build": "Tạo",
|
|
24
|
+
"Build started": "Đã bắt đầu tạo",
|
|
25
|
+
"Build failed": "Tạo thất bại",
|
|
26
|
+
"Are you sure you want to delete this space?": "Bạn có chắc chắn muốn xóa Space này không?"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Build Guide Block": "生成指南区块",
|
|
3
|
+
"User guide block setting": "用户指南区块设置",
|
|
4
|
+
"Edit user guide settings": "编辑用户指南设置",
|
|
5
|
+
"Space": "空间",
|
|
6
|
+
"User Guide": "用户指南",
|
|
7
|
+
"Create space": "创建空间",
|
|
8
|
+
"Title": "标题",
|
|
9
|
+
"LLM Service": "大语言模型服务",
|
|
10
|
+
"Model": "模型",
|
|
11
|
+
"System Prompt": "系统提示词",
|
|
12
|
+
"Documents": "文档",
|
|
13
|
+
"Cancel": "取消",
|
|
14
|
+
"Submit": "提交",
|
|
15
|
+
"Actions": "操作",
|
|
16
|
+
"Edit": "编辑",
|
|
17
|
+
"Edit space": "编辑空间",
|
|
18
|
+
"Generated HTML": "生成的 HTML",
|
|
19
|
+
"Build Log": "构建日志",
|
|
20
|
+
"Delete": "删除",
|
|
21
|
+
"Saved successfully": "保存成功",
|
|
22
|
+
"Please select a User Guide Space in block settings": "请在区块设置中选择一个用户指南空间",
|
|
23
|
+
"Build": "构建",
|
|
24
|
+
"Build started": "构建已开始",
|
|
25
|
+
"Build failed": "构建失败",
|
|
26
|
+
"Are you sure you want to delete this space?": "确定要删除此空间吗?"
|
|
27
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __create = Object.create;
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
13
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
15
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
16
|
+
var __export = (target, all) => {
|
|
17
|
+
for (var name in all)
|
|
18
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
19
|
+
};
|
|
20
|
+
var __copyProps = (to, from, except, desc) => {
|
|
21
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
22
|
+
for (let key of __getOwnPropNames(from))
|
|
23
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
24
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
25
|
+
}
|
|
26
|
+
return to;
|
|
27
|
+
};
|
|
28
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
29
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
30
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
31
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
32
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
33
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
34
|
+
mod
|
|
35
|
+
));
|
|
36
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
|
+
var build_exports = {};
|
|
38
|
+
__export(build_exports, {
|
|
39
|
+
build: () => build
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(build_exports);
|
|
42
|
+
var import_sanitize_html = __toESM(require("sanitize-html"));
|
|
43
|
+
var import_messages = require("@langchain/core/messages");
|
|
44
|
+
var import_axios = __toESM(require("axios"));
|
|
45
|
+
var import_fs = __toESM(require("fs"));
|
|
46
|
+
var import_path = __toESM(require("path"));
|
|
47
|
+
async function fetchFileContent(app, file) {
|
|
48
|
+
const fileManager = app.pm.get("file-manager");
|
|
49
|
+
if (!fileManager) return "";
|
|
50
|
+
const url = await fileManager.getFileURL(file);
|
|
51
|
+
try {
|
|
52
|
+
if (url.startsWith("http")) {
|
|
53
|
+
const response = await import_axios.default.get(url, { responseType: "text", timeout: 15e3 });
|
|
54
|
+
return response.data;
|
|
55
|
+
} else {
|
|
56
|
+
let localPath = url;
|
|
57
|
+
if (process.env.APP_PUBLIC_PATH && localPath.startsWith(process.env.APP_PUBLIC_PATH)) {
|
|
58
|
+
localPath = localPath.slice(process.env.APP_PUBLIC_PATH.length);
|
|
59
|
+
}
|
|
60
|
+
localPath = import_path.default.join(process.cwd(), localPath);
|
|
61
|
+
const data = await import_fs.default.promises.readFile(localPath, "utf8");
|
|
62
|
+
return data;
|
|
63
|
+
}
|
|
64
|
+
} catch (err) {
|
|
65
|
+
app.log.error(`Failed to read file content for document ${file.id}`, err);
|
|
66
|
+
return `[Failed to read document: ${file.filename}]`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function build(ctx, next) {
|
|
70
|
+
const { filterByTk } = ctx.action.params;
|
|
71
|
+
const repository = ctx.db.getRepository("aiBuildGuideSpaces");
|
|
72
|
+
const space = await repository.findById(filterByTk);
|
|
73
|
+
if (!space) {
|
|
74
|
+
ctx.throw(404, "Space not found");
|
|
75
|
+
}
|
|
76
|
+
const app = ctx.app;
|
|
77
|
+
const db = ctx.db;
|
|
78
|
+
try {
|
|
79
|
+
await repository.update({
|
|
80
|
+
filterByTk,
|
|
81
|
+
values: {
|
|
82
|
+
status: "building",
|
|
83
|
+
buildLog: null
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const bgPromise = (async () => {
|
|
87
|
+
const bgRepo = db.getRepository("aiBuildGuideSpaces");
|
|
88
|
+
const documents = await space.getDocuments();
|
|
89
|
+
let documentsText = "";
|
|
90
|
+
if (documents && documents.length > 0) {
|
|
91
|
+
const texts = await Promise.all(
|
|
92
|
+
documents.map(async (doc) => {
|
|
93
|
+
const content = await fetchFileContent(app, doc);
|
|
94
|
+
return `--- Document: ${doc.filename} ---
|
|
95
|
+
${content}
|
|
96
|
+
`;
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
documentsText = texts.join("\n");
|
|
100
|
+
}
|
|
101
|
+
const aiPlugin = app.pm.get("ai");
|
|
102
|
+
if (!aiPlugin) {
|
|
103
|
+
throw new Error("Plugin AI is not available");
|
|
104
|
+
}
|
|
105
|
+
const { llmService, model, systemPrompt } = space.get();
|
|
106
|
+
if (!llmService || !model) {
|
|
107
|
+
throw new Error("LLM Service or model is missing in space configuration");
|
|
108
|
+
}
|
|
109
|
+
const serviceData = await aiPlugin.aiManager.getLLMService({ llmService, model });
|
|
110
|
+
const provider = serviceData.provider;
|
|
111
|
+
const messages = [];
|
|
112
|
+
if (systemPrompt) {
|
|
113
|
+
messages.push(new import_messages.SystemMessage(systemPrompt));
|
|
114
|
+
}
|
|
115
|
+
const instruction = `Please generate an HTML user guide based on the following documents. Output ONLY valid HTML without Markdown blocks.
|
|
116
|
+
|
|
117
|
+
Documents:
|
|
118
|
+
${documentsText}`;
|
|
119
|
+
messages.push(new import_messages.HumanMessage(instruction));
|
|
120
|
+
const response = await provider.chatModel.invoke(messages);
|
|
121
|
+
let rawHtml = typeof response.content === "string" ? response.content : JSON.stringify(response.content);
|
|
122
|
+
rawHtml = rawHtml.replace(/^```html\s*/, "").replace(/```\s*$/, "");
|
|
123
|
+
const cleanHtml = (0, import_sanitize_html.default)(rawHtml, {
|
|
124
|
+
allowedTags: [
|
|
125
|
+
"div",
|
|
126
|
+
"p",
|
|
127
|
+
"h1",
|
|
128
|
+
"h2",
|
|
129
|
+
"h3",
|
|
130
|
+
"h4",
|
|
131
|
+
"h5",
|
|
132
|
+
"h6",
|
|
133
|
+
"ul",
|
|
134
|
+
"ol",
|
|
135
|
+
"li",
|
|
136
|
+
"table",
|
|
137
|
+
"thead",
|
|
138
|
+
"tbody",
|
|
139
|
+
"tr",
|
|
140
|
+
"td",
|
|
141
|
+
"th",
|
|
142
|
+
"a",
|
|
143
|
+
"img",
|
|
144
|
+
"span",
|
|
145
|
+
"strong",
|
|
146
|
+
"em",
|
|
147
|
+
"code",
|
|
148
|
+
"pre",
|
|
149
|
+
"blockquote",
|
|
150
|
+
"br",
|
|
151
|
+
"hr"
|
|
152
|
+
],
|
|
153
|
+
allowedAttributes: {
|
|
154
|
+
"a": ["href", "target"],
|
|
155
|
+
"img": ["src", "alt", "width", "height"],
|
|
156
|
+
"*": ["style", "class"]
|
|
157
|
+
},
|
|
158
|
+
allowedStyles: {
|
|
159
|
+
"*": {
|
|
160
|
+
"color": [/^\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/, /^rgb/, /^rgba/],
|
|
161
|
+
"background-color": [/^\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/, /^rgb/, /^rgba/],
|
|
162
|
+
"text-align": [/^left$/, /^right$/, /^center$/, /^justify$/],
|
|
163
|
+
"font-size": [/^\d+(?:px|em|%)$/]
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
await bgRepo.update({
|
|
168
|
+
filterByTk,
|
|
169
|
+
values: {
|
|
170
|
+
generatedHtml: cleanHtml,
|
|
171
|
+
status: "completed"
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
})();
|
|
175
|
+
bgPromise.catch(async (error) => {
|
|
176
|
+
app.log.error("Build Guide Background Error", error);
|
|
177
|
+
try {
|
|
178
|
+
const bgRepo = db.getRepository("aiBuildGuideSpaces");
|
|
179
|
+
await bgRepo.update({
|
|
180
|
+
filterByTk,
|
|
181
|
+
values: {
|
|
182
|
+
status: "error",
|
|
183
|
+
buildLog: error.message || String(error)
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
} catch (updateErr) {
|
|
187
|
+
app.log.error("Failed to persist build error status", updateErr);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
ctx.body = { status: "building" };
|
|
191
|
+
} catch (error) {
|
|
192
|
+
app.log.error("Build Guide Error", error);
|
|
193
|
+
await repository.update({
|
|
194
|
+
filterByTk,
|
|
195
|
+
values: {
|
|
196
|
+
status: "error",
|
|
197
|
+
buildLog: error.message || String(error)
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
ctx.throw(500, error.message || "Error occurred during build");
|
|
201
|
+
}
|
|
202
|
+
await next();
|
|
203
|
+
}
|
|
204
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
205
|
+
0 && (module.exports = {
|
|
206
|
+
build
|
|
207
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var getHtml_exports = {};
|
|
28
|
+
__export(getHtml_exports, {
|
|
29
|
+
getHtml: () => getHtml
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(getHtml_exports);
|
|
32
|
+
async function getHtml(ctx, next) {
|
|
33
|
+
const { filterByTk } = ctx.action.params;
|
|
34
|
+
const { resourceName } = ctx.action;
|
|
35
|
+
const repository = ctx.db.getRepository(resourceName);
|
|
36
|
+
const model = await repository.findById(filterByTk);
|
|
37
|
+
if (!model) {
|
|
38
|
+
ctx.throw(404, "User Guide not found");
|
|
39
|
+
}
|
|
40
|
+
if (model.get("status") !== "completed") {
|
|
41
|
+
ctx.throw(400, "User Guide is not ready yet");
|
|
42
|
+
}
|
|
43
|
+
ctx.body = model.get("generatedHtml") || "";
|
|
44
|
+
ctx.withoutDataWrapping = true;
|
|
45
|
+
ctx.set({
|
|
46
|
+
"Content-Type": "text/html; charset=UTF-8"
|
|
47
|
+
});
|
|
48
|
+
await next();
|
|
49
|
+
}
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
getHtml
|
|
53
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var ai_build_guide_spaces_exports = {};
|
|
28
|
+
__export(ai_build_guide_spaces_exports, {
|
|
29
|
+
default: () => ai_build_guide_spaces_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(ai_build_guide_spaces_exports);
|
|
32
|
+
var import_database = require("@nocobase/database");
|
|
33
|
+
var ai_build_guide_spaces_default = (0, import_database.defineCollection)({
|
|
34
|
+
namespace: "build-guide-block.ai-build-guide-spaces",
|
|
35
|
+
name: "aiBuildGuideSpaces",
|
|
36
|
+
migrationRules: ["overwrite", "schema-only"],
|
|
37
|
+
timestamps: true,
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
type: "uid",
|
|
41
|
+
name: "id",
|
|
42
|
+
primaryKey: true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: "string",
|
|
46
|
+
name: "title"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: "string",
|
|
50
|
+
name: "llmService"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: "string",
|
|
54
|
+
name: "model"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: "text",
|
|
58
|
+
name: "systemPrompt"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
type: "text",
|
|
62
|
+
name: "generatedHtml"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
type: "string",
|
|
66
|
+
name: "status",
|
|
67
|
+
defaultValue: "draft"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
name: "buildLog"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: "belongsToMany",
|
|
75
|
+
name: "documents",
|
|
76
|
+
target: "attachments"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __create = Object.create;
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
13
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
15
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
16
|
+
var __export = (target, all) => {
|
|
17
|
+
for (var name in all)
|
|
18
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
19
|
+
};
|
|
20
|
+
var __copyProps = (to, from, except, desc) => {
|
|
21
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
22
|
+
for (let key of __getOwnPropNames(from))
|
|
23
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
24
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
25
|
+
}
|
|
26
|
+
return to;
|
|
27
|
+
};
|
|
28
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
29
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
30
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
31
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
32
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
33
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
34
|
+
mod
|
|
35
|
+
));
|
|
36
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
|
+
var server_exports = {};
|
|
38
|
+
__export(server_exports, {
|
|
39
|
+
default: () => import_plugin.default
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(server_exports);
|
|
42
|
+
var import_plugin = __toESM(require("./plugin"));
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __create = Object.create;
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
13
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
15
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
16
|
+
var __export = (target, all) => {
|
|
17
|
+
for (var name in all)
|
|
18
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
19
|
+
};
|
|
20
|
+
var __copyProps = (to, from, except, desc) => {
|
|
21
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
22
|
+
for (let key of __getOwnPropNames(from))
|
|
23
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
24
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
25
|
+
}
|
|
26
|
+
return to;
|
|
27
|
+
};
|
|
28
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
29
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
30
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
31
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
32
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
33
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
34
|
+
mod
|
|
35
|
+
));
|
|
36
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
|
+
var plugin_exports = {};
|
|
38
|
+
__export(plugin_exports, {
|
|
39
|
+
PluginBuildGuideBlockServer: () => PluginBuildGuideBlockServer,
|
|
40
|
+
default: () => plugin_default
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(plugin_exports);
|
|
43
|
+
var import_server = require("@nocobase/server");
|
|
44
|
+
var import_path = __toESM(require("path"));
|
|
45
|
+
var import_build = require("./actions/build");
|
|
46
|
+
var import_getHtml = require("./actions/getHtml");
|
|
47
|
+
class PluginBuildGuideBlockServer extends import_server.Plugin {
|
|
48
|
+
afterAdd() {
|
|
49
|
+
}
|
|
50
|
+
beforeLoad() {
|
|
51
|
+
}
|
|
52
|
+
async load() {
|
|
53
|
+
await this.importCollections(import_path.default.resolve(__dirname, "collections"));
|
|
54
|
+
this.app.actions({
|
|
55
|
+
"aiBuildGuideSpaces:build": import_build.build,
|
|
56
|
+
"aiBuildGuideSpaces:getHtml": import_getHtml.getHtml
|
|
57
|
+
});
|
|
58
|
+
this.app.acl.allow("aiBuildGuideSpaces", "getHtml", "loggedIn");
|
|
59
|
+
this.app.acl.registerSnippet({
|
|
60
|
+
name: "pm.ai-build-guide",
|
|
61
|
+
actions: [
|
|
62
|
+
"aiBuildGuideSpaces:create",
|
|
63
|
+
"aiBuildGuideSpaces:update",
|
|
64
|
+
"aiBuildGuideSpaces:destroy",
|
|
65
|
+
"aiBuildGuideSpaces:list",
|
|
66
|
+
"aiBuildGuideSpaces:get",
|
|
67
|
+
"aiBuildGuideSpaces:build"
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async install(options) {
|
|
72
|
+
}
|
|
73
|
+
async afterEnable() {
|
|
74
|
+
}
|
|
75
|
+
async afterDisable() {
|
|
76
|
+
}
|
|
77
|
+
async remove() {
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
var plugin_default = PluginBuildGuideBlockServer;
|
|
81
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
82
|
+
0 && (module.exports = {
|
|
83
|
+
PluginBuildGuideBlockServer
|
|
84
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "plugin-build-guide-block",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"main": "dist/server/index.js",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"dompurify": "^3.1.2",
|
|
7
|
+
"sanitize-html": "^2.13.0"
|
|
8
|
+
},
|
|
9
|
+
"devDependencies": {
|
|
10
|
+
"@types/dompurify": "^3.0.4",
|
|
11
|
+
"@types/sanitize-html": "^2.9.5"
|
|
12
|
+
},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"@nocobase/client": "2.x",
|
|
15
|
+
"@nocobase/server": "2.x",
|
|
16
|
+
"@nocobase/database": "2.x",
|
|
17
|
+
"@nocobase/test": "2.x",
|
|
18
|
+
"@nocobase/plugin-ai": "2.x",
|
|
19
|
+
"@nocobase/plugin-file-manager": "2.x",
|
|
20
|
+
"@langchain/core": "*",
|
|
21
|
+
"axios": "*"
|
|
22
|
+
}
|
|
23
|
+
}
|
package/server.d.ts
ADDED
package/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/server/index.js');
|