weifuwu 0.87.0 → 0.89.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.
Files changed (392) hide show
  1. package/README.md +111 -135
  2. package/dist/client/components/ActionSheet/ActionSheet.d.ts +1 -1
  3. package/dist/client/components/AiChat/AiChat.d.ts +3 -4
  4. package/dist/client/components/ChatInput/ChatInput.d.ts +5 -0
  5. package/dist/client/components/CitationCard/CitationCard.d.ts +1 -1
  6. package/dist/client/components/Command/Command.d.ts +1 -1
  7. package/dist/client/components/ContextMenu/ContextMenu.d.ts +1 -1
  8. package/dist/client/components/DatePicker/DatePicker.d.ts +1 -1
  9. package/dist/client/components/Dropdown/Dropdown.d.ts +1 -1
  10. package/dist/client/components/Editor/model/html.d.ts +10 -0
  11. package/dist/client/components/ImageCropper/ImageCropper.d.ts +6 -2
  12. package/dist/client/components/Menu/Menu.d.ts +1 -1
  13. package/dist/client/components/NavMenu/NavMenu.d.ts +1 -1
  14. package/dist/client/components/Popconfirm/Popconfirm.d.ts +1 -1
  15. package/dist/client/components/SlideCanvas/SlideCanvas.d.ts +1 -1
  16. package/dist/client/components/Tour/Tour.d.ts +1 -1
  17. package/dist/client/components/TreeSelect/TreeSelect.d.ts +1 -1
  18. package/dist/client/components/index.js +41 -41
  19. package/dist/client/components/style.css +298 -644
  20. package/dist/client/layout/weifuwu-layout.css +286 -640
  21. package/dist/client/vdom/browser/Browser.d.ts +2 -0
  22. package/dist/client/vdom/commands.d.ts +4 -1
  23. package/dist/client/vdom/context/UIContext.d.ts +8 -0
  24. package/dist/client/vdom/core/diff/attrs.d.ts +10 -2
  25. package/dist/client/vdom/core/field/attributes.d.ts +12 -0
  26. package/dist/client/vdom/core/field/events.d.ts +8 -0
  27. package/dist/client/vdom/core/field/input-sync.d.ts +14 -0
  28. package/dist/client/vdom/core/field/key.d.ts +3 -0
  29. package/dist/client/vdom/core/field/props.d.ts +13 -1
  30. package/dist/client/vdom/core/field/ref.d.ts +6 -0
  31. package/dist/client/vdom/core/field/style.d.ts +7 -1
  32. package/dist/client/vdom/core/node/component.d.ts +3 -4
  33. package/dist/client/vdom/core/node/native.d.ts +6 -1
  34. package/dist/client/vdom/core/patch/index.d.ts +24 -1
  35. package/dist/client/vdom/core/patch/processors.d.ts +8 -1
  36. package/dist/client/vdom/core/protocol.d.ts +45 -0
  37. package/dist/client/vdom/core/router.d.ts +7 -0
  38. package/dist/client/vdom/core/ssr/absorb.d.ts +31 -4
  39. package/dist/client/vdom/core/transform/index.d.ts +6 -6
  40. package/dist/client/vdom/core/v2/cycle.d.ts +54 -0
  41. package/dist/client/vdom/core/v2/diff.d.ts +80 -0
  42. package/dist/client/vdom/core/v2/integrate.d.ts +24 -0
  43. package/dist/client/vdom/core/v2/render.d.ts +28 -0
  44. package/dist/client/vdom/core/v2/schedule.d.ts +33 -0
  45. package/dist/client/vdom/core/v2/serve.d.ts +4 -0
  46. package/dist/client/vdom/core/v2/spy.d.ts +21 -0
  47. package/dist/client/vdom/core/v2/ssr.d.ts +14 -0
  48. package/dist/client/vdom/core/vnode.d.ts +9 -6
  49. package/dist/client/vdom/dev/error-counter.d.ts +27 -0
  50. package/dist/client/vdom/dev/render-health.d.ts +60 -0
  51. package/dist/client/vdom/hooks/chat.d.ts +32 -5
  52. package/dist/client/vdom/hooks/drag-media.d.ts +3 -1
  53. package/dist/client/vdom/hooks/env.d.ts +32 -0
  54. package/dist/client/vdom/hooks/popup-manager.d.ts +21 -0
  55. package/dist/client/vdom/hooks/popup.d.ts +4 -1
  56. package/dist/client/vdom/hooks/stable.d.ts +4 -0
  57. package/dist/client/vdom/hooks/use-observable.d.ts +13 -0
  58. package/dist/client/vdom/index.d.ts +14 -6
  59. package/dist/client/vdom/index.js +4 -7
  60. package/dist/client/vdom/jsx-runtime.js +1 -1
  61. package/dist/client/vdom/middlewares/api.d.ts +8 -0
  62. package/dist/client/vdom/middlewares/auth-i18n.d.ts +7 -0
  63. package/dist/client/vdom/middlewares/ws.d.ts +41 -1
  64. package/dist/client/vdom/observable/index.d.ts +13 -0
  65. package/dist/client/vdom/observable/observable.d.ts +26 -0
  66. package/dist/client/vdom/observable/operators.d.ts +76 -0
  67. package/dist/client/vdom/observable/sources.d.ts +54 -0
  68. package/dist/client/vdom/observable/types.d.ts +45 -0
  69. package/dist/client/vdom/store.d.ts +17 -2
  70. package/dist/client/vdom/testing.js +2 -2
  71. package/dist/server/ai/agent.d.ts +18 -0
  72. package/dist/server/ai/client.d.ts +14 -2
  73. package/dist/server/ai/contracts.d.ts +2 -2
  74. package/dist/server/ai/sse.d.ts +6 -0
  75. package/dist/server/core/collect.d.ts +31 -0
  76. package/dist/server/core/error-counter.d.ts +11 -0
  77. package/dist/server/core/hub.d.ts +2 -0
  78. package/dist/server/core/router.d.ts +12 -9
  79. package/dist/server/db/contracts.d.ts +24 -0
  80. package/dist/server/db/memory-redis.d.ts +3 -4
  81. package/dist/server/db/memory-sql.d.ts +20 -4
  82. package/dist/server/db/postgres-server.d.ts +2 -0
  83. package/dist/server/db/query.d.ts +21 -0
  84. package/dist/server/db/redis-server.d.ts +4 -2
  85. package/dist/server/db/sql-parser.d.ts +2 -1
  86. package/dist/server/email/index.d.ts +2 -0
  87. package/dist/server/index.d.ts +4 -1
  88. package/dist/server/index.js +3927 -1982
  89. package/dist/server/messager/index.d.ts +21 -2
  90. package/dist/server/middleware/compress.d.ts +25 -0
  91. package/dist/server/ui/index.d.ts +8 -1
  92. package/dist/server/user/index.d.ts +4 -0
  93. package/dist/shared/router/chain.d.ts +9 -0
  94. package/dist/shared/router/context.d.ts +35 -0
  95. package/dist/shared/router/ctx-fields.d.ts +20 -0
  96. package/dist/shared/router/pipeline.d.ts +70 -0
  97. package/dist/shared/router/trie.d.ts +11 -3
  98. package/dist/shared/router/types.d.ts +23 -0
  99. package/docs/style-guide.md +44 -41
  100. package/package.json +13 -10
  101. package/content/apps/admin.md +0 -55
  102. package/content/apps/agent-platform.md +0 -35
  103. package/content/apps/auth.md +0 -49
  104. package/content/apps/multi.md +0 -44
  105. package/content/apps/todo.md +0 -51
  106. package/content/backend/ai.md +0 -28
  107. package/content/backend/auth.md +0 -20
  108. package/content/backend/email.md +0 -23
  109. package/content/backend/graphql.md +0 -23
  110. package/content/backend/http.md +0 -23
  111. package/content/backend/limit.md +0 -23
  112. package/content/backend/middleware.md +0 -17
  113. package/content/backend/queue.md +0 -23
  114. package/content/backend/redis.md +0 -26
  115. package/content/backend/router.md +0 -23
  116. package/content/backend/schedule.md +0 -23
  117. package/content/backend/sql.md +0 -27
  118. package/content/backend/sse.md +0 -26
  119. package/content/backend/ws.md +0 -26
  120. package/content/capabilities/app-node.md +0 -21
  121. package/content/capabilities/data.md +0 -21
  122. package/content/capabilities/events.md +0 -21
  123. package/content/capabilities/hooks.md +0 -22
  124. package/content/capabilities/i18n.md +0 -21
  125. package/content/capabilities/popup.md +0 -21
  126. package/content/capabilities/render-only.md +0 -23
  127. package/content/capabilities/router.md +0 -22
  128. package/content/capabilities/self-id.md +0 -21
  129. package/content/capabilities/store.md +0 -21
  130. package/content/capabilities/theme.md +0 -21
  131. package/content/capabilities/two-phase.md +0 -21
  132. package/content/components/accordion.md +0 -50
  133. package/content/components/actionsheet.md +0 -46
  134. package/content/components/affix.md +0 -51
  135. package/content/components/aichat.md +0 -57
  136. package/content/components/alert.md +0 -52
  137. package/content/components/alertgroup.md +0 -45
  138. package/content/components/anchor.md +0 -52
  139. package/content/components/app.md +0 -37
  140. package/content/components/approvalcard.md +0 -56
  141. package/content/components/appshell.md +0 -50
  142. package/content/components/aspectratio.md +0 -47
  143. package/content/components/authpage.md +0 -61
  144. package/content/components/autocomplete-v2.md +0 -40
  145. package/content/components/autocomplete.md +0 -56
  146. package/content/components/avatar.md +0 -51
  147. package/content/components/avatargroup.md +0 -47
  148. package/content/components/backtop.md +0 -53
  149. package/content/components/badge.md +0 -55
  150. package/content/components/breadcrumb.md +0 -49
  151. package/content/components/button.md +0 -63
  152. package/content/components/calendar-v2.md +0 -40
  153. package/content/components/calendar.md +0 -50
  154. package/content/components/card.md +0 -58
  155. package/content/components/carousel.md +0 -52
  156. package/content/components/cascader-v2.md +0 -39
  157. package/content/components/cascader.md +0 -54
  158. package/content/components/chart.md +0 -53
  159. package/content/components/chatinput.md +0 -63
  160. package/content/components/checkbox.md +0 -51
  161. package/content/components/checkboxgroup.md +0 -52
  162. package/content/components/citationcard.md +0 -48
  163. package/content/components/codeblock.md +0 -48
  164. package/content/components/codeeditor.md +0 -47
  165. package/content/components/collapse.md +0 -49
  166. package/content/components/colorpicker.md +0 -50
  167. package/content/components/command.md +0 -50
  168. package/content/components/confirm.md +0 -57
  169. package/content/components/contextmenu.md +0 -48
  170. package/content/components/copybutton.md +0 -51
  171. package/content/components/datepicker.md +0 -52
  172. package/content/components/descriptions-v2.md +0 -39
  173. package/content/components/descriptions.md +0 -52
  174. package/content/components/diffview-v2.md +0 -39
  175. package/content/components/diffview.md +0 -50
  176. package/content/components/divider.md +0 -48
  177. package/content/components/drawer.md +0 -55
  178. package/content/components/dropdown.md +0 -53
  179. package/content/components/editor.md +0 -49
  180. package/content/components/emptystate.md +0 -51
  181. package/content/components/exportcsv.md +0 -38
  182. package/content/components/field.md +0 -54
  183. package/content/components/filepreview-office.md +0 -37
  184. package/content/components/filepreview.md +0 -49
  185. package/content/components/filetree.md +0 -56
  186. package/content/components/fileupload-v2.md +0 -39
  187. package/content/components/fileupload.md +0 -57
  188. package/content/components/floatbutton.md +0 -52
  189. package/content/components/form-v2.md +0 -41
  190. package/content/components/form.md +0 -60
  191. package/content/components/grid.md +0 -51
  192. package/content/components/highlight-v2.md +0 -39
  193. package/content/components/highlight.md +0 -46
  194. package/content/components/hovercard.md +0 -51
  195. package/content/components/icon.md +0 -50
  196. package/content/components/imagecropper.md +0 -45
  197. package/content/components/img.md +0 -56
  198. package/content/components/infinitescroll-v2.md +0 -40
  199. package/content/components/infinitescroll.md +0 -54
  200. package/content/components/input.md +0 -65
  201. package/content/components/inputnumber.md +0 -58
  202. package/content/components/inview.md +0 -56
  203. package/content/components/jsonschemaform.md +0 -53
  204. package/content/components/jsonviewer-v2.md +0 -39
  205. package/content/components/jsonviewer.md +0 -49
  206. package/content/components/kanban.md +0 -46
  207. package/content/components/label.md +0 -48
  208. package/content/components/layout.md +0 -54
  209. package/content/components/layoutcontent.md +0 -43
  210. package/content/components/layoutheader.md +0 -43
  211. package/content/components/layoutsider.md +0 -43
  212. package/content/components/link.md +0 -52
  213. package/content/components/list.md +0 -44
  214. package/content/components/loading.md +0 -45
  215. package/content/components/logviewer-v2.md +0 -39
  216. package/content/components/logviewer.md +0 -53
  217. package/content/components/markdown.md +0 -51
  218. package/content/components/markdowneditor.md +0 -47
  219. package/content/components/math.md +0 -42
  220. package/content/components/mentions-v2.md +0 -39
  221. package/content/components/mentions.md +0 -52
  222. package/content/components/menu.md +0 -56
  223. package/content/components/menubar.md +0 -44
  224. package/content/components/messagebubble.md +0 -50
  225. package/content/components/modal.md +0 -59
  226. package/content/components/navmenu.md +0 -47
  227. package/content/components/notification.md +0 -51
  228. package/content/components/pageheader.md +0 -53
  229. package/content/components/pagination.md +0 -49
  230. package/content/components/paragraph.md +0 -45
  231. package/content/components/passwordinput.md +0 -57
  232. package/content/components/pininput-v2.md +0 -39
  233. package/content/components/pininput.md +0 -50
  234. package/content/components/pipeline.md +0 -49
  235. package/content/components/popconfirm.md +0 -58
  236. package/content/components/popover.md +0 -61
  237. package/content/components/progressbar.md +0 -50
  238. package/content/components/prompttemplate.md +0 -49
  239. package/content/components/qrcode.md +0 -50
  240. package/content/components/radiogroup.md +0 -53
  241. package/content/components/rate.md +0 -53
  242. package/content/components/reasoningblock.md +0 -47
  243. package/content/components/relationgraph.md +0 -52
  244. package/content/components/resizable.md +0 -53
  245. package/content/components/result.md +0 -49
  246. package/content/components/scrollbar.md +0 -49
  247. package/content/components/searchinput.md +0 -51
  248. package/content/components/segmentedcontrol.md +0 -59
  249. package/content/components/select-searchable.md +0 -47
  250. package/content/components/select.md +0 -66
  251. package/content/components/sessionlist.md +0 -52
  252. package/content/components/sheetgrid.md +0 -44
  253. package/content/components/skeleton.md +0 -55
  254. package/content/components/slidecanvas.md +0 -44
  255. package/content/components/slider.md +0 -62
  256. package/content/components/sortablelist.md +0 -39
  257. package/content/components/space.md +0 -52
  258. package/content/components/sparkline.md +0 -52
  259. package/content/components/statcard-countdown.md +0 -39
  260. package/content/components/statcard.md +0 -56
  261. package/content/components/steps.md +0 -48
  262. package/content/components/switch.md +0 -50
  263. package/content/components/tabbar.md +0 -45
  264. package/content/components/table-v2.md +0 -40
  265. package/content/components/table.md +0 -66
  266. package/content/components/tabs.md +0 -56
  267. package/content/components/tag.md +0 -51
  268. package/content/components/tagsinput-v2.md +0 -39
  269. package/content/components/tagsinput.md +0 -54
  270. package/content/components/text.md +0 -45
  271. package/content/components/textarea.md +0 -57
  272. package/content/components/themeswitch.md +0 -69
  273. package/content/components/timeline.md +0 -50
  274. package/content/components/title.md +0 -45
  275. package/content/components/toast.md +0 -52
  276. package/content/components/toggle-togglegroup.md +0 -52
  277. package/content/components/togglegroup.md +0 -47
  278. package/content/components/toolcallcard.md +0 -51
  279. package/content/components/tooltip.md +0 -50
  280. package/content/components/tour.md +0 -50
  281. package/content/components/transfer.md +0 -52
  282. package/content/components/tree-v2.md +0 -39
  283. package/content/components/tree.md +0 -59
  284. package/content/components/treeselect.md +0 -54
  285. package/content/components/typography.md +0 -51
  286. package/content/components/videoplayer.md +0 -52
  287. package/content/components/virtuallist.md +0 -52
  288. package/content/components/virtualtable-v2.md +0 -39
  289. package/content/components/virtualtable.md +0 -55
  290. package/content/components/watermark.md +0 -53
  291. package/content/components/wave.md +0 -43
  292. package/content/guides/ai-chat-family.md +0 -24
  293. package/content/guides/choose.md +0 -67
  294. package/content/guides/component-model.md +0 -32
  295. package/content/guides/component-standards.md +0 -123
  296. package/content/guides/components-guide.md +0 -813
  297. package/content/guides/custom-component.md +0 -321
  298. package/content/guides/data-guide.md +0 -281
  299. package/content/guides/file-preview-family.md +0 -18
  300. package/content/guides/frontend.md +0 -968
  301. package/content/guides/layout-choice.md +0 -64
  302. package/content/guides/layout-guide.md +0 -241
  303. package/content/guides/middleware.md +0 -459
  304. package/content/guides/mobile-guide.md +0 -105
  305. package/content/guides/page-building.md +0 -98
  306. package/content/guides/production.md +0 -37
  307. package/content/guides/quality.md +0 -60
  308. package/content/guides/realtime-guide.md +0 -296
  309. package/content/guides/render-only.md +0 -44
  310. package/content/guides/saas-guide.md +0 -253
  311. package/content/guides/server-guide.md +0 -359
  312. package/content/guides/start.md +0 -41
  313. package/content/guides/styling.md +0 -154
  314. package/content/guides/ui-dom-guide.md +0 -157
  315. package/content/index.json +0 -4344
  316. package/content/index.md +0 -181
  317. package/content/layout/align.md +0 -20
  318. package/content/layout/anchor.md +0 -19
  319. package/content/layout/app-shell.md +0 -23
  320. package/content/layout/border.md +0 -20
  321. package/content/layout/center.md +0 -19
  322. package/content/layout/cluster.md +0 -19
  323. package/content/layout/container.md +0 -19
  324. package/content/layout/fill.md +0 -19
  325. package/content/layout/grid.md +0 -19
  326. package/content/layout/hidden.md +0 -22
  327. package/content/layout/layer.md +0 -19
  328. package/content/layout/position.md +0 -22
  329. package/content/layout/row.md +0 -23
  330. package/content/layout/safe-area.md +0 -20
  331. package/content/layout/scroll.md +0 -21
  332. package/content/layout/spacing.md +0 -22
  333. package/content/layout/split.md +0 -19
  334. package/content/layout/stack.md +0 -19
  335. package/content/layout/surface.md +0 -23
  336. package/content/layout/text.md +0 -22
  337. package/content/patterns/app-shell.md +0 -34
  338. package/content/patterns/dashboard.md +0 -36
  339. package/content/patterns/data-screen.md +0 -30
  340. package/content/patterns/detail-page.md +0 -31
  341. package/content/patterns/docs.md +0 -34
  342. package/content/patterns/focus-task.md +0 -34
  343. package/content/patterns/landing.md +0 -35
  344. package/content/patterns/list-page.md +0 -32
  345. package/content/patterns/mobile.md +0 -31
  346. package/content/patterns/settings-page.md +0 -33
  347. package/content/patterns/workspace.md +0 -32
  348. package/dist/cli/content-sync.test.d.ts +0 -1
  349. package/dist/cli/docs-cli.test.d.ts +0 -1
  350. package/dist/cli/docs.d.ts +0 -2
  351. package/dist/cli/docs.mjs +0 -10961
  352. package/dist/client/vdom/core/build.d.ts +0 -36
  353. package/dist/client/vdom/core/diff/children.d.ts +0 -29
  354. package/dist/client/vdom/core/diff/index.d.ts +0 -22
  355. package/dist/client/vdom/core/diff/output.d.ts +0 -30
  356. package/dist/client/vdom/core/diff/same.d.ts +0 -22
  357. package/dist/client/vdom/core/serve.d.ts +0 -75
  358. package/dist/client/vdom/core/ssr/index.d.ts +0 -25
  359. package/examples/apps/admin/README.md +0 -23
  360. package/examples/apps/admin/api.ts +0 -27
  361. package/examples/apps/admin/app.tsx +0 -144
  362. package/examples/apps/admin/main.tsx +0 -8
  363. package/examples/apps/admin/server.ts +0 -37
  364. package/examples/apps/auth/README.md +0 -23
  365. package/examples/apps/auth/api.ts +0 -49
  366. package/examples/apps/auth/app.tsx +0 -137
  367. package/examples/apps/auth/main.tsx +0 -8
  368. package/examples/apps/auth/server.ts +0 -37
  369. package/examples/apps/multi/README.md +0 -23
  370. package/examples/apps/multi/app.tsx +0 -83
  371. package/examples/apps/multi/main.tsx +0 -8
  372. package/examples/apps/multi/server.ts +0 -33
  373. package/examples/apps/todo/README.md +0 -23
  374. package/examples/apps/todo/api.ts +0 -26
  375. package/examples/apps/todo/app.tsx +0 -128
  376. package/examples/apps/todo/main.tsx +0 -9
  377. package/examples/apps/todo/server.ts +0 -39
  378. package/examples/hello-world/README.md +0 -9
  379. package/examples/hello-world/client.ts +0 -14
  380. package/examples/hello-world/routes.tsx +0 -26
  381. package/examples/hello-world/server.ts +0 -46
  382. package/examples/patterns/AppShell.tsx +0 -224
  383. package/examples/patterns/Dashboard.tsx +0 -153
  384. package/examples/patterns/DataScreen.tsx +0 -104
  385. package/examples/patterns/DetailPage.tsx +0 -79
  386. package/examples/patterns/Docs.tsx +0 -105
  387. package/examples/patterns/FocusTask.tsx +0 -67
  388. package/examples/patterns/Landing.tsx +0 -90
  389. package/examples/patterns/ListPage.tsx +0 -77
  390. package/examples/patterns/Mobile.tsx +0 -154
  391. package/examples/patterns/SettingsPage.tsx +0 -98
  392. package/examples/patterns/SplitWorkspace.tsx +0 -113
