The user-visible payoff of the whole delivery workstream. - (app)/app: four tabs — pipeline (runs + the eight steps + a live console), releases (with demo rollback), production (target summary, confirmed deploy, history), Git. The header answers "is it live": demo URL, live release, health state. - Live console: batches onto an animation frame, stops following the tail the moment the user scrolls away from the bottom, strips ANSI colour codes and carriage-return redraws. A console that yanks the view back is worse than none. - Production panel: the target is shown as the operator recognises their server plus has_secret/ثبت شده. No field anywhere could render a credential. - contracts: the v2 delivery types and seven new WsEventType members. - /admin/sandbox (owner): per-role container counts, running containers, per-org limits, image mapping, stop with the id typed back (audited). A provider without the capability reports an empty list rather than an error. - /admin/domains (owner): every route with its owning app, attach/detach (host typed back), idempotent re-sync. - /projects removed entirely, with a permanent redirect to /app. Tests: 502 API (+3), 78 web (+11); ruff, mypy, tsc and lint clean. Report: docs/plan/reports/agent-3-phase-6.md
29 lines
901 B
JavaScript
29 lines
901 B
JavaScript
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
reactStrictMode: true,
|
|
// Workspace packages ship TypeScript source, so Next must transpile them.
|
|
transpilePackages: ["@agy/ui", "@agy/contracts"],
|
|
env: {
|
|
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL ?? "",
|
|
},
|
|
// v2: `/projects` is gone — one organization has exactly one application, so
|
|
// there is no list to browse. A permanent redirect keeps old bookmarks (and
|
|
// the browser history of anyone mid-flow) working instead of 404ing.
|
|
async redirects() {
|
|
return [
|
|
{ source: "/projects", destination: "/app", permanent: true },
|
|
{ source: "/projects/:path*", destination: "/app", permanent: true },
|
|
];
|
|
},
|
|
async rewrites() {
|
|
return [
|
|
{
|
|
source: "/api/:path*",
|
|
destination: "http://127.0.0.1:8000/api/:path*",
|
|
},
|
|
];
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|