@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.
- package/README.md +266 -79
- package/README.zh-CN.md +254 -67
- package/package.json +2 -2
- package/server/api/admin.js +7 -0
- package/server/api/assets/docx-page.js +5 -4
- package/server/api/assets/helpers.js +8 -0
- package/server/api/assets.js +21 -33
- package/server/api/board.js +29 -1
- package/server/api/browse.js +3 -2
- package/server/api/chatai.js +9 -8
- package/server/api/exports/cards.js +7 -6
- package/server/api/exports/docx-pdf.js +4 -1
- package/server/api/local.js +10 -8
- package/server/api/projects.js +19 -3
- package/server/api/publish.js +3 -2
- package/server/api/sessions-rewind.js +220 -0
- package/server/api/sessions.js +58 -194
- package/server/api/stage.js +35 -0
- package/server/api/turn-model-switch.js +109 -0
- package/server/api/turn.js +52 -88
- package/server/auth/middleware.js +29 -6
- package/server/auth/tier.js +27 -7
- package/server/auth/users-store.js +14 -1
- package/server/engine/agent/actor-trail.js +110 -0
- package/server/engine/agent/agent-shared.js +22 -52
- package/server/engine/agent/beat-state.js +61 -0
- package/server/engine/agent/cast.js +322 -0
- package/server/engine/agent/events.js +9 -2
- package/server/engine/agent/hooks/beat-gate.js +73 -0
- package/server/engine/agent/hooks/lifecycle.js +6 -2
- package/server/engine/agent/hooks/post-trim.js +1 -0
- package/server/engine/agent/hooks/pre-board-dirty.js +29 -0
- package/server/engine/agent/hooks/pre-defaults.js +206 -2
- package/server/engine/agent/hooks/pre-injectors.js +19 -2
- package/server/engine/agent/hooks/pre-peer-guard.js +88 -0
- package/server/engine/agent/hooks/pre-unknown-params.js +82 -0
- package/server/engine/agent/hooks/pre-workspace-scope-guard.js +33 -0
- package/server/engine/agent/hooks/resident-role-lifecycle.js +100 -0
- package/server/engine/agent/hooks/slot-alias.js +30 -0
- package/server/engine/agent/hooks/user-prompt-submit.js +197 -7
- package/server/engine/agent/hooks.js +76 -6
- package/server/engine/agent/isolation.js +25 -2
- package/server/engine/agent/memory-config.js +27 -1
- package/server/engine/agent/model-context.js +102 -18
- package/server/engine/agent/model-table.js +361 -58
- package/server/engine/agent/prompts/nodesign-prelude.md +566 -59
- package/server/engine/agent/prompts/tools/direct-edit-protocol.md +1 -1
- package/server/engine/agent/prompts/tools/generate-image-cookbook.md +2 -2
- package/server/engine/agent/prompts/tools/paint-still-cookbook.md +1 -1
- package/server/engine/agent/prompts/tools/site-reference.md +2 -1
- package/server/engine/agent/role-card.js +175 -0
- package/server/engine/agent/rp-mode.js +17 -0
- package/server/engine/agent/session-loop.js +26 -14
- package/server/engine/agent/stage-status.js +73 -0
- package/server/engine/agent/subagent-flight.js +73 -0
- package/server/engine/agent/system-prompts.js +41 -0
- package/server/engine/agent/tool-input-stream.js +165 -0
- package/server/engine/mcp/actor.js +59 -0
- package/server/engine/mcp/capability-gate.js +21 -2
- package/server/engine/mcp/index.js +116 -24
- package/server/engine/mcp/mode-profile.js +139 -0
- package/server/engine/mcp/server-name.js +19 -0
- package/server/engine/mcp/tools/artifact-session.js +2 -1
- package/server/engine/mcp/tools/browse-find-batch.js +76 -14
- package/server/engine/mcp/tools/browse.js +1 -1
- package/server/engine/mcp/tools/cast-role.js +167 -0
- package/server/engine/mcp/tools/draw-trend.js +104 -0
- package/server/engine/mcp/tools/edit-board-schema.js +56 -0
- package/server/engine/mcp/tools/edit-board.js +569 -0
- package/server/engine/mcp/tools/look-at-board.js +4 -3
- package/server/engine/mcp/tools/open-sheet.js +242 -0
- package/server/engine/mcp/tools/organize-board.js +19 -5
- package/server/engine/mcp/tools/paint-still.js +1 -1
- package/server/engine/mcp/tools/pin-to-board.js +78 -3
- package/server/engine/mcp/tools/read-board.js +109 -16
- package/server/engine/mcp/tools/read-tavern-json.js +87 -19
- package/server/engine/mcp/tools/report-issue.js +1 -0
- package/server/engine/mcp/tools/role-memory.js +83 -0
- package/server/engine/mcp/tools/roll-dice.js +82 -0
- package/server/engine/mcp/tools/roll-film.js +1 -1
- package/server/engine/mcp/tools/screenshot.js +2 -2
- package/server/engine/mcp/tools/set-vars.js +150 -0
- package/server/engine/mcp/tools/sheet-replan.js +46 -0
- package/server/engine/mcp/tools/web-search.js +1 -1
- package/server/engine/mcp/tools/write-on-board-flow.js +108 -0
- package/server/engine/mcp/tools/write-on-board-place.js +211 -0
- package/server/engine/mcp/tools/write-on-board-role-anchor.js +48 -0
- package/server/engine/mcp/tools/write-on-board-schema.js +125 -0
- package/server/engine/mcp/tools/write-on-board.js +567 -107
- package/server/engine/plugins/nodesign/skills/blackboard-rp/SKILL.md +215 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +11 -3
- package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +34 -4
- package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +20 -4
- package/server/engine/plugins/nodesign/skills/story-craft/SKILL.md +94 -0
- package/server/engine/plugins/nodesign/skills/story-import/SKILL.md +112 -0
- package/server/engine/plugins/nodesign/skills/story-intimacy/SKILL.md +72 -0
- package/server/engine/plugins/nodesign/skills/story-voice/SKILL.md +66 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//345/206/267/347/241/254.md +33 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//346/203/205/346/204/237/347/233/264/347/273/231.md +42 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//346/204/217/350/257/206/346/265/201.md +42 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//346/255/246/344/276/240/347/231/275/350/257/235.md +34 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//347/224/237/346/264/273/346/265/201.md +35 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//347/231/275/346/217/217.md +37 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//350/210/236/345/217/260/345/211/247.md +32 -0
- package/server/engine/plugins/nodesign/skills/story-voice/voices//351/230/266/346/256/265/345/210/207/346/215/242.md +42 -0
- package/server/engine/runs/board-seater.js +272 -0
- package/server/engine/runs/board-tasklist.js +90 -48
- package/server/engine/runs/turn-relay.js +24 -2
- package/server/engine/runs/user-chalk-echo.js +44 -0
- package/server/index.js +2 -0
- package/server/lib/board-anchor.js +49 -0
- package/server/lib/board-dirty.js +93 -0
- package/server/lib/board-excerpt.js +80 -0
- package/server/lib/board-follow.js +111 -0
- package/server/lib/board-groups.js +1 -5
- package/server/lib/board-hero.js +3 -1
- package/server/lib/board-kind-sizes.js +36 -0
- package/server/lib/board-lanes.js +58 -0
- package/server/lib/board-obstacles.js +80 -0
- package/server/lib/board-relations.js +5 -1
- package/server/lib/board-sheets.js +467 -0
- package/server/lib/board-shelf.js +86 -0
- package/server/lib/board-transform.js +62 -0
- package/server/lib/canvas-id.js +18 -1
- package/server/lib/chalk-flow.js +88 -0
- package/server/lib/chalk-rewrite.js +63 -0
- package/server/lib/chalk-size-pref.js +48 -0
- package/server/lib/chalk.js +42 -3
- package/server/lib/ingress/forward-openai-chat.js +16 -4
- package/server/lib/ingress/openai-chat.js +23 -12
- package/server/lib/ingress/session-routes.js +3 -3
- package/server/lib/ingress/stream-watchdog.js +53 -0
- package/server/lib/ingress/upstream-billing.js +15 -0
- package/server/lib/ingress/upstream-error-hints.js +36 -0
- package/server/lib/json-preview.js +58 -0
- package/server/lib/model-ingress.js +26 -1
- package/server/lib/moderation.js +10 -5
- package/server/lib/quota.js +26 -6
- package/server/lib/rect.js +50 -0
- package/server/lib/screen.js +36 -0
- package/server/lib/sheet-state.js +19 -0
- package/server/lib/sketch-array.js +118 -0
- package/server/lib/sketch-hatch.js +99 -0
- package/server/lib/sketch-layout.js +269 -69
- package/server/lib/sketch-shapes.js +152 -0
- package/server/lib/sketch-stencils.js +170 -0
- package/server/lib/state-table.js +237 -0
- package/server/lib/state-trend.js +94 -0
- package/server/lib/state-triggers.js +199 -0
- package/server/lib/tavern-json.js +48 -0
- package/server/lib/user-uploads.js +88 -0
- package/server/projects/board-limits.js +5 -3
- package/server/projects/board-sanitize.js +220 -10
- package/server/projects/board-store.js +95 -6
- package/server/projects/session-jsonl.js +110 -0
- package/server/projects/store.js +56 -3
- package/server/projects/viewpoint-store.js +35 -3
- package/server/projects/workspace-slots.js +30 -0
- package/server/projects/workspace-templates.js +29 -0
- package/server/projects/workspace.js +16 -17
- package/server/runtime/capabilities.js +6 -2
- package/server/shared/locales.js +70 -0
- package/server/shared/messages-en.js +69 -0
- package/server/shared/messages.js +65 -0
- package/server/ws/broker.js +3 -0
- package/server/ws/index.js +43 -3
- package/web/README.md +1 -1
- package/web/dist/assets/{BrowserWindow-BoOBaIyz.js → BrowserWindow-CcaGRWz5.js} +1 -1
- package/web/dist/assets/DeckWindow-BIr2KGFT.js +6 -0
- package/web/dist/assets/{DocxWindow-B_u6aX9o.js → DocxWindow-B9KZmU5z.js} +2 -2
- package/web/dist/assets/{MermaidBlock-BO-46Du5.js → MermaidBlock-DrfRnz8E.js} +43 -43
- package/web/dist/assets/{SiteWindow-ConPmzdM.js → SiteWindow-CJOjCF7d.js} +6 -6
- package/web/dist/assets/{abnfDiagram-VCTEODGH-FCO9yf-n.js → abnfDiagram-VCTEODGH-CUZbQGIg.js} +1 -1
- package/web/dist/assets/{arc-BLcEOSRX.js → arc-C1-HSUny.js} +1 -1
- package/web/dist/assets/{architectureDiagram-5GKGNRK7-kxiX4TeN.js → architectureDiagram-5GKGNRK7-B5nwvu60.js} +2 -2
- package/web/dist/assets/{blockDiagram-NRAW4CY4-CptFksix.js → blockDiagram-NRAW4CY4-uPPuFLwR.js} +1 -1
- package/web/dist/assets/{c4Diagram-UCG6FXSJ-Dxmxj34F.js → c4Diagram-UCG6FXSJ-C0mKBFlz.js} +1 -1
- package/web/dist/assets/channel-BxpWNOGU.js +1 -0
- package/web/dist/assets/{chunk-2Q5K7J3B-D9inx5oo.js → chunk-2Q5K7J3B-Cs0rlZ4q.js} +1 -1
- package/web/dist/assets/{chunk-5VM5RSS4-DydfHlEc.js → chunk-5VM5RSS4-DtR63oYb.js} +1 -1
- package/web/dist/assets/{chunk-F27PBJKO-BO7GxhSv.js → chunk-F27PBJKO-B3MRdezJ.js} +1 -1
- package/web/dist/assets/{chunk-G27WJ6UU-BzP6YiQ_.js → chunk-G27WJ6UU-BtwntwpS.js} +1 -1
- package/web/dist/assets/{chunk-JWPE2WC7-CHcgcd0s.js → chunk-JWPE2WC7-BHsTe5PD.js} +1 -1
- package/web/dist/assets/{chunk-LCL6LL3I-D2Wg5JtX.js → chunk-LCL6LL3I-knY15Qdm.js} +1 -1
- package/web/dist/assets/{chunk-POPQ4Y6H-B2fCRfpM.js → chunk-POPQ4Y6H-C51tgK_I.js} +1 -1
- package/web/dist/assets/{chunk-SVP7TREG-JSLcsRlZ.js → chunk-SVP7TREG-CnwRZmF_.js} +1 -1
- package/web/dist/assets/{chunk-XXDRQBXY-BCjvaeHm.js → chunk-XXDRQBXY-BtXzVF-_.js} +1 -1
- package/web/dist/assets/classDiagram-DTDB5LWJ-DUEKmDfo.js +1 -0
- package/web/dist/assets/classDiagram-v2-JRS7N3AN-DUEKmDfo.js +1 -0
- package/web/dist/assets/{cose-bilkent-JH36ORCC-0uKv6oJ7.js → cose-bilkent-JH36ORCC-CzWlGP6i.js} +1 -1
- package/web/dist/assets/{cynefin-OW5HDTMX-Bvt-gEmA.js → cynefin-OW5HDTMX-vK64EGSv.js} +1 -1
- package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-C9Ht02qC.js → cynefinDiagram-5FMLGOSQ-Bs3g1Gvh.js} +1 -1
- package/web/dist/assets/{dagre-3AP2YEHR-BfxZny4s.js → dagre-3AP2YEHR-BhgkYe8V.js} +1 -1
- package/web/dist/assets/{diagram-S7CK7UJ4-CrE0ZETE.js → diagram-S7CK7UJ4-C_6mvD2V.js} +1 -1
- package/web/dist/assets/{diagram-UQ7AKVKN-BO8VQ4Fx.js → diagram-UQ7AKVKN-qW7tssUW.js} +1 -1
- package/web/dist/assets/{diagram-VSXAHHWV-CHUZnR9F.js → diagram-VSXAHHWV-txJPHpvG.js} +1 -1
- package/web/dist/assets/{diagram-VX7I27RA-DYQAz1Vu.js → diagram-VX7I27RA-CQTMsCnL.js} +1 -1
- package/web/dist/assets/{diagram-Z3DM3KII-BDjivgLr.js → diagram-Z3DM3KII--cb1hoE6.js} +1 -1
- package/web/dist/assets/{ebnfDiagram-PWID7BFC-Bpe_QVbH.js → ebnfDiagram-PWID7BFC-Da6lDU77.js} +1 -1
- package/web/dist/assets/{erDiagram-SSCWMZ5O-BxhwuAu1.js → erDiagram-SSCWMZ5O-DGCMrsQn.js} +1 -1
- package/web/dist/assets/{flowDiagram-A5DVABFB-CCw2H08-.js → flowDiagram-A5DVABFB-GdOL_qno.js} +1 -1
- package/web/dist/assets/{ganttDiagram-EL5Y4UJY-DtTc7MyI.js → ganttDiagram-EL5Y4UJY-Cx1F_jBK.js} +4 -4
- package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-BvORxMd2.js → gitGraphDiagram-WWUBYQGX-B5_6JhR3.js} +1 -1
- package/web/dist/assets/hand-CuvZZQGW.webp +0 -0
- package/web/dist/assets/index-BYKfMnmv.js +2759 -0
- package/web/dist/assets/index-CW7VsrVg.css +1 -0
- package/web/dist/assets/{infoDiagram-RXCK75RN-DMcrkypD.js → infoDiagram-RXCK75RN-CjvKpSPA.js} +1 -1
- package/web/dist/assets/{ishikawaDiagram-5VMMS53U-CZkTIbe-.js → ishikawaDiagram-5VMMS53U-CxLoAPhx.js} +1 -1
- package/web/dist/assets/{journeyDiagram-EYS64GPL-DR0XazdE.js → journeyDiagram-EYS64GPL-BfvS1upJ.js} +1 -1
- package/web/dist/assets/{kanban-definition-3QL26DDD-DN8VbwVu.js → kanban-definition-3QL26DDD-DKPPu0w4.js} +1 -1
- package/web/dist/assets/{layout-9_paCbyt.js → layout-Dhgck-Zo.js} +1 -1
- package/web/dist/assets/{linear-g6Ct012e.js → linear-DMSQ-aUw.js} +1 -1
- package/web/dist/assets/lxgw-nd-app-bold-D1pKA1bR.woff2 +0 -0
- package/web/dist/assets/lxgw-nd-app-regular-BDe3d26v.woff2 +0 -0
- package/web/dist/assets/lxgw-nd-bold-Bufvlg03.woff2 +0 -0
- package/web/dist/assets/lxgw-nd-regular-DQwoI4OP.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-100-DLPe7tEt.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-101-d3VsZKWT.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-102-ClzJuLq6.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-103-DuDnQ6K-.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-104-kPGW3Eem.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-105-BzD54h-0.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-106-BQ7fIzlx.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-107-D8tDfFHI.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-108-tGhkpwep.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-109-7SMVSrly.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-110-_uDKrFed.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-111-Bio825RE.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-112-D2ee0i-C.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-113-JPFVDrga.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-114-BcfxYA4w.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-115-B1HeeOsd.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-116-hY12tXpq.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-117-BvuZwmre.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-118-tzvs_H7j.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-119-J2DWuYDN.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-21-pDubCJV5.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-22-ChAPMpqp.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-23-BBx3oNpT.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-24-CYt-Oagk.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-25-Cx3j-ZUv.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-26-B9AfZ3LL.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-27-Bh2s9MNE.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-28-C02JPoKP.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-29-T_tbUGhk.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-30-DMfyNzhz.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-31-DFfdzbkg.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-32-Bs1fz2iW.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-33-cpB96OkZ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-34-BhinPYWX.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-35-D_njRQqA.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-36-DqXlLE3t.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-37-j5LbvMph.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-38-oO4jWdKm.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-39-CabsX4rw.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-4-PatS3YHh.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-40-yrLg3C3e.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-41-DBXmCQhc.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-42-Bqij_UiQ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-43-D3kp0Ntc.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-44-B_BNGvK4.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-45-CZc0cQWs.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-46-CHQX5Kd9.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-47-Ci8gLrHA.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-48-run3ugD3.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-49-DgfiUb6u.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-5-B0CtGbX_.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-50-CdCG-POr.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-51-L2okeQZ2.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-52-BZAqyGJW.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-53-B0xWqLeU.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-54-BZVQX-EA.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-55-093mkIUJ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-56-CbhWG8G-.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-57-pLQuvo6c.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-58-BHhoY50x.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-59-D1_6DuIQ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-6-BnAelmYU.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-60-HDBIuLTZ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-61-C-c13SeU.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-62-kHRVOhZ2.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-63-C0MCsvFv.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-64-DZekguCj.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-65-CtP6c3IU.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-66-DLVWoMSf.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-67-BVuOnayH.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-68-DpxQ6Mnx.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-69-qesBxLmC.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-70-BBt1xN7h.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-71-BWqZacwB.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-72-B1wP_Yst.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-73-C99T7jNZ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-74-DrUTsWBe.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-75-C4M5XXQe.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-76-Bq8spVWF.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-77-D9vNupE2.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-78-D6th7Gnu.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-79-bezM85cS.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-80-DD8pnhG2.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-81-N6jtSyBs.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-82-D6c180bZ.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-83-em17AadM.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-84-CJ8gdrMK.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-85-9PPGO1eB.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-86-CjWPf-u5.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-87-8D_X_yOC.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-88-9vtKFPBx.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-89-BhE5jAKX.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-90-D2Npfm5E.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-91-C6Ft1-Eu.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-97-CaExyQP9.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-98-CPoVbsUd.woff2 +0 -0
- package/web/dist/assets/lxgwwenkaiscreen-subset-99-ZUQZGVgH.woff2 +0 -0
- package/web/dist/assets/{mindmap-definition-FBJOCRG2-BGt4omYC.js → mindmap-definition-FBJOCRG2-CalfL_Kn.js} +1 -1
- package/web/dist/assets/{pegDiagram-XKGWAZYB-uSfS-PBE.js → pegDiagram-XKGWAZYB-D9mVWz7l.js} +1 -1
- package/web/dist/assets/pending-edit-apply-kwMFWsUe.js +31 -0
- package/web/dist/assets/{pieDiagram-E7YTZNPT-DpeI935H.js → pieDiagram-E7YTZNPT-DELzbZNS.js} +1 -1
- package/web/dist/assets/{quadrantDiagram-AXDQQJYC-B7IuNvWa.js → quadrantDiagram-AXDQQJYC-TZqp4mfA.js} +1 -1
- package/web/dist/assets/{railroadDiagram-O6MQD6OU-ARzYpPQI.js → railroadDiagram-O6MQD6OU-DxX59f0i.js} +1 -1
- package/web/dist/assets/{requirementDiagram-EFPCY7ZU-Cj4upkAo.js → requirementDiagram-EFPCY7ZU-DFdsJLIe.js} +1 -1
- package/web/dist/assets/{rotate-cw-CXJcyHWk.js → rotate-cw-62liz7LX.js} +1 -1
- package/web/dist/assets/{sankeyDiagram-P5KCCOFB-OaVwSnLP.js → sankeyDiagram-P5KCCOFB-ByYcd3fG.js} +1 -1
- package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-1yrUbq4t.js → sequenceDiagram-WJ2MYXX4-Bj-ml1jS.js} +1 -1
- package/web/dist/assets/{sizeCapture-X5ZJPWSS-nYH5p9D6.js → sizeCapture-X5ZJPWSS-KhsXThyD.js} +1 -1
- package/web/dist/assets/{square-dashed-mouse-pointer-CTtTVKoH.js → square-dashed-mouse-pointer-D_VrqVpy.js} +1 -1
- package/web/dist/assets/{stateDiagram-HBIQ2CUA-Dj5HvyNq.js → stateDiagram-HBIQ2CUA-BJlpHfWU.js} +1 -1
- package/web/dist/assets/stateDiagram-v2-4QOOHH4V-CR2kYAH2.js +1 -0
- package/web/dist/assets/{swimlanes-XN3QIQJK-umeT0HpB.js → swimlanes-XN3QIQJK-DUB9OJVs.js} +1 -1
- package/web/dist/assets/swimlanesDiagram-VK2B7HYN-BitOxnG2.js +8 -0
- package/web/dist/assets/{timeline-definition-24CTP7MA-MqnQfHKB.js → timeline-definition-24CTP7MA-C03NX82A.js} +1 -1
- package/web/dist/assets/{vennDiagram-4TSXK5OY-b2liyZra.js → vennDiagram-4TSXK5OY-B9pjzngp.js} +1 -1
- package/web/dist/assets/{wardleyDiagram-VM6X3IG4-QMK-zNh1.js → wardleyDiagram-VM6X3IG4-UqWq_mcT.js} +1 -1
- package/web/dist/assets/{xychartDiagram-S5SC5T6Z-D5Mc6tfA.js → xychartDiagram-S5SC5T6Z-D2pDKtOv.js} +1 -1
- package/web/dist/index.html +2 -2
- package/server/engine/mcp/tools/arrange-on-board.js +0 -126
- package/server/engine/mcp/tools/create-on-board.js +0 -152
- package/server/engine/mcp/tools/edit-sketch.js +0 -167
- package/server/engine/mcp/tools/relate-on-board.js +0 -150
- package/server/engine/mcp/tools/sketch-on-board.js +0 -345
- package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +0 -235
- 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
- package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +0 -268
- package/web/dist/assets/DeckWindow-Bg3rgkvi.js +0 -11
- package/web/dist/assets/channel-DFyiuGL0.js +0 -1
- package/web/dist/assets/classDiagram-DTDB5LWJ-Aw1f8z-b.js +0 -1
- package/web/dist/assets/classDiagram-v2-JRS7N3AN-Aw1f8z-b.js +0 -1
- package/web/dist/assets/index-C0KUf6Wd.css +0 -1
- package/web/dist/assets/index-DGG5wIZs.js +0 -2118
- package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
- package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
- package/web/dist/assets/pending-edit-apply-uP4uvrOD.js +0 -31
- package/web/dist/assets/stateDiagram-v2-4QOOHH4V-kJ1m_zJT.js +0 -1
- 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
|
-
|
|
5
|
+
> **See something wrong? Circle it. Generating, reviewing, responding and revising all happen on the same infinite canvas.**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/@xiaobuyu/nodesign)
|
|
8
|
+
[](https://www.npmjs.com/package/@xiaobuyu/nodesign)
|
|
9
|
+
[](https://github.com/Xiaokebuyu/Nodesign/blob/main/LICENSE)
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
NoDesign is an Agent-native workspace for making things, built on real files.
|
|
10
12
|
|
|
11
|
-
|
|
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
|
+

|
|
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
|
-
|
|
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,
|
|
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
|
|
42
|
+
NoDesign charges no subscription of its own and takes no cut of model usage.
|
|
24
43
|
|
|
25
|
-
|
|
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
|
-
|
|
46
|
+
### Hosted
|
|
28
47
|
|
|
29
|
-
|
|
48
|
+
If you would rather not install anything, the hosted build covers the basics:
|
|
30
49
|
|
|
31
|
-
|
|
50
|
+
[https://nodesign.xiaobuyu.trade](https://nodesign.xiaobuyu.trade)
|
|
32
51
|
|
|
33
|
-
|
|
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
|
-
|
|
54
|
+
## Why the whole loop can stay on one canvas
|
|
38
55
|
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
60
|
+
In NoDesign you can:
|
|
50
61
|
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
+
So instead of taking a screenshot and explaining:
|
|
56
71
|
|
|
57
|
-
|
|
72
|
+
> The blue block on the right of the second screen is in the wrong place.
|
|
58
73
|
|
|
59
|
-
|
|
74
|
+
You circle it and say:
|
|
60
75
|
|
|
61
|
-
|
|
76
|
+
> Too cramped here.
|
|
62
77
|
|
|
63
|
-
|
|
78
|
+
That is enough.
|
|
64
79
|
|
|
65
|
-
|
|
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
|
|
82
|
+
### The Agent can check its own work
|
|
68
83
|
|
|
69
|
-
|
|
84
|
+
Generating is only half of it. The Agent can go back and inspect what it made.
|
|
70
85
|
|
|
71
|
-
|
|
86
|
+
For a site, it can:
|
|
72
87
|
|
|
73
|
-
|
|
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
|
-

|
|
76
96
|
|
|
77
|
-
|
|
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
|
-
|
|
99
|
+
### Everything on the canvas is a real file
|
|
80
100
|
|
|
81
|
-
|
|
101
|
+
The canvas is not where files go to be displayed.
|
|
82
102
|
|
|
83
|
-
|
|
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
|
-
|
|
105
|
+

|
|
86
106
|
|
|
87
|
-
|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
-
|
|
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
|
-
|
|
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
|
+

|
|
189
|
+
|
|
190
|
+

|
|
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 |
|
|
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
|
-
|
|
|
101
|
-
| Cost | No subscription, no markup
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
144
|
-
| Image and video tools | Usable
|
|
145
|
-
|
|
|
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
|
-
###
|
|
325
|
+
### Platforms
|
|
148
326
|
|
|
149
327
|
| Platform | State |
|
|
150
328
|
|---|---|
|
|
151
329
|
| Linux | Running in production |
|
|
152
|
-
| Windows |
|
|
153
|
-
| macOS |
|
|
154
|
-
| Mobile |
|
|
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
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
- **
|
|
162
|
-
|
|
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
|
-
>
|
|
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:
|
|
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
|
|
178
|
-
- Permission decisions
|
|
179
|
-
- Wording checks on user-
|
|
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
|
|
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,
|
|
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.
|