open-design/QUICKSTART.fr.md
Yuhao Chen 5dbe7795aa
docs: add Traditional Chinese QUICKSTART and fix Chinese doc links (#753)
- 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.
2026-05-09 21:19:08 +08:00

231 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`.