@@ -0,0 +1,33 @@
1
+ /**
2
+ * vdom v2 — 调度流(render$——buffer + flush——batching)
3
+ *
4
+ * VDOM-V2-BLUEPRINT 阶段 1d:
5
+ * - render() 请求 = 流 next——**同微任务拍 N 次 → 1 次渲染循环**(React 18
6
+ * 同级优化——渲染频率防线)
7
+ * - 渲染中请求 → 排队(下拍 flush——FIFO 不丢——v1 语义保持)
8
+ * - 透明:request/flush 可 tap(频率/合并率——调度可视化)
9
+ *
10
+ * VDOM-OBSERVABLE-OPTIMIZE 波次 3(时序显式化):
11
+ * - **风暴检测流化**:consecutive 计数清零原为 setTimeout(0)(隐式时序——
12
+ * 同拍双 flush 竞态隐患)——改为**事件间隔判定**(距上次 flush < 16ms =
13
+ * 连续风暴计数;≥ 16ms = 合法下拍流——重置)——无 timer hack
14
+ * - **request 观测点**:spyEvent('sched:request')——时间线回放原料 +
15
+ * 诊断器频率轴直接数据源
16
+ * - **可回放**:request 时间线(spy 事件)→ 重喂 → 同 flush 序列
17
+ * (回放测试——记录/重放标准模式)
18
+ */
19
+ import type { Observable } from '../../observable/index.ts';
20
+ export interface RenderScheduler {
21
+ /** 请求渲染(**来源 tag——W4 诊断归因**:navigate/component-rerender/timer——
22
+ * 渲染健康频率轴可归因——默认 'unknown')——同拍合并(batching) */
23
+ request(source?: string): void;
24
+ /** 渲染执行点(订阅——每次 flush 触发一次) */
25
+ renders$: Observable<void>;
26
+ /** 统计(透明——合并率诊断) */
27
+ stats(): {
28
+ requested: number;
29
+ flushed: number;
30
+ };
31
+ }
32
+ /** 创建调度流(微任务拍合并——渲染中合并排队) */
33
+ export declare function createRenderScheduler(): RenderScheduler;
@@ -0,0 +1,4 @@
1
+ import { type UiServeOptions, type UiServeHandle } from '../protocol.ts';
2
+ import { UIRouter } from '../router.ts';
3
+ /** v2 真实浏览器 serve(uiServe 等价——引擎替换) */
4
+ export declare function uiServeV2(router: UIRouter, opts: UiServeOptions): UiServeHandle;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * vdom v2 — 观测体系(透明机制的落地——事件记录——dev/测试用)
3
+ *
4
+ * 用户原则(2027-08):**可观测是 Observable 化的核心承诺**——调试不得
5
+ * 改源码——通过内建观测钩子记录关键链事件:
6
+ * - obs:use-next(useObservable 源值流——hooks 值到达)
7
+ * - req:render(段 env 的 requestRender——hooks 触发的渲染请求)
8
+ * - sched:flush(调度流 flush——渲染执行)
9
+ * - cmd:render(渲染流命令——diff/build 输出)
10
+ *
11
+ * 用法:
12
+ * window.__wfSpy = [](dev/测试开启——事件追加到数组)
13
+ * 排查 = 读 __wfSpy(全链可见——任意问题可复现观测)
14
+ */
15
+ export interface SpyEvent {
16
+ at: number;
17
+ kind: string;
18
+ data?: string;
19
+ }
20
+ /** 观测记录(全局写入点——__wfSpy 存在即开启——生产零成本) */
21
+ export declare function spyEvent(kind: string, data?: unknown): void;
@@ -0,0 +1,14 @@
1
+ import type { Command } from '../command/index.ts';
2
+ import { UIRouter } from '../router.ts';
3
+ import { Observable } from '../../observable/index.ts';
4
+ /** Observable<Command> → ReadableStream<Command>(SSR 编码适配) */
5
+ export declare function observableToStream(obs: Observable<Command>): ReadableStream<Command>;
6
+ /** v2 SSR 选项(同 v1) */
7
+ export interface SsrV2Options {
8
+ title?: string;
9
+ rootId?: string;
10
+ data?: Record<string, unknown>;
11
+ prefetch?: () => Promise<Record<string, unknown> | void>;
12
+ }
13
+ /** v2 服务端渲染(uiSsr 等价——v2 引擎) */
14
+ export declare function uiSsrV2(router: UIRouter, url: string, opts?: SsrV2Options): Promise<string>;
@@ -26,12 +26,15 @@ export interface VNode {
26
26
  }
