Skip to content

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 journeys

Building ​

ComponentCommandOutput
Extensionnpm run package in apps/extensiondist/dwa-slides-<version>.vsix
Portalnpm run build in apps/theme-hub; locally: npm run db:local && npm run devPortal on localhost:8787
Shared coreno build: imported as source (npm ci in packages/core)—
Sitenpm 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 release

For 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 ```dwa block displays the rendered slide above its code; ```dwa slide displays the slide alone.
  • Available example images (generated patterns): architecture.png, chantier.png, equipe.png, visuel.png, image.png, vue-a.png to vue-c.png, image-1.png to image-6.png.
  • The class reference, commands and settings are generated: edit the catalog (packages/core/src/catalog.ts) or the extension's package.json, not the page.

Documentation of the DWA Core v1 language, the VS Code extension, the CLI and the theme portal.