weifuwu 0.86.0 → 0.87.0
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 +56 -45
- package/content/apps/admin.md +55 -0
- package/content/apps/agent-platform.md +35 -0
- package/content/apps/auth.md +49 -0
- package/content/apps/multi.md +44 -0
- package/content/apps/todo.md +51 -0
- package/content/backend/ai.md +28 -0
- package/content/backend/auth.md +20 -0
- package/content/backend/email.md +23 -0
- package/content/backend/graphql.md +23 -0
- package/content/backend/http.md +23 -0
- package/content/backend/limit.md +23 -0
- package/content/backend/middleware.md +17 -0
- package/content/backend/queue.md +23 -0
- package/content/backend/redis.md +26 -0
- package/content/backend/router.md +23 -0
- package/content/backend/schedule.md +23 -0
- package/content/backend/sql.md +27 -0
- package/content/backend/sse.md +26 -0
- package/content/backend/ws.md +26 -0
- package/content/capabilities/app-node.md +21 -0
- package/content/capabilities/data.md +21 -0
- package/content/capabilities/events.md +21 -0
- package/content/capabilities/hooks.md +22 -0
- package/content/capabilities/i18n.md +21 -0
- package/content/capabilities/popup.md +21 -0
- package/content/capabilities/render-only.md +23 -0
- package/content/capabilities/router.md +22 -0
- package/content/capabilities/self-id.md +21 -0
- package/content/capabilities/store.md +21 -0
- package/content/capabilities/theme.md +21 -0
- package/content/capabilities/two-phase.md +21 -0
- package/content/components/accordion.md +50 -0
- package/content/components/actionsheet.md +46 -0
- package/content/components/affix.md +51 -0
- package/content/components/aichat.md +57 -0
- package/content/components/alert.md +52 -0
- package/content/components/alertgroup.md +45 -0
- package/content/components/anchor.md +52 -0
- package/content/components/app.md +37 -0
- package/content/components/approvalcard.md +56 -0
- package/content/components/appshell.md +50 -0
- package/content/components/aspectratio.md +47 -0
- package/content/components/authpage.md +61 -0
- package/content/components/autocomplete-v2.md +40 -0
- package/content/components/autocomplete.md +56 -0
- package/content/components/avatar.md +51 -0
- package/content/components/avatargroup.md +47 -0
- package/content/components/backtop.md +53 -0
- package/content/components/badge.md +55 -0
- package/content/components/breadcrumb.md +49 -0
- package/content/components/button.md +63 -0
- package/content/components/calendar-v2.md +40 -0
- package/content/components/calendar.md +50 -0
- package/content/components/card.md +58 -0
- package/content/components/carousel.md +52 -0
- package/content/components/cascader-v2.md +39 -0
- package/content/components/cascader.md +54 -0
- package/content/components/chart.md +53 -0
- package/content/components/chatinput.md +63 -0
- package/content/components/checkbox.md +51 -0
- package/content/components/checkboxgroup.md +52 -0
- package/content/components/citationcard.md +48 -0
- package/content/components/codeblock.md +48 -0
- package/content/components/codeeditor.md +47 -0
- package/content/components/collapse.md +49 -0
- package/content/components/colorpicker.md +50 -0
- package/content/components/command.md +50 -0
- package/content/components/confirm.md +57 -0
- package/content/components/contextmenu.md +48 -0
- package/content/components/copybutton.md +51 -0
- package/content/components/datepicker.md +52 -0
- package/content/components/descriptions-v2.md +39 -0
- package/content/components/descriptions.md +52 -0
- package/content/components/diffview-v2.md +39 -0
- package/content/components/diffview.md +50 -0
- package/content/components/divider.md +48 -0
- package/content/components/drawer.md +55 -0
- package/content/components/dropdown.md +53 -0
- package/content/components/editor.md +49 -0
- package/content/components/emptystate.md +51 -0
- package/content/components/exportcsv.md +38 -0
- package/content/components/field.md +54 -0
- package/content/components/filepreview-office.md +37 -0
- package/content/components/filepreview.md +49 -0
- package/content/components/filetree.md +56 -0
- package/content/components/fileupload-v2.md +39 -0
- package/content/components/fileupload.md +57 -0
- package/content/components/floatbutton.md +52 -0
- package/content/components/form-v2.md +41 -0
- package/content/components/form.md +60 -0
- package/content/components/grid.md +51 -0
- package/content/components/highlight-v2.md +39 -0
- package/content/components/highlight.md +46 -0
- package/content/components/hovercard.md +51 -0
- package/content/components/icon.md +50 -0
- package/content/components/imagecropper.md +45 -0
- package/content/components/img.md +56 -0
- package/content/components/infinitescroll-v2.md +40 -0
- package/content/components/infinitescroll.md +54 -0
- package/content/components/input.md +65 -0
- package/content/components/inputnumber.md +58 -0
- package/content/components/inview.md +56 -0
- package/content/components/jsonschemaform.md +53 -0
- package/content/components/jsonviewer-v2.md +39 -0
- package/content/components/jsonviewer.md +49 -0
- package/content/components/kanban.md +46 -0
- package/content/components/label.md +48 -0
- package/content/components/layout.md +54 -0
- package/content/components/layoutcontent.md +43 -0
- package/content/components/layoutheader.md +43 -0
- package/content/components/layoutsider.md +43 -0
- package/content/components/link.md +52 -0
- package/content/components/list.md +44 -0
- package/content/components/loading.md +45 -0
- package/content/components/logviewer-v2.md +39 -0
- package/content/components/logviewer.md +53 -0
- package/content/components/markdown.md +51 -0
- package/content/components/markdowneditor.md +47 -0
- package/content/components/math.md +42 -0
- package/content/components/mentions-v2.md +39 -0
- package/content/components/mentions.md +52 -0
- package/content/components/menu.md +56 -0
- package/content/components/menubar.md +44 -0
- package/content/components/messagebubble.md +50 -0
- package/content/components/modal.md +59 -0
- package/content/components/navmenu.md +47 -0
- package/content/components/notification.md +51 -0
- package/content/components/pageheader.md +53 -0
- package/content/components/pagination.md +49 -0
- package/content/components/paragraph.md +45 -0
- package/content/components/passwordinput.md +57 -0
- package/content/components/pininput-v2.md +39 -0
- package/content/components/pininput.md +50 -0
- package/content/components/pipeline.md +49 -0
- package/content/components/popconfirm.md +58 -0
- package/content/components/popover.md +61 -0
- package/content/components/progressbar.md +50 -0
- package/content/components/prompttemplate.md +49 -0
- package/content/components/qrcode.md +50 -0
- package/content/components/radiogroup.md +53 -0
- package/content/components/rate.md +53 -0
- package/content/components/reasoningblock.md +47 -0
- package/content/components/relationgraph.md +52 -0
- package/content/components/resizable.md +53 -0
- package/content/components/result.md +49 -0
- package/content/components/scrollbar.md +49 -0
- package/content/components/searchinput.md +51 -0
- package/content/components/segmentedcontrol.md +59 -0
- package/content/components/select-searchable.md +47 -0
- package/content/components/select.md +66 -0
- package/content/components/sessionlist.md +52 -0
- package/content/components/sheetgrid.md +44 -0
- package/content/components/skeleton.md +55 -0
- package/content/components/slidecanvas.md +44 -0
- package/content/components/slider.md +62 -0
- package/content/components/sortablelist.md +39 -0
- package/content/components/space.md +52 -0
- package/content/components/sparkline.md +52 -0
- package/content/components/statcard-countdown.md +39 -0
- package/content/components/statcard.md +56 -0
- package/content/components/steps.md +48 -0
- package/content/components/switch.md +50 -0
- package/content/components/tabbar.md +45 -0
- package/content/components/table-v2.md +40 -0
- package/content/components/table.md +66 -0
- package/content/components/tabs.md +56 -0
- package/content/components/tag.md +51 -0
- package/content/components/tagsinput-v2.md +39 -0
- package/content/components/tagsinput.md +54 -0
- package/content/components/text.md +45 -0
- package/content/components/textarea.md +57 -0
- package/content/components/themeswitch.md +69 -0
- package/content/components/timeline.md +50 -0
- package/content/components/title.md +45 -0
- package/content/components/toast.md +52 -0
- package/content/components/toggle-togglegroup.md +52 -0
- package/content/components/togglegroup.md +47 -0
- package/content/components/toolcallcard.md +51 -0
- package/content/components/tooltip.md +50 -0
- package/content/components/tour.md +50 -0
- package/content/components/transfer.md +52 -0
- package/content/components/tree-v2.md +39 -0
- package/content/components/tree.md +59 -0
- package/content/components/treeselect.md +54 -0
- package/content/components/typography.md +51 -0
- package/content/components/videoplayer.md +52 -0
- package/content/components/virtuallist.md +52 -0
- package/content/components/virtualtable-v2.md +39 -0
- package/content/components/virtualtable.md +55 -0
- package/content/components/watermark.md +53 -0
- package/content/components/wave.md +43 -0
- package/content/guides/ai-chat-family.md +24 -0
- package/content/guides/choose.md +67 -0
- package/content/guides/component-model.md +32 -0
- package/content/guides/component-standards.md +123 -0
- package/{docs/components.md → content/guides/components-guide.md} +31 -7
- package/{docs/custom-components.md → content/guides/custom-component.md} +70 -55
- package/{docs/data.md → content/guides/data-guide.md} +5 -2
- package/content/guides/file-preview-family.md +18 -0
- package/{docs → content/guides}/frontend.md +122 -52
- package/content/guides/layout-choice.md +64 -0
- package/{docs/layout.md → content/guides/layout-guide.md} +12 -8
- package/{docs/frontend-middleware.md → content/guides/middleware.md} +34 -3
- package/{docs/mobile.md → content/guides/mobile-guide.md} +20 -24
- package/content/guides/page-building.md +98 -0
- package/content/guides/production.md +37 -0
- package/content/guides/quality.md +60 -0
- package/{docs/realtime.md → content/guides/realtime-guide.md} +6 -3
- package/content/guides/render-only.md +44 -0
- package/{docs/saas.md → content/guides/saas-guide.md} +8 -5
- package/{docs/server.md → content/guides/server-guide.md} +5 -2
- package/content/guides/start.md +41 -0
- package/{docs → content/guides}/styling.md +5 -1
- package/{docs/frontend-ui-dom.md → content/guides/ui-dom-guide.md} +7 -1
- package/content/index.json +4344 -0
- package/content/index.md +181 -0
- package/content/layout/align.md +20 -0
- package/content/layout/anchor.md +19 -0
- package/content/layout/app-shell.md +23 -0
- package/content/layout/border.md +20 -0
- package/content/layout/center.md +19 -0
- package/content/layout/cluster.md +19 -0
- package/content/layout/container.md +19 -0
- package/content/layout/fill.md +19 -0
- package/content/layout/grid.md +19 -0
- package/content/layout/hidden.md +22 -0
- package/content/layout/layer.md +19 -0
- package/content/layout/position.md +22 -0
- package/content/layout/row.md +23 -0
- package/content/layout/safe-area.md +20 -0
- package/content/layout/scroll.md +21 -0
- package/content/layout/spacing.md +22 -0
- package/content/layout/split.md +19 -0
- package/content/layout/stack.md +19 -0
- package/content/layout/surface.md +23 -0
- package/content/layout/text.md +22 -0
- package/content/patterns/app-shell.md +34 -0
- package/content/patterns/dashboard.md +36 -0
- package/content/patterns/data-screen.md +30 -0
- package/content/patterns/detail-page.md +31 -0
- package/content/patterns/docs.md +34 -0
- package/content/patterns/focus-task.md +34 -0
- package/content/patterns/landing.md +35 -0
- package/content/patterns/list-page.md +32 -0
- package/content/patterns/mobile.md +31 -0
- package/content/patterns/settings-page.md +33 -0
- package/content/patterns/workspace.md +32 -0
- package/dist/cli/apps-typecheck.test.d.ts +11 -0
- package/dist/cli/docs.d.ts +2 -0
- package/dist/cli/docs.mjs +10961 -0
- package/dist/cli/home-flash.test.d.ts +1 -0
- package/dist/{components → client/components}/Accordion/Accordion.d.ts +1 -1
- package/dist/client/components/ActionSheet/ActionSheet.d.ts +37 -0
- package/dist/{components → client/components}/Affix/Affix.d.ts +1 -1
- package/dist/{components → client/components}/AiChat/AiChat.d.ts +3 -3
- package/dist/{components → client/components}/Alert/Alert.d.ts +1 -1
- package/dist/{components → client/components}/AlertGroup/AlertGroup.d.ts +1 -1
- package/dist/{components → client/components}/Anchor/Anchor.d.ts +1 -1
- package/dist/client/components/AppShell/AppShell.d.ts +55 -0
- package/dist/{components → client/components}/ApprovalCard/ApprovalCard.d.ts +2 -2
- package/dist/{components → client/components}/AspectRatio/AspectRatio.d.ts +1 -1
- package/dist/{components → client/components}/AuthPage/AuthPage.d.ts +2 -2
- package/dist/{components → client/components}/AutoComplete/AutoComplete.d.ts +1 -1
- package/dist/{components → client/components}/Avatar/Avatar.d.ts +1 -1
- package/dist/{components → client/components}/AvatarGroup/AvatarGroup.d.ts +1 -1
- package/dist/{components → client/components}/BackTop/BackTop.d.ts +1 -1
- package/dist/{components → client/components}/Badge/Badge.d.ts +1 -1
- package/dist/{components → client/components}/Breadcrumb/Breadcrumb.d.ts +1 -1
- package/dist/{components → client/components}/Button/Button.d.ts +1 -1
- package/dist/{components → client/components}/Calendar/Calendar.d.ts +1 -1
- package/dist/{components → client/components}/Card/Card.d.ts +1 -1
- package/dist/{components → client/components}/Carousel/Carousel.d.ts +1 -1
- package/dist/{components → client/components}/Cascader/Cascader.d.ts +1 -1
- package/dist/{components → client/components}/Chart/Chart.d.ts +1 -1
- package/dist/{components → client/components}/Chart/chart-utils.d.ts +5 -1
- package/dist/{components → client/components}/ChatInput/ChatInput.d.ts +7 -7
- package/dist/{components → client/components}/Checkbox/Checkbox.d.ts +1 -1
- package/dist/{components → client/components}/CheckboxGroup/CheckboxGroup.d.ts +1 -1
- package/dist/{components → client/components}/CitationCard/CitationCard.d.ts +3 -3
- package/dist/{components → client/components}/CodeBlock/CodeBlock.d.ts +1 -1
- package/dist/client/components/CodeEditor/CodeEditor.d.ts +18 -0
- package/dist/{components → client/components}/Collapse/Collapse.d.ts +1 -1
- package/dist/{components → client/components}/ColorPicker/ColorPicker.d.ts +1 -1
- package/dist/{components → client/components}/Command/Command.d.ts +1 -1
- package/dist/{components → client/components}/Confirm/Confirm.d.ts +2 -7
- package/dist/{components → client/components}/ContextMenu/ContextMenu.d.ts +1 -1
- package/dist/{components → client/components}/CopyButton/CopyButton.d.ts +1 -1
- package/dist/{components → client/components}/DatePicker/DatePicker.d.ts +2 -2
- package/dist/{components → client/components}/Descriptions/Descriptions.d.ts +1 -1
- package/dist/{components → client/components}/DiffView/DiffView.d.ts +1 -1
- package/dist/{components → client/components}/Divider/Divider.d.ts +1 -1
- package/dist/{components → client/components}/Drawer/Drawer.d.ts +1 -1
- package/dist/{components → client/components}/Dropdown/Dropdown.d.ts +1 -1
- package/dist/{components → client/components}/Editor/Editor.d.ts +1 -1
- package/dist/{components → client/components}/Editor/tools/toolbar.d.ts +1 -1
- package/dist/{components → client/components}/EmptyState/EmptyState.d.ts +1 -1
- package/dist/client/components/ExportCSV/ExportCSV.d.ts +30 -0
- package/dist/{components → client/components}/Field/Field.d.ts +1 -1
- package/dist/{components → client/components}/FilePreview/FilePreview.d.ts +1 -1
- package/dist/client/components/FileTree/FileTree.d.ts +57 -0
- package/dist/{components → client/components}/FileUpload/FileUpload.d.ts +1 -1
- package/dist/{components → client/components}/FloatButton/FloatButton.d.ts +1 -1
- package/dist/{components → client/components}/Form/Form.d.ts +1 -1
- package/dist/{components → client/components}/Grid/Grid.d.ts +1 -1
- package/dist/{components → client/components}/Highlight/Highlight.d.ts +1 -1
- package/dist/{components → client/components}/HoverCard/HoverCard.d.ts +5 -4
- package/dist/{components → client/components}/Icon/Icon.d.ts +2 -2
- package/dist/client/components/ImageCropper/ImageCropper.d.ts +17 -0
- package/dist/{components → client/components}/Img/Img.d.ts +1 -1
- package/dist/{components → client/components}/InView/InView.d.ts +1 -1
- package/dist/{components → client/components}/InfiniteScroll/InfiniteScroll.d.ts +1 -1
- package/dist/{components → client/components}/Input/Input.d.ts +1 -1
- package/dist/{components → client/components}/InputNumber/InputNumber.d.ts +1 -1
- package/dist/{components → client/components}/JSONViewer/JSONViewer.d.ts +1 -1
- package/dist/{components → client/components}/JsonSchemaForm/JsonSchemaForm.d.ts +3 -3
- package/dist/{components → client/components}/Kanban/Kanban.d.ts +1 -1
- package/dist/{components → client/components}/Label/Label.d.ts +1 -1
- package/dist/{components → client/components}/Layout/Layout.d.ts +1 -1
- package/dist/{components → client/components}/Link/Link.d.ts +1 -1
- package/dist/{components → client/components}/List/List.d.ts +1 -1
- package/dist/{components → client/components}/Loading/Loading.d.ts +1 -1
- package/dist/{components → client/components}/LogViewer/LogViewer.d.ts +1 -1
- package/dist/{components → client/components}/Markdown/Markdown.d.ts +1 -1
- package/dist/client/components/MarkdownEditor/MarkdownEditor.d.ts +18 -0
- package/dist/client/components/Math/Math.d.ts +15 -0
- package/dist/{components → client/components}/Mentions/Mentions.d.ts +1 -1
- package/dist/{components → client/components}/Menu/Menu.d.ts +1 -1
- package/dist/{components → client/components}/Menubar/Menubar.d.ts +1 -1
- package/dist/{components → client/components}/MessageBubble/MessageBubble.d.ts +1 -1
- package/dist/{components → client/components}/Modal/Modal.d.ts +1 -1
- package/dist/{components → client/components}/NavMenu/NavMenu.d.ts +2 -2
- package/dist/{components → client/components}/Notification/Notification.d.ts +7 -2
- package/dist/{components → client/components}/PageHeader/PageHeader.d.ts +1 -1
- package/dist/{components → client/components}/Pagination/Pagination.d.ts +1 -1
- package/dist/{components → client/components}/PasswordInput/PasswordInput.d.ts +1 -1
- package/dist/{components → client/components}/PinInput/PinInput.d.ts +1 -1
- package/dist/{components → client/components}/Pipeline/Pipeline.d.ts +1 -1
- package/dist/{components → client/components}/Popconfirm/Popconfirm.d.ts +2 -2
- package/dist/{components → client/components}/Popover/Popover.d.ts +5 -4
- package/dist/{components → client/components}/ProgressBar/ProgressBar.d.ts +1 -1
- package/dist/client/components/PromptTemplate/PromptTemplate.d.ts +37 -0
- package/dist/{components → client/components}/QRCode/QRCode.d.ts +1 -1
- package/dist/{components → client/components}/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/{components → client/components}/Rate/Rate.d.ts +1 -1
- package/dist/{components → client/components}/ReasoningBlock/ReasoningBlock.d.ts +3 -3
- package/dist/client/components/RelationGraph/RelationGraph.d.ts +59 -0
- package/dist/{components → client/components}/Resizable/Resizable.d.ts +1 -1
- package/dist/{components → client/components}/Result/Result.d.ts +1 -1
- package/dist/{components → client/components}/Scrollbar/Scrollbar.d.ts +1 -1
- package/dist/{components → client/components}/SearchInput/SearchInput.d.ts +1 -1
- package/dist/{components → client/components}/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/{components → client/components}/Select/Select.d.ts +1 -1
- package/dist/{components → client/components}/SessionList/SessionList.d.ts +3 -3
- package/dist/{components → client/components}/SheetGrid/SheetGrid.d.ts +1 -1
- package/dist/{components → client/components}/Skeleton/Skeleton.d.ts +1 -1
- package/dist/{components → client/components}/SlideCanvas/SlideCanvas.d.ts +1 -1
- package/dist/client/components/Slider/Slider.d.ts +27 -0
- package/dist/client/components/SortableList/SortableList.d.ts +23 -0
- package/dist/{components → client/components}/Space/Space.d.ts +1 -1
- package/dist/{components → client/components}/Sparkline/Sparkline.d.ts +1 -1
- package/dist/{components → client/components}/StatCard/StatCard.d.ts +1 -1
- package/dist/{components → client/components}/Steps/Steps.d.ts +1 -1
- package/dist/{components → client/components}/Switch/Switch.d.ts +1 -1
- package/dist/client/components/TabBar/TabBar.d.ts +35 -0
- package/dist/{components → client/components}/Table/Table.d.ts +7 -1
- package/dist/client/components/Tabs/Tabs.d.ts +22 -0
- package/dist/{components → client/components}/Tag/Tag.d.ts +1 -1
- package/dist/{components → client/components}/TagsInput/TagsInput.d.ts +1 -1
- package/dist/{components → client/components}/Textarea/Textarea.d.ts +1 -1
- package/dist/{components → client/components}/ThemeSwitch/ThemeSwitch.d.ts +1 -1
- package/dist/{components → client/components}/Timeline/Timeline.d.ts +1 -1
- package/dist/{components → client/components}/Toast/Toast.d.ts +1 -1
- package/dist/{components → client/components}/ToggleGroup/ToggleGroup.d.ts +1 -1
- package/dist/{components → client/components}/ToolCallCard/ToolCallCard.d.ts +2 -2
- package/dist/{components → client/components}/Tooltip/Tooltip.d.ts +4 -3
- package/dist/{components → client/components}/Tour/Tour.d.ts +1 -1
- package/dist/{components → client/components}/Transfer/Transfer.d.ts +1 -1
- package/dist/{components → client/components}/Tree/Tree.d.ts +5 -1
- package/dist/{components → client/components}/TreeSelect/TreeSelect.d.ts +5 -1
- package/dist/{components → client/components}/Typography/Typography.d.ts +1 -1
- package/dist/client/components/VideoPlayer/VideoPlayer.d.ts +25 -0
- package/dist/{components → client/components}/VirtualList/VirtualList.d.ts +1 -1
- package/dist/{components → client/components}/VirtualTable/VirtualTable.d.ts +1 -1
- package/dist/{components → client/components}/Watermark/Watermark.d.ts +1 -1
- package/dist/client/components/Wave/Wave.d.ts +15 -0
- package/dist/{components → client/components}/index.d.ts +44 -5
- package/dist/client/components/index.js +57 -0
- package/dist/{components → client/components}/style.css +1081 -98
- package/dist/{layout → client/layout}/weifuwu-layout.css +60 -6
- package/dist/{office → client/office}/xml-serialize.d.ts +1 -1
- package/dist/client/vdom/browser/Browser.d.ts +73 -0
- package/dist/client/vdom/browser/create-client-browser.d.ts +11 -0
- package/dist/client/vdom/commands.d.ts +19 -0
- package/dist/client/vdom/context/UIContext.d.ts +61 -0
- package/dist/client/vdom/context/data.d.ts +17 -0
- package/dist/client/vdom/core/async-guard.d.ts +20 -0
- package/dist/client/vdom/core/build.d.ts +36 -0
- package/dist/client/vdom/core/command/create.d.ts +25 -0
- package/dist/client/vdom/core/command/index.d.ts +15 -0
- package/dist/client/vdom/core/command/insert.d.ts +32 -0
- package/dist/client/vdom/core/command/lifecycle.d.ts +47 -0
- package/dist/client/vdom/core/command/props.d.ts +22 -0
- package/dist/client/vdom/core/diff/attrs.d.ts +10 -0
- package/dist/client/vdom/core/diff/children.d.ts +29 -0
- package/dist/client/vdom/core/diff/cleanup.d.ts +44 -0
- package/dist/client/vdom/core/diff/index.d.ts +22 -0
- package/dist/client/vdom/core/diff/output.d.ts +30 -0
- package/dist/client/vdom/core/diff/same.d.ts +22 -0
- package/dist/client/vdom/core/field/attributes.d.ts +15 -0
- package/dist/client/vdom/core/field/events.d.ts +54 -0
- package/dist/client/vdom/core/field/index.d.ts +19 -0
- package/dist/client/vdom/core/field/key.d.ts +16 -0
- package/dist/client/vdom/core/field/props.d.ts +15 -0
- package/dist/client/vdom/core/field/ref.d.ts +38 -0
- package/dist/client/vdom/core/field/style.d.ts +17 -0
- package/dist/client/vdom/core/node/children.d.ts +20 -0
- package/dist/client/vdom/core/node/component.d.ts +93 -0
- package/dist/client/vdom/core/node/fragment.d.ts +14 -0
- package/dist/client/vdom/core/node/hole.d.ts +22 -0
- package/dist/client/vdom/core/node/index.d.ts +35 -0
- package/dist/client/vdom/core/node/keyed.d.ts +64 -0
- package/dist/client/vdom/core/node/native.d.ts +20 -0
- package/dist/client/vdom/core/node/portal.d.ts +11 -0
- package/dist/client/vdom/core/patch/fields.d.ts +15 -0
- package/dist/client/vdom/core/patch/index.d.ts +51 -0
- package/dist/client/vdom/core/patch/processors.d.ts +75 -0
- package/dist/client/vdom/core/patch/state-machine.d.ts +38 -0
- package/dist/client/vdom/core/patch/verify.d.ts +17 -0
- package/dist/client/vdom/core/router.d.ts +31 -0
- package/dist/client/vdom/core/serve.d.ts +75 -0
- package/dist/client/vdom/core/ssr/absorb.d.ts +53 -0
- package/dist/client/vdom/core/ssr/html.d.ts +32 -0
- package/dist/client/vdom/core/ssr/index.d.ts +25 -0
- package/dist/client/vdom/core/transform/component.d.ts +23 -0
- package/dist/client/vdom/core/transform/element.d.ts +21 -0
- package/dist/client/vdom/core/transform/fragment.d.ts +21 -0
- package/dist/client/vdom/core/transform/hole.d.ts +13 -0
- package/dist/client/vdom/core/transform/index.d.ts +46 -0
- package/dist/client/vdom/core/transform/states.d.ts +22 -0
- package/dist/client/vdom/core/transform/table.d.ts +28 -0
- package/dist/client/vdom/core/transform/text.d.ts +10 -0
- package/dist/client/vdom/core/vnode.d.ts +45 -0
- package/dist/client/vdom/dev/effect-guard.d.ts +8 -0
- package/dist/client/vdom/hooks/ai-stream.d.ts +46 -0
- package/dist/client/vdom/hooks/basic.d.ts +42 -0
- package/dist/client/vdom/hooks/chat.d.ts +91 -0
- package/dist/client/vdom/hooks/controlled.d.ts +27 -0
- package/dist/client/vdom/hooks/drag-media.d.ts +52 -0
- package/dist/client/vdom/hooks/env.d.ts +119 -0
- package/dist/client/vdom/hooks/input.d.ts +43 -0
- package/dist/client/vdom/hooks/observe.d.ts +60 -0
- package/dist/client/vdom/hooks/popup-manager.d.ts +92 -0
- package/dist/client/vdom/hooks/popup.d.ts +52 -0
- package/dist/client/vdom/hooks/stable.d.ts +45 -0
- package/dist/client/vdom/index.d.ts +67 -0
- package/dist/client/vdom/index.js +8 -0
- package/dist/client/vdom/jsx-runtime.d.ts +28 -0
- package/dist/client/vdom/jsx-runtime.js +1 -0
- package/dist/client/vdom/middlewares/api.d.ts +38 -0
- package/dist/client/vdom/middlewares/auth-i18n.d.ts +66 -0
- package/dist/client/vdom/middlewares/ws.d.ts +37 -0
- package/dist/client/vdom/store.d.ts +49 -0
- package/dist/client/vdom/testing.d.ts +46 -0
- package/dist/client/vdom/testing.js +2 -0
- package/dist/dev/index.d.ts +12 -0
- package/dist/dev/index.js +4 -4
- package/dist/{ai → server/ai}/contracts.d.ts +1 -1
- package/dist/{ai → server/ai}/index.d.ts +2 -2
- package/dist/{ai → server/ai}/types.d.ts +1 -1
- package/dist/{core → server/core}/router.d.ts +2 -4
- package/dist/{db → server/db}/contracts.d.ts +1 -1
- package/dist/server/db/postgres-server.d.ts +37 -0
- package/dist/server/db/redis-server.d.ts +32 -0
- package/dist/server/db/server.d.ts +30 -0
- package/dist/server/db/test-servers.d.ts +21 -0
- package/dist/{email → server/email}/contracts.d.ts +1 -1
- package/dist/{index.js → server/index.js} +3145 -2487
- package/dist/{ui → server/ui}/index.d.ts +2 -2
- package/dist/{user → server/user}/token.d.ts +1 -1
- package/dist/shared/router/trie.d.ts +61 -0
- package/docs/components-map.md +5 -5
- package/docs/style-guide.md +14 -2
- package/examples/apps/admin/README.md +23 -0
- package/examples/apps/admin/api.ts +27 -0
- package/examples/apps/admin/app.tsx +144 -0
- package/examples/apps/admin/main.tsx +8 -0
- package/examples/apps/admin/server.ts +37 -0
- package/examples/apps/auth/README.md +23 -0
- package/examples/apps/auth/api.ts +49 -0
- package/examples/apps/auth/app.tsx +137 -0
- package/examples/apps/auth/main.tsx +8 -0
- package/examples/apps/auth/server.ts +37 -0
- package/examples/apps/multi/README.md +23 -0
- package/examples/apps/multi/app.tsx +83 -0
- package/examples/apps/multi/main.tsx +8 -0
- package/examples/apps/multi/server.ts +33 -0
- package/examples/apps/todo/README.md +23 -0
- package/examples/apps/todo/api.ts +26 -0
- package/examples/apps/todo/app.tsx +128 -0
- package/examples/apps/todo/main.tsx +9 -0
- package/examples/apps/todo/server.ts +39 -0
- package/examples/hello-world/README.md +9 -0
- package/examples/hello-world/client.ts +14 -0
- package/examples/hello-world/routes.tsx +26 -0
- package/examples/hello-world/server.ts +46 -0
- package/examples/patterns/AppShell.tsx +224 -0
- package/examples/patterns/Dashboard.tsx +153 -0
- package/examples/patterns/DataScreen.tsx +104 -0
- package/examples/patterns/DetailPage.tsx +79 -0
- package/examples/patterns/Docs.tsx +105 -0
- package/examples/patterns/FocusTask.tsx +67 -0
- package/examples/patterns/Landing.tsx +90 -0
- package/examples/patterns/ListPage.tsx +77 -0
- package/examples/patterns/Mobile.tsx +154 -0
- package/examples/patterns/SettingsPage.tsx +98 -0
- package/examples/patterns/SplitWorkspace.tsx +113 -0
- package/package.json +61 -29
- package/dist/components/Slider/Slider.d.ts +0 -19
- package/dist/components/Tabs/Tabs.d.ts +0 -12
- package/dist/components/index.js +0 -55
- package/dist/ui-dom/Confirm.d.ts +0 -8
- package/dist/ui-dom/Notification.d.ts +0 -8
- package/dist/ui-dom/Toast.d.ts +0 -8
- package/dist/ui-dom/ai.d.ts +0 -59
- package/dist/ui-dom/browser.d.ts +0 -10
- package/dist/ui-dom/debug.d.ts +0 -21
- package/dist/ui-dom/hooks/chat.d.ts +0 -11
- package/dist/ui-dom/hooks/events.d.ts +0 -30
- package/dist/ui-dom/hooks/external.d.ts +0 -20
- package/dist/ui-dom/hooks/index.d.ts +0 -29
- package/dist/ui-dom/hooks/input.d.ts +0 -33
- package/dist/ui-dom/hooks/media.d.ts +0 -17
- package/dist/ui-dom/hooks/popup.d.ts +0 -30
- package/dist/ui-dom/hooks/stable.d.ts +0 -35
- package/dist/ui-dom/hooks/types.d.ts +0 -77
- package/dist/ui-dom/i18n.d.ts +0 -31
- package/dist/ui-dom/index.d.ts +0 -47
- package/dist/ui-dom/index.js +0 -41
- package/dist/ui-dom/jsx-runtime.d.ts +0 -4
- package/dist/ui-dom/jsx-runtime.js +0 -1
- package/dist/ui-dom/locale/en_US.d.ts +0 -69
- package/dist/ui-dom/locale/zh_CN.d.ts +0 -69
- package/dist/ui-dom/middleware/api.d.ts +0 -91
- package/dist/ui-dom/middleware/auth.d.ts +0 -30
- package/dist/ui-dom/middleware/ws.d.ts +0 -33
- package/dist/ui-dom/motion.d.ts +0 -8
- package/dist/ui-dom/popup-tracker.d.ts +0 -36
- package/dist/ui-dom/popup.d.ts +0 -42
- package/dist/ui-dom/store.d.ts +0 -24
- package/dist/ui-dom/testing.d.ts +0 -68
- package/dist/ui-dom/testing.js +0 -7
- package/dist/ui-dom/types.d.ts +0 -634
- package/dist/ui-dom/use-chat.d.ts +0 -95
- package/dist/ui-dom/vdom3/README.d.ts +0 -32
- package/dist/ui-dom/vdom3/app.d.ts +0 -20
- package/dist/ui-dom/vdom3/audit.d.ts +0 -29
- package/dist/ui-dom/vdom3/build.d.ts +0 -20
- package/dist/ui-dom/vdom3/commands.d.ts +0 -21
- package/dist/ui-dom/vdom3/comp-index.d.ts +0 -18
- package/dist/ui-dom/vdom3/delegate.d.ts +0 -53
- package/dist/ui-dom/vdom3/events.d.ts +0 -17
- package/dist/ui-dom/vdom3/index.d.ts +0 -42
- package/dist/ui-dom/vdom3/jsx.d.ts +0 -32
- package/dist/ui-dom/vdom3/record.d.ts +0 -16
- package/dist/ui-dom/vdom3/registry.d.ts +0 -30
- package/dist/ui-dom/vdom3/render.d.ts +0 -39
- package/dist/ui-dom/vdom3/replay.d.ts +0 -28
- package/dist/ui-dom/vdom3/root.d.ts +0 -24
- package/dist/ui-dom/vdom3/router.d.ts +0 -31
- package/dist/ui-dom/vdom3/scheduler.d.ts +0 -23
- package/dist/ui-dom/vdom3/ssr.d.ts +0 -27
- package/dist/ui-dom/vdom3/sync.d.ts +0 -22
- package/dist/ui-dom/vdom3/types.d.ts +0 -173
- package/dist/ui-dom/vdom3/ui.d.ts +0 -16
- package/dist/ui-dom/vdom3.js +0 -41
- package/dist/ui-dom/vnode.d.ts +0 -13
- /package/dist/{make-executable-schema.test.d.ts → cli/content-sync.test.d.ts} +0 -0
- /package/dist/{ui-dom/testing.test.d.ts → cli/docs-cli.test.d.ts} +0 -0
- /package/dist/{components → client/components}/CodeBlock/highlight.d.ts +0 -0
- /package/dist/{components → client/components}/DatePicker/calendar-utils.d.ts +0 -0
- /package/dist/{components → client/components}/DiffView/diff-utils.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/edit-events.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/apply.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/diff.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/dom.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/history.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/html.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/inverse.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/model/types.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/tools/table.d.ts +0 -0
- /package/dist/{components → client/components}/Editor/tools/types.d.ts +0 -0
- /package/dist/{components → client/components}/FilePreview/markdown.d.ts +0 -0
- /package/dist/{components → client/components}/Markdown/parser.d.ts +0 -0
- /package/dist/{components → client/components}/OfficeEditor/ai/ai-bridge.d.ts +0 -0
- /package/dist/{components → client/components}/OfficeEditor/model/apply.d.ts +0 -0
- /package/dist/{components → client/components}/OfficeEditor/model/types.d.ts +0 -0
- /package/dist/{components → client/components}/Pipeline/dag-utils.d.ts +0 -0
- /package/dist/{components → client/components}/QRCode/qr.d.ts +0 -0
- /package/dist/{components → client/components}/Sparkline/sparkline-utils.d.ts +0 -0
- /package/dist/{office → client/office}/docx.d.ts +0 -0
- /package/dist/{office → client/office}/pptx.d.ts +0 -0
- /package/dist/{office → client/office}/xlsx.d.ts +0 -0
- /package/dist/{office → client/office}/xml.d.ts +0 -0
- /package/dist/{office → client/office}/zip.d.ts +0 -0
- /package/dist/{ai → server/ai}/agent.d.ts +0 -0
- /package/dist/{ai → server/ai}/client.d.ts +0 -0
- /package/dist/{ai → server/ai}/sse.d.ts +0 -0
- /package/dist/{core → server/core}/serve.d.ts +0 -0
- /package/dist/{core → server/core}/ws.d.ts +0 -0
- /package/dist/{db → server/db}/errors.d.ts +0 -0
- /package/dist/{db → server/db}/memory-redis.d.ts +0 -0
- /package/dist/{db → server/db}/memory-sql.d.ts +0 -0
- /package/dist/{db → server/db}/postgres/connection.d.ts +0 -0
- /package/dist/{db → server/db}/postgres/pool.d.ts +0 -0
- /package/dist/{db → server/db}/postgres/protocol.d.ts +0 -0
- /package/dist/{db → server/db}/postgres/schema.d.ts +0 -0
- /package/dist/{db → server/db}/query-builder.d.ts +0 -0
- /package/dist/{db → server/db}/query.d.ts +0 -0
- /package/dist/{db → server/db}/redis/client.d.ts +0 -0
- /package/dist/{db → server/db}/redis/commands.d.ts +0 -0
- /package/dist/{db → server/db}/redis/connection.d.ts +0 -0
- /package/dist/{db → server/db}/redis/pipeline.d.ts +0 -0
- /package/dist/{db → server/db}/redis/pool.d.ts +0 -0
- /package/dist/{db → server/db}/redis/resp.d.ts +0 -0
- /package/dist/{db → server/db}/redis/subscriber.d.ts +0 -0
- /package/dist/{db → server/db}/sql-parser.d.ts +0 -0
- /package/dist/{email → server/email}/index.d.ts +0 -0
- /package/dist/{email → server/email}/smtp.d.ts +0 -0
- /package/dist/{graphql.d.ts → server/graphql.d.ts} +0 -0
- /package/dist/{index.d.ts → server/index.d.ts} +0 -0
- /package/dist/{make-executable-schema.d.ts → server/make-executable-schema.d.ts} +0 -0
- /package/dist/{messager → server/messager}/index.d.ts +0 -0
- /package/dist/{middleware → server/middleware}/cors.d.ts +0 -0
- /package/dist/{middleware → server/middleware}/rate-limit.d.ts +0 -0
- /package/dist/{middleware → server/middleware}/static.d.ts +0 -0
- /package/dist/{postgres → server/postgres}/client.d.ts +0 -0
- /package/dist/{postgres → server/postgres}/index.d.ts +0 -0
- /package/dist/{postgres → server/postgres}/types.d.ts +0 -0
- /package/dist/{queue → server/queue}/index.d.ts +0 -0
- /package/dist/{redis → server/redis}/client.d.ts +0 -0
- /package/dist/{redis → server/redis}/index.d.ts +0 -0
- /package/dist/{redis → server/redis}/types.d.ts +0 -0
- /package/dist/{request.d.ts → server/request.d.ts} +0 -0
- /package/dist/{response.d.ts → server/response.d.ts} +0 -0
- /package/dist/{scheduler → server/scheduler}/cron.d.ts +0 -0
- /package/dist/{scheduler → server/scheduler}/index.d.ts +0 -0
- /package/dist/{types.d.ts → server/types.d.ts} +0 -0
- /package/dist/{ui → server/ui}/html-safe.d.ts +0 -0
- /package/dist/{user → server/user}/index.d.ts +0 -0
- /package/dist/{user → server/user}/password.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# weifuwu
|
|
2
2
|
|
|
3
|
-
**自托管全栈框架** — 一个 npm 包 = 后端 HTTP + 前端 VDOM +
|
|
3
|
+
**自托管全栈框架** — 一个 npm 包 = 后端 HTTP + 前端 VDOM + 129 组件 + CSS 设计系统 + SaaS 地基(认证 / 消息 / 队列 / AI)。全自研、零构建、消灭样板。
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm install weifuwu # 一个依赖,完整应用栈
|
|
@@ -28,9 +28,9 @@ npm install weifuwu # 一个依赖,完整应用栈
|
|
|
28
28
|
| 层 | 入口 | 能力 |
|
|
29
29
|
|----|------|------|
|
|
30
30
|
| 后端 | `weifuwu` | Trie 路由 / 中间件链 / serve / 自研 PG+Redis / SSR / GraphQL / WebSocket |
|
|
31
|
-
| 前端 | `weifuwu/ui-dom` | **vdom3 精准事件流引擎**——createRouter(路由)+ createRoot(挂载)+ 事件流(渲染本体:`entity:action` 统一命名、DOM = fold、可回放可断言)+ SSR(事件流序列化);组件=两阶段异步组件 / ctx.params 对齐后端;**weifuwu/components 直接复用**(VNode 契约唯一来源 ui-dom,见 `
|
|
32
|
-
| 组件 | `weifuwu/components` |
|
|
33
|
-
| 样式 | `weifuwu/layout` | 66 布局原语 +
|
|
31
|
+
| 前端 | `weifuwu/ui-dom` | **vdom3 精准事件流引擎**——createRouter(路由)+ createRoot(挂载)+ 事件流(渲染本体:`entity:action` 统一命名、DOM = fold、可回放可断言)+ SSR(事件流序列化);组件=两阶段异步组件 / ctx.params 对齐后端;**weifuwu/components 直接复用**(VNode 契约唯一来源 ui-dom,见 `content/guides/ui-dom-guide.md`) |
|
|
32
|
+
| 组件 | `weifuwu/components` | 129 个 HTML 原语组件(表单/表格/弹层/AiChat…),引用 `--wf-*` 主题变量 |
|
|
33
|
+
| 样式 | `weifuwu/layout` | 66 布局原语 + 157 工具类 + 182 主题 Token,零自定义 CSS 文件 |
|
|
34
34
|
| SaaS 地基 | 随包内置 | rateLimit / email / userSystem / messager / queue / ai → `ctx.*` 一行接入 |
|
|
35
35
|
|
|
36
36
|
> ⚠️ **注意:前后端都有 `ctx.ui`,但用途完全不同**
|
|
@@ -96,7 +96,7 @@ npm install weifuwu # 一个依赖,完整应用栈
|
|
|
96
96
|
|
|
97
97
|
**两阶段组件模型** — 组件 = `async (initProps, ctx) => (props) => Promise<VNode>`。外层工厂只执行一次(mount,可 await 数据),内层 renderFn 每次状态/props 变化时执行(强制异步)。无 class、无 `this`、无 Hook——**位置即语义**:外层天生只跑一次,没有 hooks 规则、没有依赖数组、没有闭包陷阱(详解见[核心概念](#核心概念))。
|
|
98
98
|
|
|
99
|
-
**render-only 确定性渲染** — 渲染唯一触发 `ctx.ui.render()`(闭包绑定组件),状态是普通对象(`let` + `render()`);跨组件共享用 `createStore` + `ctx.ui.useExternal()`。行为可静态推导,无隐式触发(详见[组件库](
|
|
99
|
+
**render-only 确定性渲染** — 渲染唯一触发 `ctx.ui.render()`(闭包绑定组件),状态是普通对象(`let` + `render()`);跨组件共享用 `createStore` + `ctx.ui.useExternal()`。行为可静态推导,无隐式触发(详见[组件库](content/guides/components-guide.md))。
|
|
100
100
|
|
|
101
101
|
**VDOM 输出透明(写 JSX,看 DOM 即真相)** — VDOM 对用户输入零 magic:条件渲染的 false 在 DOM 里是诊断占位注释(`<!--wf-hole: false-->`),数组项 key 与组件实例 id 直接落 DOM(`data-wf-key` / `data-wf-id`)——devtools 看到的 DOM 就是引擎决策的可读输出;非法输入占位 + warn,不崩溃不静默。转化契约唯一清晰:用户写什么,vnode 就是什么,DOM 就长什么样(规则表为内部开发契约)。
|
|
102
102
|
|
|
@@ -108,15 +108,15 @@ npm install weifuwu # 一个依赖,完整应用栈
|
|
|
108
108
|
|
|
109
109
|
**AI 是一等公民** — 自研 OpenAI 兼容协议(`docs/ai-contract.md`)+ 零依赖流式客户端 + agent 工具循环 + HITL 人工审批 + embedding 向量化。后端 `ctx.ai` 一个入口:`chat()` / `stream()` / `agent()`(`stream(messages, { emit })` emitter 抽象——事件可接任意通道,`runToResult()` 结构化结果)/ `approve()` / `embed()` / `embedMany()`;前端 `ctx.ui.useChat()`(会话语义)+ `AiChat` 组件(标准对话界面)——流式 token / 工具调用卡 / 审批卡开箱即用,协议对页面完全透明,不用 ai-sdk。
|
|
110
110
|
|
|
111
|
-
**SaaS 地基随包内置** — rateLimit(限流)/ email(邮件)/ userSystem(用户认证)/ messager(消息系统)/ queue(可靠队列)以中间件形态随包提供,`app.use(...)` 一行接入(详见[SaaS 地基模块](
|
|
111
|
+
**SaaS 地基随包内置** — rateLimit(限流)/ email(邮件)/ userSystem(用户认证)/ messager(消息系统)/ queue(可靠队列)以中间件形态随包提供,`app.use(...)` 一行接入(详见[SaaS 地基模块](content/guides/saas-guide.md))。互相咬合成协作基础:身份(userSystem)+ 消息(messager)的组合让「谁能跟谁说话、消息如何送达」天然对齐,不再需要第三套权限系统。
|
|
112
112
|
|
|
113
113
|
**机制与策略分离** — 框架管**机制**(token 怎么签、消息怎么送达、agent 循环怎么跑),开发者管**策略**(谁能建群、租户隔离 SQL、技能注册表)。这是「诚实裁剪」的积极面:**框架不越界,应用层不被绑架**——agent-platform 迁移验证了边界:多租户隔离(`WHERE tenant_id`)、技能编排、聊天产品模型留在应用层,框架守住通用能力(auth / ai / messager / UI / 数据管道)。
|
|
114
114
|
|
|
115
|
-
**零自定义 CSS 设计系统** — 一个 CSS 文件 = 双层 Token + 布局原语 + 工具类 + 组件样式。业务页面不写 style.css:组件 + `wf-*` 原语写业务,主题改一个值(`--wf-brand-seed` 换肤 / `data-preset` 预设 / `--wf-btn-radius` 钩子),暗色自动(详见[布局系统](
|
|
115
|
+
**零自定义 CSS 设计系统** — 一个 CSS 文件 = 双层 Token + 布局原语 + 工具类 + 组件样式。业务页面不写 style.css:组件 + `wf-*` 原语写业务,主题改一个值(`--wf-brand-seed` 换肤 / `data-preset` 预设 / `--wf-btn-radius` 钩子),暗色自动(详见[布局系统](content/guides/layout-guide.md)与[主题配置](content/guides/styling.md))。
|
|
116
116
|
|
|
117
117
|
**自研数据层** — `ctx.sql`(PG v3 协议)与 `ctx.redis`(RESP2 协议)为**自研客户端**:确定性输出、行为可预测、统一错误模型。jsonb 自动解码、TTL 安全 API、schema 写前校验——高频痛点(双重编码/parseRow 样板/`'EX'` 参数顺序)从根上消除。
|
|
118
118
|
|
|
119
|
-
> **实践验证**:多租户 AI 平台(`apps/agent-platform`——14 页 + 部门聊天 + 知识库 + HITL 审批)已完全运行在框架上:auth(userSystem)/ AI 引擎(ai)/ 实时消息(messager)/ UI(
|
|
119
|
+
> **实践验证**:多租户 AI 平台(`apps/agent-platform`——14 页 + 部门聊天 + 知识库 + HITL 审批)已完全运行在框架上:auth(userSystem)/ AI 引擎(ai)/ 实时消息(messager)/ UI(129 组件)/ 数据管道(ctx.api)零自研替代。框架哲学(中间件注入、诚实裁剪、机制与策略分离)经受住了真实复杂应用的检验——这也是我们确定「哪些进框架、哪些留应用层」的依据。
|
|
120
120
|
|
|
121
121
|
---
|
|
122
122
|
|
|
@@ -232,9 +232,9 @@ createRouter(routes, root) // 之后正常交
|
|
|
232
232
|
### 30 秒体验(跑现有 demo)
|
|
233
233
|
|
|
234
234
|
```bash
|
|
235
|
-
# ①
|
|
236
|
-
cd apps/
|
|
237
|
-
# 打开 http://localhost:
|
|
235
|
+
# ① showcase——weifuwu 发展引擎:组件/页面/应用/后端/能力/指南 一站式(活体 demo + 文档同源)
|
|
236
|
+
cd apps/showcase && node server.ts
|
|
237
|
+
# 打开 http://localhost:3200(LLM: curl /llms.txt)
|
|
238
238
|
|
|
239
239
|
# ② 全栈 SaaS 示例——多租户 AI 平台(auth / AI 对话 / 部门聊天 / 知识库 / HITL 审批)
|
|
240
240
|
docker compose up -d postgres redis # 仓库根目录
|
|
@@ -244,6 +244,15 @@ cd apps/agent-platform && npm run seed && npm run dev
|
|
|
244
244
|
|
|
245
245
|
> 想**零后端、零构建**最快跑起来?直接跳到下面的「CDN 快速原型」——一个 `.html` 文件即可。
|
|
246
246
|
|
|
247
|
+
### 📦 安装后离线文档(content/ 随包发布)
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
npm i weifuwu
|
|
251
|
+
npx weifuwu docs # → http://localhost:4000 本地文档站(组件 API 表/纪律/示例/验证)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
`node_modules/weifuwu/content/` 是完整文档库(逐组件文档 + 页面/应用模板 + 后端能力 + 指南 + 选型决策树 + 人类质量标准)——版本永远匹配安装的代码;`examples/` 是可复制源码(页面模式 + 应用模板 todo/auth/admin/multi)。LLM 开发路径:`read node_modules/weifuwu/content/index.md` → 目标 .md → 复制 examples/ 源码。
|
|
255
|
+
|
|
247
256
|
---
|
|
248
257
|
|
|
249
258
|
## CDN 快速原型(零构建、纯 HTML)
|
|
@@ -321,8 +330,8 @@ cd apps/agent-platform && npm run seed && npm run dev
|
|
|
321
330
|
| 资源 | CDN 地址 | 说明 |
|
|
322
331
|
|------|---------|------|
|
|
323
332
|
| `weifuwu/ui-dom` | `https://unpkg.com/weifuwu@latest/dist/ui-dom/index.js` | 前端运行时(createRouter, createRoot, h, 事件流, 状态管理等) |
|
|
324
|
-
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/index.js` |
|
|
325
|
-
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/style.css` | 组件 CSS +
|
|
333
|
+
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/index.js` | 129 个 UI 组件(Button, Card, Table, Modal, Icon 等) |
|
|
334
|
+
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/style.css` | 组件 CSS + 182 个主题 Token + 66 个布局原语 + 157 个工具类 |
|
|
326
335
|
| 独立布局系统 | `https://unpkg.com/weifuwu@latest/dist/layout/weifuwu-layout.css` | 仅 CSS 布局,不依赖 JS |
|
|
327
336
|
|
|
328
337
|
|
|
@@ -363,9 +372,9 @@ cd apps/agent-platform && npm run seed && npm run dev
|
|
|
363
372
|
| `weifuwu/ui-dom` | **i18n** | 国际化中间件(运行时切换语言) | — |
|
|
364
373
|
| `weifuwu/ui-dom` | **renderToEvents / eventsToHtml / serializeEvents** | 服务端渲染:vnode → 事件流 → HTML + `__DATA__` 序列化(客户端 `replay` 收养) | — |
|
|
365
374
|
| `weifuwu/ui-dom` | **useChat / AiChat 原语** | AI 会话(流式/工具调用/HITL) | — |
|
|
366
|
-
| `weifuwu/ui-dom` | **事件原语** | `usePopup`(统一弹窗能力层)/ `usePresence` / `useInView` / `useScrollPosition` / `useGlobalKey` / `useDrag` / `useDragDrop` / `useAnimationEnd` / `useTween` / `useReducedMotion`(浏览器事件/动画统一入口,见 [
|
|
367
|
-
| `weifuwu/components` | **
|
|
368
|
-
| `weifuwu/layout` | **CSS 布局** | 66 个布局原语 +
|
|
375
|
+
| `weifuwu/ui-dom` | **事件原语** | `usePopup`(统一弹窗能力层)/ `usePresence` / `useInView` / `useScrollPosition` / `useGlobalKey` / `useDrag` / `useDragDrop` / `useAnimationEnd` / `useTween` / `useReducedMotion`(浏览器事件/动画统一入口,见 [content/guides/mobile-guide.md](content/guides/mobile-guide.md)) | — |
|
|
376
|
+
| `weifuwu/components` | **129 个组件** | Button/Table/Modal/Confirm/Toast/... + `confirm()` / `toast()` 命令式中间件 | weifuwu/ui-dom |
|
|
377
|
+
| `weifuwu/layout` | **CSS 布局** | 66 个布局原语 + 157 个工具类 + 182 个主题 Token(也支持 `weifuwu/layout/style.css`) | — |
|
|
369
378
|
|
|
370
379
|
---
|
|
371
380
|
|
|
@@ -375,23 +384,23 @@ cd apps/agent-platform && npm run seed && npm run dev
|
|
|
375
384
|
|
|
376
385
|
| 任务 | 用 | 位置 |
|
|
377
386
|
|------|-----|------|
|
|
378
|
-
| 起 HTTP 服务 + 路由 | `serve(app)` + `new Router()` + `app.get/post/...` | [
|
|
379
|
-
| 渲染页面(SPA / SSR) | `createRouter(routes, root, { ctx })`;SSR = `renderToEvents` → `eventsToHtml` + `replay`(事件流形态) | [
|
|
380
|
-
| 数据持久化 | `postgres()` → `` ctx.sql`SELECT *` `` · `redis()` → `ctx.redis` · **`sql.query`**(Query Language AST 双后端) | [
|
|
381
|
-
| 零数据库开发/测试 | `createMemorySql()` / `MemoryRedis`——契约同真库、替换成本为零 | [
|
|
382
|
-
| 数据管道(SSR 预取/hydration/SPA) | `ctx.data.get(key)` + async 组件 | [
|
|
383
|
-
| 用户注册/登录/会话/多租户 | `userSystem()` → `ctx.auth` + `/api/auth/*` | [
|
|
384
|
-
| 限流防爆破 | `rateLimit()` + `ctx.limit()` | [
|
|
385
|
-
| 发邮件 | `email()` → `ctx.email`(Resend/SMTP) | [
|
|
386
|
-
| 实时消息/聊天/通知 | `messager()` → `ctx.msg` + `app.ws` | [
|
|
387
|
-
| 后台任务/定时 | `queue()` → `ctx.queue` · `scheduler()` → `ctx.schedule/cron` | [
|
|
388
|
-
| AI 对话 / Agent / HITL 审批 | `ai()` → `ctx.ai` + `ctx.ui.useChat()` + `AiChat` | [
|
|
389
|
-
| GraphQL / WebSocket | `app.graphql(handler)` · `app.ws(path, handler)` | [
|
|
390
|
-
| 前端 UI 组件 | `weifuwu/components`(
|
|
391
|
-
| 布局/主题/暗色 | `weifuwu/layout`(58 原语 +
|
|
392
|
-
| 样式定制(零自定义 CSS) | `--wf-*` 变量覆盖 + 组件定制钩子 | [
|
|
393
|
-
| 移动端适配(tap/长按/键盘/弹层) | `usePopup` / `useHoverCapable` / `useLongPress` / `useVisualViewport` | [
|
|
394
|
-
| 前后端类型安全中间件 | `createMiddleware`(声明注入即类型化) | [
|
|
387
|
+
| 起 HTTP 服务 + 路由 | `serve(app)` + `new Router()` + `app.get/post/...` | [content/guides/server-guide.md](content/guides/server-guide.md) |
|
|
388
|
+
| 渲染页面(SPA / SSR) | `createRouter(routes, root, { ctx })`;SSR = `renderToEvents` → `eventsToHtml` + `replay`(事件流形态) | [content/guides/ui-dom-guide.md](content/guides/ui-dom-guide.md) · [content/guides/frontend.md](content/guides/frontend.md) |
|
|
389
|
+
| 数据持久化 | `postgres()` → `` ctx.sql`SELECT *` `` · `redis()` → `ctx.redis` · **`sql.query`**(Query Language AST 双后端) | [content/guides/data-guide.md](content/guides/data-guide.md) |
|
|
390
|
+
| 零数据库开发/测试 | `createMemorySql()` / `MemoryRedis`——契约同真库、替换成本为零 | [content/guides/data-guide.md](content/guides/data-guide.md) |
|
|
391
|
+
| 数据管道(SSR 预取/hydration/SPA) | `ctx.data.get(key)` + async 组件 | [content/guides/frontend.md](content/guides/frontend.md) |
|
|
392
|
+
| 用户注册/登录/会话/多租户 | `userSystem()` → `ctx.auth` + `/api/auth/*` | [content/guides/saas-guide.md](content/guides/saas-guide.md) |
|
|
393
|
+
| 限流防爆破 | `rateLimit()` + `ctx.limit()` | [content/guides/saas-guide.md](content/guides/saas-guide.md) |
|
|
394
|
+
| 发邮件 | `email()` → `ctx.email`(Resend/SMTP) | [content/guides/saas-guide.md](content/guides/saas-guide.md) |
|
|
395
|
+
| 实时消息/聊天/通知 | `messager()` → `ctx.msg` + `app.ws` | [content/guides/saas-guide.md](content/guides/saas-guide.md) |
|
|
396
|
+
| 后台任务/定时 | `queue()` → `ctx.queue` · `scheduler()` → `ctx.schedule/cron` | [content/guides/saas-guide.md](content/guides/saas-guide.md) |
|
|
397
|
+
| AI 对话 / Agent / HITL 审批 | `ai()` → `ctx.ai` + `ctx.ui.useChat()` + `AiChat` | [content/guides/saas-guide.md](content/guides/saas-guide.md) |
|
|
398
|
+
| GraphQL / WebSocket | `app.graphql(handler)` · `app.ws(path, handler)` | [content/guides/realtime-guide.md](content/guides/realtime-guide.md) |
|
|
399
|
+
| 前端 UI 组件 | `weifuwu/components`(129 个:Button/Table/Modal/AiChat/...) | [content/guides/components-guide.md](content/guides/components-guide.md) |
|
|
400
|
+
| 布局/主题/暗色 | `weifuwu/layout`(58 原语 + 157 工具类 + 182 Token) | [content/guides/layout-guide.md](content/guides/layout-guide.md) |
|
|
401
|
+
| 样式定制(零自定义 CSS) | `--wf-*` 变量覆盖 + 组件定制钩子 | [content/guides/styling.md](content/guides/styling.md) |
|
|
402
|
+
| 移动端适配(tap/长按/键盘/弹层) | `usePopup` / `useHoverCapable` / `useLongPress` / `useVisualViewport` | [content/guides/mobile-guide.md](content/guides/mobile-guide.md) |
|
|
403
|
+
| 前后端类型安全中间件 | `createMiddleware`(声明注入即类型化) | [content/guides/server-guide.md](content/guides/server-guide.md) |
|
|
395
404
|
|
|
396
405
|
---
|
|
397
406
|
|
|
@@ -505,23 +514,23 @@ README 只保留入门内容(设计理念 / 快速开始 / 核心概念 / 模
|
|
|
505
514
|
|
|
506
515
|
| 文档 | 内容 |
|
|
507
516
|
|------|------|
|
|
508
|
-
| [
|
|
509
|
-
| [
|
|
510
|
-
| [
|
|
511
|
-
| [
|
|
517
|
+
| [content/guides/server-guide.md](content/guides/server-guide.md) | HTTP 服务层:Router / serve / cors / serveStatic / HttpError / 响应辅助 / parseBody |
|
|
518
|
+
| [content/guides/data-guide.md](content/guides/data-guide.md) | 数据层:postgres(PG v3 自研协议)/ redis(RESP2 自研协议)/ Query Language(AST 双后端)/ Memory 实现(零数据库)/ 测试零外部依赖 |
|
|
519
|
+
| [content/guides/realtime-guide.md](content/guides/realtime-guide.md) | 实时与渲染:scheduler / ui(SSR + JS/CSS 编译)/ graphql / WebSocket |
|
|
520
|
+
| [content/guides/saas-guide.md](content/guides/saas-guide.md) | SaaS 地基:rateLimit / email / userSystem / messager / queue / ai |
|
|
512
521
|
| [docs/ai-contract.md](docs/ai-contract.md) | AI Stream Protocol:wf: 事件(SSE 下行 + POST 上行)——流式/工具/审批 |
|
|
513
522
|
|
|
514
523
|
### 前端开发者
|
|
515
524
|
|
|
516
525
|
| 文档 | 内容 |
|
|
517
526
|
|------|------|
|
|
518
|
-
| [
|
|
519
|
-
| [
|
|
520
|
-
| [
|
|
521
|
-
| [
|
|
522
|
-
| [
|
|
527
|
+
| [content/guides/frontend.md](content/guides/frontend.md) | 前端核心:应用引导(createRouter/createRoot——vdom3 事件流)/ 组件模型 / 异步组件 / 状态管理 / 条件与列表 / ref / 类型(weifuwu/client 已并入 ui-dom) |
|
|
528
|
+
| [content/guides/ui-dom-guide.md](content/guides/ui-dom-guide.md) | **ui-dom**:vdom3 精准事件流引擎(createRouter/createRoot + 事件流)——components 复用 + SSR(事件流形态)(前端唯一运行时) |
|
|
529
|
+
| [content/guides/middleware.md](content/guides/middleware.md) | 前端中间件:router / api / auth / ws / i18n / ErrorBoundary / confirm / toast / ScrollLock / extendCtx |
|
|
530
|
+
| [content/guides/components-guide.md](content/guides/components-guide.md) | 组件库(129 个组件 + 使用示例 + 组件列表) |
|
|
531
|
+
| [content/guides/layout-guide.md](content/guides/layout-guide.md) | 布局系统:66 个布局原语 + 157 个工具类 + 182 个主题 Token |
|
|
523
532
|
| [docs/style-guide.md](docs/style-guide.md) | 样式学习路径与命名规范:三档学习(组件 → 原语 → 速查)|
|
|
524
|
-
| [
|
|
533
|
+
| [content/guides/styling.md](content/guides/styling.md) | 样式定制指南:零自定义 CSS 模式 / 暗色 / 组件级覆盖 / 作用域主题 |
|
|
525
534
|
|
|
526
535
|
### 通用
|
|
527
536
|
|
|
@@ -529,8 +538,10 @@ README 只保留入门内容(设计理念 / 快速开始 / 核心概念 / 模
|
|
|
529
538
|
|------|------|
|
|
530
539
|
| [docs/examples.md](docs/examples.md) | 组合场景示例:登录表单 / 数据列表 + 搜索 / 消息提示 |
|
|
531
540
|
| [docs/environment.md](docs/environment.md) | 环境变量与开发命令 |
|
|
532
|
-
| [
|
|
541
|
+
| [content/guides/mobile-guide.md](content/guides/mobile-guide.md) | 移动端开发指南:断点 / 44px 命中区 / usePopup / 手势 / safe-area |
|
|
533
542
|
| [docs/components-map.md](docs/components-map.md) | 组件速查:weifuwu ↔ antd / Element Plus / shadcn 对应 + 迁移路径 |
|
|
534
|
-
| [
|
|
543
|
+
| [content/guides/custom-component.md](content/guides/custom-component.md) | 自定义组件开发指南:usePopup / useControlled / 动画 / AI 组件 / 类型纪律 |
|
|
535
544
|
|
|
545
|
+
> **贡献**:见 [CONTRIBUTING.md](CONTRIBUTING.md)——四条路径(文档/测试/demo/组件)+ 质量防线。
|
|
546
|
+
>
|
|
536
547
|
> `docs/` 用户文档随 npm 包发布(`files: ['dist/', 'README.md', 'docs/']`)——`node_modules/weifuwu/docs` 可离线查阅。
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 管理后台 · apps
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
AppShell + Dashboard/Table/Form 多页——layout 包裹复用 + 主题。后端:rateLimit + 查询端点。源于 agent-platform 架构提炼。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 用到的页面模式
|
|
9
|
+
- [app-shell](../patterns/app-shell.md)
|
|
10
|
+
|
|
11
|
+
## 用到的组件
|
|
12
|
+
- [Layout](../components/layout.md)
|
|
13
|
+
- [Menu](../components/menu.md)
|
|
14
|
+
- [NavMenu](../components/navmenu.md)
|
|
15
|
+
- [Table](../components/table.md)
|
|
16
|
+
- [Form](../components/form.md)
|
|
17
|
+
- [ThemeSwitch](../components/themeswitch.md)
|
|
18
|
+
- [StatCard](../components/statcard.md)
|
|
19
|
+
- [Chart](../components/chart.md)
|
|
20
|
+
- [Badge](../components/badge.md)
|
|
21
|
+
- [Avatar](../components/avatar.md)
|
|
22
|
+
- [Tag](../components/tag.md)
|
|
23
|
+
|
|
24
|
+
## 源码
|
|
25
|
+
|
|
26
|
+
> `examples/apps/admin/` ——完整可运行(随 npm 包发布)
|
|
27
|
+
|
|
28
|
+
## 目录结构
|
|
29
|
+
|
|
30
|
+
| 文件 | 职责 |
|
|
31
|
+
|------|------|
|
|
32
|
+
| `app.tsx` | 前端:AppShell(Layout 骨架 + Menu)+ DashboardPage/OrdersPage + 路由 layout 包裹 |
|
|
33
|
+
| `api.ts` | 后端:registerAdminApi——订单查询 + 种子数据 |
|
|
34
|
+
| `server.ts` | 独立入口(:3302) |
|
|
35
|
+
| `main.tsx` | 独立前端入口 |
|
|
36
|
+
|
|
37
|
+
## 改造指南(新手从跑起来到改成自己的)
|
|
38
|
+
|
|
39
|
+
- 1. 换业务数据:api.ts 的 admin_orders 表 + 种子数据 → 自己的业务表(或接真实 postgres)
|
|
40
|
+
- 2. 加页面:app.tsx 路由表加 { path, render, layout: AppShell }——侧栏 Menu items 同步加
|
|
41
|
+
- 3. 改菜单/品牌:AppShell 里 Menu items + 标题文案
|
|
42
|
+
- 4. 表格交互:Table 组件文档(sortable/rowSelection——受控 props 配回调)
|
|
43
|
+
- 5. 参考生产级:apps/agent-platform/(多租户/权限/商业化真实架构)
|
|
44
|
+
|
|
45
|
+
## 质量标准
|
|
46
|
+
|
|
47
|
+
- [x] 键盘可达
|
|
48
|
+
- [x] 侧栏折叠
|
|
49
|
+
- [x] 表格排序
|
|
50
|
+
- [x] 亮暗主题
|
|
51
|
+
- [x] loading/empty 态
|
|
52
|
+
|
|
53
|
+
## 验证
|
|
54
|
+
|
|
55
|
+
> agent-browser 走查:打开 showcase `/apps/admin`(活体嵌入)——列表/新建/保存/删除全流程 + 控制台零错误
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# agent-platform(生产级) · apps(生产级)
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
多租户 AI Agent 平台——weifuwu 中间件全量消费方(认证/AI/沙箱/工具链/商业化/私有化)。实战驱动框架开发的生产级参考。
|
|
6
|
+
|
|
7
|
+
> **生产级参考**:目录独立于 showcase(apps/agent-platform/),此处为展示层纳入——架构文档 + 源码索引 + 启动方式。
|
|
8
|
+
## 用到的页面模式
|
|
9
|
+
- (无)
|
|
10
|
+
|
|
11
|
+
## 用到的组件
|
|
12
|
+
- [AiChat](../components/aichat.md)
|
|
13
|
+
- [AuthPage](../components/authpage.md)
|
|
14
|
+
- [Table](../components/table.md)
|
|
15
|
+
- [Form](../components/form.md)
|
|
16
|
+
- [Modal](../components/modal.md)
|
|
17
|
+
- [Drawer](../components/drawer.md)
|
|
18
|
+
- [Menu](../components/menu.md)
|
|
19
|
+
- [StatCard](../components/statcard.md)
|
|
20
|
+
- [ThemeSwitch](../components/themeswitch.md)
|
|
21
|
+
|
|
22
|
+
## 源码
|
|
23
|
+
|
|
24
|
+
> 源码见 `apps/agent-platform/`(独立仓库结构——不随包)
|
|
25
|
+
|
|
26
|
+
## 质量标准
|
|
27
|
+
|
|
28
|
+
- [x] 真实产品
|
|
29
|
+
- [x] 多租户
|
|
30
|
+
- [x] 私有化部署
|
|
31
|
+
- [x] 商业化闭环
|
|
32
|
+
|
|
33
|
+
## 验证
|
|
34
|
+
|
|
35
|
+
> 独立部署验证(docker + 真实库)——见 apps/agent-platform/README.md
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# 登录注册 · apps
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
登录/注册 → 受保护页 → 登出:应用级状态(user store)+ 路由守卫 + ctx.data。后端:认证中间件。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 用到的页面模式
|
|
9
|
+
- (无)
|
|
10
|
+
|
|
11
|
+
## 用到的组件
|
|
12
|
+
- [Card](../components/card.md)
|
|
13
|
+
- [Form](../components/form.md)
|
|
14
|
+
- [Input](../components/input.md)
|
|
15
|
+
- [PasswordInput](../components/passwordinput.md)
|
|
16
|
+
- [Button](../components/button.md)
|
|
17
|
+
- [Alert](../components/alert.md)
|
|
18
|
+
|
|
19
|
+
## 源码
|
|
20
|
+
|
|
21
|
+
> `examples/apps/auth/` ——完整可运行(随 npm 包发布)
|
|
22
|
+
|
|
23
|
+
## 目录结构
|
|
24
|
+
|
|
25
|
+
| 文件 | 职责 |
|
|
26
|
+
|------|------|
|
|
27
|
+
| `app.tsx` | 前端:AuthFormPage(登录/注册两用)+ 路由守卫 + authStore |
|
|
28
|
+
| `api.ts` | 后端:registerAuthApi——内存用户表 + token 会话 |
|
|
29
|
+
| `server.ts` | 独立入口(:3301) |
|
|
30
|
+
| `main.tsx` | 独立前端入口 |
|
|
31
|
+
|
|
32
|
+
## 改造指南(新手从跑起来到改成自己的)
|
|
33
|
+
|
|
34
|
+
- 1. 换用户存储:api.ts 的 auth_users 表 → 接 userSystem 中间件(见 content/backend/auth.md)
|
|
35
|
+
- 2. 加受保护页:app.tsx 路由表加页面 + 组件内读 authStore.state.user 做守卫(同 DashboardPage 模式)
|
|
36
|
+
- 3. 改会话持久化:app.tsx 的 ctx.browser.storageSet 已处理——key 名 auth:token 可改
|
|
37
|
+
- 4. 加角色权限:守卫处加角色判断(user 表加 role 字段)
|
|
38
|
+
|
|
39
|
+
## 质量标准
|
|
40
|
+
|
|
41
|
+
- [x] 键盘可达
|
|
42
|
+
- [x] 表单校验
|
|
43
|
+
- [x] 错误态
|
|
44
|
+
- [x] 会话持久化
|
|
45
|
+
- [x] 零控制台错误
|
|
46
|
+
|
|
47
|
+
## 验证
|
|
48
|
+
|
|
49
|
+
> agent-browser 走查:打开 showcase `/apps/auth`(活体嵌入)——列表/新建/保存/删除全流程 + 控制台零错误
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 应用编排 · apps
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
父应用嵌子应用:registerApp/hApp + app:* 边界事件——子应用独立状态。后端:ws 广播。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 用到的页面模式
|
|
9
|
+
- (无)
|
|
10
|
+
|
|
11
|
+
## 用到的组件
|
|
12
|
+
- [Card](../components/card.md)
|
|
13
|
+
- [Button](../components/button.md)
|
|
14
|
+
- [Input](../components/input.md)
|
|
15
|
+
- [Tag](../components/tag.md)
|
|
16
|
+
- [Tabs](../components/tabs.md)
|
|
17
|
+
|
|
18
|
+
## 源码
|
|
19
|
+
|
|
20
|
+
> `examples/apps/multi/` ——完整可运行(随 npm 包发布)
|
|
21
|
+
|
|
22
|
+
## 目录结构
|
|
23
|
+
|
|
24
|
+
| 文件 | 职责 |
|
|
25
|
+
|------|------|
|
|
26
|
+
| `app.tsx` | 前端:registerApp 注册 2 个子应用 + 父应用工作台(h(App, {appId}) 嵌入) |
|
|
27
|
+
| `server.ts` | 独立入口(:3303——纯前端编排无后端 API) |
|
|
28
|
+
| `main.tsx` | 独立前端入口 |
|
|
29
|
+
|
|
30
|
+
## 改造指南(新手从跑起来到改成自己的)
|
|
31
|
+
|
|
32
|
+
- 1. 加子应用:app.tsx 里 registerApp('my-app', (props, ctx) => h(MyComp, {})) + 父树 h(App, { appId: 'my-app' })
|
|
33
|
+
- 2. 子应用传参:h(App, { appId, props: {...} })——app:update 边界事件(见 content/capabilities/app-node.md)
|
|
34
|
+
- 3. 观察边界事件:stream.subscribe 过滤 e.entity === 'app'(工作台已展示)
|
|
35
|
+
|
|
36
|
+
## 质量标准
|
|
37
|
+
|
|
38
|
+
- [x] 子应用独立状态
|
|
39
|
+
- [x] 边界事件观测
|
|
40
|
+
- [x] 零控制台错误
|
|
41
|
+
|
|
42
|
+
## 验证
|
|
43
|
+
|
|
44
|
+
> agent-browser 走查:打开 showcase `/apps/multi`(活体嵌入)——列表/新建/保存/删除全流程 + 控制台零错误
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 任务管理 · apps
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
经典 CRUD 应用:列表/详情/新建——多页路由 + createStore 跨页状态 + 表单受控。后端:MemorySql 持久化。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 用到的页面模式
|
|
9
|
+
- (无)
|
|
10
|
+
|
|
11
|
+
## 用到的组件
|
|
12
|
+
- [Button](../components/button.md)
|
|
13
|
+
- [Input](../components/input.md)
|
|
14
|
+
- [Checkbox](../components/checkbox.md)
|
|
15
|
+
- [Form](../components/form.md)
|
|
16
|
+
- [Tag](../components/tag.md)
|
|
17
|
+
- [EmptyState](../components/emptystate.md)
|
|
18
|
+
- [PageHeader](../components/pageheader.md)
|
|
19
|
+
|
|
20
|
+
## 源码
|
|
21
|
+
|
|
22
|
+
> `examples/apps/todo/` ——完整可运行(随 npm 包发布)
|
|
23
|
+
|
|
24
|
+
## 目录结构
|
|
25
|
+
|
|
26
|
+
| 文件 | 职责 |
|
|
27
|
+
|------|------|
|
|
28
|
+
| `app.tsx` | 前端:路由表 + 页面组件(TodoList/TodoNew)+ createStore + hash 桥接 |
|
|
29
|
+
| `api.ts` | 后端:registerTodoApi(app, sql)——CRUD 路由(独立/嵌入共享) |
|
|
30
|
+
| `server.ts` | 独立入口:MemorySql + ui + 前端服务(:3300) |
|
|
31
|
+
| `main.tsx` | 独立前端入口:createTodoApp + hashchange 桥接 |
|
|
32
|
+
|
|
33
|
+
## 改造指南(新手从跑起来到改成自己的)
|
|
34
|
+
|
|
35
|
+
- 1. 改数据模型:编辑 api.ts 的 SQL 表结构(todos 表字段)——MemorySql 与 postgres() 同契约,换库只改 server.ts 一行
|
|
36
|
+
- 2. 加页面:app.tsx 的路由表加一行 { path, render } + 新建页面组件(组件写法见 guides/component-model.md)
|
|
37
|
+
- 3. 改交互/状态:页面组件内 let + ctx.render()(render-only——见 guides/render-only.md)
|
|
38
|
+
- 4. 换样式:组件文档「用法示例」+ layout 原语(wf-* 类,零手写 CSS)
|
|
39
|
+
- 5. 接真实后端:server.ts 把 createMemorySql() 换成 postgres()(见 content/backend/sql.md)
|
|
40
|
+
|
|
41
|
+
## 质量标准
|
|
42
|
+
|
|
43
|
+
- [x] 键盘可达
|
|
44
|
+
- [x] 375/768 无溢出
|
|
45
|
+
- [x] 亮暗主题
|
|
46
|
+
- [x] loading/error/empty 态
|
|
47
|
+
- [x] 零控制台错误
|
|
48
|
+
|
|
49
|
+
## 验证
|
|
50
|
+
|
|
51
|
+
> agent-browser 走查:打开 showcase `/apps/todo`(活体嵌入)——列表/新建/保存/删除全流程 + 控制台零错误
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# ctx.ai(chat/stream/agent/approve) · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
AI 对话全链路:流式 token / 工具调用 / HITL 审批——wf: 协议对页面透明
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`ctx.ai`
|
|
10
|
+
|
|
11
|
+
## 活体端点
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl /api/chat
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 关联组件
|
|
18
|
+
- [AiChat](../components/aichat.md)
|
|
19
|
+
- [ToolCallCard](../components/toolcallcard.md)
|
|
20
|
+
- [ApprovalCard](../components/approvalcard.md)
|
|
21
|
+
|
|
22
|
+
## 文档素材
|
|
23
|
+
|
|
24
|
+
来源:`docs/ai-contract.md`(迁移至本节——P3)
|
|
25
|
+
|
|
26
|
+
## 验证
|
|
27
|
+
|
|
28
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 认证(ctx.auth/user) · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
登录态/会话/权限——userSystem 集成
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`ctx.auth`
|
|
10
|
+
|
|
11
|
+
## 关联组件
|
|
12
|
+
- [AuthPage](../components/authpage.md)
|
|
13
|
+
|
|
14
|
+
## 文档素材
|
|
15
|
+
|
|
16
|
+
来源:`content/guides/saas-guide.md`(迁移至本节——P3)
|
|
17
|
+
|
|
18
|
+
## 验证
|
|
19
|
+
|
|
20
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 邮件(ctx.email) · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
Mailer 契约——演示用内存捕获回显(mock 输出可读)
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`ctx.email`
|
|
10
|
+
|
|
11
|
+
## 活体端点
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl /api/demo/email
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 文档素材
|
|
18
|
+
|
|
19
|
+
来源:`content/guides/saas-guide.md`(迁移至本节——P3)
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# GraphQL · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
app.graphql(handler)——SDL + resolvers map 绑定
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`—`
|
|
10
|
+
|
|
11
|
+
## 活体端点
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl /api/demo/graphql
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 文档素材
|
|
18
|
+
|
|
19
|
+
来源:`content/guides/server-guide.md`(迁移至本节——P3)
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# HTTP 原语 · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
Request/Response 标准接口 + SSE + CORS + 静态服务
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`—`
|
|
10
|
+
|
|
11
|
+
## 活体端点
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl /api/demo/http
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 文档素材
|
|
18
|
+
|
|
19
|
+
来源:`content/guides/server-guide.md`(迁移至本节——P3)
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# rateLimit(ctx.limit) · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
限流中间件——超额返回 429(演示端点轻阈值)
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`ctx.limit`
|
|
10
|
+
|
|
11
|
+
## 活体端点
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl /api/demo/limit
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 文档素材
|
|
18
|
+
|
|
19
|
+
来源:`content/guides/saas-guide.md`(迁移至本节——P3)
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 任务队列(ctx.queue) · backend
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
QueueClientModule——池命令 + 阻塞 worker(注入 Redis 模式)
|
|
6
|
+
|
|
7
|
+
## 装配
|
|
8
|
+
|
|
9
|
+
中间件注入键:`ctx.queue`
|
|
10
|
+
|
|
11
|
+
## 活体端点
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl /api/demo/queue
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 文档素材
|
|
18
|
+
|
|
19
|
+
来源:`content/guides/saas-guide.md`(迁移至本节——P3)
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
> curl 活体端点断言响应(P2 填充具体断言)
|