@mozole/cli 2.0.0-b → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +147 -23
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +87 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/adopt.d.ts +2 -0
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +243 -45
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/assets.d.ts +28 -0
- package/dist/commands/assets.d.ts.map +1 -0
- package/dist/commands/assets.js +176 -0
- package/dist/commands/assets.js.map +1 -0
- package/dist/commands/backend.d.ts +5 -0
- package/dist/commands/backend.d.ts.map +1 -0
- package/dist/commands/backend.js +68 -0
- package/dist/commands/backend.js.map +1 -0
- package/dist/commands/new.d.ts +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +13 -5
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/prototype.d.ts.map +1 -1
- package/dist/commands/prototype.js +68 -20
- package/dist/commands/prototype.js.map +1 -1
- package/dist/commands/release.d.ts +10 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.js +181 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/ui.d.ts +12 -1
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +182 -68
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +37 -5
- package/dist/commands/verify.js.map +1 -1
- package/dist/scaffold/agents.d.ts.map +1 -1
- package/dist/scaffold/agents.js +40 -6
- package/dist/scaffold/agents.js.map +1 -1
- package/dist/scaffold/backend.d.ts +1 -1
- package/dist/scaffold/backend.d.ts.map +1 -1
- package/dist/scaffold/backend.js +63 -31
- package/dist/scaffold/backend.js.map +1 -1
- package/dist/scaffold/components.d.ts +8 -0
- package/dist/scaffold/components.d.ts.map +1 -0
- package/dist/scaffold/components.js +305 -0
- package/dist/scaffold/components.js.map +1 -0
- package/dist/scaffold/design.d.ts.map +1 -1
- package/dist/scaffold/design.js +47 -25
- package/dist/scaffold/design.js.map +1 -1
- package/dist/scaffold/flagship.d.ts +5 -0
- package/dist/scaffold/flagship.d.ts.map +1 -1
- package/dist/scaffold/flagship.js +161 -102
- package/dist/scaffold/flagship.js.map +1 -1
- package/dist/scaffold/index.d.ts +1 -1
- package/dist/scaffold/index.d.ts.map +1 -1
- package/dist/scaffold/index.js +22 -7
- package/dist/scaffold/index.js.map +1 -1
- package/dist/scaffold/library.d.ts +3 -0
- package/dist/scaffold/library.d.ts.map +1 -0
- package/dist/scaffold/library.js +98 -0
- package/dist/scaffold/library.js.map +1 -0
- package/dist/scaffold/phases.d.ts.map +1 -1
- package/dist/scaffold/phases.js +19 -14
- package/dist/scaffold/phases.js.map +1 -1
- package/dist/scaffold/repomap.d.ts +3 -3
- package/dist/scaffold/repomap.d.ts.map +1 -1
- package/dist/scaffold/repomap.js +22 -10
- package/dist/scaffold/repomap.js.map +1 -1
- package/dist/scaffold/standard.d.ts.map +1 -1
- package/dist/scaffold/standard.js +3 -2
- package/dist/scaffold/standard.js.map +1 -1
- package/dist/scaffold/tokens.js +4 -4
- package/dist/scaffold/tools-guide.d.ts +3 -0
- package/dist/scaffold/tools-guide.d.ts.map +1 -0
- package/dist/scaffold/tools-guide.js +117 -0
- package/dist/scaffold/tools-guide.js.map +1 -0
- package/dist/scaffold/workflow.d.ts +5 -0
- package/dist/scaffold/workflow.d.ts.map +1 -0
- package/dist/scaffold/workflow.js +221 -0
- package/dist/scaffold/workflow.js.map +1 -0
- package/dist/ui/CockpitApp.d.ts +13 -0
- package/dist/ui/CockpitApp.d.ts.map +1 -0
- package/dist/ui/CockpitApp.js +612 -0
- package/dist/ui/CockpitApp.js.map +1 -0
- package/dist/ui/ToolsPanel.d.ts +6 -0
- package/dist/ui/ToolsPanel.d.ts.map +1 -0
- package/dist/ui/ToolsPanel.js +128 -0
- package/dist/ui/ToolsPanel.js.map +1 -0
- package/dist/utils/fs.d.ts +7 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +169 -3
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/project-files.d.ts +4 -0
- package/dist/utils/project-files.d.ts.map +1 -0
- package/dist/utils/project-files.js +49 -0
- package/dist/utils/project-files.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +32 -4
|
@@ -45,6 +45,7 @@ export default defineConfig({
|
|
|
45
45
|
plugins: [react(), tailwindcss()],
|
|
46
46
|
server: {
|
|
47
47
|
port: 5173,
|
|
48
|
+
proxy: { "/api": "http://127.0.0.1:3001" },
|
|
48
49
|
},
|
|
49
50
|
});
|
|
50
51
|
`;
|
|
@@ -153,44 +154,16 @@ export function CanvasLayer() {
|
|
|
153
154
|
`;
|
|
154
155
|
}
|
|
155
156
|
export function generateFlagshipApp() {
|
|
156
|
-
return `import
|
|
157
|
-
import {
|
|
158
|
-
import { Link, Route, Switch } from "wouter";
|
|
157
|
+
return `import { Link, Route, Switch } from "wouter";
|
|
158
|
+
import { useSmoothScroll } from "./behaviors";
|
|
159
159
|
import { CanvasLayer } from "./components/creative/CanvasLayer";
|
|
160
|
-
import {
|
|
160
|
+
import { Footer, Header } from "./components/layout";
|
|
161
|
+
import { Button } from "./components/ui";
|
|
162
|
+
import HomeView from "./routes/home";
|
|
163
|
+
import ShowcaseView from "./routes/showcase";
|
|
161
164
|
|
|
162
165
|
export default function App() {
|
|
163
|
-
|
|
164
|
-
const preference = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
165
|
-
let lenis: Lenis | undefined;
|
|
166
|
-
let frameId = 0;
|
|
167
|
-
const stop = () => {
|
|
168
|
-
cancelAnimationFrame(frameId);
|
|
169
|
-
lenis?.destroy();
|
|
170
|
-
lenis = undefined;
|
|
171
|
-
};
|
|
172
|
-
const update = () => {
|
|
173
|
-
stop();
|
|
174
|
-
if (preference.matches) return;
|
|
175
|
-
const instance = new Lenis({
|
|
176
|
-
duration: 1.2,
|
|
177
|
-
easing: (t) => Math.min(1, 1.001 - 2 ** (-10 * t)),
|
|
178
|
-
smoothWheel: true,
|
|
179
|
-
});
|
|
180
|
-
lenis = instance;
|
|
181
|
-
const raf = (time: number) => {
|
|
182
|
-
instance.raf(time);
|
|
183
|
-
frameId = requestAnimationFrame(raf);
|
|
184
|
-
};
|
|
185
|
-
frameId = requestAnimationFrame(raf);
|
|
186
|
-
};
|
|
187
|
-
update();
|
|
188
|
-
preference.addEventListener("change", update);
|
|
189
|
-
return () => {
|
|
190
|
-
preference.removeEventListener("change", update);
|
|
191
|
-
stop();
|
|
192
|
-
};
|
|
193
|
-
}, []);
|
|
166
|
+
useSmoothScroll();
|
|
194
167
|
|
|
195
168
|
return (
|
|
196
169
|
<div className="relative min-h-screen bg-[var(--color-background)] text-[var(--color-foreground)] flex flex-col">
|
|
@@ -205,33 +178,7 @@ export default function App() {
|
|
|
205
178
|
<CanvasLayer />
|
|
206
179
|
|
|
207
180
|
{/* Top Header */}
|
|
208
|
-
<
|
|
209
|
-
<div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] h-16 flex items-center justify-between">
|
|
210
|
-
<Link
|
|
211
|
-
href="/"
|
|
212
|
-
className="text-[var(--text-lg)] font-bold tracking-tight text-[var(--color-foreground)]"
|
|
213
|
-
>
|
|
214
|
-
Flagship Studio
|
|
215
|
-
</Link>
|
|
216
|
-
<nav
|
|
217
|
-
aria-label="Main Navigation"
|
|
218
|
-
className="flex items-center gap-6 text-[var(--text-sm)]"
|
|
219
|
-
>
|
|
220
|
-
<Link
|
|
221
|
-
href="/"
|
|
222
|
-
className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
|
|
223
|
-
>
|
|
224
|
-
Home
|
|
225
|
-
</Link>
|
|
226
|
-
<Link
|
|
227
|
-
href="/showcase"
|
|
228
|
-
className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
|
|
229
|
-
>
|
|
230
|
-
Showcase
|
|
231
|
-
</Link>
|
|
232
|
-
</nav>
|
|
233
|
-
</div>
|
|
234
|
-
</header>
|
|
181
|
+
<Header />
|
|
235
182
|
|
|
236
183
|
{/* Main Content Landmark */}
|
|
237
184
|
<main id="main-content" tabIndex={-1} className="relative z-10 flex-1 flex flex-col">
|
|
@@ -250,49 +197,10 @@ export default function App() {
|
|
|
250
197
|
</main>
|
|
251
198
|
|
|
252
199
|
{/* Footer */}
|
|
253
|
-
<
|
|
254
|
-
<div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] flex flex-col sm:flex-row items-center justify-between gap-4 text-[var(--text-xs)] text-[var(--color-muted-foreground)]">
|
|
255
|
-
<p>© {new Date().getFullYear()} Flagship Studio. All rights reserved.</p>
|
|
256
|
-
</div>
|
|
257
|
-
</footer>
|
|
200
|
+
<Footer />
|
|
258
201
|
</div>
|
|
259
202
|
);
|
|
260
203
|
}
|
|
261
|
-
|
|
262
|
-
function HomeView() {
|
|
263
|
-
return (
|
|
264
|
-
<section className="py-24 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
|
|
265
|
-
<div className="flex flex-col gap-6 max-w-2xl">
|
|
266
|
-
<h1 className="text-[var(--text-5xl)] font-bold leading-tight tracking-tight">
|
|
267
|
-
Creative Engineering & Visual Systems
|
|
268
|
-
</h1>
|
|
269
|
-
<p className="text-[var(--text-xl)] text-[var(--color-muted-foreground)] leading-relaxed">
|
|
270
|
-
Interactive web experiences with headless routing, smooth scrolling, and dynamic graphics
|
|
271
|
-
layers.
|
|
272
|
-
</p>
|
|
273
|
-
<div className="flex gap-4 pt-4">
|
|
274
|
-
<Button variant="primary" size="lg">
|
|
275
|
-
Explore Showcase
|
|
276
|
-
</Button>
|
|
277
|
-
<Button variant="outline" size="lg">
|
|
278
|
-
Architecture
|
|
279
|
-
</Button>
|
|
280
|
-
</div>
|
|
281
|
-
</div>
|
|
282
|
-
</section>
|
|
283
|
-
);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
function ShowcaseView() {
|
|
287
|
-
return (
|
|
288
|
-
<section className="py-20 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
|
|
289
|
-
<h1 className="text-[var(--text-4xl)] font-bold mb-6">Creative Showcase</h1>
|
|
290
|
-
<p className="text-[var(--text-base)] text-[var(--color-muted-foreground)]">
|
|
291
|
-
Interactive experiences delivered with precision performance.
|
|
292
|
-
</p>
|
|
293
|
-
</section>
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
204
|
`;
|
|
297
205
|
}
|
|
298
206
|
export async function scaffoldFlagshipProject(projectRoot, projectName) {
|
|
@@ -326,12 +234,163 @@ export async function scaffoldFlagshipProject(projectRoot, projectName) {
|
|
|
326
234
|
javascript: { formatter: { quoteStyle: "double", trailingCommas: "all" } },
|
|
327
235
|
};
|
|
328
236
|
await atomicWrite(path.join(projectRoot, "biome.json"), JSON.stringify(biomeConfig, null, 2));
|
|
237
|
+
await atomicWrite(path.join(projectRoot, "src/behaviors/useSmoothScroll.ts"), generateSmoothScroll());
|
|
238
|
+
await atomicWrite(path.join(projectRoot, "src/behaviors/index.ts"), 'export { useSmoothScroll } from "./useSmoothScroll";\n');
|
|
239
|
+
await atomicWrite(path.join(projectRoot, "src/components/motion/Reveal.tsx"), `import { type HTMLMotionProps, motion, useReducedMotion } from "motion/react";
|
|
240
|
+
|
|
241
|
+
export function Reveal({ children, ...props }: HTMLMotionProps<"div">) {
|
|
242
|
+
const reduced = useReducedMotion();
|
|
243
|
+
return (
|
|
244
|
+
<motion.div
|
|
245
|
+
initial={reduced ? false : { opacity: 0 }}
|
|
246
|
+
whileInView={{ opacity: 1 }}
|
|
247
|
+
viewport={{ once: true }}
|
|
248
|
+
{...props}
|
|
249
|
+
>
|
|
250
|
+
{children}
|
|
251
|
+
</motion.div>
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
`);
|
|
255
|
+
await atomicWrite(path.join(projectRoot, "src/components/motion/index.ts"), 'export { Reveal } from "./Reveal";\n');
|
|
256
|
+
await atomicWrite(path.join(projectRoot, "src/library/index.ts"), 'export * from "../components/ui";\nexport * from "../components/layout";\nexport * from "../components/features";\nexport * from "../components/sections";\nexport * from "../components/motion";\nexport * from "../behaviors";\n');
|
|
329
257
|
// Source files
|
|
330
258
|
const srcDir = path.join(projectRoot, "src");
|
|
331
259
|
await atomicWrite(path.join(srcDir, "main.tsx"), generateFlagshipMain());
|
|
332
260
|
await atomicWrite(path.join(srcDir, "App.tsx"), generateFlagshipApp());
|
|
261
|
+
await atomicWrite(path.join(srcDir, "components/layout/Header.tsx"), generateFlagshipHeader());
|
|
262
|
+
await atomicWrite(path.join(srcDir, "components/layout/Footer.tsx"), generateFlagshipFooter());
|
|
263
|
+
await atomicWrite(path.join(srcDir, "routes/home.tsx"), generateFlagshipHome());
|
|
264
|
+
await atomicWrite(path.join(srcDir, "routes/showcase.tsx"), generateFlagshipShowcase());
|
|
333
265
|
await atomicWrite(path.join(srcDir, "components", "creative", "CanvasLayer.tsx"), generateFlagshipCanvasLayer());
|
|
334
266
|
await atomicWrite(path.join(srcDir, "components", "ui", "Button.tsx"), generateBespokeButton());
|
|
335
267
|
await atomicWrite(path.join(srcDir, "components", "ui", "Input.tsx"), generateBespokeInput());
|
|
336
268
|
}
|
|
269
|
+
export function generateSmoothScroll() {
|
|
270
|
+
return `import Lenis from "lenis";
|
|
271
|
+
import "lenis/dist/lenis.css";
|
|
272
|
+
import { useEffect } from "react";
|
|
273
|
+
|
|
274
|
+
export function useSmoothScroll() {
|
|
275
|
+
useEffect(() => {
|
|
276
|
+
const preference = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
277
|
+
let lenis: Lenis | undefined;
|
|
278
|
+
let frameId = 0;
|
|
279
|
+
const stop = () => {
|
|
280
|
+
cancelAnimationFrame(frameId);
|
|
281
|
+
lenis?.destroy();
|
|
282
|
+
lenis = undefined;
|
|
283
|
+
};
|
|
284
|
+
const update = () => {
|
|
285
|
+
stop();
|
|
286
|
+
if (preference.matches) return;
|
|
287
|
+
const instance = new Lenis({
|
|
288
|
+
duration: 1.2,
|
|
289
|
+
easing: (t) => Math.min(1, 1.001 - 2 ** (-10 * t)),
|
|
290
|
+
smoothWheel: true,
|
|
291
|
+
});
|
|
292
|
+
lenis = instance;
|
|
293
|
+
const raf = (time: number) => {
|
|
294
|
+
instance.raf(time);
|
|
295
|
+
frameId = requestAnimationFrame(raf);
|
|
296
|
+
};
|
|
297
|
+
frameId = requestAnimationFrame(raf);
|
|
298
|
+
};
|
|
299
|
+
update();
|
|
300
|
+
preference.addEventListener("change", update);
|
|
301
|
+
return () => {
|
|
302
|
+
preference.removeEventListener("change", update);
|
|
303
|
+
stop();
|
|
304
|
+
};
|
|
305
|
+
}, []);
|
|
306
|
+
}
|
|
307
|
+
`;
|
|
308
|
+
}
|
|
309
|
+
export function generateFlagshipHeader() {
|
|
310
|
+
return `import { Link } from "wouter";
|
|
311
|
+
|
|
312
|
+
export function Header() {
|
|
313
|
+
return (
|
|
314
|
+
<header className="border-b border-[var(--color-border)] bg-[var(--color-surface)]/80 backdrop-blur-md sticky top-0 z-40">
|
|
315
|
+
<div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] h-16 flex items-center justify-between">
|
|
316
|
+
<Link
|
|
317
|
+
href="/"
|
|
318
|
+
className="text-[var(--text-lg)] font-bold tracking-tight text-[var(--color-foreground)]"
|
|
319
|
+
>
|
|
320
|
+
Flagship Studio
|
|
321
|
+
</Link>
|
|
322
|
+
<nav aria-label="Main Navigation" className="flex items-center gap-6 text-[var(--text-sm)]">
|
|
323
|
+
<Link
|
|
324
|
+
href="/"
|
|
325
|
+
className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
|
|
326
|
+
>
|
|
327
|
+
Home
|
|
328
|
+
</Link>
|
|
329
|
+
<Link
|
|
330
|
+
href="/showcase"
|
|
331
|
+
className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
|
|
332
|
+
>
|
|
333
|
+
Showcase
|
|
334
|
+
</Link>
|
|
335
|
+
</nav>
|
|
336
|
+
</div>
|
|
337
|
+
</header>
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
`;
|
|
341
|
+
}
|
|
342
|
+
export function generateFlagshipFooter() {
|
|
343
|
+
return `export function Footer() {
|
|
344
|
+
return (
|
|
345
|
+
<footer className="relative z-10 border-t border-[var(--color-border)] bg-[var(--color-surface)] py-8 mt-auto">
|
|
346
|
+
<div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] flex flex-col sm:flex-row items-center justify-between gap-4 text-[var(--text-xs)] text-[var(--color-muted-foreground)]">
|
|
347
|
+
<p>© {new Date().getFullYear()} Flagship Studio. All rights reserved.</p>
|
|
348
|
+
</div>
|
|
349
|
+
</footer>
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
`;
|
|
353
|
+
}
|
|
354
|
+
export function generateFlagshipHome() {
|
|
355
|
+
return `import { Reveal } from "../components/motion";
|
|
356
|
+
import { Button } from "../components/ui";
|
|
357
|
+
|
|
358
|
+
export default function HomeView() {
|
|
359
|
+
return (
|
|
360
|
+
<section className="py-24 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
|
|
361
|
+
<Reveal className="flex flex-col gap-6 max-w-2xl">
|
|
362
|
+
<h1 className="text-[var(--text-5xl)] font-bold leading-tight tracking-tight">
|
|
363
|
+
Creative Engineering & Visual Systems
|
|
364
|
+
</h1>
|
|
365
|
+
<p className="text-[var(--text-xl)] text-[var(--color-muted-foreground)] leading-relaxed">
|
|
366
|
+
Interactive web experiences with headless routing, smooth scrolling, and dynamic graphics
|
|
367
|
+
layers.
|
|
368
|
+
</p>
|
|
369
|
+
<div className="flex gap-4 pt-4">
|
|
370
|
+
<Button variant="primary" size="lg">
|
|
371
|
+
Explore Showcase
|
|
372
|
+
</Button>
|
|
373
|
+
<Button variant="outline" size="lg">
|
|
374
|
+
Architecture
|
|
375
|
+
</Button>
|
|
376
|
+
</div>
|
|
377
|
+
</Reveal>
|
|
378
|
+
</section>
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
`;
|
|
382
|
+
}
|
|
383
|
+
export function generateFlagshipShowcase() {
|
|
384
|
+
return `export default function ShowcaseView() {
|
|
385
|
+
return (
|
|
386
|
+
<section className="py-20 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
|
|
387
|
+
<h1 className="text-[var(--text-4xl)] font-bold mb-6">Creative Showcase</h1>
|
|
388
|
+
<p className="text-[var(--text-base)] text-[var(--color-muted-foreground)]">
|
|
389
|
+
Interactive experiences delivered with precision performance.
|
|
390
|
+
</p>
|
|
391
|
+
</section>
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
`;
|
|
395
|
+
}
|
|
337
396
|
//# sourceMappingURL=flagship.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flagship.js","sourceRoot":"","sources":["../../src/scaffold/flagship.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,UAAU,2BAA2B,CAAC,WAAmB;IAC7D,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,4BAA4B;YACnC,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,cAAc;YACzB,MAAM,EAAE,eAAe;SACxB;QACD,YAAY,EAAE;YACZ,wBAAwB,EAAE,QAAQ;YAClC,sBAAsB,EAAE,QAAQ;YAChC,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,QAAQ;SACjB;QACD,eAAe,EAAE;YACf,gBAAgB,EAAE,QAAQ;YAC1B,mBAAmB,EAAE,QAAQ;YAC7B,aAAa,EAAE,UAAU;YACzB,cAAc,EAAE,UAAU;YAC1B,kBAAkB,EAAE,SAAS;YAC7B,sBAAsB,EAAE,QAAQ;YAChC,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,QAAQ;SACf;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO
|
|
1
|
+
{"version":3,"file":"flagship.js","sourceRoot":"","sources":["../../src/scaffold/flagship.ts"],"names":[],"mappings":"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"}
|
package/dist/scaffold/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export interface ScaffoldOptions {
|
|
|
2
2
|
targetDir: string;
|
|
3
3
|
name: string;
|
|
4
4
|
flagship?: boolean;
|
|
5
|
-
backend?: "php" | "node";
|
|
5
|
+
backend?: "php" | "node" | "none";
|
|
6
6
|
initGit?: boolean;
|
|
7
7
|
}
|
|
8
8
|
export declare function scaffoldNewProject(options: ScaffoldOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EhF"}
|
package/dist/scaffold/index.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { atomicWrite, isSafeProjectName } from "../utils/fs.js";
|
|
2
3
|
import { initGit } from "../utils/git.js";
|
|
3
4
|
import { scaffoldAgentPolicies } from "./agents.js";
|
|
4
5
|
import { scaffoldBackend } from "./backend.js";
|
|
5
6
|
import { scaffoldDesign } from "./design.js";
|
|
6
7
|
import { scaffoldFlagshipProject } from "./flagship.js";
|
|
8
|
+
import { scaffoldLibrary } from "./library.js";
|
|
7
9
|
import { scaffoldPhases } from "./phases.js";
|
|
8
10
|
import { scaffoldRepomap } from "./repomap.js";
|
|
9
11
|
import { scaffoldStandardProject } from "./standard.js";
|
|
10
12
|
import { scaffoldTokens } from "./tokens.js";
|
|
13
|
+
import { scaffoldWorkflow } from "./workflow.js";
|
|
11
14
|
export async function scaffoldNewProject(options) {
|
|
12
|
-
const { targetDir, name, flagship = false, backend = "
|
|
13
|
-
if (backend !== "php" && backend !== "node") {
|
|
14
|
-
throw new Error(`Invalid backend '${backend}'. Expected php or node.`);
|
|
15
|
+
const { targetDir, name, flagship = false, backend = "none", initGit: shouldInitGit = true, } = options;
|
|
16
|
+
if (backend !== "php" && backend !== "node" && backend !== "none") {
|
|
17
|
+
throw new Error(`Invalid backend '${backend}'. Expected none, php, or node.`);
|
|
15
18
|
}
|
|
16
19
|
if (!isSafeProjectName(name)) {
|
|
17
20
|
throw new Error(`Invalid project name '${name}'. Use lowercase alphanumeric characters and hyphens.`);
|
|
@@ -23,9 +26,10 @@ export async function scaffoldNewProject(options) {
|
|
|
23
26
|
// 3. 10-Step Atomic Phases
|
|
24
27
|
await scaffoldPhases(targetDir);
|
|
25
28
|
// 4. Repomap & Fihrist
|
|
26
|
-
await scaffoldRepomap(targetDir, name, flagship);
|
|
29
|
+
await scaffoldRepomap(targetDir, name, flagship, backend);
|
|
27
30
|
// 5. Design Evidence Directory
|
|
28
31
|
await scaffoldDesign(targetDir, name);
|
|
32
|
+
await scaffoldWorkflow(targetDir);
|
|
29
33
|
// 6. Frontend Framework Engine
|
|
30
34
|
if (flagship) {
|
|
31
35
|
await scaffoldFlagshipProject(targetDir, name);
|
|
@@ -33,8 +37,19 @@ export async function scaffoldNewProject(options) {
|
|
|
33
37
|
else {
|
|
34
38
|
await scaffoldStandardProject(targetDir, name);
|
|
35
39
|
}
|
|
36
|
-
|
|
37
|
-
await
|
|
40
|
+
await scaffoldLibrary(targetDir);
|
|
41
|
+
await atomicWrite(path.join(targetDir, ".mozole", "project.json"), JSON.stringify({
|
|
42
|
+
version: 1,
|
|
43
|
+
name,
|
|
44
|
+
profile: flagship ? "flagship" : "standard",
|
|
45
|
+
backend,
|
|
46
|
+
library: "src/library/index.ts",
|
|
47
|
+
}, null, 2));
|
|
48
|
+
await atomicWrite(path.join(targetDir, ".gitignore"), "node_modules/\ndist/\nbuild/\n.react-router/\n.env\n.env.*\n!.env.example\n*.log\nrelease/\nrelease.zip\nreleases/\n");
|
|
49
|
+
// 7. Backend API & Security Layer (optional)
|
|
50
|
+
if (backend !== "none") {
|
|
51
|
+
await scaffoldBackend(targetDir, backend);
|
|
52
|
+
}
|
|
38
53
|
// 8. Initialize Git Repository with Clean Initial Commit
|
|
39
54
|
if (shouldInitGit) {
|
|
40
55
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/scaffold/library.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,IAAI,MAAM,CA4BvC;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEjE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { atomicWrite, exists, writeFiles } from "../utils/fs.js";
|
|
3
|
+
import { generateBespokeButton, generateBespokeInput } from "./standard.js";
|
|
4
|
+
export function generateDialog() {
|
|
5
|
+
return `import * as Primitive from "@radix-ui/react-dialog";
|
|
6
|
+
import type { ComponentProps } from "react";
|
|
7
|
+
|
|
8
|
+
export const Dialog = Primitive.Root;
|
|
9
|
+
export const DialogTrigger = Primitive.Trigger;
|
|
10
|
+
export const DialogClose = Primitive.Close;
|
|
11
|
+
export const DialogTitle = Primitive.Title;
|
|
12
|
+
export const DialogDescription = Primitive.Description;
|
|
13
|
+
|
|
14
|
+
export function DialogContent({
|
|
15
|
+
children,
|
|
16
|
+
className = "",
|
|
17
|
+
...props
|
|
18
|
+
}: ComponentProps<typeof Primitive.Content>) {
|
|
19
|
+
return (
|
|
20
|
+
<Primitive.Portal>
|
|
21
|
+
<Primitive.Overlay className="fixed inset-0 z-50 bg-[var(--color-background)]/80" />
|
|
22
|
+
<Primitive.Content
|
|
23
|
+
className={\`fixed left-1/2 top-1/2 z-50 w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2 rounded-[var(--radius-sm)] border border-[var(--color-border)] bg-[var(--color-surface)] p-6 text-[var(--color-foreground)] focus:outline-none \${className}\`}
|
|
24
|
+
{...props}
|
|
25
|
+
>
|
|
26
|
+
{children}
|
|
27
|
+
</Primitive.Content>
|
|
28
|
+
</Primitive.Portal>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
}
|
|
33
|
+
export async function scaffoldLibrary(root) {
|
|
34
|
+
await writeFiles(root, {
|
|
35
|
+
"src/components/ui/Button.tsx": generateBespokeButton(),
|
|
36
|
+
"src/components/ui/Input.tsx": generateBespokeInput(),
|
|
37
|
+
"src/components/ui/Dialog.tsx": generateDialog(),
|
|
38
|
+
"src/components/layout/Container.tsx": `import type { ComponentProps } from "react";
|
|
39
|
+
|
|
40
|
+
export function Container({ className = "", ...props }: ComponentProps<"div">) {
|
|
41
|
+
return (
|
|
42
|
+
<div
|
|
43
|
+
className={\`mx-auto w-full max-w-[var(--spacing-container-max)] px-[var(--spacing-container-gutter)] \${className}\`}
|
|
44
|
+
{...props}
|
|
45
|
+
/>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
`,
|
|
49
|
+
"src/components/features/index.ts": "export {};\n",
|
|
50
|
+
"src/components/sections/index.ts": "export {};\n",
|
|
51
|
+
"src/components/motion/index.ts": "export {};\n",
|
|
52
|
+
"src/behaviors/index.ts": "export {};\n",
|
|
53
|
+
"src/components/motion/README.md": "# Project motion\n\nOwn animation components here. Standard has no required motion runtime; Flagship uses Motion.\n",
|
|
54
|
+
"src/behaviors/README.md": "# Project behaviors\n\nOwn hooks and interaction policies here. Never import implementations from sibling projects.\n",
|
|
55
|
+
"docs/library.md": "# Project library\n\nImport UI from src/components/ui, layouts from src/components/layout, and the project library from src/library. Every implementation and token belongs to this project. Prototype workspaces share npm dependencies only.\n\nCompose Dialog with DialogTrigger, DialogContent, DialogTitle, DialogDescription and DialogClose. Provide an accessible title and a visible close control; use aria-describedby={undefined} when intentionally omitting a description.\n\nEach independent primitive must have its own named file; related Dialog parts may share Dialog.tsx. Add reusable feature components in src/components/features and independent sections in src/components/sections. Pages compose sections. Adding a component requires an explicit export in its local index.ts. Keep backend access in project-owned services and pass data/actions into visual components. Keep primitives independent of routes and backend. Follow docs/workflow.md and docs/toolkit.md; design direction comes from the conversation. Do not create a /ui gallery unless requested.\n",
|
|
56
|
+
});
|
|
57
|
+
const indexes = {
|
|
58
|
+
"src/components/ui/index.ts": [
|
|
59
|
+
'export * from "./Button";',
|
|
60
|
+
'export * from "./Input";',
|
|
61
|
+
'export * from "./Dialog";',
|
|
62
|
+
],
|
|
63
|
+
"src/components/layout/index.ts": ['export { Container } from "./Container";'],
|
|
64
|
+
"src/library/index.ts": [
|
|
65
|
+
'export * from "../components/ui";',
|
|
66
|
+
'export * from "../components/layout";',
|
|
67
|
+
'export * from "../components/features";',
|
|
68
|
+
'export * from "../components/sections";',
|
|
69
|
+
'export * from "../components/motion";',
|
|
70
|
+
'export * from "../behaviors";',
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
for (const component of ["Header", "Footer"]) {
|
|
74
|
+
if (await exists(path.join(root, `src/components/layout/${component}.tsx`))) {
|
|
75
|
+
indexes["src/components/layout/index.ts"].push(`export * from "./${component}";`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const [file, exports] of Object.entries(indexes)) {
|
|
79
|
+
const target = path.join(root, file);
|
|
80
|
+
// Existing custom barrels may expose different symbols; adoption reports them for review.
|
|
81
|
+
if (!(await exists(target)))
|
|
82
|
+
await atomicWrite(target, `${exports.join("\n")}\n`);
|
|
83
|
+
}
|
|
84
|
+
const manifest = path.join(root, ".mozole", "library.json");
|
|
85
|
+
if (!(await exists(manifest))) {
|
|
86
|
+
await atomicWrite(manifest, JSON.stringify({
|
|
87
|
+
ownership: "project",
|
|
88
|
+
entry: "src/library/index.ts",
|
|
89
|
+
ui: "src/components/ui",
|
|
90
|
+
layout: "src/components/layout",
|
|
91
|
+
features: "src/components/features",
|
|
92
|
+
sections: "src/components/sections",
|
|
93
|
+
motion: "src/components/motion",
|
|
94
|
+
behavior: "src/behaviors",
|
|
95
|
+
}, null, 2));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/scaffold/library.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,UAAU,CAAC,IAAI,EAAE;QACrB,8BAA8B,EAAE,qBAAqB,EAAE;QACvD,6BAA6B,EAAE,oBAAoB,EAAE;QACrD,8BAA8B,EAAE,cAAc,EAAE;QAChD,qCAAqC,EAAE;;;;;;;;;;CAU1C;QACG,kCAAkC,EAAE,cAAc;QAClD,kCAAkC,EAAE,cAAc;QAClD,gCAAgC,EAAE,cAAc;QAChD,wBAAwB,EAAE,cAAc;QACxC,iCAAiC,EAC/B,qHAAqH;QACvH,yBAAyB,EACvB,uHAAuH;QACzH,iBAAiB,EACf,yiCAAyiC;KAC5iC,CAAC,CAAC;IACH,MAAM,OAAO,GAA6B;QACxC,4BAA4B,EAAE;YAC5B,2BAA2B;YAC3B,0BAA0B;YAC1B,2BAA2B;SAC5B;QACD,gCAAgC,EAAE,CAAC,0CAA0C,CAAC;QAC9E,sBAAsB,EAAE;YACtB,mCAAmC;YACnC,uCAAuC;YACvC,yCAAyC;YACzC,yCAAyC;YACzC,uCAAuC;YACvC,+BAA+B;SAChC;KACF,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7C,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC;YAC5E,OAAO,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,oBAAoB,SAAS,IAAI,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,0FAA0F;QAC1F,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,WAAW,CACf,QAAQ,EACR,IAAI,CAAC,SAAS,CACZ;YACE,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,sBAAsB;YAC7B,EAAE,EAAE,mBAAmB;YACvB,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,eAAe;SAC1B,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,EAAE,eAAe,EA4InC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,YAAY,SAAO,GAAG,MAAM,CA0BlE;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
|
package/dist/scaffold/phases.js
CHANGED
|
@@ -16,12 +16,12 @@ export const PHASES = [
|
|
|
16
16
|
{
|
|
17
17
|
id: "01",
|
|
18
18
|
name: "Core Architecture & Layout",
|
|
19
|
-
description: "
|
|
19
|
+
description: "Technical root shell and module boundaries before visual composition.",
|
|
20
20
|
checklist: [
|
|
21
21
|
"Root layout established with single <main> landmark",
|
|
22
22
|
"Skip-to-content accessible link implemented",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
23
|
+
"Project-local UI, feature, section, layout, motion and behavior boundaries documented",
|
|
24
|
+
"Starter layout is not treated as approved design; no unrequested visual composition",
|
|
25
25
|
"Zero viewport overflow at 320px minimum mobile width",
|
|
26
26
|
],
|
|
27
27
|
},
|
|
@@ -30,7 +30,9 @@ export const PHASES = [
|
|
|
30
30
|
name: "Design Tokens & Primitive Components",
|
|
31
31
|
description: "Bespoke Radix UI primitives, typography hierarchies, and token integration.",
|
|
32
32
|
checklist: [
|
|
33
|
-
"
|
|
33
|
+
"Each independent primitive in its own src/components/ui/ file; related primitive parts may stay together",
|
|
34
|
+
"Reusable modules exported through local barrels and src/library/index.ts",
|
|
35
|
+
"Settled conversation decisions recorded separately from assumptions in docs/decisions.md",
|
|
34
36
|
"Zero hardcoded color hex/rgb literals (enforced by PostCSS AST audit)",
|
|
35
37
|
"Semantic typography applied via var(--font-display) and var(--font-body)",
|
|
36
38
|
"Interactive targets satisfy minimum 24px/44px touch area",
|
|
@@ -40,9 +42,12 @@ export const PHASES = [
|
|
|
40
42
|
{
|
|
41
43
|
id: "03",
|
|
42
44
|
name: "Primary Routes & Pages",
|
|
43
|
-
description: "
|
|
45
|
+
description: "Compose feature components, then sections, then pages as authorized by the user.",
|
|
44
46
|
checklist: [
|
|
45
|
-
"
|
|
47
|
+
"Only requested pages declared with unique routes",
|
|
48
|
+
"Feature components compose primitives; separate section files compose features",
|
|
49
|
+
"Pages compose sections; visual modules receive data/actions via props",
|
|
50
|
+
"No /ui gallery or additional design stage created without user direction",
|
|
46
51
|
"Single <h1> per page verified across all views",
|
|
47
52
|
"Semantic HTML tags used (section, article, nav, aside)",
|
|
48
53
|
"All images include descriptive alt text or explicit decorative alt=''",
|
|
@@ -75,14 +80,14 @@ export const PHASES = [
|
|
|
75
80
|
},
|
|
76
81
|
{
|
|
77
82
|
id: "06",
|
|
78
|
-
name: "
|
|
79
|
-
description: "
|
|
83
|
+
name: "Integrations & Security",
|
|
84
|
+
description: "Form submission handling, anti-spam honeypot, security headers, and optional API endpoints.",
|
|
80
85
|
checklist: [
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
+
"Form submissions validated and protected against spam (honeypot or rate limiting)",
|
|
87
|
+
"Security headers and CORS origins verified",
|
|
88
|
+
"Input sanitization active on all interactive input fields",
|
|
89
|
+
"Backend API endpoints (if applicable) or client form handlers respond cleanly",
|
|
90
|
+
"Sensitive secrets and environment variables protected from client bundle leakage",
|
|
86
91
|
],
|
|
87
92
|
},
|
|
88
93
|
{
|
|
@@ -137,7 +142,7 @@ export const PHASES = [
|
|
|
137
142
|
export function generatePhasesStatusMd(currentPhase = "00") {
|
|
138
143
|
let content = `# Project Development Phases & Status
|
|
139
144
|
|
|
140
|
-
> **Discipline Notice:**
|
|
145
|
+
> **Discipline Notice:** Engineering progress is tracked through phases 00 to 10. Follow docs/workflow.md: primitives, feature components, sections, then pages, only within conversation-authorized scope. Phase 01 establishes technical boundaries, not a finished visual layout. Run \`mozole phase status\` to inspect progress, and \`mozole phase next\` to advance after applicable criteria and authorized checks. It does not run verification itself and may create a Git commit. If tests are prohibited, report them as not run; do not mark them passed.
|
|
141
146
|
|
|
142
147
|
**Current Phase:** Phase ${currentPhase}
|
|
143
148
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAS7C,MAAM,CAAC,MAAM,MAAM,GAAsB;IACvC;QACE,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,oCAAoC;QAC1C,WAAW,EACT,mFAAmF;QACrF,SAAS,EAAE;YACT,mDAAmD;YACnD,2EAA2E;YAC3E,+CAA+C;YAC/C,2DAA2D;YAC3D,8CAA8C;SAC/C;KACF;IACD;QACE,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,4BAA4B;QAClC,WAAW,
|
|
1
|
+
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare function generateRepomapArchitecture(projectName: string, isFlagship: boolean): string;
|
|
1
|
+
export declare function generateRepomapArchitecture(projectName: string, isFlagship: boolean, backend?: "none" | "php" | "node"): string;
|
|
2
2
|
export declare function generateRepomapComponents(): string;
|
|
3
|
-
export declare function generateRepomapRoutes(): string;
|
|
3
|
+
export declare function generateRepomapRoutes(isFlagship?: boolean): string;
|
|
4
4
|
export declare function generateRepomapTokens(): string;
|
|
5
|
-
export declare function scaffoldRepomap(projectRoot: string, projectName: string, isFlagship?: boolean): Promise<void>;
|
|
5
|
+
export declare function scaffoldRepomap(projectRoot: string, projectName: string, isFlagship?: boolean, backend?: "none" | "php" | "node"): Promise<void>;
|
|
6
6
|
//# sourceMappingURL=repomap.d.ts.map
|