mirror of
https://github.com/nexu-io/open-design.git
synced 2026-09-20 06:15:06 +08:00
1d2150007b
* 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)
4.7 KiB
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 inapps/web/app/; the main client shell isapps/web/src/App.tsx. During localtools-devweb runs,apps/web/next.config.tsrewrites/api/*,/artifacts/*, and/frames/*toOD_PORT.apps/daemon: Express + SQLite local daemon andodbin. 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 rootAGENTS.mdsection 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 theod://entry protocol, and delegates desktop host behavior toapps/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.tsunless 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/healthand/api/versionstay inserver.tsbecause they only report process-level status. - Domain routes describe a product capability or data model.
/api/activebelongs inapps/daemon/src/routes/active-context.tsbecause 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 tosrc/; preserve source-relative subpaths insidetests/when useful. - Keep app
src/directories source-only; do not add new*.test.tsor*.test.tsxfiles undersrc/. 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 underapps/web.
Sidecar awareness
- App business layers must not import sidecar packages or branch on
runtime.mode,namespace,ipc, orsource. - Keep sidecar awareness in
apps/<app>/sidecaror the desktop sidecar entry wrapper.
Packaged runtime
apps/nextjsandapps/landing-pagehave 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_ROOTis for daemon non-Next read-only resources. The authoritative bundled-tree list lives intools/pack/src/resources/index.tsand 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