mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
- Add QUICKSTART.zh-TW.md (Traditional Chinese) based on the latest QUICKSTART.zh-CN.md, with regional terminology for zh-TW locale. - Update the language nav in all 6 existing QUICKSTART translations to include the çčé«äžæ entry. - Fix CONTRIBUTING.zh-CN.md: point QUICKSTART references to the Chinese translation (QUICKSTART.zh-CN.md) instead of the English original, closing the follow-up promised in PR #578.
231 lines
15 KiB
Markdown
231 lines
15 KiB
Markdown
# Quickstart
|
||
|
||
<p align="center"><a href="QUICKSTART.md">English</a> · <a href="QUICKSTART.pt-BR.md">PortuguĂȘs (Brasil)</a> · <a href="QUICKSTART.de.md">Deutsch</a> · <b>Français</b> · <a href="QUICKSTART.ja-JP.md">æ„æŹèȘ</a> · <a href="QUICKSTART.zh-CN.md">çźäœäžæ</a> · <a href="QUICKSTART.zh-TW.md">çčé«äžæ</a></p>
|
||
|
||
Exécutez le produit complet localement.
|
||
|
||
## Prérequis
|
||
|
||
- **Node.js :** `~24` (Node 24.x). Le repo lâimpose via `package.json#engines`.
|
||
- **pnpm :** `10.33.x`. Le repo fixe `pnpm@10.33.2` via `packageManager` ; utilisez Corepack pour que la bonne version soit sélectionnée automatiquement.
|
||
- **OS :** macOS, Linux et WSL2 sont les environnements principaux pris en charge. Windows natif devrait fonctionner pour la plupart des workflows, mais WSL2 reste lâoption la plus fiable.
|
||
- **CLI dâagent locale optionnelle :** Claude Code, Codex, Devin for Terminal, Gemini CLI, OpenCode, Cursor Agent, Qwen, GitHub Copilot CLI, etc. Si aucune nâest installĂ©e, utilisez le mode BYOK API depuis Settings.
|
||
|
||
`nvm` / `fnm` sont des outils de confort optionnels, pas une étape obligatoire de la configuration du projet. Si vous en utilisez un, installez/sélectionnez Node 24 avant de lancer pnpm :
|
||
|
||
```bash
|
||
# nvm
|
||
nvm install 24
|
||
nvm use 24
|
||
|
||
# fnm
|
||
fnm install 24
|
||
fnm use 24
|
||
```
|
||
|
||
Activez ensuite Corepack et laissez le repo sélectionner pnpm :
|
||
|
||
```bash
|
||
corepack enable
|
||
corepack pnpm --version # doit afficher 10.33.2
|
||
```
|
||
|
||
## Démarrage rapide (mode dev)
|
||
|
||
```bash
|
||
corepack enable
|
||
pnpm install
|
||
pnpm tools-dev run web # démarre daemon + web au premier plan
|
||
# ouvrez lâURL web affichĂ©e par tools-dev
|
||
```
|
||
|
||
Pour le shell desktop et tous les sidecars gérés en arriÚre-plan :
|
||
|
||
```bash
|
||
pnpm tools-dev # démarre daemon + web + desktop en arriÚre-plan
|
||
```
|
||
|
||
Au premier chargement, lâapp dĂ©tecte votre CLI de coding agent installĂ©e (Claude Code / Codex / Devin for Terminal / Gemini / OpenCode / Cursor Agent / Qwen), la sĂ©lectionne automatiquement, puis utilise par dĂ©faut le Skill `web-prototype` et le Design System `Neutral Modern`. Tapez un prompt et cliquez sur **Send**. Les sorties de lâagent sâaffichent en streaming dans le panneau gauche ; la balise `<artifact>` est extraite et le HTML sâaffiche en direct Ă droite. Une fois la gĂ©nĂ©ration terminĂ©e, cliquez sur **Save to disk** pour enregistrer lâartifact sous `./.od/artifacts/<timestamp>-<slug>/index.html`.
|
||
|
||
Le menu dĂ©roulant **Design System** charge les Design Systems depuis `design-systems/*/DESIGN.md` : starters Ă©crits Ă la main, product systems intĂ©grĂ©s et design skills normalisĂ©s. Choisissez-en un pour habiller chaque prototype dans lâesthĂ©tique de cette marque.
|
||
|
||
Le menu déroulant **Skill** regroupe les entrées par `mode` / `surface` et affiche le Skill par défaut de chaque mode avec un suffixe `· default`. Le catalogue live vient de [`skills/`](skills/) et couvre les workflows web, deck, Design System, image, vidéo et audio. Exemples inclus :
|
||
|
||
- **Prototype** â `web-prototype` (gĂ©nĂ©rique), `saas-landing`, `dashboard`, `pricing-page`, `docs-page`, `blog-post`, `mobile-app`.
|
||
- **Deck / PPT** â `simple-deck` (swipe horizontal single-file) et `magazine-web-ppt` (le bundle `guizang-ppt` depuis [`op7418/guizang-ppt-skill`](https://github.com/op7418/guizang-ppt-skill), par dĂ©faut en mode deck, avec ses propres assets/template + 4 rĂ©fĂ©rences). Les Skills avec side files reçoivent automatiquement un prĂ©ambule "Skill root (absolute)" pour que lâagent puisse rĂ©soudre `assets/template.html` et `references/*.md` depuis le vrai chemin disque au lieu de son CWD.
|
||
- **MĂ©dias et Design System** â par exemple `image-poster`, `video-shortform`, `audio-jingle`, `hyperframes` et `design-brief`.
|
||
|
||
Associez un Skill, un Design System et un seul prompt : vous obtenez un prototype, un deck ou un rendu adapté au mode / à la surface choisie.
|
||
|
||
## Autres scripts
|
||
|
||
```bash
|
||
pnpm tools-dev # daemon + web + desktop en arriĂšre-plan
|
||
pnpm tools-dev start web # daemon + web en arriĂšre-plan
|
||
pnpm tools-dev run web # daemon + web au premier plan (e2e/dev server)
|
||
pnpm tools-dev restart # redémarre daemon + web + desktop
|
||
pnpm tools-dev restart --daemon-port 7457 --web-port 5175
|
||
pnpm tools-dev status # inspecte les runtimes gérés
|
||
pnpm tools-dev logs # affiche les logs daemon/web/desktop
|
||
pnpm tools-dev check # statut + logs récents + diagnostics courants
|
||
pnpm tools-dev stop # arrĂȘte les runtimes gĂ©rĂ©s
|
||
pnpm --filter @open-design/daemon build # build apps/daemon/dist/cli.js pour `od`
|
||
pnpm --filter @open-design/web build # build du paquet web si nécessaire
|
||
pnpm typecheck # typecheck du workspace
|
||
```
|
||
|
||
`pnpm tools-dev` est le seul point dâentrĂ©e du lifecycle local. Nâutilisez pas les anciens alias root supprimĂ©s (`pnpm dev`, `pnpm dev:all`, `pnpm daemon`, `pnpm preview`, `pnpm start`).
|
||
|
||
Pendant le dĂ©veloppement local, `tools-dev` dĂ©marre dâabord le daemon, transmet son port Ă `apps/web`, puis `apps/web/next.config.ts` réécrit `/api/*`, `/artifacts/*` et `/frames/*` vers ce port daemon. Lâapp App Router peut ainsi parler au processus Express voisin sans configuration CORS.
|
||
|
||
## Checks de génération média / agent dispatcher
|
||
|
||
Les Skills image, vidĂ©o, audio et HyperFrames appellent la CLI locale `od` via des variables dâenvironnement injectĂ©es par le daemon lorsquâil lance un agent :
|
||
|
||
- `OD_BIN` â chemin absolu vers `apps/daemon/dist/cli.js`.
|
||
- `OD_DAEMON_URL` â URL du daemon en cours dâexĂ©cution.
|
||
- `OD_PROJECT_ID` â id du projet actif.
|
||
- `OD_PROJECT_DIR` â dossier de fichiers du projet actif.
|
||
|
||
Si la génération média échoue avec `OD_BIN: parameter not set`, `apps/daemon/dist/cli.js` manquant, ou `failed to reach daemon at http://127.0.0.1:0`, rebuildez la CLI daemon et redémarrez le runtime géré :
|
||
|
||
```bash
|
||
pnpm --filter @open-design/daemon build
|
||
pnpm tools-dev restart --daemon-port 7457 --web-port 5175
|
||
ls -la apps/daemon/dist/cli.js
|
||
curl -s http://127.0.0.1:7457/api/health
|
||
```
|
||
|
||
Ouvrez ensuite de nouveau le projet depuis lâapp Open Design au lieu de reprendre une ancienne session agent dans le terminal. Un agent lancĂ© par le daemon devrait voir des valeurs comme :
|
||
|
||
```bash
|
||
echo "OD_BIN=$OD_BIN"
|
||
echo "OD_PROJECT_ID=$OD_PROJECT_ID"
|
||
echo "OD_PROJECT_DIR=$OD_PROJECT_DIR"
|
||
echo "OD_DAEMON_URL=$OD_DAEMON_URL"
|
||
ls -la "$OD_BIN"
|
||
```
|
||
|
||
`OD_DAEMON_URL` doit ĂȘtre un vrai port daemon comme `http://127.0.0.1:7457`, pas `http://127.0.0.1:0`. La valeur `:0` est seulement une indication interne "choisir un port libre" au lancement et ne doit pas se retrouver dans les sessions agent.
|
||
|
||
En mode production daemon-only, le daemon sert lui-mĂȘme lâexport static Next.js Ă `http://localhost:7456`; aucun reverse proxy nâest impliquĂ©.
|
||
|
||
Si vous placez nginx devant le daemon, gardez les routes SSE non bufferisĂ©es et non compressĂ©es. Un Ă©chec courant : la console navigateur affiche `net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)` aprĂšs 80-90 secondes, parce que `gzip on` dans nginx bufferise les rĂ©ponses SSE chunked mĂȘme quand le daemon envoie `X-Accel-Buffering: no`.
|
||
|
||
```nginx
|
||
location /api/ {
|
||
proxy_pass http://127.0.0.1:7456;
|
||
|
||
proxy_buffering off;
|
||
gzip off;
|
||
|
||
proxy_read_timeout 86400s;
|
||
proxy_send_timeout 86400s;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Connection "";
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
```
|
||
|
||
## Deux modes dâexĂ©cution
|
||
|
||
| Mode | Valeur du picker | Flux dâune requĂȘte |
|
||
|---|---|---|
|
||
| **Local CLI** (par dĂ©faut quand le daemon dĂ©tecte un agent) | "Local CLI" | Frontend â daemon `/api/chat` â `spawn(<agent>, ...)` â stdout â SSE â parser `<artifact>` â preview |
|
||
| **Mode API** (fallback / aucune CLI) | "Anthropic API" / "OpenAI API" / "Azure OpenAI" / "Google Gemini" | Frontend â daemon `/api/proxy/{provider}/stream` â SSE provider normalisĂ© en `delta/end/error` â parser `<artifact>` â preview |
|
||
|
||
Les deux modes alimentent le **mĂȘme** parser `<artifact>` et la **mĂȘme** iframe sandboxĂ©e. Seuls le transport et la livraison du system prompt changent : les CLI locales nâont pas de canal systĂšme sĂ©parĂ©, donc le prompt composĂ© est intĂ©grĂ© au message utilisateur.
|
||
|
||
## Composition du prompt
|
||
|
||
Ă chaque envoi, lâapp construit un system prompt Ă partir de trois couches et lâenvoie au provider :
|
||
|
||
```
|
||
BASE_SYSTEM_PROMPT (contrat de sortie : wrap in <artifact>, no code fences)
|
||
+ active design system body (DESIGN.md â palette/type/layout)
|
||
+ active skill body (SKILL.md â workflow and output rules)
|
||
```
|
||
|
||
Changez le Skill ou le Design System dans la barre supĂ©rieure : le prochain envoi utilise le nouveau stack. Les contenus sont mis en cache en mĂ©moire par session, donc un choix ne coĂ»te quâun fetch daemon.
|
||
|
||
## File map
|
||
|
||
```
|
||
open-design/
|
||
âââ apps/
|
||
â âââ daemon/ # Node/Express â spawn les agents locaux + sert les APIs
|
||
â â âââ src/
|
||
â â âââ cli.ts # entrĂ©e bin `od`
|
||
â â âââ server.ts # /api/* + static serving
|
||
â â âââ agents.ts # scanner PATH + adapters CLI de coding agents
|
||
â â âââ skills.ts # loader SKILL.md (frontmatter parser)
|
||
â â âââ design-systems.ts # loader DESIGN.md
|
||
â â âââ sidecar/ # wrapper sidecar daemon pour tools-dev
|
||
â â âââ tests/ # tests du package daemon
|
||
â âââ web/ # Next.js 16 App Router + client React
|
||
â âââ app/ # entrypoints App Router
|
||
â âââ src/ # modules client/runtime React + TypeScript
|
||
â â âââ App.tsx # orchestre mode / skill / DS pickers + send
|
||
â â âââ providers/ # transports daemon + BYOK API
|
||
â â âââ prompts/ # system, discovery, directions, deck framework
|
||
â â âââ artifacts/ # parser <artifact> streaming + manifests
|
||
â â âââ runtime/ # iframe srcdoc, markdown, helpers dâexport
|
||
â â âââ state/ # localStorage + Ă©tat projet persistĂ© par le daemon
|
||
â âââ sidecar/ # wrapper sidecar web pour tools-dev
|
||
â âââ next.config.ts # rewrites tools-dev + config export prod apps/web/out
|
||
â âââ desktop/ # runtime Electron, lancĂ©/inspectĂ© par tools-dev
|
||
âââ packages/
|
||
â âââ contracts/ # contrats app partagĂ©s web/daemon
|
||
â âââ sidecar-proto/ # contrat du protocole sidecar Open Design
|
||
â âââ sidecar/ # primitives runtime sidecar gĂ©nĂ©riques
|
||
â âââ platform/ # primitives process/platform gĂ©nĂ©riques
|
||
âââ tools/dev/ # lifecycle `pnpm tools-dev` et inspect CLI
|
||
âââ e2e/ # UI Playwright + harness intĂ©gration externe/Vitest
|
||
âââ skills/ # SKILL.md â drop-in depuis nâimporte quel repo Claude Code skill
|
||
â âââ web-prototype/ # prototype single-screen gĂ©nĂ©rique (dĂ©faut du mode prototype)
|
||
â âââ saas-landing/ # page marketing (hero / features / pricing / CTA)
|
||
â âââ dashboard/ # dashboard admin / analytics
|
||
â âââ pricing-page/ # pricing autonome + comparaison
|
||
â âââ docs-page/ # layout documentation 3 colonnes
|
||
â âââ blog-post/ # long-form Ă©ditorial
|
||
â âââ mobile-app/ # Ă©cran unique dans phone frame
|
||
â âââ simple-deck/ # deck minimal Ă swipe horizontal
|
||
â âââ guizang-ppt/ # magazine-web-ppt â deck/PPT par dĂ©faut inclus
|
||
â âââ SKILL.md
|
||
â âââ assets/template.html
|
||
â âââ references/{themes,layouts,components,checklist}.md
|
||
âââ design-systems/ # DESIGN.md â schĂ©ma 9 sections (awesome-claude-design)
|
||
â âââ default/ # Neutral Modern (starter)
|
||
â âââ warm-editorial/ # Warm Editorial (starter)
|
||
â âââ README.md # aperçu du catalogue
|
||
â âââ âŠsystems # starters · product systems · design skills normalisĂ©s
|
||
âââ scripts/sync-design-systems.ts # rĂ©import depuis le tarball getdesign upstream
|
||
âââ docs/ # vision produit + spec
|
||
âââ .od/ # donnĂ©es runtime (gitignored, auto-créées)
|
||
â âââ app.sqlite # projects / conversations / messages / tabs
|
||
â âââ artifacts/ # rendus ponctuels "Save to disk"
|
||
â âââ projects/<id>/ # dossier de travail par projet + cwd de lâagent
|
||
âââ pnpm-workspace.yaml # apps/* + packages/* + tools/* + e2e
|
||
âââ package.json # scripts qualitĂ© root + bin `od`
|
||
```
|
||
|
||
## Dépannage
|
||
|
||
- **"no agents found on PATH"** â installez une CLI compatible, par exemple `claude`, `codex`, `gemini`, `opencode`, `cursor-agent`, `qwen` ou `copilot`. La liste exacte des adapters dĂ©tectĂ©s vit dans `apps/daemon/src/agents.ts`. Ou passez au mode API/BYOK dans la barre supĂ©rieure et collez une clĂ© dans **Settings**.
|
||
- **daemon 500 sur /api/chat** â vĂ©rifiez la fin de stderr dans le terminal daemon ; la CLI a gĂ©nĂ©ralement rejetĂ© ses args. Les CLIs nâacceptent pas toutes la mĂȘme forme dâargv ; consultez `apps/daemon/src/agents.ts` `buildArgs` si vous devez ajuster.
|
||
- **la gĂ©nĂ©ration mĂ©dia dit que `OD_BIN` manque ou que lâURL daemon vaut `:0`** â exĂ©cutez les checks du dispatcher mĂ©dia ci-dessus. Ne reprenez pas lâancienne session CLI ; rouvrez le projet depuis lâapp Open Design pour que le daemon injecte des variables `OD_*` fraĂźches.
|
||
- **Codex charge trop de contexte plugin** â dĂ©marrez Open Design avec `OD_CODEX_DISABLE_PLUGINS=1 pnpm tools-dev` pour que les processus Codex lancĂ©s par le daemon tournent avec `--disable plugins`.
|
||
- **lâartifact ne rend jamais** â le modĂšle a produit du texte sans wrapper `<artifact>`. VĂ©rifiez que le system prompt passe bien (log daemon) et envisagez un modĂšle plus capable ou un Skill plus strict.
|
||
|
||
## Retour Ă la vision
|
||
|
||
Ce Quickstart est la graine exécutable de la spec dans [`docs/`](docs/). La spec décrit vers quoi le projet grandit (voir [`docs/roadmap.md`](docs/roadmap.md)). Points clés :
|
||
|
||
- `docs/architecture.md` dĂ©crit le stack livrĂ© : Next.js 16 App Router devant, daemon local derriĂšre, et rewrites `apps/web/next.config.ts` en dev pour que le navigateur parle toujours Ă la mĂȘme surface `/api`.
|
||
- `docs/skills-protocol.md` décrit le schéma `od:` complet. Le daemon lit les métadonnées runtime utiles depuis `SKILL.md` pour router les Skills, composer le prompt, afficher les exemples et configurer les surfaces web / image / vidéo / audio ; le protocole reste la référence pour les champs avancés.
|
||
- `docs/agent-adapters.md` anticipe un dispatch plus riche (capability detection, streaming tool-calls). Notre `apps/daemon/src/agents.ts` est un dispatcher minimal : suffisant pour prouver le cĂąblage.
|
||
- `docs/modes.md` décrit les workflows prototype / deck / template / design-system. Le catalogue runtime peut aussi exposer des Skills pour les surfaces image, vidéo et audio ; le picker filtre les entrées par `mode` et `surface`.
|