@xiaobuyu/nodesign 0.0.7 → 0.0.8

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 (353) hide show
  1. package/README.md +266 -79
  2. package/README.zh-CN.md +254 -67
  3. package/package.json +2 -2
  4. package/server/api/admin.js +7 -0
  5. package/server/api/assets/docx-page.js +5 -4
  6. package/server/api/assets/helpers.js +8 -0
  7. package/server/api/assets.js +21 -33
  8. package/server/api/board.js +29 -1
  9. package/server/api/browse.js +3 -2
  10. package/server/api/chatai.js +9 -8
  11. package/server/api/exports/cards.js +7 -6
  12. package/server/api/exports/docx-pdf.js +4 -1
  13. package/server/api/local.js +10 -8
  14. package/server/api/projects.js +19 -3
  15. package/server/api/publish.js +3 -2
  16. package/server/api/sessions-rewind.js +220 -0
  17. package/server/api/sessions.js +58 -194
  18. package/server/api/stage.js +35 -0
  19. package/server/api/turn-model-switch.js +109 -0
  20. package/server/api/turn.js +52 -88
  21. package/server/auth/middleware.js +29 -6
  22. package/server/auth/tier.js +27 -7
  23. package/server/auth/users-store.js +14 -1
  24. package/server/engine/agent/actor-trail.js +110 -0
  25. package/server/engine/agent/agent-shared.js +22 -52
  26. package/server/engine/agent/beat-state.js +61 -0
  27. package/server/engine/agent/cast.js +322 -0
  28. package/server/engine/agent/events.js +9 -2
  29. package/server/engine/agent/hooks/beat-gate.js +73 -0
  30. package/server/engine/agent/hooks/lifecycle.js +6 -2
  31. package/server/engine/agent/hooks/post-trim.js +1 -0
  32. package/server/engine/agent/hooks/pre-board-dirty.js +29 -0
  33. package/server/engine/agent/hooks/pre-defaults.js +206 -2
  34. package/server/engine/agent/hooks/pre-injectors.js +19 -2
  35. package/server/engine/agent/hooks/pre-peer-guard.js +88 -0
  36. package/server/engine/agent/hooks/pre-unknown-params.js +82 -0
  37. package/server/engine/agent/hooks/pre-workspace-scope-guard.js +33 -0
  38. package/server/engine/agent/hooks/resident-role-lifecycle.js +100 -0
  39. package/server/engine/agent/hooks/slot-alias.js +30 -0
  40. package/server/engine/agent/hooks/user-prompt-submit.js +197 -7
  41. package/server/engine/agent/hooks.js +76 -6
  42. package/server/engine/agent/isolation.js +25 -2
  43. package/server/engine/agent/memory-config.js +27 -1
  44. package/server/engine/agent/model-context.js +102 -18
  45. package/server/engine/agent/model-table.js +361 -58
  46. package/server/engine/agent/prompts/nodesign-prelude.md +566 -59
  47. package/server/engine/agent/prompts/tools/direct-edit-protocol.md +1 -1
  48. package/server/engine/agent/prompts/tools/generate-image-cookbook.md +2 -2
  49. package/server/engine/agent/prompts/tools/paint-still-cookbook.md +1 -1
  50. package/server/engine/agent/prompts/tools/site-reference.md +2 -1
  51. package/server/engine/agent/role-card.js +175 -0
  52. package/server/engine/agent/rp-mode.js +17 -0
  53. package/server/engine/agent/session-loop.js +26 -14
  54. package/server/engine/agent/stage-status.js +73 -0
  55. package/server/engine/agent/subagent-flight.js +73 -0
  56. package/server/engine/agent/system-prompts.js +41 -0
  57. package/server/engine/agent/tool-input-stream.js +165 -0
  58. package/server/engine/mcp/actor.js +59 -0
  59. package/server/engine/mcp/capability-gate.js +21 -2
  60. package/server/engine/mcp/index.js +116 -24
  61. package/server/engine/mcp/mode-profile.js +139 -0
  62. package/server/engine/mcp/server-name.js +19 -0
  63. package/server/engine/mcp/tools/artifact-session.js +2 -1
  64. package/server/engine/mcp/tools/browse-find-batch.js +76 -14
  65. package/server/engine/mcp/tools/browse.js +1 -1
  66. package/server/engine/mcp/tools/cast-role.js +167 -0
  67. package/server/engine/mcp/tools/draw-trend.js +104 -0
  68. package/server/engine/mcp/tools/edit-board-schema.js +56 -0
  69. package/server/engine/mcp/tools/edit-board.js +569 -0
  70. package/server/engine/mcp/tools/look-at-board.js +4 -3
  71. package/server/engine/mcp/tools/open-sheet.js +242 -0
  72. package/server/engine/mcp/tools/organize-board.js +19 -5
  73. package/server/engine/mcp/tools/paint-still.js +1 -1
  74. package/server/engine/mcp/tools/pin-to-board.js +78 -3
  75. package/server/engine/mcp/tools/read-board.js +109 -16
  76. package/server/engine/mcp/tools/read-tavern-json.js +87 -19
  77. package/server/engine/mcp/tools/report-issue.js +1 -0
  78. package/server/engine/mcp/tools/role-memory.js +83 -0
  79. package/server/engine/mcp/tools/roll-dice.js +82 -0
  80. package/server/engine/mcp/tools/roll-film.js +1 -1
  81. package/server/engine/mcp/tools/screenshot.js +2 -2
  82. package/server/engine/mcp/tools/set-vars.js +150 -0
  83. package/server/engine/mcp/tools/sheet-replan.js +46 -0
  84. package/server/engine/mcp/tools/web-search.js +1 -1
  85. package/server/engine/mcp/tools/write-on-board-flow.js +108 -0
  86. package/server/engine/mcp/tools/write-on-board-place.js +211 -0
  87. package/server/engine/mcp/tools/write-on-board-role-anchor.js +48 -0
  88. package/server/engine/mcp/tools/write-on-board-schema.js +125 -0
  89. package/server/engine/mcp/tools/write-on-board.js +567 -107
  90. package/server/engine/plugins/nodesign/skills/blackboard-rp/SKILL.md +215 -0
  91. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +11 -3
  92. package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +34 -4
  93. package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +20 -4
  94. package/server/engine/plugins/nodesign/skills/story-craft/SKILL.md +94 -0
  95. package/server/engine/plugins/nodesign/skills/story-import/SKILL.md +112 -0
  96. package/server/engine/plugins/nodesign/skills/story-intimacy/SKILL.md +72 -0
  97. package/server/engine/plugins/nodesign/skills/story-voice/SKILL.md +66 -0
  98. package/server/engine/plugins/nodesign/skills/story-voice/voices//345/206/267/347/241/254.md +33 -0
  99. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/203/205/346/204/237/347/233/264/347/273/231.md +42 -0
  100. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/204/217/350/257/206/346/265/201.md +42 -0
  101. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/255/246/344/276/240/347/231/275/350/257/235.md +34 -0
  102. package/server/engine/plugins/nodesign/skills/story-voice/voices//347/224/237/346/264/273/346/265/201.md +35 -0
  103. package/server/engine/plugins/nodesign/skills/story-voice/voices//347/231/275/346/217/217.md +37 -0
  104. package/server/engine/plugins/nodesign/skills/story-voice/voices//350/210/236/345/217/260/345/211/247.md +32 -0
  105. package/server/engine/plugins/nodesign/skills/story-voice/voices//351/230/266/346/256/265/345/210/207/346/215/242.md +42 -0
  106. package/server/engine/runs/board-seater.js +272 -0
  107. package/server/engine/runs/board-tasklist.js +90 -48
  108. package/server/engine/runs/turn-relay.js +24 -2
  109. package/server/engine/runs/user-chalk-echo.js +44 -0
  110. package/server/index.js +2 -0
  111. package/server/lib/board-anchor.js +49 -0
  112. package/server/lib/board-dirty.js +93 -0
  113. package/server/lib/board-excerpt.js +80 -0
  114. package/server/lib/board-follow.js +111 -0
  115. package/server/lib/board-groups.js +1 -5
  116. package/server/lib/board-hero.js +3 -1
  117. package/server/lib/board-kind-sizes.js +36 -0
  118. package/server/lib/board-lanes.js +58 -0
  119. package/server/lib/board-obstacles.js +80 -0
  120. package/server/lib/board-relations.js +5 -1
  121. package/server/lib/board-sheets.js +467 -0
  122. package/server/lib/board-shelf.js +86 -0
  123. package/server/lib/board-transform.js +62 -0
  124. package/server/lib/canvas-id.js +18 -1
  125. package/server/lib/chalk-flow.js +88 -0
  126. package/server/lib/chalk-rewrite.js +63 -0
  127. package/server/lib/chalk-size-pref.js +48 -0
  128. package/server/lib/chalk.js +42 -3
  129. package/server/lib/ingress/forward-openai-chat.js +16 -4
  130. package/server/lib/ingress/openai-chat.js +23 -12
  131. package/server/lib/ingress/session-routes.js +3 -3
  132. package/server/lib/ingress/stream-watchdog.js +53 -0
  133. package/server/lib/ingress/upstream-billing.js +15 -0
  134. package/server/lib/ingress/upstream-error-hints.js +36 -0
  135. package/server/lib/json-preview.js +58 -0
  136. package/server/lib/model-ingress.js +26 -1
  137. package/server/lib/moderation.js +10 -5
  138. package/server/lib/quota.js +26 -6
  139. package/server/lib/rect.js +50 -0
  140. package/server/lib/screen.js +36 -0
  141. package/server/lib/sheet-state.js +19 -0
  142. package/server/lib/sketch-array.js +118 -0
  143. package/server/lib/sketch-hatch.js +99 -0
  144. package/server/lib/sketch-layout.js +269 -69
  145. package/server/lib/sketch-shapes.js +152 -0
  146. package/server/lib/sketch-stencils.js +170 -0
  147. package/server/lib/state-table.js +237 -0
  148. package/server/lib/state-trend.js +94 -0
  149. package/server/lib/state-triggers.js +199 -0
  150. package/server/lib/tavern-json.js +48 -0
  151. package/server/lib/user-uploads.js +88 -0
  152. package/server/projects/board-limits.js +5 -3
  153. package/server/projects/board-sanitize.js +220 -10
  154. package/server/projects/board-store.js +95 -6
  155. package/server/projects/session-jsonl.js +110 -0
  156. package/server/projects/store.js +56 -3
  157. package/server/projects/viewpoint-store.js +35 -3
  158. package/server/projects/workspace-slots.js +30 -0
  159. package/server/projects/workspace-templates.js +29 -0
  160. package/server/projects/workspace.js +16 -17
  161. package/server/runtime/capabilities.js +6 -2
  162. package/server/shared/locales.js +70 -0
  163. package/server/shared/messages-en.js +69 -0
  164. package/server/shared/messages.js +65 -0
  165. package/server/ws/broker.js +3 -0
  166. package/server/ws/index.js +43 -3
  167. package/web/README.md +1 -1
  168. package/web/dist/assets/{BrowserWindow-BoOBaIyz.js → BrowserWindow-CcaGRWz5.js} +1 -1
  169. package/web/dist/assets/DeckWindow-BIr2KGFT.js +6 -0
  170. package/web/dist/assets/{DocxWindow-B_u6aX9o.js → DocxWindow-B9KZmU5z.js} +2 -2
  171. package/web/dist/assets/{MermaidBlock-BO-46Du5.js → MermaidBlock-DrfRnz8E.js} +43 -43
  172. package/web/dist/assets/{SiteWindow-ConPmzdM.js → SiteWindow-CJOjCF7d.js} +6 -6
  173. package/web/dist/assets/{abnfDiagram-VCTEODGH-FCO9yf-n.js → abnfDiagram-VCTEODGH-CUZbQGIg.js} +1 -1
  174. package/web/dist/assets/{arc-BLcEOSRX.js → arc-C1-HSUny.js} +1 -1
  175. package/web/dist/assets/{architectureDiagram-5GKGNRK7-kxiX4TeN.js → architectureDiagram-5GKGNRK7-B5nwvu60.js} +2 -2
  176. package/web/dist/assets/{blockDiagram-NRAW4CY4-CptFksix.js → blockDiagram-NRAW4CY4-uPPuFLwR.js} +1 -1
  177. package/web/dist/assets/{c4Diagram-UCG6FXSJ-Dxmxj34F.js → c4Diagram-UCG6FXSJ-C0mKBFlz.js} +1 -1
  178. package/web/dist/assets/channel-BxpWNOGU.js +1 -0
  179. package/web/dist/assets/{chunk-2Q5K7J3B-D9inx5oo.js → chunk-2Q5K7J3B-Cs0rlZ4q.js} +1 -1
  180. package/web/dist/assets/{chunk-5VM5RSS4-DydfHlEc.js → chunk-5VM5RSS4-DtR63oYb.js} +1 -1
  181. package/web/dist/assets/{chunk-F27PBJKO-BO7GxhSv.js → chunk-F27PBJKO-B3MRdezJ.js} +1 -1
  182. package/web/dist/assets/{chunk-G27WJ6UU-BzP6YiQ_.js → chunk-G27WJ6UU-BtwntwpS.js} +1 -1
  183. package/web/dist/assets/{chunk-JWPE2WC7-CHcgcd0s.js → chunk-JWPE2WC7-BHsTe5PD.js} +1 -1
  184. package/web/dist/assets/{chunk-LCL6LL3I-D2Wg5JtX.js → chunk-LCL6LL3I-knY15Qdm.js} +1 -1
  185. package/web/dist/assets/{chunk-POPQ4Y6H-B2fCRfpM.js → chunk-POPQ4Y6H-C51tgK_I.js} +1 -1
  186. package/web/dist/assets/{chunk-SVP7TREG-JSLcsRlZ.js → chunk-SVP7TREG-CnwRZmF_.js} +1 -1
  187. package/web/dist/assets/{chunk-XXDRQBXY-BCjvaeHm.js → chunk-XXDRQBXY-BtXzVF-_.js} +1 -1
  188. package/web/dist/assets/classDiagram-DTDB5LWJ-DUEKmDfo.js +1 -0
  189. package/web/dist/assets/classDiagram-v2-JRS7N3AN-DUEKmDfo.js +1 -0
  190. package/web/dist/assets/{cose-bilkent-JH36ORCC-0uKv6oJ7.js → cose-bilkent-JH36ORCC-CzWlGP6i.js} +1 -1
  191. package/web/dist/assets/{cynefin-OW5HDTMX-Bvt-gEmA.js → cynefin-OW5HDTMX-vK64EGSv.js} +1 -1
  192. package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-C9Ht02qC.js → cynefinDiagram-5FMLGOSQ-Bs3g1Gvh.js} +1 -1
  193. package/web/dist/assets/{dagre-3AP2YEHR-BfxZny4s.js → dagre-3AP2YEHR-BhgkYe8V.js} +1 -1
  194. package/web/dist/assets/{diagram-S7CK7UJ4-CrE0ZETE.js → diagram-S7CK7UJ4-C_6mvD2V.js} +1 -1
  195. package/web/dist/assets/{diagram-UQ7AKVKN-BO8VQ4Fx.js → diagram-UQ7AKVKN-qW7tssUW.js} +1 -1
  196. package/web/dist/assets/{diagram-VSXAHHWV-CHUZnR9F.js → diagram-VSXAHHWV-txJPHpvG.js} +1 -1
  197. package/web/dist/assets/{diagram-VX7I27RA-DYQAz1Vu.js → diagram-VX7I27RA-CQTMsCnL.js} +1 -1
  198. package/web/dist/assets/{diagram-Z3DM3KII-BDjivgLr.js → diagram-Z3DM3KII--cb1hoE6.js} +1 -1
  199. package/web/dist/assets/{ebnfDiagram-PWID7BFC-Bpe_QVbH.js → ebnfDiagram-PWID7BFC-Da6lDU77.js} +1 -1
  200. package/web/dist/assets/{erDiagram-SSCWMZ5O-BxhwuAu1.js → erDiagram-SSCWMZ5O-DGCMrsQn.js} +1 -1
  201. package/web/dist/assets/{flowDiagram-A5DVABFB-CCw2H08-.js → flowDiagram-A5DVABFB-GdOL_qno.js} +1 -1
  202. package/web/dist/assets/{ganttDiagram-EL5Y4UJY-DtTc7MyI.js → ganttDiagram-EL5Y4UJY-Cx1F_jBK.js} +4 -4
  203. package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-BvORxMd2.js → gitGraphDiagram-WWUBYQGX-B5_6JhR3.js} +1 -1
  204. package/web/dist/assets/hand-CuvZZQGW.webp +0 -0
  205. package/web/dist/assets/index-BYKfMnmv.js +2759 -0
  206. package/web/dist/assets/index-CW7VsrVg.css +1 -0
  207. package/web/dist/assets/{infoDiagram-RXCK75RN-DMcrkypD.js → infoDiagram-RXCK75RN-CjvKpSPA.js} +1 -1
  208. package/web/dist/assets/{ishikawaDiagram-5VMMS53U-CZkTIbe-.js → ishikawaDiagram-5VMMS53U-CxLoAPhx.js} +1 -1
  209. package/web/dist/assets/{journeyDiagram-EYS64GPL-DR0XazdE.js → journeyDiagram-EYS64GPL-BfvS1upJ.js} +1 -1
  210. package/web/dist/assets/{kanban-definition-3QL26DDD-DN8VbwVu.js → kanban-definition-3QL26DDD-DKPPu0w4.js} +1 -1
  211. package/web/dist/assets/{layout-9_paCbyt.js → layout-Dhgck-Zo.js} +1 -1
  212. package/web/dist/assets/{linear-g6Ct012e.js → linear-DMSQ-aUw.js} +1 -1
  213. package/web/dist/assets/lxgw-nd-app-bold-D1pKA1bR.woff2 +0 -0
  214. package/web/dist/assets/lxgw-nd-app-regular-BDe3d26v.woff2 +0 -0
  215. package/web/dist/assets/lxgw-nd-bold-Bufvlg03.woff2 +0 -0
  216. package/web/dist/assets/lxgw-nd-regular-DQwoI4OP.woff2 +0 -0
  217. package/web/dist/assets/lxgwwenkaiscreen-subset-100-DLPe7tEt.woff2 +0 -0
  218. package/web/dist/assets/lxgwwenkaiscreen-subset-101-d3VsZKWT.woff2 +0 -0
  219. package/web/dist/assets/lxgwwenkaiscreen-subset-102-ClzJuLq6.woff2 +0 -0
  220. package/web/dist/assets/lxgwwenkaiscreen-subset-103-DuDnQ6K-.woff2 +0 -0
  221. package/web/dist/assets/lxgwwenkaiscreen-subset-104-kPGW3Eem.woff2 +0 -0
  222. package/web/dist/assets/lxgwwenkaiscreen-subset-105-BzD54h-0.woff2 +0 -0
  223. package/web/dist/assets/lxgwwenkaiscreen-subset-106-BQ7fIzlx.woff2 +0 -0
  224. package/web/dist/assets/lxgwwenkaiscreen-subset-107-D8tDfFHI.woff2 +0 -0
  225. package/web/dist/assets/lxgwwenkaiscreen-subset-108-tGhkpwep.woff2 +0 -0
  226. package/web/dist/assets/lxgwwenkaiscreen-subset-109-7SMVSrly.woff2 +0 -0
  227. package/web/dist/assets/lxgwwenkaiscreen-subset-110-_uDKrFed.woff2 +0 -0
  228. package/web/dist/assets/lxgwwenkaiscreen-subset-111-Bio825RE.woff2 +0 -0
  229. package/web/dist/assets/lxgwwenkaiscreen-subset-112-D2ee0i-C.woff2 +0 -0
  230. package/web/dist/assets/lxgwwenkaiscreen-subset-113-JPFVDrga.woff2 +0 -0
  231. package/web/dist/assets/lxgwwenkaiscreen-subset-114-BcfxYA4w.woff2 +0 -0
  232. package/web/dist/assets/lxgwwenkaiscreen-subset-115-B1HeeOsd.woff2 +0 -0
  233. package/web/dist/assets/lxgwwenkaiscreen-subset-116-hY12tXpq.woff2 +0 -0
  234. package/web/dist/assets/lxgwwenkaiscreen-subset-117-BvuZwmre.woff2 +0 -0
  235. package/web/dist/assets/lxgwwenkaiscreen-subset-118-tzvs_H7j.woff2 +0 -0
  236. package/web/dist/assets/lxgwwenkaiscreen-subset-119-J2DWuYDN.woff2 +0 -0
  237. package/web/dist/assets/lxgwwenkaiscreen-subset-21-pDubCJV5.woff2 +0 -0
  238. package/web/dist/assets/lxgwwenkaiscreen-subset-22-ChAPMpqp.woff2 +0 -0
  239. package/web/dist/assets/lxgwwenkaiscreen-subset-23-BBx3oNpT.woff2 +0 -0
  240. package/web/dist/assets/lxgwwenkaiscreen-subset-24-CYt-Oagk.woff2 +0 -0
  241. package/web/dist/assets/lxgwwenkaiscreen-subset-25-Cx3j-ZUv.woff2 +0 -0
  242. package/web/dist/assets/lxgwwenkaiscreen-subset-26-B9AfZ3LL.woff2 +0 -0
  243. package/web/dist/assets/lxgwwenkaiscreen-subset-27-Bh2s9MNE.woff2 +0 -0
  244. package/web/dist/assets/lxgwwenkaiscreen-subset-28-C02JPoKP.woff2 +0 -0
  245. package/web/dist/assets/lxgwwenkaiscreen-subset-29-T_tbUGhk.woff2 +0 -0
  246. package/web/dist/assets/lxgwwenkaiscreen-subset-30-DMfyNzhz.woff2 +0 -0
  247. package/web/dist/assets/lxgwwenkaiscreen-subset-31-DFfdzbkg.woff2 +0 -0
  248. package/web/dist/assets/lxgwwenkaiscreen-subset-32-Bs1fz2iW.woff2 +0 -0
  249. package/web/dist/assets/lxgwwenkaiscreen-subset-33-cpB96OkZ.woff2 +0 -0
  250. package/web/dist/assets/lxgwwenkaiscreen-subset-34-BhinPYWX.woff2 +0 -0
  251. package/web/dist/assets/lxgwwenkaiscreen-subset-35-D_njRQqA.woff2 +0 -0
  252. package/web/dist/assets/lxgwwenkaiscreen-subset-36-DqXlLE3t.woff2 +0 -0
  253. package/web/dist/assets/lxgwwenkaiscreen-subset-37-j5LbvMph.woff2 +0 -0
  254. package/web/dist/assets/lxgwwenkaiscreen-subset-38-oO4jWdKm.woff2 +0 -0
  255. package/web/dist/assets/lxgwwenkaiscreen-subset-39-CabsX4rw.woff2 +0 -0
  256. package/web/dist/assets/lxgwwenkaiscreen-subset-4-PatS3YHh.woff2 +0 -0
  257. package/web/dist/assets/lxgwwenkaiscreen-subset-40-yrLg3C3e.woff2 +0 -0
  258. package/web/dist/assets/lxgwwenkaiscreen-subset-41-DBXmCQhc.woff2 +0 -0
  259. package/web/dist/assets/lxgwwenkaiscreen-subset-42-Bqij_UiQ.woff2 +0 -0
  260. package/web/dist/assets/lxgwwenkaiscreen-subset-43-D3kp0Ntc.woff2 +0 -0
  261. package/web/dist/assets/lxgwwenkaiscreen-subset-44-B_BNGvK4.woff2 +0 -0
  262. package/web/dist/assets/lxgwwenkaiscreen-subset-45-CZc0cQWs.woff2 +0 -0
  263. package/web/dist/assets/lxgwwenkaiscreen-subset-46-CHQX5Kd9.woff2 +0 -0
  264. package/web/dist/assets/lxgwwenkaiscreen-subset-47-Ci8gLrHA.woff2 +0 -0
  265. package/web/dist/assets/lxgwwenkaiscreen-subset-48-run3ugD3.woff2 +0 -0
  266. package/web/dist/assets/lxgwwenkaiscreen-subset-49-DgfiUb6u.woff2 +0 -0
  267. package/web/dist/assets/lxgwwenkaiscreen-subset-5-B0CtGbX_.woff2 +0 -0
  268. package/web/dist/assets/lxgwwenkaiscreen-subset-50-CdCG-POr.woff2 +0 -0
  269. package/web/dist/assets/lxgwwenkaiscreen-subset-51-L2okeQZ2.woff2 +0 -0
  270. package/web/dist/assets/lxgwwenkaiscreen-subset-52-BZAqyGJW.woff2 +0 -0
  271. package/web/dist/assets/lxgwwenkaiscreen-subset-53-B0xWqLeU.woff2 +0 -0
  272. package/web/dist/assets/lxgwwenkaiscreen-subset-54-BZVQX-EA.woff2 +0 -0
  273. package/web/dist/assets/lxgwwenkaiscreen-subset-55-093mkIUJ.woff2 +0 -0
  274. package/web/dist/assets/lxgwwenkaiscreen-subset-56-CbhWG8G-.woff2 +0 -0
  275. package/web/dist/assets/lxgwwenkaiscreen-subset-57-pLQuvo6c.woff2 +0 -0
  276. package/web/dist/assets/lxgwwenkaiscreen-subset-58-BHhoY50x.woff2 +0 -0
  277. package/web/dist/assets/lxgwwenkaiscreen-subset-59-D1_6DuIQ.woff2 +0 -0
  278. package/web/dist/assets/lxgwwenkaiscreen-subset-6-BnAelmYU.woff2 +0 -0
  279. package/web/dist/assets/lxgwwenkaiscreen-subset-60-HDBIuLTZ.woff2 +0 -0
  280. package/web/dist/assets/lxgwwenkaiscreen-subset-61-C-c13SeU.woff2 +0 -0
  281. package/web/dist/assets/lxgwwenkaiscreen-subset-62-kHRVOhZ2.woff2 +0 -0
  282. package/web/dist/assets/lxgwwenkaiscreen-subset-63-C0MCsvFv.woff2 +0 -0
  283. package/web/dist/assets/lxgwwenkaiscreen-subset-64-DZekguCj.woff2 +0 -0
  284. package/web/dist/assets/lxgwwenkaiscreen-subset-65-CtP6c3IU.woff2 +0 -0
  285. package/web/dist/assets/lxgwwenkaiscreen-subset-66-DLVWoMSf.woff2 +0 -0
  286. package/web/dist/assets/lxgwwenkaiscreen-subset-67-BVuOnayH.woff2 +0 -0
  287. package/web/dist/assets/lxgwwenkaiscreen-subset-68-DpxQ6Mnx.woff2 +0 -0
  288. package/web/dist/assets/lxgwwenkaiscreen-subset-69-qesBxLmC.woff2 +0 -0
  289. package/web/dist/assets/lxgwwenkaiscreen-subset-70-BBt1xN7h.woff2 +0 -0
  290. package/web/dist/assets/lxgwwenkaiscreen-subset-71-BWqZacwB.woff2 +0 -0
  291. package/web/dist/assets/lxgwwenkaiscreen-subset-72-B1wP_Yst.woff2 +0 -0
  292. package/web/dist/assets/lxgwwenkaiscreen-subset-73-C99T7jNZ.woff2 +0 -0
  293. package/web/dist/assets/lxgwwenkaiscreen-subset-74-DrUTsWBe.woff2 +0 -0
  294. package/web/dist/assets/lxgwwenkaiscreen-subset-75-C4M5XXQe.woff2 +0 -0
  295. package/web/dist/assets/lxgwwenkaiscreen-subset-76-Bq8spVWF.woff2 +0 -0
  296. package/web/dist/assets/lxgwwenkaiscreen-subset-77-D9vNupE2.woff2 +0 -0
  297. package/web/dist/assets/lxgwwenkaiscreen-subset-78-D6th7Gnu.woff2 +0 -0
  298. package/web/dist/assets/lxgwwenkaiscreen-subset-79-bezM85cS.woff2 +0 -0
  299. package/web/dist/assets/lxgwwenkaiscreen-subset-80-DD8pnhG2.woff2 +0 -0
  300. package/web/dist/assets/lxgwwenkaiscreen-subset-81-N6jtSyBs.woff2 +0 -0
  301. package/web/dist/assets/lxgwwenkaiscreen-subset-82-D6c180bZ.woff2 +0 -0
  302. package/web/dist/assets/lxgwwenkaiscreen-subset-83-em17AadM.woff2 +0 -0
  303. package/web/dist/assets/lxgwwenkaiscreen-subset-84-CJ8gdrMK.woff2 +0 -0
  304. package/web/dist/assets/lxgwwenkaiscreen-subset-85-9PPGO1eB.woff2 +0 -0
  305. package/web/dist/assets/lxgwwenkaiscreen-subset-86-CjWPf-u5.woff2 +0 -0
  306. package/web/dist/assets/lxgwwenkaiscreen-subset-87-8D_X_yOC.woff2 +0 -0
  307. package/web/dist/assets/lxgwwenkaiscreen-subset-88-9vtKFPBx.woff2 +0 -0
  308. package/web/dist/assets/lxgwwenkaiscreen-subset-89-BhE5jAKX.woff2 +0 -0
  309. package/web/dist/assets/lxgwwenkaiscreen-subset-90-D2Npfm5E.woff2 +0 -0
  310. package/web/dist/assets/lxgwwenkaiscreen-subset-91-C6Ft1-Eu.woff2 +0 -0
  311. package/web/dist/assets/lxgwwenkaiscreen-subset-97-CaExyQP9.woff2 +0 -0
  312. package/web/dist/assets/lxgwwenkaiscreen-subset-98-CPoVbsUd.woff2 +0 -0
  313. package/web/dist/assets/lxgwwenkaiscreen-subset-99-ZUQZGVgH.woff2 +0 -0
  314. package/web/dist/assets/{mindmap-definition-FBJOCRG2-BGt4omYC.js → mindmap-definition-FBJOCRG2-CalfL_Kn.js} +1 -1
  315. package/web/dist/assets/{pegDiagram-XKGWAZYB-uSfS-PBE.js → pegDiagram-XKGWAZYB-D9mVWz7l.js} +1 -1
  316. package/web/dist/assets/pending-edit-apply-kwMFWsUe.js +31 -0
  317. package/web/dist/assets/{pieDiagram-E7YTZNPT-DpeI935H.js → pieDiagram-E7YTZNPT-DELzbZNS.js} +1 -1
  318. package/web/dist/assets/{quadrantDiagram-AXDQQJYC-B7IuNvWa.js → quadrantDiagram-AXDQQJYC-TZqp4mfA.js} +1 -1
  319. package/web/dist/assets/{railroadDiagram-O6MQD6OU-ARzYpPQI.js → railroadDiagram-O6MQD6OU-DxX59f0i.js} +1 -1
  320. package/web/dist/assets/{requirementDiagram-EFPCY7ZU-Cj4upkAo.js → requirementDiagram-EFPCY7ZU-DFdsJLIe.js} +1 -1
  321. package/web/dist/assets/{rotate-cw-CXJcyHWk.js → rotate-cw-62liz7LX.js} +1 -1
  322. package/web/dist/assets/{sankeyDiagram-P5KCCOFB-OaVwSnLP.js → sankeyDiagram-P5KCCOFB-ByYcd3fG.js} +1 -1
  323. package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-1yrUbq4t.js → sequenceDiagram-WJ2MYXX4-Bj-ml1jS.js} +1 -1
  324. package/web/dist/assets/{sizeCapture-X5ZJPWSS-nYH5p9D6.js → sizeCapture-X5ZJPWSS-KhsXThyD.js} +1 -1
  325. package/web/dist/assets/{square-dashed-mouse-pointer-CTtTVKoH.js → square-dashed-mouse-pointer-D_VrqVpy.js} +1 -1
  326. package/web/dist/assets/{stateDiagram-HBIQ2CUA-Dj5HvyNq.js → stateDiagram-HBIQ2CUA-BJlpHfWU.js} +1 -1
  327. package/web/dist/assets/stateDiagram-v2-4QOOHH4V-CR2kYAH2.js +1 -0
  328. package/web/dist/assets/{swimlanes-XN3QIQJK-umeT0HpB.js → swimlanes-XN3QIQJK-DUB9OJVs.js} +1 -1
  329. package/web/dist/assets/swimlanesDiagram-VK2B7HYN-BitOxnG2.js +8 -0
  330. package/web/dist/assets/{timeline-definition-24CTP7MA-MqnQfHKB.js → timeline-definition-24CTP7MA-C03NX82A.js} +1 -1
  331. package/web/dist/assets/{vennDiagram-4TSXK5OY-b2liyZra.js → vennDiagram-4TSXK5OY-B9pjzngp.js} +1 -1
  332. package/web/dist/assets/{wardleyDiagram-VM6X3IG4-QMK-zNh1.js → wardleyDiagram-VM6X3IG4-UqWq_mcT.js} +1 -1
  333. package/web/dist/assets/{xychartDiagram-S5SC5T6Z-D5Mc6tfA.js → xychartDiagram-S5SC5T6Z-D2pDKtOv.js} +1 -1
  334. package/web/dist/index.html +2 -2
  335. package/server/engine/mcp/tools/arrange-on-board.js +0 -126
  336. package/server/engine/mcp/tools/create-on-board.js +0 -152
  337. package/server/engine/mcp/tools/edit-sketch.js +0 -167
  338. package/server/engine/mcp/tools/relate-on-board.js +0 -150
  339. package/server/engine/mcp/tools/sketch-on-board.js +0 -345
  340. package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +0 -235
  341. package/server/engine/plugins/nodesign/skills/rp-craft/patterns//346/274/224/345/207/272/351/241/265-/346/234/200/345/260/217/345/256/236/347/216/260.html +0 -78
  342. package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +0 -268
  343. package/web/dist/assets/DeckWindow-Bg3rgkvi.js +0 -11
  344. package/web/dist/assets/channel-DFyiuGL0.js +0 -1
  345. package/web/dist/assets/classDiagram-DTDB5LWJ-Aw1f8z-b.js +0 -1
  346. package/web/dist/assets/classDiagram-v2-JRS7N3AN-Aw1f8z-b.js +0 -1
  347. package/web/dist/assets/index-C0KUf6Wd.css +0 -1
  348. package/web/dist/assets/index-DGG5wIZs.js +0 -2118
  349. package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
  350. package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
  351. package/web/dist/assets/pending-edit-apply-uP4uvrOD.js +0 -31
  352. package/web/dist/assets/stateDiagram-v2-4QOOHH4V-kJ1m_zJT.js +0 -1
  353. package/web/dist/assets/swimlanesDiagram-VK2B7HYN-DPSkMbbl.js +0 -8
