Files
nexu-io__open-design/apps/AGENTS.md
Marc Chan 1d2150007b chore: remove extracted landing-page from the monorepo (#7727)
* chore: remove extracted landing-page from the monorepo

The marketing site now lives in a separate repository. Drop the
Astro app, its GitHub workflows/scripts, and the remaining
monorepo coupling so this workspace no longer builds or deploys it.

* fix: drop leftover landing-page coupling from Teams and skills

Point development enterprise URLs at the deployed marketing origin,
remove nextjs-app skill outputs that no longer emit a page, and stop
advertising apps/landing-page in plugin marketplace metadata.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* fix(ci): restore DSH installer E2E Vitest routing

Removing dsh-bootstrap-identity dropped the only planner route from
tools/release/resources/dsh-bootstrap/ to web_tests_required, so
installer-only PRs skipped e2e/tests/dsh-installer-version-policy.test.ts.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* docs: drop leftover landing-page paths from template assets

The skill contract no longer advertises the extracted Astro app, but
styles.css, compose.ts, and example.html still named deleted
apps/landing-page sources. Describe the standalone template behavior
instead and keep the bundled plugin example in sync.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* docs: keep landing-page off review and test surfaces

Add apps/landing-page to the forbidden-surface review list and stop naming the extracted path in plugin registry acceptance tables.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* fix: drop leftover landing-page refs and bump plugin version

Stop naming the deleted apps/landing-page in the landing-deck demo and
plugin-registry plan. Bump example-open-design-landing to 0.1.1 and keep
the official catalog version aligned with the bundled manifest.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)
2026-09-03 03:21:08 +00:00

4.7 KiB

apps/AGENTS.md

Follow the root AGENTS.md first. This file only records module-level boundaries for apps/.

Active apps

  • apps/closure: independently distributable OpenDesign Closure content. During the cold-start phase it owns only a Web/daemon-independent lifecycle fixture and component contribution; do not add shell, Store, channel, or generation policy here.
  • apps/web: Next.js 16 App Router + React 18 web runtime. Entrypoints live in apps/web/app/; the main client shell is apps/web/src/App.tsx. During local tools-dev web runs, apps/web/next.config.ts rewrites /api/*, /artifacts/*, and /frames/* to OD_PORT.
  • apps/daemon: Express + SQLite local daemon and od bin. It owns REST/SSE APIs, agent CLI spawning, skills, design systems, artifact persistence, static serving, and daemon-managed data. Before describing or changing daemon data paths, read the root AGENTS.md section Daemon data directory contract; it is mandatory and must not be restated here.
  • apps/desktop: Electron shell. Desktop does not guess the web port; it reads runtime status through sidecar IPC and opens the reported web URL.
  • apps/packaged: Thin packaged Electron runtime entry. It starts packaged daemon/web sidecars, registers the od:// entry protocol, and delegates desktop host behavior to apps/desktop.

Daemon layout

  • apps/daemon/src/ contains only daemon app source.
  • apps/daemon/tests/ contains daemon tests.
  • apps/daemon/src/sidecar/ contains the daemon sidecar entry.
  • CLI/agent argument definition changes belong in apps/daemon/src/runtimes/defs/; stdout parser changes belong with the matching runtime helpers and parser tests.

Router layout

  • Existing daemon domain endpoints belong in the matching daemon route file; avoid adding route handlers directly to apps/daemon/src/server.ts unless the route is bootstrap-wide or has no clear domain owner.
  • New route registrars should be wired into the matching semantic section in server.ts; keep sections broad and reuse existing sections before adding a new one.
  • Bootstrap-wide routes describe daemon availability or startup metadata shared by every domain. /api/health and /api/version stay in server.ts because they only report process-level status.
  • Domain routes describe a product capability or data model. /api/active belongs in apps/daemon/src/routes/active-context.ts because transient UI focus is its own domain, while chat routes own persistent conversation and run state.
  • Add endpoints to an existing route file when they share the same domain language and dependency set. Split a new module under apps/daemon/src/routes/ when the endpoint introduces a distinct domain or has little dependency overlap with existing route modules.

Test layout

  • App tests live in each app's tests/ directory, sibling to src/; preserve source-relative subpaths inside tests/ when useful.
  • Keep app src/ directories source-only; do not add new *.test.ts or *.test.tsx files under src/.
  • apps/web/tests/ contains web-owned Vitest tests and uses *.test.ts / *.test.tsx.
  • Playwright UI automation belongs in e2e/ui/; do not add Playwright suites or UI automation helper scripts under apps/web.

Sidecar awareness

  • App business layers must not import sidecar packages or branch on runtime.mode, namespace, ipc, or source.
  • Keep sidecar awareness in apps/<app>/sidecar or the desktop sidecar entry wrapper.

Packaged runtime

  • apps/nextjs and apps/landing-page have been removed; do not restore them.
  • Packaged web uses Next.js SSR through the web sidecar; do not put Next output under daemon OD_RESOURCE_ROOT.
  • Packaged OD_RESOURCE_ROOT is for daemon non-Next read-only resources. The authoritative bundled-tree list lives in tools/pack/src/resources/index.ts and currently includes skills, design templates, design systems, craft, official and registry plugin data, frames, community pets, prompt templates, and baked plugin-preview metadata.
  • Packaged data/log/runtime/cache paths must be namespace-scoped and must not depend on daemon or web ports.
  • Daemon↔web packaged traffic still uses an HTTP origin/port because Next.js dev server and SSR proxy paths assume HTTP origins; switching to Unix sockets would require patching Next internals. The invariant is that data/log/runtime/cache paths never embed ports.

Common app commands

pnpm --filter @open-design/web typecheck
pnpm --filter @open-design/web test
pnpm --filter @open-design/daemon typecheck
pnpm --filter @open-design/daemon test
pnpm --filter @open-design/daemon build
pnpm --filter @open-design/desktop typecheck
pnpm --filter @open-design/desktop build
pnpm --filter @open-design/packaged typecheck
pnpm --filter @open-design/packaged build