27
27
  /** children 值域:vnode/string/number/boolean/空洞/嵌套数组(数组 = 隐式 Fragment) */
28
28
  export type VNodeChild = VNode | string | number | boolean | null | undefined | VNodeChild[];
29
- /** renderFn——每次渲染(读最新 props——同步或 async——异步边界 = ctx.data) */
30
- export type RenderFn<P = Record<string, unknown>> = (props: P) => VNode | null | (VNode | null)[] | Promise<VNode | null | (VNode | null)[]>;
31
- /** 组件(两阶段):
32
- * 工厂 = mount(一次——初始化状态/订阅/数据预取(await ctx.data——管道保证))
33
- * renderFn = 每次渲染(ctx.render()/props 变化触发) */
34
- export type Component<P = Record<string, unknown>, C = UIContext> = (initProps: P, ctx: C) => RenderFn<P> | Promise<RenderFn<P>>;
29
+ /** renderFn——每次渲染(读最新 props——**纯同步**——2027-08 断代:
30
+ * 异步边界 = useAsyncData/订阅 hooks——renderFn 无 async) */
31
+ export type RenderFn<P = Record<string, unknown>> = (props: P) => VNode | null | (VNode | null)[];
32
+ /** 组件(两阶段——**同步**)——2027-08 断代(OBSERVABLE-ARCH 波次 5):
33
+ * - 工厂 = **同步** mount(一次——初始化状态/订阅——**无 mounting 窗口**——
34
+ * 同步执行不存在「半挂载」可观察状态——mouting 竞态类 bug 结构性消灭)
35
+ * - renderFn = 每次渲染(ctx.render()/props 变化触发——**纯同步**)
36
+ * - 异步边界 = useAsyncData/useObservable/useExternal(hooks——流语义) */
37
+ export type Component<P = Record<string, unknown>, C = UIContext> = (initProps: P, ctx: C) => RenderFn<P>;
35
38
  type HType = string | symbol | Component<any, any>;