package/README.md CHANGED
@@ -2,116 +2,276 @@
2
2
 
3
3
  # NoDesign
4
4
 
5
- An infinite canvas, and an agent that stays in the room.
5
+ > **See something wrong? Circle it. Generating, reviewing, responding and revising all happen on the same infinite canvas.**
6
6
 
7
- Tell it what you want to make, and it creates websites, slide decks, documents, images and video right on the canvas. Everything it produces is saved as a real file you can keep editing, annotate, download and publish.
7
+ [![npm version](https://img.shields.io/npm/v/%40xiaobuyu%2Fnodesign)](https://www.npmjs.com/package/@xiaobuyu/nodesign)
8
+ [![npm downloads](https://img.shields.io/npm/dw/%40xiaobuyu%2Fnodesign)](https://www.npmjs.com/package/@xiaobuyu/nodesign)
9
+ [![license](https://img.shields.io/npm/l/%40xiaobuyu%2Fnodesign)](https://github.com/Xiaokebuyu/Nodesign/blob/main/LICENSE)
8
10
 
9
- ![demo](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo.gif)
11
+ NoDesign is an Agent-native workspace for making things, built on real files.
10
12
 
11
- ## Try it
13
+ Tell the Agent what you want and it creates websites, slide decks, Word documents, images and video right on the canvas. You review the result without leaving that canvas. When something is off, circle it, comment on it, or start a conversation next to the artifact itself.
14
+
15
+ Your current view, what you have selected, and the components behind it all travel with your message. The Agent knows what you mean by "this", edits the real file behind it, and comes back to the canvas so you can look again.
16
+
17
+ ```text
18
+ Ask → Agent builds → You review on the canvas → Circle and comment
19
+ → Agent edits the real files → Agent checks its own work → Continue in place
20
+ ```
21
+
22
+ ![Circle a region on the canvas; the Agent picks up the target context and edits it directly](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-roundtrip.gif)
23
+
24
+ NoDesign is not a canvas that AI output gets placed on. It is a canvas that holds the entire loop: generate, review, respond, revise.
25
+
26
+ ## Try it now
27
+
28
+ ### Local
29
+
30
+ Requires Node.js 20 or newer:
12
31
 
13
32
  ```bash
14
33
  npx @xiaobuyu/nodesign
15
34
  ```
16
35
 
17
- Requires Node.js 20+ and at least one model provider:
36
+ Then configure at least one way to reach a model:
18
37
 
19
- - A Claude subscription or an Anthropic API key
20
- - OpenAI, DeepSeek, Zhipu, Tongyi, OpenRouter
21
- - Ollama or any other service that speaks the OpenAI API
38
+ - A Claude subscription, or an Anthropic API key
39
+ - OpenAI, DeepSeek, Zhipu, Qwen, OpenRouter
40
+ - Ollama, or any other service that speaks the OpenAI API format
22
41
 
23
- NoDesign charges no subscription fee and takes no cut of model calls. Project files and configuration stay on your machine. When you use a cloud model, the context needed to finish the task is sent to the provider you configured. When you use a local model such as Ollama, nothing leaves your computer.
42
+ NoDesign charges no subscription of its own and takes no cut of model usage.
24
43
 
25
- If you would rather not install anything yet, there is a hosted instance: [nodesign.xiaobuyu.trade](https://nodesign.xiaobuyu.trade)
44
+ Your project files and configuration stay on your machine. With a cloud model, the context needed for the task goes to the provider you configured. With a local model such as Ollama, nothing has to leave your computer.
26
45
 
27
- The hosted version offers free models with a daily allowance. Some local capabilities are not open there.
46
+ ### Hosted
28
47
 
29
- ## What it can help you make
48
+ If you would rather not install anything, the hosted build covers the basics:
30
49
 
31
- Three typical cases:
50
+ [https://nodesign.xiaobuyu.trade](https://nodesign.xiaobuyu.trade)
32
51
 
33
- - **A portfolio page**: put your reference images and text on the canvas, tell the Agent what style you want, check how it looks at desktop, tablet and phone widths, then publish it to the public internet once Cloudflare is configured.
34
- - **A slide deck**: put photos, text and a reference style on the canvas, the Agent generates paged slides, you annotate and revise directly on them, then export to PDF or PPTX.
35
- - **A content project**: sites, images, video and documents live on one canvas and are handled by the same Agent, which can keep drawing material from one artifact into another.
52
+ It runs on free models with a daily allowance. Features that depend on the local machine are not enabled there.
36
53
 
37
- ### Artifact types
54
+ ## Why the whole loop can stay on one canvas
38
55
 
39
- | Artifact | Format | What you can do |
40
- |---|---|---|
41
- | Decks (slides, tall images, posters) | `.html` | Paged at 16:9, 9:16, 4:3 and other ratios; export to HTML, PDF, PPTX |
42
- | Sites (portfolios, landing pages, small apps) | A folder with an `index.html` | Desktop, tablet and phone preview; whole-site zip export; one-click publish once Cloudflare is configured |
43
- | Word documents | `.docx` | Real OOXML written directly, not HTML wrapped up as a Word file. Page-image preview, page flipping, download the original |
44
- | Images | Common image formats | Generation, background removal |
45
- | Video | Common video formats | Import, preview and transcoding |
56
+ ### Circle what's wrong
46
57
 
47
- ![Say one sentence to generate an image, then remove the background for a transparent PNG](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-image.gif)
58
+ Often the problem is not that the model cannot make the change. It is that it does not know which "this" you mean.
48
59
 
49
- ![The Agent produces a Word document, with the real layout visible on the canvas](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-docx.gif)
60
+ In NoDesign you can:
50
61
 
51
- These files do not depend on any format private to NoDesign. You can keep editing them in other tools, and download them at any time.
62
+ - Double-click to edit text in place;
63
+ - Circle a region and leave a comment on it;
64
+ - Drag things around and organize the canvas;
65
+ - Draw relations between pieces of content: reference, annotation, follow-up;
66
+ - Summon the Agent right beside the artifact you are looking at.
52
67
 
53
- Real projects made with NoDesign: a research site about a band, a 15-page Tibet travel deck with a companion site, a pixel-art page for a game server, a résumé `.docx` that went through six revisions. There are experimental ones too, such as an interactive visual novel where you pick the plot on the page and the text is generated in the chat. One published site: [spica-mix.share.xiaobuyu.trade](https://spica-mix.share.xiaobuyu.trade).
68
+ Your viewport, the selected target, what sits near it, and the components involved are all gathered into the context for the next turn.
54
69
 
55
- ## Why it is not just another AI chat box
70
+ So instead of taking a screenshot and explaining:
56
71
 
57
- ### The canvas is the workspace
72
+ > The blue block on the right of the second screen is in the wrong place.
58
73
 
59
- Cards on the canvas are real files, and folders are real directories. Moving, editing and tidying cards changes what is on disk.
74
+ You circle it and say:
60
75
 
61
- ![Open a folder, drag a card into it, draw a relation between two cards](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-desktop.gif)
76
+ > Too cramped here.
62
77
 
63
- ### The Agent is present
78
+ That is enough.
64
79
 
65
- The Agent shows up next to whatever it is working on. You can see which file it is editing and how the content takes shape, instead of waiting for a chat box to return a finished answer.
80
+ When the Agent is done, the result comes back to the same canvas. Keep reviewing, ask a follow-up, or start the next revision, without cycling between a chat box, a preview window, an editor and a file manager.
66
81
 
67
- ### The canvas is also a blackboard
82
+ ### The Agent can check its own work
68
83
 
69
- The Agent does not only put finished artifacts on the canvas, it puts its thinking there too. It sketches, writes notes, and draws lines between related things. That is how it shows you the plan it has in mind, or takes something complicated apart.
84
+ Generating is only half of it. The Agent can go back and inspect what it made.
70
85
 
71
- ![Taking apart the character relationships in a play: eight people in two families, lines labelled with what each pair is to the other, portraits generated on the spot and linked back to the names](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-blackboard.gif)
86
+ For a site, it can:
72
87
 
73
- Those notes are real files, kept under `notes/板书/` in the project. Sketch nodes, lines and notes can all be edited in place with a double click, and the Agent uses your edited version from the next turn on.
88
+ - Take screenshots at desktop, tablet and phone widths;
89
+ - Read browser console errors;
90
+ - Inspect the final computed styles;
91
+ - Verify that fonts actually loaded;
92
+ - Sample scroll effects and key animation frames;
93
+ - Keep revising based on what it found.
74
94
 
75
- ![Double-click a note the Agent wrote and edit it in place on the canvas](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-chalk.gif)
95
+ ![A site previewed at desktop, tablet and phone widths](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-viewport.gif)
76
96
 
77
- ### Your actions become context for the next turn
97
+ If several rounds of edits still miss, the Agent can bring in a read-only reviewer subagent to go through the pages with fresh eyes. The reviewer only reports defects; it cannot edit files.
78
98
 
79
- You can edit text directly, circle a region, drag elements around, or draw relations such as "reference", "annotate" and "continue from" between artifacts. All of it is collected as context for the next task.
99
+ ### Everything on the canvas is a real file
80
100
 
81
- ![Circle a region of the cover, write one line, and the Agent picks it up and revises it](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-roundtrip.gif)
101
+ The canvas is not where files go to be displayed.
82
102
 
83
- ### The Agent can check its own results
103
+ A file card on the canvas is a real file on disk, and a folder card is a real directory. Opening, renaming, sorting and moving cards writes through to the project workspace.
84
104
 
85
- It can take screenshots at different screen widths and read computed styles, console errors, font loading state and animation frames, then keep revising based on what it finds. When it is done it screenshots the result and checks it. If you are still unhappy after two rounds, it asks a read-only review subagent to go through the pages.
105
+ ![Opening a folder, dragging a card into it, drawing a relation between two cards](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-desktop.gif)
86
106
 
87
- ![A site previewed at desktop, tablet and phone widths](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-viewport.gif)
107
+ The sites, decks, Word documents, images and video the Agent makes are never locked inside a NoDesign format. You can:
108
+
109
+ - Keep reviewing and annotating them on the canvas;
110
+ - Download the original files;
111
+ - Open them in other software and keep working;
112
+ - Edit them yourself and hand them back to the Agent;
113
+ - Publish the project or deliver it to someone else.
114
+
115
+ The canvas is a desk that connects files, context and the Agent, not a container that shows generated results.
116
+
117
+ ### Different kinds of output, one continuous thread
118
+
119
+ Sites, decks, documents, images, video and reference material can sit on the same canvas and be handled by the same Agent, one after another.
120
+
121
+ For example:
122
+
123
+ 1. Have the Agent research a topic;
124
+ 2. Turn the findings into a Word document;
125
+ 3. Build a deck from that document;
126
+ 4. Pull a tall promo image out of the deck;
127
+ 5. Make a companion site from the same material;
128
+ 6. Circle what you do not like and have it fixed in place.
129
+
130
+ The Agent knows where these files live in the project and can keep drawing on them across formats, so you never have to re-explain the project every time the output type changes.
131
+
132
+ ![An end to end NoDesign session](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo.gif)
133
+
134
+ ### The Agent can find and study references itself
135
+
136
+ The Agent has its own browser. Hand it a URL, or let it go looking.
137
+
138
+ It can:
139
+
140
+ - Browse and screenshot pages;
141
+ - Analyze layout, color and typography;
142
+ - Read how a page divides up its content;
143
+ - Inspect scroll-triggered animation and interaction;
144
+ - Pull useful screenshots and assets into the current project;
145
+ - Build sites, decks or other artifacts from what it found.
146
+
147
+ In the local build the browser keeps its login state. When it hits a captcha, a login confirmation or anything else that needs a human, it pauses and asks you to take over, then picks the task back up.
148
+
149
+ ### Thinking can stay on the canvas too
150
+
151
+ The Agent does not only put finished artifacts on the canvas. It can lay out its thinking there as well.
152
+
153
+ It sketches, writes on the board, draws connections between related pieces, explains its plan, or breaks a hard problem into parts you can talk through.
154
+
155
+ ![Mapping out the characters of *Thunderstorm*: roles, portraits and relation lines](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-blackboard.gif)
156
+
157
+ Board writing is itself a real file, stored under `notes/板书/` in the project. Sketch nodes, connectors and board text can all be adjusted by hand, and the Agent picks up your edits from there.
158
+
159
+ ![Double-click something the Agent wrote on the board and edit it in place](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-chalk.gif)
160
+
161
+ Project decisions, style notes and personal preferences do not have to live buried in chat history. They can stay in the workspace as visible, editable content, and can be distilled into reusable Skills.
162
+
163
+ > In progress: moving more brainstorming and conversation branches onto the canvas, so you can pick up from any stage or node to ask, extend or compare, instead of scrolling back through one ever-growing thread.
164
+
165
+ ## What you can make with it
166
+
167
+ ### Three typical sessions
168
+
169
+ - **A portfolio or landing page**
170
+ Drop reference images and copy onto the canvas and tell the Agent the style you want. It builds the page, then checks it at desktop, tablet and phone widths. Circle whatever is off, keep revising, and publish once configured.
88
171
 
89
- ### Memory is visible and editable
172
+ - **A slide deck**
173
+ Put photos, text and a reference style on the canvas and the Agent produces paginated slides. Review each page, edit the text, circle and comment, then export to PDF or PPTX.
90
174
 
91
- Project decisions, style notes and personal preferences do not stay buried in the conversation history. They live in the workspace as content you can see, and they can be crystallized into reusable Skills.
175
+ - **A cross-media project**
176
+ Keep the site, images, video, deck and documents on one canvas, handled by one Agent. Each output can draw on material, research and style context the others already established.
177
+
178
+ ### Supported artifact types
179
+
180
+ | Artifact | Format | What works today |
181
+ |---|---|---|
182
+ | Decks, tall images, posters | `.html` | Paginated at 16:9, 9:16, 4:3 and other ratios; exports to HTML, PDF, PPTX |
183
+ | Portfolios, landing pages, small apps | A folder with `index.html` | Desktop, tablet and phone preview; whole-site ZIP export; publishing once Cloudflare is configured |
184
+ | Word documents | `.docx` | Real OOXML, not HTML with the extension changed; page-image preview, paging, original download |
185
+ | Images | Common image formats | Generation, background removal, asset handling |
186
+ | Video | Common video formats | Import, preview, transcoding |
187
+
188
+ ![Generate an image from one sentence, then remove the background for a transparent PNG](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-image.gif)
189
+
190
+ ![The Agent produces a Word document and inspects the layout on the canvas](https://raw.githubusercontent.com/Xiaokebuyu/Nodesign/main/docs/demo-docx.gif)
191
+
192
+ ### Things actually built with it
193
+
194
+ Every site below was made in NoDesign and is live right now. They are all in Chinese, though the first one needs no reading.
195
+
196
+ | Site | What it is |
197
+ |---|---|
198
+ | [Jet Engine Lab](https://jet-engine-lab.share.xiaobuyu.trade) | An interactive 3D turbofan. Procedurally built geometry you can rotate, throttle up, blow apart, cut away and watch airflow through, with pressure, temperature and velocity readouts at each station |
199
+ | [Into the Third Pole](https://third-pole.share.xiaobuyu.trade) | A thirty-day private expedition through Tibet, told as a long-form travel site |
200
+ | [CHENXI](https://chenxi.share.xiaobuyu.trade) | An editorial skincare publication, and the product line that grew out of it |
201
+ | [Sōtaiseiriron](https://soutaiseiriron.share.xiaobuyu.trade) | A paper-notebook style unofficial fan site for the Japanese band |
202
+ | [Rin, a character study](https://rin.share.xiaobuyu.trade) | Notes on the lead of the short film *Shelter*, where every annotation is also a switch |
203
+ | [Conjecture on a Certain Day](https://225ad5.share.xiaobuyu.trade) | A chaptered interactive story, one summer afternoon, one puzzle |
204
+ | [SPiCa, paid vacation mix](https://spica-mix.share.xiaobuyu.trade) | A listening page for a single remix |
205
+
206
+ Not websites, but made the same way: a 15-page Tibet travel deck that pairs with the site above, a pixel-art promo page for a game server, and a formal resume `.docx` that went through six rounds of revision.
92
207
 
93
208
  ## Local vs hosted
94
209
 
95
210
  | | Local `npx @xiaobuyu/nodesign` | Hosted [nodesign.xiaobuyu.trade](https://nodesign.xiaobuyu.trade) |
96
211
  |---|---|---|
97
- | Models | The ones you configure (Claude subscription, API key, or any OpenAI-compatible service) | Free models with a daily allowance |
212
+ | Models | Your own Claude subscription, API key, or any OpenAI-format service | Free models with a daily allowance |
98
213
  | Data | Kept in `~/.nodesign/`; the server listens on `127.0.0.1` only | Stored on the server, isolated per user |
99
214
  | Account | None needed, open it and go | Open registration |
100
- | Capabilities | All of them. Screenshots, Word, background removal, image generation and so on are detected from your machine. Publishing sites needs Cloudflare Pages | Screenshots, search and image generation are open. Site publishing and subscription models are not open to the public |
101
- | Cost | No subscription, no markup. Model usage is billed by the provider you configured | Free |
215
+ | Features | Everything; screenshots, Word, background removal and image generation are detected from your machine; site publishing needs Cloudflare Pages configured | Screenshots, search and image generation are on; site publishing and subscription models are not open to the public |
216
+ | Cost | No subscription, no markup; you pay your model provider directly | Free |
102
217
 
103
- The local version is the main one. The hosted one is there so you can try it without installing anything.
218
+ The local build is the main way to use NoDesign. The hosted one exists so you can try the basics without installing anything.
104
219
 
105
220
  ## Configuration
106
221
 
107
- Click the gear in the top right after starting. The settings page has four areas:
222
+ Open the settings page from the gear icon in the top right.
223
+
224
+ ### Models
225
+
226
+ Two kinds of entry:
227
+
228
+ - **Claude, official**: paste an Anthropic API key, or run `nodesign login` to sign in with a Claude subscription;
229
+ - **Custom endpoints**: pick a provider preset such as DeepSeek, OpenAI, Zhipu, Qwen, OpenRouter or Ollama, then fill in the base URL and key.
230
+
231
+ Every model entry has a connection test that actually exercises:
232
+
233
+ - Plain completion;
234
+ - Streaming;
235
+ - Tool calls;
236
+ - Image understanding;
237
+ - Token counting.
238
+
239
+ With nothing configured, the model picker stays empty rather than pretending.
240
+
241
+ ### Machine capabilities
108
242
 
109
- - **Models**: two cards side by side. "Claude official" takes an API key, or logs into a Claude subscription with `nodesign login`. "Custom endpoint" starts from a provider preset (DeepSeek, OpenAI, Zhipu, Tongyi, OpenRouter, Ollama and others) and takes a base URL and a key. Every model configuration can run a connection test that actually checks plain chat, streaming, tool calls, image understanding and token counting. With no model configured, the model picker is empty.
110
- - **Local capabilities**: on startup it probes git, Chromium, LibreOffice, poppler, ffmpeg, rembg, image generation, search and publishing. Anything missing is listed with how to install it, and the tools that need it are shown as unavailable with the same instructions.
111
- - **Other settings**: search (four providers, pick one), the image generation channel, Cloudflare publishing, sandbox and permission mode.
112
- - **Status**: data directory, config file paths, restart.
243
+ Detected at startup:
113
244
 
114
- Configuration lives in `~/.nodesign/.env` (secrets) and `~/.nodesign/config.json` (model slots). You can edit both by hand.
245
+ - git
246
+ - Chromium
247
+ - LibreOffice
248
+ - poppler
249
+ - ffmpeg
250
+ - rembg
251
+ - Image generation
252
+ - Search
253
+ - Publishing
254
+
255
+ When something is missing, the settings page tells you how to install it, and the tools that depend on it are shown as unavailable instead of failing later.
256
+
257
+ ### Everything else
258
+
259
+ You can also configure:
260
+
261
+ - The search provider;
262
+ - The image generation channel;
263
+ - Cloudflare Pages publishing;
264
+ - The command sandbox;
265
+ - Automatic permission checks.
266
+
267
+ Configuration lives in:
268
+
269
+ ```text
270
+ ~/.nodesign/.env
271
+ ~/.nodesign/config.json
272
+ ```
273
+
274
+ `.env` holds keys, `config.json` holds model slots and the rest. Both can be edited directly.
115
275
 
116
276
  ## Security and privacy
117
277
 
@@ -123,13 +283,29 @@ On supported platforms you can turn on an OS-level command sandbox:
123
283
  - macOS: sandbox-exec
124
284
  - Windows: no OS-level command sandbox at the moment
125
285
 
126
- You can also turn on automatic permission checks, which add a second judgement on file uploads, outbound requests and other sensitive operations.
286
+ You can also turn on automatic permission checks, which add a second judgment before file uploads, outbound requests and other sensitive operations.
287
+
288
+ The local build ships with the command sandbox and the automatic permission checks off. Turn them on in settings according to how you use it.
127
289
 
128
- The local version ships with the command sandbox and the automatic permission checks off. Turn them on in settings according to how you use it. On Windows, open only projects you trust, and confirm the Agent's plan before it touches files outside the workspace, installs software or uploads anything.
290
+ On Windows in particular, open only projects you trust, and confirm the Agent's plan before it:
291
+
292
+ - Edits files outside the workspace;
293
+ - Installs software or dependencies;
294
+ - Uploads local content;
295
+ - Does anything else that could affect your system.
129
296
 
130
297
  ## Project status
131
298
 
132
- A personal project, started at the end of April 2026 and still moving quickly. The current local release is `0.0.6`, and the core features have been in steady use during the private beta.
299
+ A personal project, started at the end of April 2026 and still moving quickly.
300
+
301
+ Where it stands:
302
+
303
+ - Local release: `0.0.7`
304
+ - In-process tools: 54
305
+ - Automated tests: 1,037
306
+ - Early users: 50
307
+
308
+ The core has been in steady use during the private beta. Interaction details, platform coverage and some edge capabilities are still being worked on.
133
309
 
134
310
  The interface is in Chinese only for now, and so are the screenshots above. An English interface does not exist yet. The Agent's own prompts are in Chinese as well. Nothing in them fixes which language it answers in.
135
311
 
@@ -140,26 +316,37 @@ The interface is in Chinese only for now, and so are the screenshots above. An E
140
316
  | Canvas and project management | Running as the main build of the private beta |
141
317
  | Site generation, preview and publishing | Stable |
142
318
  | Deck generation and export | Stable |
143
- | Word documents | Usable. Page breaks in the preview may differ from Microsoft Word |
144
- | Image and video tools | Usable. What is available depends on local dependencies and service configuration |
145
- | Interactive performance mode | Experimental, not fully in the public release yet |
319
+ | Word documents | Usable; preview pagination can drift from Microsoft Word |
320
+ | Image and video tools | Usable; depends on local dependencies and service configuration |
321
+ | Spatial board writing and relation graphs | Usable; interaction still being refined |
322
+ | On-canvas conversation and thought branches | In development |
323
+ | Interactive performance mode | Experimental, not fully in the public build |
146
324
 
147
- ### Platform support
325
+ ### Platforms
148
326
 
149
327
  | Platform | State |
150
328
  |---|---|
151
329
  | Linux | Running in production |
152
- | Windows | Installed and verified on real hardware |
153
- | macOS | The code paths exist, not yet verified on real hardware |
154
- | Mobile | You can browse and chat; organizing and editing are better on a computer |
330
+ | Windows | Verified by real installation and use |
331
+ | macOS | Code path exists, not yet verified on real hardware |
332
+ | Mobile | Fine for browsing and chatting; organizing and editing want a desktop |
155
333
 
156
334
  ## Architecture
157
335
 
158
- - **Frontend**: React + Vite. The infinite canvas camera, hit testing, relation layout and the artifact capability system are written from scratch (web/src/lib, 45 pure-function modules with unit tests).
159
- - **Backend**: Node.js ESM. An Agent session runs with the project workspace as its working directory, and works through 56 in-process tools that operate on files, the browser and the different artifact types.
160
- - **Session sync**: the server holds session state, with streaming output, reconnection after a drop, and multiple tabs staying in sync.
161
- - **Model compatibility**: Claude is supported natively, and OpenAI-compatible services are reached through a translation layer. When a request cannot be matched to an upstream it fails outright, so nothing is quietly sent to the wrong model service.
162
- - **Artifact system**: sites, decks and Word documents plug into preview, export and publishing through one registry. A new artifact type joins those flows through the same entry point.
336
+ - **Frontend**
337
+ React + Vite. The infinite canvas camera, hit testing, relation layout and the artifact capability system are written from scratch; `web/src/lib` holds 46 standalone modules, with unit tests covering the core logic for geometry, hit testing and export formats.
338
+
339
+ - **Backend**
340
+ Node.js ESM. An Agent session runs with the project workspace as its working directory, working through 54 in-process tools that operate on files, the browser and the different artifact types.
341
+
342
+ - **Session sync**
343
+ The server owns session state, supporting streaming output, reconnection and multi-tab sync.
344
+
345
+ - **Model compatibility**
346
+ Claude is native; OpenAI-format services are reached through a conversion layer. When a request cannot be mapped to the upstream, it fails with an error rather than being sent to the wrong model.
347
+
348
+ - **Artifact system**
349
+ Sites, decks and Word documents plug into preview, export and publishing through one registry. A new artifact type joins those flows through the same entry point.
163
350
 
164
351
  ## Development
165
352
 
@@ -170,17 +357,17 @@ cd web && npm run dev # frontend
170
357
  npm test # server tests + web tests
171
358
  ```
172
359
 
173
- > Note: running the whole thing needs a model provider configured (a Claude subscription or an API key) and some local tool dependencies. The settings page lists what is missing and how to install it.
360
+ > Running the whole thing needs a model configured (Claude subscription or API key) and some local tool dependencies. The settings page lists what is missing and how to install it.
174
361
 
175
- The Vitest suite is the gate before shipping: 1021 cases across server and web, covering the client/server contracts, module boundaries, the permission capability table and key user-facing copy. Some constraints are pinned by static tests rather than left to comments and habit. For example:
362
+ The Vitest suite is the gate before shipping: 1,037 cases across server and web, covering the client/server contracts, module boundaries, the permission capability table and key user-facing copy. Some constraints are pinned by static tests rather than left to comments and habit. For example:
176
363
 
177
- - The two capability tables, client and server, are reconciled item by item
178
- - Permission decisions have to go through the capability table
179
- - Wording checks on user-facing copy
364
+ - The duplicated client and server capability tables are reconciled entry by entry
365
+ - Permission decisions must go through the capability table
366
+ - Wording checks on user-visible copy
180
367
  - A line-count ratchet on source files
181
368
 
182
- The frontend is deployed with `web/scripts/deploy.sh` (new chunks added, old chunks kept, `index.html` replaced atomically). Server changes need a process restart.
369
+ The frontend deploys with `web/scripts/deploy.sh` (new chunks added, old chunks kept, `index.html` swapped atomically). Server changes need a process restart.
183
370
 
184
371
  ## License
185
372
 
186
- AGPL-3.0. Use it, change it, run your own instance. If you offer it to others as a service, your changes have to be open-sourced too.
373
+ AGPL-3.0. Use it, modify it, run your own. If you offer it as a service, your modifications have to be open too.