Flatten the repo: move everything out of app/ to the root
Now that the CLI and the Next.js app are one package, nesting it inside app/ served no purpose - the repo root itself becomes the published npm package. Merges app/.gitignore and app/README.md into the root versions, drops the now-duplicate app/LICENSE, and updates path references (README, docs/ARCHITECTURE.md, docs/CONFIG_REFERENCE.md, package.json's repository.directory) that assumed the app/ nesting. Also fixes a real bug this surfaced: the in-app docs viewer resolved docs/ relative to process.cwd(), which only worked by accident when the CLI happened to be invoked from app/'s parent directory. A first attempt at fixing it with import.meta.dirname broke instead, for the same cross-module-graph reason config-path resolution already documented - Next compiles Route Handlers through a separate module graph that doesn't preserve source-relative import.meta paths. Fixed by exposing the app root via TRIGGERSHELL_APP_ROOT (set once in server.ts, where import.meta *does* resolve correctly), the same pattern already used for TRIGGERSHELL_CONFIG_PATH. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Architecture
|
||||
|
||||
```
|
||||
triggershell (Node CLI, src/cli) app/ (Next.js, all server logic)
|
||||
─────────────────────────────── ──────────────────────────────
|
||||
triggershell (Node CLI, src/cli) server.ts + src/ (Next.js, all server logic)
|
||||
─────────────────────────────── ─────────────────────────────────────────
|
||||
triggershell start server.ts (custom Node server)
|
||||
1. resolve + validate the config (loadConfig) ├─ Next.js request handler (pages, API routes)
|
||||
2. check the port is free ├─ ws.WebSocketServer on /ws/runs
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
## Why a custom Node server
|
||||
|
||||
Next.js Route Handlers can't host a persistent WebSocket server, so `app/server.ts` wraps Next's
|
||||
Next.js Route Handlers can't host a persistent WebSocket server, so `server.ts` wraps Next's
|
||||
request handler in a plain `http.createServer` and attaches a `ws.WebSocketServer` via the
|
||||
`upgrade` event, scoped to `/ws/runs` with its own auth check (Route Handlers get auth via
|
||||
`next/headers`'s `cookies()`, which isn't available on a raw `http.IncomingMessage`).
|
||||
@@ -100,4 +100,4 @@ Every server file that reads the config/DB at request time (`getConfig()`, `getD
|
||||
`requireAuth()`) sets `export const dynamic = "force-dynamic"`. Without it, `next build` tries to
|
||||
statically prerender pages like `/` at build time, which fails because there's no config file to
|
||||
read yet (the config only exists at `triggershell start` runtime, in the user's own project
|
||||
directory, not `app/`'s).
|
||||
directory, not the package's).
|
||||
|
||||
Reference in New Issue
Block a user