36
39
  /** h()——创建 vnode(纯数据——除 key 剥离外零转换)
37
40
  * children 原样:单子节点直接存、多子节点存数组、无子节点不存——false/嵌套
@@ -0,0 +1,27 @@
1
+ /**
2
+ * vdom dev——renderFn 错误计数哨兵(VDOM-CORE-EXCELLENCE 波次 D——2027-10)
3
+ *
4
+ * **自愈不可消音**:R1 熔断(renderFn throw → hole 降级 → 下一拍重试)
5
+ * 是容错不是静默——错误必须现形且可观测(阶段 3 D1 经验:错误计数 0 为
6
+ * 基线、非 0 现形)。
7
+ *
8
+ * ① **日志去重**(Icon 类回归案实证:mode 循环重试——每次 renderFn throw
9
+ * 都 console.error——日志风暴掩盖根因)——同 compId 错误只报一次,
10
+ * 恢复成功后清出(再错再报——错误状态变化可观测)
11
+ * ② **错误计数**:total(累计)+ byComp(Map compId → count)——
12
+ * render-health snapshot.errors 轴(dev 仪表四轴——频率/规模/复用/错误)
13
+ *
14
+ * dev only(调用方 __WF_DEV__ 门控——生产零成本——错误走 console.error
15
+ * 原生路径由运行时收集)
16
+ */
17
+ /** renderFn throw 时调用(component.ts renderFn catch / diff.ts rerenderSegment catch)*/
18
+ export declare function noteRenderError(compId: string, e: unknown): void;
19
+ /** renderFn 成功时调用(恢复清出——再错再报) */
20
+ export declare function clearRenderError(compId: string): void;
21
+ /** 错误快照(render-health snapshot.errors 轴) */
22
+ export declare function errorSnapshot(): {
23
+ total: number;
24
+ byComp: Record<string, number>;
25
+ };
26
+ /** 测试隔离重置(仅测试用) */
27
+ export declare function resetErrorCounter(): void;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * vdom dev — 渲染健康诊断器(RENDER-HEALTH-PLAN 波次 1——三轴仪表)
3
+ *
4
+ * 问题:渲染的健康缺少度量与防线——频率/规模/复用失败率全靠用户报 +
5
+ * 每次重查。诊断器 = **问题出现即读数**(不再盲查)。
6
+ *
7
+ * 机制(dev only——__WF_DEV__ 门控——生产零成本):
8
+ * - **频率**:渲染次数/时间窗(渲染周期完成信号——complete$ 事件计数)
9
+ * - **规模**:单次渲染命令数(applied$ 的 cmds.length)
10
+ * - **复用**:工厂重跑率(seg:create / seg:reuse spy 事件——引擎零侵入
11
+ * ——spyEvent 已门控)——重跑率 = create / (create + reuse)
12
+ * - 输出:window.__wfRenderHealth(每 2s 滚动)+ 阈值 warn
13
+ * (频率 > 10/s · 单渲染 > 300ms · 复用率 < 95%——超阈值即警——
14
+ * 同 effect-guard 模式——开发期红线)
15
+ *
16
+ * 接线(serve.ts):`__WF_DEV__` 时 createRenderHealth(cycle, segments)
17
+ */
18
+ import type { Command } from '../core/command/index.ts';
19
+ import type { Observable } from '../observable/index.ts';
20
+ import type { SegmentMap } from '../core/v2/diff.ts';
21
+ export interface RenderHealthSnapshot {
22
+ /** 频率轴:渲染次数/秒(滚动窗口) */
23
+ fps: number;
24
+ /** 规模轴:单次渲染命令数(上次值 + 最大) */
25
+ lastCmds: number;
26
+ maxCmds: number;
27
+ /** 复用轴:工厂重跑率(seg:create 占比——0.95 = 95%) */
28
+ reRunRate: number;
29
+ /** 当前存活段数 */
30
+ segments: number;
31
+ /** 累计(时间线) */
32
+ total: {
33
+ renders: number;
34
+ cmds: number;
35
+ creates: number;
36
+ reuses: number;
37
+ };
38
+ /** 阈值告警(空 = 健康) */
39
+ warns: string[];
40
+ /** renderFn 错误累计(error-counter 单源——D2 四轴) */
41
+ errors: number;
42
+ }
43
+ export interface RenderHealth {
44
+ /** 当前读数(window.__wfRenderHealth 形态) */
45
+ snapshot(): RenderHealthSnapshot;
46
+ /** 刷新滚动窗口(内部每 2s 自动) */
47
+ refresh(): void;
48
+ /** 停止(unmount——窗口清空) */
49
+ dispose(): void;
50
+ }
51
+ /** 创建诊断器(dev only——调用方门控)——订阅周期流 + spy 事件 */
52
+ export declare function createRenderHealth(applied$: Observable<Command[]>, complete$: Observable<void>, segments: SegmentMap, getSpy?: () => {
53
+ kind: string;
54
+ }[]): RenderHealth;
55
+ /** serve 挂载(dev only——__WF_DEV__ 门控——生产零成本)——导出供接线 */
56
+ export declare function enableRenderHealth(opts: {
57
+ applied$: Observable<Command[]>;
58
+ complete$: Observable<void>;
59
+ segments: SegmentMap;
60
+ }): RenderHealth;
@@ -50,11 +50,38 @@ export interface ChatOptions {
50
50
  system?: string;
51
51
  /** 初始消息 */
52
52
  initialMessages?: ChatMessage[];
53
- /** 流式分块解析(默认:每行 JSON——{ content }) */
54
- parseChunk?: (line: string) => {
55
- content?: string;
56
- toolCalls?: ChatMessage['toolCalls'];
57
- } | null;
53
+ /** 流式分块解析(默认:wf: SSE 协议全家桶 + 裸 JSON 行兼容)。
54
+ * 第二参 event = 当前 SSE 事件名(wf:token 等——裸行时 undefined)。
55
+ * 返回形状扩展:content/toolCalls 之外支持 step/usage/approval/
56
+ * toolProgress/toolResult/error/done(内置解析器分派消费) */
57
+ parseChunk?: (line: string, event?: string) => ChatChunk | null;
58
+ }
59
+ /** 流式分块解析结果(wf: 协议事件 → 会话状态更新的映射面) */
60
+ export interface ChatChunk {
61
+ content?: string;
62
+ toolCalls?: ChatToolCall[];
63
+ /** wf:step——思考/工具状态指示 */
64
+ step?: import('../../../server/ai/types.ts').WfStep | null;
65
+ /** wf:usage——token 用量 */
66
+ usage?: import('../../../server/ai/types.ts').WfUsage;
67
+ /** wf:approval_request——HITL 审批请求(挂当前 assistant 消息) */
68
+ approval?: import('../../../server/ai/types.ts').WfApprovalRequest;
69
+ /** wf:tool_progress——工具进度(按 toolCallId 定位更新) */
70
+ toolProgress?: {
71
+ toolCallId: string;
72
+ } & Record<string, unknown>;
73
+ /** wf:tool_result——工具结果(按 id 定位更新) */
74
+ toolResult?: {
75
+ id: string;
76
+ ok?: boolean;
77
+ output?: unknown;
78
+ } & Record<string, unknown>;
79
+ /** wf:error——协议错误 */
80
+ error?: import('../../../server/ai/types.ts').WfError;
81
+ /** wf:done——流结束(content 仅在消息为空时采纳——防 token 累积重复) */
82
+ done?: boolean;
83
+ /** 内部标记:content 来自 done 快照(替换语义而非追加) */
84
+ doneContent?: boolean;
58
85
  }
