create-better-fullstack 1.6.0 → 1.6.1
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/dist/{addons-setup--oB72n29.mjs → addons-setup-Cgup_RHm.mjs} +126 -65
- package/dist/addons-setup-Cx9DU_sr.mjs +5 -0
- package/dist/{bts-config-snHxP_EH.mjs → bts-config-B_rZ4_sj.mjs} +21 -73
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +88 -9
- package/dist/index.mjs +2538 -1200
- package/dist/{mcp-Bx_Esljk.mjs → mcp-CuEEG8e5.mjs} +1 -1
- package/dist/mcp-entry.mjs +88 -21
- package/dist/virtual.d.mts +1 -1
- package/package.json +24 -9
- package/dist/addons-setup-By7Kqjss.mjs +0 -5
package/dist/mcp-entry.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { i as getLatestCLIVersion, r as writeBtsConfig, t as readBtsConfig } from "./bts-config-
|
|
2
|
+
import { i as getLatestCLIVersion, r as writeBtsConfig, t as readBtsConfig } from "./bts-config-B_rZ4_sj.mjs";
|
|
3
3
|
import z from "zod";
|
|
4
|
-
import { AISchema, APISchema, AddonsSchema, AnalyticsSchema, AnimationSchema, AstroIntegrationSchema, AuthSchema, BackendSchema, CMSSchema, CSSFrameworkSchema, CachingSchema, DatabaseSchema, DatabaseSetupSchema, EcosystemSchema, EffectSchema, EmailSchema, ExamplesSchema, FeatureFlagsSchema, FileStorageSchema, FileUploadSchema, FormsSchema, FrontendSchema, GoApiSchema, GoCliSchema, GoLoggingSchema, GoOrmSchema, GoWebFrameworkSchema, I18nSchema, JobQueueSchema, LoggingSchema, ORMSchema, ObservabilitySchema, PackageManagerSchema, PaymentsSchema, PythonAiSchema, PythonAuthSchema, PythonGraphqlSchema, PythonOrmSchema, PythonQualitySchema, PythonTaskQueueSchema, PythonValidationSchema, PythonWebFrameworkSchema, RealtimeSchema, RuntimeSchema, RustApiSchema, RustCachingSchema, RustCliSchema, RustErrorHandlingSchema, RustFrontendSchema, RustLibrariesSchema, RustLoggingSchema, RustOrmSchema, RustWebFrameworkSchema, SearchSchema, ServerDeploySchema, StateManagementSchema, TestingSchema, UILibrarySchema, ValidationSchema, WebDeploySchema, analyzeStackCompatibility } from "@better-fullstack/types";
|
|
4
|
+
import { AISchema, APISchema, AddonsSchema, AnalyticsSchema, AnimationSchema, AstroIntegrationSchema, AuthSchema, BackendSchema, CMSSchema, CSSFrameworkSchema, CachingSchema, DatabaseSchema, DatabaseSetupSchema, EcosystemSchema, EffectSchema, EmailSchema, ExamplesSchema, FeatureFlagsSchema, FileStorageSchema, FileUploadSchema, FormsSchema, FrontendSchema, GoApiSchema, GoAuthSchema, GoCliSchema, GoLoggingSchema, GoOrmSchema, GoWebFrameworkSchema, I18nSchema, JavaAuthSchema, JavaBuildToolSchema, JavaLibrariesSchema, JavaOrmSchema, JavaTestingLibrariesSchema, JavaWebFrameworkSchema, JobQueueSchema, LoggingSchema, ORMSchema, ObservabilitySchema, PackageManagerSchema, PaymentsSchema, PythonAiSchema, PythonAuthSchema, PythonGraphqlSchema, PythonOrmSchema, PythonQualitySchema, PythonTaskQueueSchema, PythonValidationSchema, PythonWebFrameworkSchema, RealtimeSchema, RuntimeSchema, RustApiSchema, RustAuthSchema, RustCachingSchema, RustCliSchema, RustErrorHandlingSchema, RustFrontendSchema, RustLibrariesSchema, RustLoggingSchema, RustOrmSchema, RustWebFrameworkSchema, SearchSchema, ServerDeploySchema, StateManagementSchema, TestingSchema, UILibrarySchema, ValidationSchema, WebDeploySchema, analyzeStackCompatibility } from "@better-fullstack/types";
|
|
5
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
6
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
7
|
|
|
8
8
|
//#region src/mcp.ts
|
|
9
|
-
const INSTRUCTIONS = `Better-Fullstack scaffolds fullstack projects across TypeScript, Rust, Go, and
|
|
9
|
+
const INSTRUCTIONS = `Better-Fullstack scaffolds fullstack projects across TypeScript, Rust, Go, Python, and Java ecosystems with 270+ configurable options.
|
|
10
10
|
|
|
11
11
|
RECOMMENDED WORKFLOW:
|
|
12
12
|
1. Call bfs_get_guidance to understand field semantics, required fields, and workflow rules.
|
|
@@ -21,10 +21,10 @@ For existing projects:
|
|
|
21
21
|
|
|
22
22
|
CRITICAL RULES:
|
|
23
23
|
- Dependency installation is ALWAYS skipped in MCP mode (timeout risk). After scaffolding, tell the user to run install manually.
|
|
24
|
-
- "frontend"
|
|
24
|
+
- Array fields: "frontend", "addons", "examples", "aiDocs", "rustLibraries", "pythonAi", "javaLibraries", and "javaTestingLibraries". Most other option fields are strings.
|
|
25
25
|
- "none" means "skip this feature entirely", not "use the default".
|
|
26
26
|
- Always specify "ecosystem" first — it determines which other fields are relevant.
|
|
27
|
-
- TypeScript-specific fields (frontend, backend, orm, etc.) are IGNORED for rust/python/go ecosystems.
|
|
27
|
+
- TypeScript-specific fields (frontend, backend, orm, etc.) are IGNORED for rust/python/go/java ecosystems.
|
|
28
28
|
- The compatibility engine auto-adjusts invalid combinations — always call bfs_check_compatibility first to see adjustments.`;
|
|
29
29
|
function getGuidance() {
|
|
30
30
|
return {
|
|
@@ -40,19 +40,21 @@ function getGuidance() {
|
|
|
40
40
|
typescript: "Full-featured: frontend + backend + database + ORM + auth + payments + 20+ feature categories.",
|
|
41
41
|
rust: "Backend/CLI: web framework (axum/actix-web), ORM (sea-orm/sqlx), gRPC, GraphQL, CLI tools.",
|
|
42
42
|
python: "Backend/AI: web framework (fastapi/django), ORM (sqlalchemy/sqlmodel), AI/ML integrations, task queues.",
|
|
43
|
-
go: "Backend/CLI: web framework (gin/echo), ORM (gorm/sqlc), gRPC, CLI tools, logging."
|
|
43
|
+
go: "Backend/CLI: web framework (gin/echo), ORM (gorm/sqlc), gRPC, CLI tools, logging.",
|
|
44
|
+
java: "Backend/API: Spring Boot with Maven or Gradle Wrapper, optional Spring Data JPA, Spring Security, app libraries, and Java testing libraries."
|
|
44
45
|
},
|
|
45
46
|
fieldRules: {
|
|
46
47
|
projectName: "kebab-case directory name. Required for bfs_create_project.",
|
|
47
48
|
ecosystem: "Must be set first. Determines which other fields are relevant.",
|
|
48
49
|
frontend: "ARRAY of strings. TypeScript only. Supports multiple frontends in one monorepo. Use [] for API-only.",
|
|
50
|
+
arrayFields: "Use arrays for frontend, addons, examples, aiDocs, rustLibraries, pythonAi, javaLibraries, and javaTestingLibraries. Use [] for \"none\" on multi-select fields.",
|
|
49
51
|
backend: "String. \"self\" means fullstack mode (Next.js/TanStack Start/Nuxt/Astro API routes). \"none\" for frontend-only.",
|
|
50
52
|
runtime: "\"bun\" or \"node\". Must be \"none\" when backend is \"self\" or \"convex\".",
|
|
51
53
|
addons: "ARRAY of strings. Monorepo tools, code quality, desktop (tauri), browser extensions (wxt), etc."
|
|
52
54
|
},
|
|
53
55
|
ambiguityRules: [
|
|
54
56
|
"If the user request leaves major stack choices unspecified, ASK the user before proceeding. Do not guess.",
|
|
55
|
-
"Do not infer addons, examples, or optional features the user did not mention. Default to \"none\".",
|
|
57
|
+
"Do not infer addons, examples, or optional features the user did not mention. Default strings to \"none\" and multi-select arrays to [].",
|
|
56
58
|
"When the user says 'fullstack Next.js', use backend='self', frontend=['next'], runtime='none'.",
|
|
57
59
|
"When the user says 'React + Hono', use frontend=['tanstack-router'] (or ask which React framework), backend='hono'."
|
|
58
60
|
],
|
|
@@ -118,6 +120,7 @@ const SCHEMA_MAP = {
|
|
|
118
120
|
rustLogging: RustLoggingSchema,
|
|
119
121
|
rustErrorHandling: RustErrorHandlingSchema,
|
|
120
122
|
rustCaching: RustCachingSchema,
|
|
123
|
+
rustAuth: RustAuthSchema,
|
|
121
124
|
pythonWebFramework: PythonWebFrameworkSchema,
|
|
122
125
|
pythonOrm: PythonOrmSchema,
|
|
123
126
|
pythonValidation: PythonValidationSchema,
|
|
@@ -130,7 +133,14 @@ const SCHEMA_MAP = {
|
|
|
130
133
|
goOrm: GoOrmSchema,
|
|
131
134
|
goApi: GoApiSchema,
|
|
132
135
|
goCli: GoCliSchema,
|
|
133
|
-
goLogging: GoLoggingSchema
|
|
136
|
+
goLogging: GoLoggingSchema,
|
|
137
|
+
goAuth: GoAuthSchema,
|
|
138
|
+
javaWebFramework: JavaWebFrameworkSchema,
|
|
139
|
+
javaBuildTool: JavaBuildToolSchema,
|
|
140
|
+
javaOrm: JavaOrmSchema,
|
|
141
|
+
javaAuth: JavaAuthSchema,
|
|
142
|
+
javaLibraries: JavaLibrariesSchema,
|
|
143
|
+
javaTestingLibraries: JavaTestingLibrariesSchema
|
|
134
144
|
};
|
|
135
145
|
const ECOSYSTEM_CATEGORIES = {
|
|
136
146
|
typescript: [
|
|
@@ -175,7 +185,8 @@ const ECOSYSTEM_CATEGORIES = {
|
|
|
175
185
|
"rustLibraries",
|
|
176
186
|
"rustLogging",
|
|
177
187
|
"rustErrorHandling",
|
|
178
|
-
"rustCaching"
|
|
188
|
+
"rustCaching",
|
|
189
|
+
"rustAuth"
|
|
179
190
|
],
|
|
180
191
|
python: [
|
|
181
192
|
"pythonWebFramework",
|
|
@@ -192,7 +203,16 @@ const ECOSYSTEM_CATEGORIES = {
|
|
|
192
203
|
"goOrm",
|
|
193
204
|
"goApi",
|
|
194
205
|
"goCli",
|
|
195
|
-
"goLogging"
|
|
206
|
+
"goLogging",
|
|
207
|
+
"goAuth"
|
|
208
|
+
],
|
|
209
|
+
java: [
|
|
210
|
+
"javaWebFramework",
|
|
211
|
+
"javaBuildTool",
|
|
212
|
+
"javaOrm",
|
|
213
|
+
"javaAuth",
|
|
214
|
+
"javaLibraries",
|
|
215
|
+
"javaTestingLibraries"
|
|
196
216
|
],
|
|
197
217
|
shared: [
|
|
198
218
|
"ecosystem",
|
|
@@ -225,11 +245,12 @@ function getSchemaOptions(category, ecosystem) {
|
|
|
225
245
|
}
|
|
226
246
|
return result;
|
|
227
247
|
}
|
|
228
|
-
function getInstallCommand(ecosystem, projectName, packageManager) {
|
|
248
|
+
function getInstallCommand(ecosystem, projectName, packageManager, javaBuildTool) {
|
|
229
249
|
switch (ecosystem) {
|
|
230
250
|
case "rust": return `cd ${projectName} && cargo build`;
|
|
231
251
|
case "python": return `cd ${projectName} && uv sync`;
|
|
232
252
|
case "go": return `cd ${projectName} && go mod tidy`;
|
|
253
|
+
case "java": return javaBuildTool === "gradle" ? `cd ${projectName} && ./gradlew test && ./gradlew bootRun` : `cd ${projectName} && ./mvnw test && ./mvnw spring-boot:run`;
|
|
233
254
|
default: return `cd ${projectName} && ${packageManager ?? "bun"} install`;
|
|
234
255
|
}
|
|
235
256
|
}
|
|
@@ -318,6 +339,7 @@ function buildProjectConfig(input, overrides) {
|
|
|
318
339
|
rustLogging: input.rustLogging ?? "none",
|
|
319
340
|
rustErrorHandling: input.rustErrorHandling ?? "none",
|
|
320
341
|
rustCaching: input.rustCaching ?? "none",
|
|
342
|
+
rustAuth: input.rustAuth ?? "none",
|
|
321
343
|
pythonWebFramework: input.pythonWebFramework ?? "none",
|
|
322
344
|
pythonOrm: input.pythonOrm ?? "none",
|
|
323
345
|
pythonValidation: input.pythonValidation ?? "none",
|
|
@@ -330,7 +352,14 @@ function buildProjectConfig(input, overrides) {
|
|
|
330
352
|
goOrm: input.goOrm ?? "none",
|
|
331
353
|
goApi: input.goApi ?? "none",
|
|
332
354
|
goCli: input.goCli ?? "none",
|
|
333
|
-
goLogging: input.goLogging ?? "none"
|
|
355
|
+
goLogging: input.goLogging ?? "none",
|
|
356
|
+
goAuth: input.goAuth ?? "none",
|
|
357
|
+
javaWebFramework: input.javaWebFramework ?? "spring-boot",
|
|
358
|
+
javaBuildTool: input.javaBuildTool ?? "maven",
|
|
359
|
+
javaOrm: input.javaOrm ?? "none",
|
|
360
|
+
javaAuth: input.javaAuth ?? "none",
|
|
361
|
+
javaLibraries: input.javaLibraries ?? [],
|
|
362
|
+
javaTestingLibraries: input.javaTestingLibraries ?? ["junit5"]
|
|
334
363
|
};
|
|
335
364
|
}
|
|
336
365
|
function sanitizePath(input) {
|
|
@@ -386,6 +415,13 @@ function buildCompatibilityInput(input) {
|
|
|
386
415
|
animation: input.animation ?? "none",
|
|
387
416
|
cssFramework: input.cssFramework ?? "tailwind",
|
|
388
417
|
uiLibrary: input.uiLibrary ?? "none",
|
|
418
|
+
shadcnBase: input.shadcnBase ?? "radix",
|
|
419
|
+
shadcnStyle: input.shadcnStyle ?? "nova",
|
|
420
|
+
shadcnIconLibrary: input.shadcnIconLibrary ?? "lucide",
|
|
421
|
+
shadcnColorTheme: input.shadcnColorTheme ?? "neutral",
|
|
422
|
+
shadcnBaseColor: input.shadcnBaseColor ?? "neutral",
|
|
423
|
+
shadcnFont: input.shadcnFont ?? "inter",
|
|
424
|
+
shadcnRadius: input.shadcnRadius ?? "default",
|
|
389
425
|
cms: input.cms ?? "none",
|
|
390
426
|
search: input.search ?? "none",
|
|
391
427
|
fileStorage: input.fileStorage ?? "none",
|
|
@@ -408,14 +444,15 @@ function buildCompatibilityInput(input) {
|
|
|
408
444
|
rustOrm: input.rustOrm ?? "none",
|
|
409
445
|
rustApi: input.rustApi ?? "none",
|
|
410
446
|
rustCli: input.rustCli ?? "none",
|
|
411
|
-
rustLibraries:
|
|
447
|
+
rustLibraries: input.rustLibraries ?? [],
|
|
412
448
|
rustLogging: input.rustLogging ?? "none",
|
|
413
449
|
rustErrorHandling: input.rustErrorHandling ?? "none",
|
|
414
450
|
rustCaching: input.rustCaching ?? "none",
|
|
451
|
+
rustAuth: input.rustAuth ?? "none",
|
|
415
452
|
pythonWebFramework: input.pythonWebFramework ?? "none",
|
|
416
453
|
pythonOrm: input.pythonOrm ?? "none",
|
|
417
454
|
pythonValidation: input.pythonValidation ?? "none",
|
|
418
|
-
pythonAi:
|
|
455
|
+
pythonAi: input.pythonAi ?? [],
|
|
419
456
|
pythonAuth: input.pythonAuth ?? "none",
|
|
420
457
|
pythonTaskQueue: input.pythonTaskQueue ?? "none",
|
|
421
458
|
pythonGraphql: input.pythonGraphql ?? "none",
|
|
@@ -424,7 +461,14 @@ function buildCompatibilityInput(input) {
|
|
|
424
461
|
goOrm: input.goOrm ?? "none",
|
|
425
462
|
goApi: input.goApi ?? "none",
|
|
426
463
|
goCli: input.goCli ?? "none",
|
|
427
|
-
goLogging: input.goLogging ?? "none"
|
|
464
|
+
goLogging: input.goLogging ?? "none",
|
|
465
|
+
goAuth: input.goAuth ?? "none",
|
|
466
|
+
javaWebFramework: input.javaWebFramework ?? "spring-boot",
|
|
467
|
+
javaBuildTool: input.javaBuildTool ?? "maven",
|
|
468
|
+
javaOrm: input.javaOrm ?? "none",
|
|
469
|
+
javaAuth: input.javaAuth ?? "none",
|
|
470
|
+
javaLibraries: input.javaLibraries ?? [],
|
|
471
|
+
javaTestingLibraries: input.javaTestingLibraries ?? ["junit5"]
|
|
428
472
|
};
|
|
429
473
|
}
|
|
430
474
|
function summarizeTree(tree) {
|
|
@@ -476,7 +520,7 @@ const COMPATIBILITY_RULES_MD = `# Better-Fullstack Compatibility Rules
|
|
|
476
520
|
- Polar requires better-auth and a web frontend.
|
|
477
521
|
|
|
478
522
|
## Ecosystem Isolation
|
|
479
|
-
- Rust, Python, Go ecosystems are independent — TypeScript fields are ignored.
|
|
523
|
+
- Rust, Python, Go, and Java ecosystems are independent — TypeScript fields are ignored.
|
|
480
524
|
- Each ecosystem generates a standalone project with its own build system.
|
|
481
525
|
`;
|
|
482
526
|
const GETTING_STARTED_MD = `# Getting Started with Better-Fullstack MCP
|
|
@@ -516,6 +560,14 @@ const GETTING_STARTED_MD = `# Getting Started with Better-Fullstack MCP
|
|
|
516
560
|
- goOrm: "gorm"
|
|
517
561
|
2. Tell the user to run: cd my-go-app && go mod tidy && go run cmd/server/main.go
|
|
518
562
|
|
|
563
|
+
## Quick Start — Java Project
|
|
564
|
+
1. Call bfs_create_project with:
|
|
565
|
+
- projectName: "my-java-app"
|
|
566
|
+
- ecosystem: "java"
|
|
567
|
+
- javaWebFramework: "spring-boot"
|
|
568
|
+
- javaBuildTool: "maven"
|
|
569
|
+
2. Tell the user to run: cd my-java-app && ./mvnw test && ./mvnw spring-boot:run
|
|
570
|
+
|
|
519
571
|
## Adding Features to Existing Projects
|
|
520
572
|
1. Call bfs_add_feature with projectDir pointing to the project root.
|
|
521
573
|
2. Provide addons array with features to add (e.g., ["biome", "turborepo"]).
|
|
@@ -557,7 +609,13 @@ async function startMcpServer() {
|
|
|
557
609
|
payments: z.string().optional().describe("Payments provider"),
|
|
558
610
|
uiLibrary: z.string().optional().describe("UI component library"),
|
|
559
611
|
cssFramework: z.string().optional().describe("CSS framework"),
|
|
560
|
-
addons: z.array(z.string()).optional().describe("Addon list")
|
|
612
|
+
addons: z.array(z.string()).optional().describe("Addon list"),
|
|
613
|
+
javaWebFramework: JavaWebFrameworkSchema.optional().describe("Java web framework"),
|
|
614
|
+
javaBuildTool: JavaBuildToolSchema.optional().describe("Java build tool"),
|
|
615
|
+
javaOrm: JavaOrmSchema.optional().describe("Java ORM"),
|
|
616
|
+
javaAuth: JavaAuthSchema.optional().describe("Java authentication library"),
|
|
617
|
+
javaLibraries: z.array(JavaLibrariesSchema).optional().describe("Java application libraries"),
|
|
618
|
+
javaTestingLibraries: z.array(JavaTestingLibrariesSchema).optional().describe("Java testing libraries")
|
|
561
619
|
}, async (input) => {
|
|
562
620
|
try {
|
|
563
621
|
const filtered = filterCompatibilityResult(analyzeStackCompatibility(buildCompatibilityInput(input)), input.ecosystem);
|
|
@@ -620,6 +678,7 @@ async function startMcpServer() {
|
|
|
620
678
|
rustLogging: RustLoggingSchema.optional().describe("Rust logging library"),
|
|
621
679
|
rustErrorHandling: RustErrorHandlingSchema.optional().describe("Rust error handling library"),
|
|
622
680
|
rustCaching: RustCachingSchema.optional().describe("Rust caching library"),
|
|
681
|
+
rustAuth: RustAuthSchema.optional().describe("Rust authentication library"),
|
|
623
682
|
pythonWebFramework: PythonWebFrameworkSchema.optional().describe("Python web framework"),
|
|
624
683
|
pythonOrm: PythonOrmSchema.optional().describe("Python ORM"),
|
|
625
684
|
pythonValidation: PythonValidationSchema.optional().describe("Python validation"),
|
|
@@ -631,7 +690,14 @@ async function startMcpServer() {
|
|
|
631
690
|
goOrm: GoOrmSchema.optional().describe("Go ORM"),
|
|
632
691
|
goApi: GoApiSchema.optional().describe("Go API layer"),
|
|
633
692
|
goCli: GoCliSchema.optional().describe("Go CLI framework"),
|
|
634
|
-
goLogging: GoLoggingSchema.optional().describe("Go logging library")
|
|
693
|
+
goLogging: GoLoggingSchema.optional().describe("Go logging library"),
|
|
694
|
+
goAuth: GoAuthSchema.optional().describe("Go authentication library"),
|
|
695
|
+
javaWebFramework: JavaWebFrameworkSchema.optional().describe("Java web framework"),
|
|
696
|
+
javaBuildTool: JavaBuildToolSchema.optional().describe("Java build tool"),
|
|
697
|
+
javaOrm: JavaOrmSchema.optional().describe("Java ORM"),
|
|
698
|
+
javaAuth: JavaAuthSchema.optional().describe("Java authentication library"),
|
|
699
|
+
javaLibraries: z.array(JavaLibrariesSchema).optional().describe("Java application libraries"),
|
|
700
|
+
javaTestingLibraries: z.array(JavaTestingLibrariesSchema).optional().describe("Java testing libraries")
|
|
635
701
|
};
|
|
636
702
|
server.tool("bfs_plan_project", "Dry-run: generates a project in-memory and returns the file tree WITHOUT writing to disk. Use this to preview what would be created.", planCreateSchema, async (input) => {
|
|
637
703
|
try {
|
|
@@ -700,10 +766,10 @@ async function startMcpServer() {
|
|
|
700
766
|
await writeBtsConfig(config);
|
|
701
767
|
let addonWarnings = [];
|
|
702
768
|
if (config.addons.length > 0 && config.addons[0] !== "none") {
|
|
703
|
-
const { setupAddons } = await import("./addons-setup-
|
|
769
|
+
const { setupAddons } = await import("./addons-setup-Cx9DU_sr.mjs");
|
|
704
770
|
addonWarnings = await setupAddons(config);
|
|
705
771
|
}
|
|
706
|
-
const installCmd = getInstallCommand(input.ecosystem ?? "typescript", projectName, input.packageManager);
|
|
772
|
+
const installCmd = getInstallCommand(input.ecosystem ?? "typescript", projectName, input.packageManager, input.javaBuildTool);
|
|
707
773
|
return { content: [{
|
|
708
774
|
type: "text",
|
|
709
775
|
text: JSON.stringify({
|
|
@@ -801,7 +867,8 @@ async function startMcpServer() {
|
|
|
801
867
|
packageManager: input.packageManager
|
|
802
868
|
});
|
|
803
869
|
if (result?.success) {
|
|
804
|
-
const
|
|
870
|
+
const existingConfig = await readBtsConfig(safePath);
|
|
871
|
+
const installCmd = getInstallCommand(existingConfig?.ecosystem ?? "typescript", safePath.split("/").pop() ?? "project", input.packageManager, existingConfig?.javaBuildTool);
|
|
805
872
|
return { content: [{
|
|
806
873
|
type: "text",
|
|
807
874
|
text: JSON.stringify({
|
package/dist/virtual.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { EMBEDDED_TEMPLATES, GeneratorOptions, GeneratorResult, TEMPLATE_COUNT, VirtualDirectory, VirtualFile, VirtualFileSystem, VirtualFileTree, VirtualNode, generateVirtualProject } from "@better-fullstack/template-generator";
|
|
3
2
|
import { API, Addons, Auth, Backend, Database, DatabaseSetup, Examples, Frontend, ORM, PackageManager, Payments, ProjectConfig, Runtime, ServerDeploy, WebDeploy } from "@better-fullstack/types";
|
|
3
|
+
import { EMBEDDED_TEMPLATES, GeneratorOptions, GeneratorResult, TEMPLATE_COUNT, VirtualDirectory, VirtualFile, VirtualFileSystem, VirtualFileTree, VirtualNode, generateVirtualProject } from "@better-fullstack/template-generator";
|
|
4
4
|
export { type API, type Addons, type Auth, type Backend, type Database, type DatabaseSetup, EMBEDDED_TEMPLATES, type Examples, type Frontend, type GeneratorOptions, type GeneratorResult, type ORM, type PackageManager, type Payments, type ProjectConfig, type Runtime, type ServerDeploy, TEMPLATE_COUNT, type VirtualDirectory, type VirtualFile, VirtualFileSystem, type VirtualFileTree, type VirtualNode, type WebDeploy, generateVirtualProject };
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-better-fullstack",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "Scaffold production-ready fullstack apps in seconds. Pick your stack from
|
|
3
|
+
"version": "1.6.1",
|
|
4
|
+
"description": "Scaffold production-ready fullstack apps in seconds. Pick your stack from 340+ options — the CLI wires everything together.",
|
|
5
5
|
"keywords": [
|
|
6
|
+
"algolia",
|
|
6
7
|
"angular",
|
|
7
8
|
"astro",
|
|
8
9
|
"authentication",
|
|
@@ -16,27 +17,38 @@
|
|
|
16
17
|
"create-app",
|
|
17
18
|
"desktop",
|
|
18
19
|
"developer-tools",
|
|
20
|
+
"diesel",
|
|
19
21
|
"docker",
|
|
20
22
|
"drizzle",
|
|
21
23
|
"elysia",
|
|
24
|
+
"ent",
|
|
22
25
|
"expo",
|
|
23
26
|
"fastapi",
|
|
27
|
+
"fiber",
|
|
28
|
+
"flask",
|
|
24
29
|
"fullstack",
|
|
25
30
|
"go",
|
|
26
31
|
"golang",
|
|
32
|
+
"graphql-yoga",
|
|
27
33
|
"hono",
|
|
34
|
+
"i18next",
|
|
35
|
+
"litestar",
|
|
28
36
|
"mobile",
|
|
37
|
+
"moka",
|
|
29
38
|
"monorepo",
|
|
39
|
+
"next-intl",
|
|
30
40
|
"nextjs",
|
|
31
41
|
"nuxt",
|
|
32
42
|
"payments",
|
|
33
43
|
"pnpm",
|
|
44
|
+
"pothos",
|
|
34
45
|
"prisma",
|
|
35
46
|
"project-generator",
|
|
36
47
|
"pwa",
|
|
37
48
|
"python",
|
|
38
49
|
"react",
|
|
39
50
|
"react-native",
|
|
51
|
+
"rocket",
|
|
40
52
|
"rust",
|
|
41
53
|
"scaffold",
|
|
42
54
|
"scaffolding",
|
|
@@ -44,6 +56,7 @@
|
|
|
44
56
|
"solid",
|
|
45
57
|
"starter",
|
|
46
58
|
"starter-kit",
|
|
59
|
+
"strawberry",
|
|
47
60
|
"svelte",
|
|
48
61
|
"sveltekit",
|
|
49
62
|
"tailwind",
|
|
@@ -54,10 +67,12 @@
|
|
|
54
67
|
"turborepo",
|
|
55
68
|
"type-safety",
|
|
56
69
|
"typescript",
|
|
70
|
+
"vercel",
|
|
57
71
|
"vite",
|
|
58
72
|
"vue",
|
|
59
73
|
"web-app",
|
|
60
|
-
"yarn"
|
|
74
|
+
"yarn",
|
|
75
|
+
"zerolog"
|
|
61
76
|
],
|
|
62
77
|
"homepage": "https://better-fullstack.dev/",
|
|
63
78
|
"license": "MIT",
|
|
@@ -112,11 +127,11 @@
|
|
|
112
127
|
"prepublishOnly": "npm run build"
|
|
113
128
|
},
|
|
114
129
|
"dependencies": {
|
|
115
|
-
"@better-fullstack/template-generator": "^1.6.
|
|
116
|
-
"@better-fullstack/types": "^1.6.
|
|
130
|
+
"@better-fullstack/template-generator": "^1.6.1",
|
|
131
|
+
"@better-fullstack/types": "^1.6.1",
|
|
117
132
|
"@clack/core": "^0.5.0",
|
|
118
133
|
"@clack/prompts": "^1.2.0",
|
|
119
|
-
"@orpc/server": "^1.13.
|
|
134
|
+
"@orpc/server": "^1.13.14",
|
|
120
135
|
"consola": "^3.4.2",
|
|
121
136
|
"env-paths": "^4.0.0",
|
|
122
137
|
"execa": "^9.6.1",
|
|
@@ -126,7 +141,7 @@
|
|
|
126
141
|
"jsonc-parser": "^3.3.1",
|
|
127
142
|
"oxfmt": "^0.19.0",
|
|
128
143
|
"picocolors": "^1.1.1",
|
|
129
|
-
"tinyglobby": "^0.2.
|
|
144
|
+
"tinyglobby": "^0.2.16",
|
|
130
145
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
131
146
|
"trpc-cli": "^0.12.1",
|
|
132
147
|
"ts-morph": "^27.0.2",
|
|
@@ -134,9 +149,9 @@
|
|
|
134
149
|
"zod": "^4.3.6"
|
|
135
150
|
},
|
|
136
151
|
"devDependencies": {
|
|
137
|
-
"@types/bun": "^1.3.
|
|
152
|
+
"@types/bun": "^1.3.12",
|
|
138
153
|
"@types/fs-extra": "^11.0.4",
|
|
139
|
-
"@types/node": "^25.
|
|
154
|
+
"@types/node": "^25.6.0",
|
|
140
155
|
"publint": "^0.3.18",
|
|
141
156
|
"tsdown": "^0.18.2",
|
|
142
157
|
"typescript": "^5.9.3"
|