Contributing
The complete rules, for humans and AI agents alike, are in AGENTS.md at the root of the repository. The essentials:
Getting started
sh
git config core.hooksPath .githooks # once after cloning
(cd packages/core && npm ci)
(cd apps/extension && npm ci)
(cd apps/theme-hub && npm ci)
(cd apps/site && npm ci)
node scripts/test-changed.mjs --all --dry # list the e2e journeysBuilding
| Component | Command | Output |
|---|---|---|
| Extension | npm run package in apps/extension | dist/dwa-slides-<version>.vsix |
| Portal | npm run build in apps/theme-hub; locally: npm run db:local && npm run dev | Portal on localhost:8787 |
| Shared core | no build: imported as source (npm ci in packages/core) | — |
| Site | npm run dev or npm run build in apps/site | .vitepress/dist/ |
Node.js 22 or later.
Testing
We test end-to-end user journeys, not internal functions: write a slide and get the suggestion, export a PPTX, publish a theme version and see it arrive in the extension… Real browser, real VS Code, Miniflare for the portal; no remote service.
sh
node scripts/test-changed.mjs # journeys affected by your changes
node scripts/test-changed.mjs --dry # show the plan without running
node scripts/test-changed.mjs --all # before a releaseFor the portal, in apps/theme-hub:
sh
npm run check # Worker and interface types
npm run e2e:api # API and integrations (S3, Azure, OIDC SSO, AI) under Miniflare
npm run e2e:web # interface in Chromium (DWA_TEST_BROWSER to force a path)External services are simulated locally there: no request goes out to a remote service.
Before declaring a task done: npm run check in the modified application, then scripts/test-changed.mjs.
Conventions
- This site is in English (root) and French (
/fr/): every page exists in both, at the same path. The extension and CLI messages are in French; the portal is in English by default, with French, Ukrainian and Arabic. - No CDN dependency or network call in the extension, except for an explicit sign-in to the portal.
- No client data and no invented figures; examples are marked as illustrative.
- Colors of a client theme: only the palette provided by the client.
- Small commits, prefixed with the component, in the imperative:
extension: fix callout fit on snap chromium,site: add palettes page. - No deployment or command against a remote service without an explicit request.
Editing this site
- Pages are in
apps/site/pages/, in Markdown. - A
```dwablock displays the rendered slide above its code;```dwa slidedisplays the slide alone. - Available example images (generated patterns):
architecture.png,chantier.png,equipe.png,visuel.png,image.png,vue-a.pngtovue-c.png,image-1.pngtoimage-6.png. - The class reference, commands and settings are generated: edit the catalog (
packages/core/src/catalog.ts) or the extension'spackage.json, not the page.