59
86
  /** 会话状态 */
60
87
  export type ChatStatus = 'idle' | 'streaming' | 'error';
@@ -45,7 +45,9 @@ export declare function useDragDrop(env: HookEnv, opts: DragDropOptions): DragDr
45
45
  * 「必须在 renderFn 内调用」的调用位置规则**在 API 形状上不存在**
46
46
  * (旧快照返回:mount 闭包读一次永不更新——契约 6 静默失效类)
47
47
  * **登记幂等(按 query 的实例级 keyed——不依赖调用顺序)**:任意位置
48
- * 任意次数调用不重复监听——change → 更新 + requestRender → 重渲染 */
48
+ * 任意次数调用不重复监听——change → 更新 + requestRender → 重渲染
49
+ * **2027-08 迁移**:实现 = useObservable(媒体源缓存)——订阅/退订/重渲染
50
+ * 统一(波次 3)——行为不变(getter 形态/幂等/SSR 恒 false) */
49
51
  export declare function useMedia(env: HookEnv, query: string): () => boolean;
50
52
  /** 命名断点(min-width 语义——**getter 形态**——`bp()` 任何时刻最新——
51
53
  * 事件驱动重渲染——内部 useMedia 按 query 幂等登记) */
@@ -9,6 +9,7 @@
9
9
  * 保持状态——组件级精准渲染为后续优化)。
