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:
@@ -0,0 +1,47 @@
|
||||
interface RunHandle {
|
||||
runId: string;
|
||||
scriptId: string;
|
||||
controller: AbortController;
|
||||
pid?: number;
|
||||
}
|
||||
|
||||
declare global {
|
||||
var __triggershellRunHandles: Map<string, RunHandle> | undefined;
|
||||
}
|
||||
|
||||
/** In-memory only - live run handles cannot survive a process restart; see `reconcileOrphanedRuns`.
|
||||
* Anchored on `globalThis` - see the comment in `runner/events.ts` for why a plain module-level
|
||||
* singleton isn't safe here (Next compiles Route Handlers through a separate module graph from
|
||||
* what `server.ts` requires directly). */
|
||||
const handles: Map<string, RunHandle> = globalThis.__triggershellRunHandles ?? new Map();
|
||||
globalThis.__triggershellRunHandles = handles;
|
||||
|
||||
export function registerRun(handle: RunHandle) {
|
||||
handles.set(handle.runId, handle);
|
||||
}
|
||||
|
||||
export function unregisterRun(runId: string) {
|
||||
handles.delete(runId);
|
||||
}
|
||||
|
||||
export function getRunHandle(runId: string): RunHandle | undefined {
|
||||
return handles.get(runId);
|
||||
}
|
||||
|
||||
export function isRunLive(runId: string): boolean {
|
||||
return handles.has(runId);
|
||||
}
|
||||
|
||||
/** Requests cancellation; returns false if the run isn't tracked (already finished or not this process). */
|
||||
export function cancelRun(runId: string): boolean {
|
||||
const handle = handles.get(runId);
|
||||
if (!handle) return false;
|
||||
handle.controller.abort();
|
||||
return true;
|
||||
}
|
||||
|
||||
export function killAllRuns() {
|
||||
for (const handle of handles.values()) {
|
||||
handle.controller.abort();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user