10
10
  */
11
11
  import type { ExternalStore } from '../store.ts';
12
+ import { Subject } from '../observable/index.ts';
12
13
  import { type PopupHandle, type PopupOpenOptions } from './popup-manager.ts';
13
14
  import { type TweenOptions } from './stable.ts';
14
15
  /** hooks 环境(per 组件实例——renderComponent 注入) */
@@ -43,6 +44,21 @@ export interface HookEnv {
43
44
  * - **登记幂等**:getter 类 hook 按业务 key 登记(不依赖调用顺序)——
44
45
  * 任意位置任意次数调用不重复订阅/监听 */
45
46
  export interface Ui {
47
+ /** **Observable 订阅(2027-08——值源 hooks 的统一内层)**:
48
+ * getter 形态——`get()` 永远最新——订阅变化 → 自动重渲染——
49
+ * 卸载自动退订——**幂等(同 source 引用不重复订阅)**——
50
+ * 任何 Observable 都可消费(自研内核——波次 1)——
51
+ * **高激源限帧(2027-09)**:opts.throttleMs > 0 → 渲染通知限频
52
+ * (leading 立即 + trailing 补尾——洪泛场景最新值必渲染——getter
53
+ * 无损) */
54
+ useObservable<T>(source: import('../observable/index.ts').Observable<T>, init: T, opts?: {
55
+ throttleMs?: number;
56
+ }): () => T;
57
+ /** **异步取数(2027-08——Promise 心智——内部流管道)**:
58
+ * 同 key 并发合并(fetch 1 次——8 次请求根治)· reload 作废旧请求
59
+ * (switchMap——竞态消灭)· 卸载自动退订 · 重挂载重新取(新鲜)——
60
+ * get() 返回 null = loading/error 无值 */
61
+ useAsyncData<T>(fetcher: () => Promise<T>, key: string): [() => T | null, () => void];
46
62
  /** 共享状态订阅(**getter 形态**——`get()` 永远最新——store 变化 →
47
63
  * 组件重渲染——unmount 自动退订——订阅幂等(重复调用不重复订阅)) */
48
64
  useExternal<T>(store: ExternalStore<T>): () => T;
@@ -115,5 +131,21 @@ export interface Ui {
115
131
  /** 响应式系统偏好(prefers-reduced-motion——mount 期一次判定) */
116
132
  useReducedMotion(): boolean;
117
133
  }
134
+ /** SSR 预取等待集合(并行 fetch 的 in-flight promise——uiSsr 等待会合) */
135
+ export declare const asyncInflight: Set<Promise<unknown>>;
136
+ /** **useAsyncData 错误事件流(OBSERVABLE-OPTIMIZE 波次 2——失败可观测)**
137
+ * ——模块级观测面——订阅者收 { key, error }——console.error 保持(dev
138
+ * 日志)+ 流可观测(诊断器/作者订阅——错误不再只进控制台)——
139
+ * get() 仍 null(区块降级兼容——语义不变) */
140
+ export declare const asyncErrors$: Subject<{
141
+ key: string;
142
+ error: unknown;
143
+ }>;
144
+ /** **SSR 种子收集**(服务端——渲染后取出——序列化进 __DATA__) */
145
+ export declare function asyncDataSeed(): Record<string, unknown>;
146
+ /** **客户端种子预填**(hydrate——window.__DATA__ → 状态预热——零二次请求):
147
+ * 未创建的 entry 记 pendingSeeds(useAsyncData 创建时命中——状态初值 + skip fetch);
148
+ * 已创建的 entry 直接 next(状态更新) */
149
+ export declare function asyncDataPreload(seed: Record<string, unknown> | undefined): void;
118
150
  /** 创建 ctx.ui 面(env 绑定当前组件实例) */
119
151
  export declare function createUi(env: HookEnv): Ui;
@@ -18,12 +18,27 @@
18
18
  * 监听——close 时移除——无常驻)
19
19
  * - **会话级模态**:presence(退场动画 open→exit→closed→dispose)+
20
20
  * trapFocus(Tab 焦点陷阱)+ lockScroll(滚动锁 + 焦点归还)
21
+ * autoFocus(非模态自动聚焦——2027-09 ContextMenu 键盘导航实证新增)
21
22
  * - **mask**:遮罩 + 居中(maskClosable——危险操作防误触)
22
23
  */
23
24
  import type { VNodeChild } from '../core/vnode.ts';
24
25
  import type { HookEnv } from './env.ts';
25
26
  import { type PopupPlacement } from './popup.ts';
27
+ import { type Observable } from '../observable/index.ts';
26
28
  export type PopupPhase = 'closed' | 'open' | 'exit';
29
+ /** 弹窗迁移事件(**流化(2027-09)——时间线可回放**) */
30
+ export type PopupEvent = {
31
+ kind: 'open';
32
+ } | {
33
+ kind: 'exit';
34
+ } | {
35
+ kind: 'closed';
36
+ } | {
37
+ kind: 'disposed';
38
+ };
39
+ /** 弹窗相位迁移表(**纯 reducer——波次 6**):open →(close)→ exit/closed;
40
+ * disposed = 幂等 closed(unmount 终态——重复 finalize 零迁移) */
41
+ export declare function popupPhaseReducer(s: PopupPhase, e: PopupEvent): PopupPhase;
27
42
  export interface PopupOpenOptions {
28
43
  /** 内容(VNode 或工厂——打开/更新时构建——关闭态不构建) */
29
44
  content: VNodeChild | (() => VNodeChild);
@@ -54,6 +69,10 @@ export interface PopupOpenOptions {
54
69
  presence?: boolean;
55
70
  /** 焦点陷阱(Tab 面板内循环) */
56
71
  trapFocus?: boolean;
72
+ /** 非模态自动聚焦(2027-09——ContextMenu 键盘导航实证):onKeyDown 容器绑定型
73
+ * 组件需要面板聚焦才能收键盘;非模态不 engageModalLock(不锁滚/不陷阱),
74
+ * 聚焦能力按需开启——确定性 scheduleAfterRender + 挂载重试。 */
75
+ autoFocus?: boolean;
57
76
  /** 滚动锁(body overflow hidden + 关闭归还焦点) */
58
77
  lockScroll?: boolean;
59
78
  /** 外部点击关闭(默认 true——Confirm 等危险操作显式 false) */
@@ -74,6 +93,8 @@ export interface PopupHandle {
74
93
  refresh(): void;
75
94
  /** open getter */
76
95
  get open(): boolean;
96
+ /** **迁移事件流(波次 6——open/exit/closed/disposed——时间线可回放)** */
97
+ events$: Observable<PopupEvent>;
77
98
  }
78
99
  /**
79
100
  * openPopup——命令式弹窗内核(唯一形态——toast 心智)
@@ -44,7 +44,10 @@ export interface PopupPositionOptions {
44
44
  panel?: () => HTMLElement | null;
45
45
  margin?: number;
46
46
  }
47
- /** 弹层位置跟踪:scroll/resize 时自动重算 fixed 坐标(0 rect 防护) */
47
+ /** 弹层位置跟踪:scroll/resize 时自动重算 fixed 坐标(0 rect 防护)
48
+ * 2027-08 迁移(波次 3):实现 = useObservable(弹层位置源)——订阅/退订/
49
+ * 重渲染统一——形状保留(对象 getter——调用方零改动)——refresh 语义
50
+ * 升级:手动重算 → 流 next → **自动重渲染**(此前调用方驱动) */
48
51
  export declare function usePopupPosition(env: HookEnv, options: PopupPositionOptions): {
49
52
  readonly top: number;
50
53
  readonly left: number;
@@ -11,6 +11,7 @@
11
11
  * 直接访问;onUnmount 清理——rAF/监听/活动期指针不泄漏)。
12
12
  */
13
13
  import type { HookEnv } from './env.ts';
14
+ /** 响应式系统偏好(prefers-reduced-motion)。mount 期一次判定 */
14
15
  export declare function useReducedMotion(env: HookEnv): boolean;
15
16
  export interface TweenOptions {
16
17
  duration?: number;
@@ -42,4 +43,7 @@ export interface VisualViewportHandle {
42
43
  readonly keyboardOpen: boolean;
43
44
  }
44
45
  /** 可视视口跟踪:键盘弹起/缩放时自动更新 + 重渲染(vv 不可用 → window resize fallback) */
46
+ /** 可视视口跟踪(键盘弹起/缩放——vv 不可用 → window resize fallback)
47
+ * 2027-08 迁移(波次 3):实现 = useObservable(vv 源)——订阅/退订/重渲染
48
+ * 统一——形状保留(对象 getter——调用方零改动) */
45
49
  export declare function useVisualViewport(env: HookEnv): VisualViewportHandle;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * vdom hooks — useObservable 原语(env-based——hooks 内部复用 + ctx.ui 面)
3
+ *
4
+ * 2027-08(波次 2)——值源 hooks 的统一内层:
5
+ * - 订阅 → 值变化 → 自动重渲染(requestRender)——getter 永远最新
6
+ * - 幂等(同 source 引用——实例级 keyed——不重复订阅)
7
+ * - 卸载自动退订(onUnmount)——卸载后零渲染
8
+ */
9
+ import type { Observable } from '../observable/index.ts';
10
+ import type { HookEnv } from './env.ts';
11
+ export declare function useObservable<T>(env: HookEnv, source: Observable<T>, init: T, opts?: {
12
+ throttleMs?: number;
13
+ }): () => T;
@@ -32,31 +32,35 @@
32
32
  * 1. core/vnode + context/UIContext(已完成——纯数据面)
33
33
  * 2. core/commands + render(命令流——首帧同步)✓
34
34
  * 3. core/router + serve(UIRouter/uiServe——最小闭环)✓
35
- * 4. shared/router 核心提取(Trie + 中间件链)——待
35
+ * 4. shared/router 核心提取(Trie + pipeline 内核 + context + chain +
36
+ * ctx-fields——2027-10 SHARED-TRIE B0/B1 完成——前后端唯一共享模块
37
+ * 五层单源)——已完成
36
38
  * 5. core/html(commandToHtml——流式 SSR)——待
37
39
  * 6. hooks/browser/middlewares 独立实现——待
38
40
  */
39
41
  export { h, jsx, jsxs, jsxDEV } from './core/vnode.ts';
42
+ export { keyOf, keyedId } from './core/node/keyed.ts';
40
43
  export { Fragment } from './core/node/fragment.ts';
41
44
  export { UIRouter } from './core/router.ts';
42
45
  export { createClientBrowser } from './browser/create-client-browser.ts';
43
- export { uiServe } from './core/serve.ts';
46
+ export { uiServeV2 as uiServe } from './core/v2/serve.ts';
47
+ export { uiServeV2 } from './core/v2/serve.ts';
44
48
  export type { UIContext, DataPipe } from './context/UIContext.ts';
45
49
  export type { Component, RenderFn, VNode, VNodeChild } from './core/vnode.ts';
46
50
  export type { Ui } from './hooks/env.ts';
47
51
  /** 页面作者渲染入口(ctx.stream——vnode → Response 命令流) */
48
- export type { RenderCtx } from './core/serve.ts';
52
+ export type { RenderCtx } from './core/protocol.ts';
49
53
  export type { Browser } from './browser/Browser.ts';
50
54
  export type { ApiClient } from './middlewares/api.ts';
51
55
  export type { AuthClient, I18nState } from './middlewares/auth-i18n.ts';
52
56
  export type { WsClient } from './middlewares/ws.ts';
53
- export { createStore, createSignal } from './store.ts';
57
+ export { createStore, createSignal, derived } from './store.ts';
54
58
  export { api } from './middlewares/api.ts';
55
59
  export { auth, i18n } from './middlewares/auth-i18n.ts';
56
60
  export { ws } from './middlewares/ws.ts';
57
61
  export { toast, injectCommands, type ToastType } from './commands.ts';
58
- export { renderToStream } from './core/build.ts';
59
- export { diffStream } from './core/diff/index.ts';
62
+ export { renderToStreamV2 as renderToStream } from './core/v2/integrate.ts';
63
+ export { diffToStreamV2 as diffStream } from './core/v2/integrate.ts';
60
64
  export { CommandApplier } from './core/patch/index.ts';
61
65
  export { createComponentRegistry } from './core/node/component.ts';
62
66
  export { aiStream } from './hooks/ai-stream.ts';
@@ -65,3 +69,7 @@ export type { ExternalStore } from './store.ts';
65
69
  /** 中间件类型(ui-dom 兼容——组件命令式中间件签名:confirm()/toast() 等
66
70
  * 注入 ctx 面——(ctx) => ctx' 形状) */
67
71
  export type AppMiddleware<I extends object = {}, O extends object = I> = (ctx: import('./context/UIContext.ts').UIContext & I) => (import('./context/UIContext.ts').UIContext & O) | Promise<import('./context/UIContext.ts').UIContext & O>;
72
+ export { renderV2 } from './core/v2/render.ts';
73
+ export { diffV2, createSegment, disposeSegment, type SegmentMap } from './core/v2/diff.ts';
74
+ export { createRenderScheduler } from './core/v2/schedule.ts';
75
+ export { collectCommands, v2ToHtml, renderToStreamV2 } from './core/v2/integrate.ts';