@beignet/cli 0.0.46 → 0.0.48

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +50 -21
  3. package/dist/check.d.ts +8 -1
  4. package/dist/check.d.ts.map +1 -1
  5. package/dist/check.js +18 -6
  6. package/dist/check.js.map +1 -1
  7. package/dist/db.d.ts +38 -0
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +52 -0
  10. package/dist/db.js.map +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +73 -6
  13. package/dist/index.js.map +1 -1
  14. package/dist/inspect.d.ts.map +1 -1
  15. package/dist/inspect.js +39 -2
  16. package/dist/inspect.js.map +1 -1
  17. package/dist/lib.d.ts +2 -2
  18. package/dist/lib.d.ts.map +1 -1
  19. package/dist/lib.js +1 -1
  20. package/dist/lib.js.map +1 -1
  21. package/dist/make/inbox.js +1 -1
  22. package/dist/make/inbox.js.map +1 -1
  23. package/dist/make/payments.js +1 -1
  24. package/dist/make/payments.js.map +1 -1
  25. package/dist/make/tenancy.d.ts.map +1 -1
  26. package/dist/make/tenancy.js +3 -2
  27. package/dist/make/tenancy.js.map +1 -1
  28. package/dist/mcp.d.ts.map +1 -1
  29. package/dist/mcp.js +39 -2
  30. package/dist/mcp.js.map +1 -1
  31. package/dist/preflight.d.ts +11 -3
  32. package/dist/preflight.d.ts.map +1 -1
  33. package/dist/preflight.js +139 -16
  34. package/dist/preflight.js.map +1 -1
  35. package/dist/provider-add.d.ts.map +1 -1
  36. package/dist/provider-add.js +7 -2
  37. package/dist/provider-add.js.map +1 -1
  38. package/dist/provider-audit.d.ts +13 -0
  39. package/dist/provider-audit.d.ts.map +1 -1
  40. package/dist/provider-audit.js +122 -8
  41. package/dist/provider-audit.js.map +1 -1
  42. package/dist/templates/agents.d.ts.map +1 -1
  43. package/dist/templates/agents.js +14 -7
  44. package/dist/templates/agents.js.map +1 -1
  45. package/dist/templates/base.d.ts +1 -0
  46. package/dist/templates/base.d.ts.map +1 -1
  47. package/dist/templates/base.js +11 -5
  48. package/dist/templates/base.js.map +1 -1
  49. package/dist/templates/db/index.d.ts +1 -0
  50. package/dist/templates/db/index.d.ts.map +1 -1
  51. package/dist/templates/db/index.js.map +1 -1
  52. package/dist/templates/db/migration-status.d.ts +9 -0
  53. package/dist/templates/db/migration-status.d.ts.map +1 -0
  54. package/dist/templates/db/migration-status.js +117 -0
  55. package/dist/templates/db/migration-status.js.map +1 -0
  56. package/dist/templates/db/mysql.d.ts.map +1 -1
  57. package/dist/templates/db/mysql.js +23 -0
  58. package/dist/templates/db/mysql.js.map +1 -1
  59. package/dist/templates/db/postgres.d.ts.map +1 -1
  60. package/dist/templates/db/postgres.js +21 -0
  61. package/dist/templates/db/postgres.js.map +1 -1
  62. package/dist/templates/db/sqlite.d.ts.map +1 -1
  63. package/dist/templates/db/sqlite.js +53 -0
  64. package/dist/templates/db/sqlite.js.map +1 -1
  65. package/dist/templates/index.d.ts.map +1 -1
  66. package/dist/templates/index.js +5 -0
  67. package/dist/templates/index.js.map +1 -1
  68. package/dist/templates/server.d.ts.map +1 -1
  69. package/dist/templates/server.js +4 -1
  70. package/dist/templates/server.js.map +1 -1
  71. package/dist/templates/shared.d.ts.map +1 -1
  72. package/dist/templates/shared.js +1 -0
  73. package/dist/templates/shared.js.map +1 -1
  74. package/package.json +2 -2
  75. package/skills/app-structure/SKILL.md +11 -7
  76. package/src/check.ts +35 -7
  77. package/src/db.ts +97 -0
  78. package/src/index.ts +108 -7
  79. package/src/inspect.ts +76 -1
  80. package/src/lib.ts +9 -1
  81. package/src/make/inbox.ts +1 -1
  82. package/src/make/payments.ts +1 -1
  83. package/src/make/tenancy.ts +3 -2
  84. package/src/mcp.ts +56 -1
  85. package/src/preflight.ts +195 -16
  86. package/src/provider-add.ts +7 -2
  87. package/src/provider-audit.ts +210 -18
  88. package/src/templates/agents.ts +14 -7
  89. package/src/templates/base.ts +12 -3
  90. package/src/templates/db/index.ts +1 -0
  91. package/src/templates/db/migration-status.ts +126 -0
  92. package/src/templates/db/mysql.ts +23 -0
  93. package/src/templates/db/postgres.ts +21 -0
  94. package/src/templates/db/sqlite.ts +53 -0
  95. package/src/templates/index.ts +5 -0
  96. package/src/templates/server.ts +4 -1
  97. package/src/templates/shared.ts +1 -0
@@ -22,6 +22,7 @@
22
22
  // columns are varchar: 36-char ids and foreign keys, 255-char unique email
23
23
  // and token.
24
24
  import { databaseLocalUrl, databaseStartCommand } from "../../choices.js";
25
+ import { migrationStatusTemplate } from "./migration-status.js";
25
26
  export function mysqlDbFiles(ctx) {
26
27
  return {
27
28
  drizzleConfig: `export default {
@@ -267,6 +268,28 @@ async function prepare(pool: Pool): Promise<void> {
267
268
  await migrate(drizzle(pool), { migrationsFolder: "drizzle" });
268
269
  }
269
270
  `,
271
+ dbMigrationStatus: migrationStatusTemplate({
272
+ imports: `import mysql, { type RowDataPacket } from "mysql2/promise";
273
+ import { env } from "@/lib/env";`,
274
+ open: `const pool = mysql.createPool({ uri: env.MYSQL_DB_URL });`,
275
+ loadApplied: `const [tables] = await pool.query<RowDataPacket[]>(
276
+ "SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '__drizzle_migrations' LIMIT 1",
277
+ );
278
+ const applied: AppliedMigration[] =
279
+ tables.length === 0
280
+ ? []
281
+ : (
282
+ (
283
+ await pool.query<RowDataPacket[]>(
284
+ "SELECT hash, created_at FROM __drizzle_migrations ORDER BY created_at",
285
+ )
286
+ )[0]
287
+ ).map((row) => ({
288
+ hash: String(row.hash),
289
+ createdAt: Number(row.created_at),
290
+ }));`,
291
+ close: "await pool.end();",
292
+ }),
270
293
  dbProvider: `import "@beignet/core/server-only";
271
294
  import { createProvider } from "@beignet/core/providers";
272
295
  import {
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/templates/db/mysql.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,sDAAsD;AACtD,4EAA4E;AAC5E,sCAAsC;AACtC,sDAAsD;AACtD,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,6CAA6C;AAC7C,yEAAyE;AACzE,8EAA8E;AAC9E,0EAA0E;AAC1E,wEAAwE;AACxE,2EAA2E;AAC3E,aAAa;AAEb,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI1E,MAAM,UAAU,YAAY,CAAC,GAAoB;IAC/C,OAAO;QACL,aAAa,EAAE;;;;;sCAKmB,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;;;CAGxE;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;CAeb;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Eb;QACG,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwF1B;QACG,cAAc,EAAE;;;;;;;;;;;;CAYnB;QACG,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB;QACG,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDf;QACG,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CZ;QACG,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCb,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;0CACJ,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC5E;QACG,GAAG,qBAAqB;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0b1B;CACD,CAAC"}
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/templates/db/mysql.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA0WrE"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA8XrE"}
@@ -19,6 +19,7 @@
19
19
  // drizzleAdapter(db, { provider: "pg" }), then normalized to the starter's
20
20
  // conventions (tabs, no relations, no extra indexes, no column defaults).
21
21
  import { databaseLocalUrl } from "../../choices.js";
22
+ import { migrationStatusTemplate } from "./migration-status.js";
22
23
  export function postgresDbFiles(ctx) {
23
24
  return {
24
25
  drizzleConfig: `export default {
@@ -255,6 +256,26 @@ async function prepare(pool: Pool): Promise<void> {
255
256
  await migrate(drizzle(pool), { migrationsFolder: "drizzle" });
256
257
  }
257
258
  `,
259
+ dbMigrationStatus: migrationStatusTemplate({
260
+ imports: `import pg from "pg";
261
+ import { env } from "@/lib/env";`,
262
+ open: `const pool = new pg.Pool({ connectionString: env.POSTGRES_DB_URL });`,
263
+ loadApplied: `const table = await pool.query<{ name: string | null }>(
264
+ "SELECT to_regclass('drizzle.__drizzle_migrations')::text AS name",
265
+ );
266
+ const applied: AppliedMigration[] =
267
+ table.rows[0]?.name == null
268
+ ? []
269
+ : (
270
+ await pool.query<{ hash: string; created_at: string }>(
271
+ 'SELECT hash, created_at FROM "drizzle"."__drizzle_migrations" ORDER BY created_at',
272
+ )
273
+ ).rows.map((row) => ({
274
+ hash: row.hash,
275
+ createdAt: Number(row.created_at),
276
+ }));`,
277
+ close: "await pool.end();",
278
+ }),
258
279
  dbProvider: `import "@beignet/core/server-only";
259
280
  import { createProvider } from "@beignet/core/providers";
260
281
  import {
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,yEAAyE;AACzE,8DAA8D;AAC9D,4EAA4E;AAC5E,sCAAsC;AACtC,yDAAyD;AACzD,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,6CAA6C;AAC7C,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,OAAO;QACL,aAAa,EAAE;;;;;yCAKsB,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC;;;CAG9E;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;CAeb;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEb;QACG,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF1B;QACG,cAAc,EAAE;;;;;;;;;;;;CAYnB;QACG,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB;QACG,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDf;QACG,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ;QACG,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCnB;QACG,GAAG,wBAAwB;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+Y1B;CACD,CAAC"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,yEAAyE;AACzE,8DAA8D;AAC9D,4EAA4E;AAC5E,sCAAsC;AACtC,yDAAyD;AACzD,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,6CAA6C;AAC7C,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,OAAO;QACL,aAAa,EAAE;;;;;yCAKsB,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC;;;CAG9E;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;CAeb;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEb;QACG,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF1B;QACG,cAAc,EAAE;;;;;;;;;;;;CAYnB;QACG,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB;QACG,iBAAiB,EAAE,uBAAuB,CAAC;YACzC,OAAO,EAAE;iCACkB;YAC3B,IAAI,EAAE,sEAAsE;YAC5E,WAAW,EAAE;;;;;;;;;;;;;QAaX;YACF,KAAK,EAAE,mBAAmB;SAC3B,CAAC;QACF,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDf;QACG,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ;QACG,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCnB;QACG,GAAG,wBAAwB;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+Y1B;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAs3BlD,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA26BlD,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
@@ -11,6 +11,7 @@
11
11
  // @beignet/provider-db-drizzle/sqlite to the migration SQL, separated by
12
12
  // `--> statement-breakpoint`. The idempotency table is provider-owned and
13
13
  // lives outside the app schema, so `db generate` never diffs against it.
14
+ import { migrationStatusTemplate } from "./migration-status.js";
14
15
  const files = {
15
16
  drizzleConfig: `export default {
16
17
  schema: "./infra/db/schema/index.ts",
@@ -261,6 +262,58 @@ async function prepare(client: Client): Promise<void> {
261
262
  await migrate(drizzle(client), { migrationsFolder: "drizzle" });
262
263
  }
263
264
  `,
265
+ dbMigrationStatus: migrationStatusTemplate({
266
+ imports: `import { statSync } from "node:fs";
267
+ import path from "node:path";
268
+ import { fileURLToPath } from "node:url";
269
+ import { createClient } from "@libsql/client";
270
+ import { env } from "@/lib/env";`,
271
+ open: `const databaseFile = sqliteDatabaseFile(env.SQLITE_DB_URL);
272
+ const client =
273
+ databaseFile !== undefined && !databaseFileExists(databaseFile)
274
+ ? undefined
275
+ : createClient({
276
+ url: env.SQLITE_DB_URL,
277
+ authToken: env.SQLITE_DB_AUTH_TOKEN,
278
+ });
279
+
280
+ function sqliteDatabaseFile(url: string): string | undefined {
281
+ if (!url.startsWith("file:")) return undefined;
282
+ const rawPath = url.slice("file:".length).split(/[?#]/, 1)[0];
283
+ if (!rawPath || rawPath === ":memory:") return undefined;
284
+ return rawPath.startsWith("//")
285
+ ? fileURLToPath(url)
286
+ : path.resolve(decodeURIComponent(rawPath));
287
+ }
288
+
289
+ function databaseFileExists(file: string): boolean {
290
+ try {
291
+ statSync(file);
292
+ return true;
293
+ } catch (error) {
294
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return false;
295
+ throw error;
296
+ }
297
+ }`,
298
+ loadApplied: `let applied: AppliedMigration[] = [];
299
+ if (client !== undefined) {
300
+ const table = await client.execute(
301
+ "SELECT name FROM sqlite_master WHERE type = 'table' AND name = '__drizzle_migrations' LIMIT 1",
302
+ );
303
+ applied =
304
+ table.rows.length === 0
305
+ ? []
306
+ : (
307
+ await client.execute(
308
+ "SELECT hash, created_at FROM __drizzle_migrations ORDER BY created_at",
309
+ )
310
+ ).rows.map((row) => ({
311
+ hash: String(row.hash),
312
+ createdAt: Number(row.created_at),
313
+ }));
314
+ }`,
315
+ close: "client?.close();",
316
+ }),
264
317
  dbProvider: `import "@beignet/core/server-only";
265
318
  import { createProvider } from "@beignet/core/providers";
266
319
  import {
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,iEAAiE;AACjE,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AAIzE,MAAM,KAAK,GAAG;IACZ,aAAa,EAAE;;;;;;;;;CAShB;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;CAeX;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EX;IACC,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFxB;IACC,cAAc,EAAE;;;;;;;;;;;;CAYjB;IACC,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ChB;IACC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb;IACC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CV;IACC,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjB;IACC,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyZ1B;CACD,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,iEAAiE;AACjE,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,KAAK,GAAG;IACZ,aAAa,EAAE;;;;;;;;;CAShB;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;CAeX;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EX;IACC,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFxB;IACC,cAAc,EAAE;;;;;;;;;;;;CAYjB;IACC,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ChB;IACC,iBAAiB,EAAE,uBAAuB,CAAC;QACzC,OAAO,EAAE;;;;iCAIoB;QAC7B,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BR;QACE,WAAW,EAAE;;;;;;;;;;;;;;;;EAgBf;QACE,KAAK,EAAE,kBAAkB;KAC1B,CAAC;IACF,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb;IACC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CV;IACC,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjB;IACC,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyZ1B;CACD,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuBjE,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAKrB;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CAsIrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuBjE,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAKrB;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CA2IrE"}
@@ -24,6 +24,7 @@ export function getTemplateFiles(ctx) {
24
24
  { path: "AGENTS.md", content: agentsMd(ctx) },
25
25
  { path: "CLAUDE.md", content: agentsMd(ctx) },
26
26
  { path: ".mcp.json", content: mcpJson(ctx) },
27
+ { path: ".gitattributes", content: baseFiles.gitattributes },
27
28
  { path: ".gitignore", content: baseFiles.gitignore },
28
29
  { path: ".env.example", content: envExample(ctx) },
29
30
  { path: "next-env.d.ts", content: baseFiles.nextEnv },
@@ -89,6 +90,10 @@ export function getTemplateFiles(ctx) {
89
90
  { path: "infra/port-wiring.ts", content: portWiring(ctx) },
90
91
  { path: "infra/db/client.ts", content: db.dbClient },
91
92
  { path: "infra/db/database-ready.ts", content: db.databaseReady },
93
+ {
94
+ path: "infra/db/migration-status.ts",
95
+ content: db.dbMigrationStatus,
96
+ },
92
97
  { path: "infra/db/provider.ts", content: db.dbProvider },
93
98
  { path: "infra/db/repositories.ts", content: db.dbRepositories },
94
99
  { path: "infra/db/reset.ts", content: db.dbReset },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA+CvD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAgEhD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAuBxC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0EvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CA8E/B;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;CAoYV,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA+CvD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAgEhD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAuBxC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0EvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CA8E/B;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;CAuYV,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
@@ -395,6 +395,7 @@ async function stopServerAndDatabase(server: {
395
395
  const files = {
396
396
  appContext: `import type { ActivityActor, ActivityTenant } from "@beignet/core/ports";
397
397
  import type { InferProviderPorts } from "@beignet/core/providers";
398
+ import type { TrustedRequestInfo } from "@beignet/core/server";
398
399
  import type { TraceContext } from "@beignet/core/tracing";
399
400
  import type { AppGate, AppPorts } from "@/ports";
400
401
  import type { AuthSession } from "@/ports/auth";
@@ -411,6 +412,7 @@ export type AppContext = {
411
412
  auth: AuthSession | null;
412
413
  gate: AppGate;
413
414
  ports: AppRuntimePorts;
415
+ requestInfo?: TrustedRequestInfo;
414
416
  tenant?: ActivityTenant;
415
417
  } & Partial<TraceContext>;
416
418
  `,
@@ -531,7 +533,7 @@ export type AppServiceContextInput =
531
533
  */
532
534
  export const appContext = defineServerContext<AppContext, AppRuntimePorts>()({
533
535
  gate: (ports) => ports.gate,
534
- request: async ({ req, ports, requestId, trace }) => {
536
+ request: async ({ req, requestInfo, ports, requestId, trace }) => {
535
537
  const auth = await ports.auth.getSession(req);
536
538
  const tenant = resolveRequestTenant({ auth });
537
539
 
@@ -541,6 +543,7 @@ export const appContext = defineServerContext<AppContext, AppRuntimePorts>()({
541
543
  ? createUserActor(auth.user.id, { displayName: auth.user.name })
542
544
  : createAnonymousActor(),
543
545
  auth,
546
+ requestInfo,
544
547
  ...trace,
545
548
  ports,
546
549
  ...(tenant ? { tenant } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAKzE,CAAC;AAEJ,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIjE,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAET;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACzC,kGAAkG;IAClG,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,qEAAqE;IACrE,YAAY,EACR,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,2DAA2D;IAC3D,eAAe,EACX,6BAA6B,GAC7B,+BAA+B,GAC/B,4BAA4B,CAAC;IACjC,8DAA8D;IAC9D,gBAAgB,EACZ,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,8DAA8D;IAC9D,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,CAAC;IACtE,sEAAsE;IACtE,SAAS,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAChE,0CAA0C;IAC1C,iBAAiB,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACrD,mDAAmD;IACnD,kBAAkB,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;CAC/C,CAAC;AAyCF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,CAE3E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAW1D;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAET;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAKzE,CAAC;AAEJ,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKjE,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAET;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACzC,kGAAkG;IAClG,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,qEAAqE;IACrE,YAAY,EACR,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,2DAA2D;IAC3D,eAAe,EACX,6BAA6B,GAC7B,+BAA+B,GAC/B,4BAA4B,CAAC;IACjC,8DAA8D;IAC9D,gBAAgB,EACZ,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,8DAA8D;IAC9D,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,CAAC;IACtE,sEAAsE;IACtE,SAAS,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAChE,0CAA0C;IAC1C,iBAAiB,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACrD,mDAAmD;IACnD,kBAAkB,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;CAC/C,CAAC;AAyCF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,CAE3E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAW1D;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAET;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C"}
@@ -42,6 +42,7 @@ export const legacyGeneratedPackageScripts = {
42
42
  export const currentGeneratedPackageScripts = {
43
43
  "db:reset": "tsx infra/db/reset.ts",
44
44
  "db:seed": "tsx server/seed.ts",
45
+ "db:status": "tsx infra/db/migration-status.ts",
45
46
  test: "node --import tsx lib/beignet-test-runner.ts",
46
47
  };
47
48
  export function isLegacyGeneratedPackageScript(name, command) {
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/cli",
3
- "version": "0.0.46",
3
+ "version": "0.0.48",
4
4
  "type": "module",
5
5
  "description": "CLI for creating and maintaining Beignet apps.",
6
6
  "main": "./dist/lib.js",
@@ -69,7 +69,7 @@
69
69
  "tsx": "^4.22.4"
70
70
  },
71
71
  "dependencies": {
72
- "@beignet/core": "^0.0.46",
72
+ "@beignet/core": "^0.0.48",
73
73
  "@clack/prompts": "^1.5.1",
74
74
  "@modelcontextprotocol/sdk": "^1.29.0",
75
75
  "@stricli/core": "^1.2.7",
@@ -64,6 +64,7 @@ changing `infra/db/schema/`, run the app's db lifecycle commands:
64
64
  ```bash
65
65
  beignet db generate
66
66
  beignet db migrate
67
+ beignet db status
67
68
  ```
68
69
 
69
70
  ## Explicit Registration
@@ -195,7 +196,7 @@ Generated apps register:
195
196
  }
196
197
  ```
197
198
 
198
- The MCP server exposes `app_map`, `explain`, `check`, `db`,
199
+ The MCP server exposes `app_map`, `explain`, `check`, `db`, `db_status`,
199
200
  `db_schema_sync`, `task_run`, `schedule_run`, `outbox_inspect`, `outbox_run`,
200
201
  `routes`, `doctor`, `doctor_fix_plan`, `doctor_fix`, `lint`, `make`, and
201
202
  `provider_add`. It also publishes `beignet://app/guidance` and the
@@ -210,10 +211,11 @@ concept or diagnostic and returns the same deterministic result as
210
211
  `beignet explain <kind> <target> --json`. Explain accepts every app-map node
211
212
  kind plus `diagnostic`; targets may use stable IDs, runtime or declaration
212
213
  names, source selectors, and applicable aliases. `check` accepts optional
213
- `{ preflight?: boolean, timeoutMs?: number }`, bounds failure output, cancels
214
- the active script with the MCP request, and returns the same versioned result
215
- as `beignet check --json`. It does not apply Beignet fixes, but app package
216
- scripts retain their normal side effects. `db` accepts
214
+ `{ preflight?: boolean, preflightConnect?: boolean, connectTimeoutMs?: number, timeoutMs?: number }`.
215
+ Connected preflight adds migration status and dependency health checks. Check
216
+ bounds failure output, cancels the active script with the MCP request, and
217
+ returns the same versioned result as `beignet check --json`. It does not apply
218
+ Beignet fixes, but app package scripts retain their normal side effects. `db` accepts
217
219
  `{ command: "generate" | "migrate" | "seed" | "reset", dryRun?, timeoutMs? }`
218
220
  and returns the matching versioned `beignet db <command> --json` report with
219
221
  bounded output, cancellation, and process-tree timeouts. `db_schema_sync`
@@ -221,7 +223,9 @@ accepts `{ dialect?, tables?, output?, dryRun? }` and returns the matching
221
223
  `beignet db schema sync --json` report. For lifecycle commands, `dryRun`
222
224
  validates and reports the app-owned script without executing it; it does not
223
225
  simulate SQL or data changes. `reset` remains environment-sensitive even
224
- though the generated entrypoint has a production guard. `task_run` and
226
+ though the generated entrypoint has a production guard. `db_status` runs the
227
+ app-owned read-only migration inspection: current exits 0, pending exits 2,
228
+ and inspection failures use another non-zero exit. `task_run` and
225
229
  `schedule_run` execute registered app workflows. Use `outbox_inspect` for
226
230
  read-only `list` and `show`, and `outbox_run` for state-changing `drain`,
227
231
  `requeue`, `purge`, and `prune`; purge and prune support `dryRun`. Operational
@@ -255,7 +259,7 @@ When MCP is available, call `check` after edits to run the full validation loop
255
259
  through the app-local CLI without reconstructing these commands individually.
256
260
  For a generated persistent resource, the complete structured workflow is
257
261
  `app_map` → `explain` → `make` → `db_schema_sync` when provider tables changed
258
- → `db` generate → `db` migrate → the relevant `task_run`, `schedule_run`, or
262
+ → `db` generate → `db` migrate → `db_status` → the relevant `task_run`, `schedule_run`, or
259
263
  outbox tool when operational work is required → `check`.
260
264
 
261
265
  For generated app template changes inside the Beignet monorepo, also run:
package/src/check.ts CHANGED
@@ -39,8 +39,15 @@ export type CheckAppOptions = {
39
39
  cwd?: string;
40
40
  fix?: boolean;
41
41
  color?: boolean;
42
- /** Append a `beignet preflight` step after the doctor step. */
42
+ /** Append a disconnected `beignet preflight` step after the doctor step. */
43
43
  preflight?: boolean;
44
+ /**
45
+ * Append a connected `beignet preflight --connect` step after doctor.
46
+ * Implies `preflight`.
47
+ */
48
+ preflightConnect?: boolean;
49
+ /** Per migration-status or dependency health check timeout in milliseconds. */
50
+ connectTimeoutMs?: number;
44
51
  /** Keep only the last N bytes from each package-script output stream. */
45
52
  maxOutputBytes?: number;
46
53
  /** Cancel the active package script with the owning request. */
@@ -81,9 +88,15 @@ export async function checkApp(
81
88
  const { step: doctorStep, fixes } = await runDoctorStep(targetDir, options);
82
89
  record(doctorStep);
83
90
 
84
- if (options.preflight) {
91
+ if (options.preflight || options.preflightConnect) {
85
92
  options.signal?.throwIfAborted();
86
- record(await preflightStep(targetDir));
93
+ record(
94
+ await preflightStep(targetDir, {
95
+ connect: Boolean(options.preflightConnect),
96
+ connectTimeoutMs: options.connectTimeoutMs,
97
+ signal: options.signal,
98
+ }),
99
+ );
87
100
  }
88
101
 
89
102
  const scripts = await readPackageScripts(targetDir);
@@ -274,17 +287,32 @@ async function readPackageScripts(
274
287
  return parsed.scripts ?? {};
275
288
  }
276
289
 
277
- async function preflightStep(targetDir: string): Promise<CheckStep> {
290
+ async function preflightStep(
291
+ targetDir: string,
292
+ options: {
293
+ connect: boolean;
294
+ connectTimeoutMs?: number;
295
+ signal?: AbortSignal;
296
+ },
297
+ ): Promise<CheckStep> {
278
298
  const startedAt = Date.now();
279
299
  const { formatPreflight, runPreflight } = await import("./preflight.js");
280
- const result = await runPreflight({ cwd: targetDir });
300
+ const result = await runPreflight({
301
+ cwd: targetDir,
302
+ connect: options.connect,
303
+ connectTimeoutMs: options.connectTimeoutMs,
304
+ signal: options.signal,
305
+ });
281
306
  const failed = result.findings.some(
282
307
  (finding) => finding.severity === "error",
283
308
  );
309
+ const command = options.connect
310
+ ? "beignet preflight --connect"
311
+ : "beignet preflight";
284
312
 
285
313
  return {
286
- name: "beignet preflight",
287
- command: "beignet preflight",
314
+ name: command,
315
+ command,
288
316
  status: failed ? "failed" : "passed",
289
317
  ...(failed ? { output: formatPreflight(result, targetDir) } : {}),
290
318
  durationMs: Date.now() - startedAt,
package/src/db.ts CHANGED
@@ -18,6 +18,8 @@ export type {
18
18
  export const defaultDatabaseCommandMaxOutputBytes = 64 * 1024;
19
19
  /** Default timeout used by request-controlled database command callers. */
20
20
  export const defaultDatabaseCommandTimeoutMs = 10 * 60 * 1_000;
21
+ /** Exit code reserved for an app-owned status script that found pending migrations. */
22
+ export const databaseMigrationsPendingExitCode = 2;
21
23
 
22
24
  /**
23
25
  * Options for running a database lifecycle command.
@@ -53,6 +55,37 @@ export type RunDatabaseCommandResult = {
53
55
  exitCode: number;
54
56
  };
55
57
 
58
+ /** Migration state reported by an app-owned database status script. */
59
+ export type DatabaseMigrationStatus = "current" | "pending" | "failed";
60
+
61
+ /** Options for inspecting app-owned database migration status. */
62
+ export type RunDatabaseStatusOptions = {
63
+ cwd?: string;
64
+ captureOutput?: boolean;
65
+ /** Keep only the last N bytes from each output stream. */
66
+ maxOutputBytes?: number;
67
+ /** Cancel the app-owned status script when the owning request aborts. */
68
+ signal?: AbortSignal;
69
+ /** Stop the app-owned status script after this many milliseconds. */
70
+ timeoutMs?: number;
71
+ };
72
+
73
+ /** Versioned result returned by `beignet db status`. */
74
+ export type RunDatabaseStatusResult = {
75
+ schemaVersion: 1;
76
+ command: "status";
77
+ status: DatabaseMigrationStatus;
78
+ cwd: string;
79
+ script: "db:status";
80
+ runner: string;
81
+ args: string[];
82
+ stdout?: string;
83
+ stderr?: string;
84
+ outputTruncated?: boolean;
85
+ timedOut?: boolean;
86
+ exitCode: number;
87
+ };
88
+
56
89
  export type SpawnCommandOptions = {
57
90
  captureOutput: boolean;
58
91
  /** Keep only the last N bytes from each output stream. Unbounded when omitted. */
@@ -176,6 +209,70 @@ export async function runDatabaseCommand(
176
209
  };
177
210
  }
178
211
 
212
+ /**
213
+ * Inspect migrations through the app-owned `db:status` script.
214
+ *
215
+ * Exit 0 means current, exit 2 means pending, and every other non-zero exit
216
+ * means the inspection failed. The app owns database-specific comparison
217
+ * logic while Beignet owns the stable report and automation contract.
218
+ */
219
+ export async function runDatabaseStatus(
220
+ options: RunDatabaseStatusOptions = {},
221
+ ): Promise<RunDatabaseStatusResult> {
222
+ options.signal?.throwIfAborted();
223
+ const cwd = path.resolve(options.cwd ?? process.cwd());
224
+ const script = "db:status" as const;
225
+ const packageJson = await readPackageJson(cwd);
226
+ const scriptCommand = packageJson.scripts?.[script];
227
+
228
+ if (!scriptCommand) {
229
+ throw new Error(
230
+ 'Missing package.json script "db:status". Add an app-owned read-only migration status script so beignet db status can inspect the target database.',
231
+ );
232
+ }
233
+
234
+ if (
235
+ scriptCommand.includes("infra/db/migration-status.ts") &&
236
+ !(await exists(path.join(cwd, "infra/db/migration-status.ts")))
237
+ ) {
238
+ throw new Error(
239
+ 'Missing database status entrypoint infra/db/migration-status.ts. beignet db status runs the "db:status" script, so restore the entrypoint or update package.json.',
240
+ );
241
+ }
242
+
243
+ options.signal?.throwIfAborted();
244
+ const runner = await detectPackageManager(cwd);
245
+ const args = ["run", script];
246
+ const commandResult = await spawnCommand(runner, args, cwd, {
247
+ captureOutput: Boolean(options.captureOutput),
248
+ maxOutputBytes: options.maxOutputBytes,
249
+ signal: options.signal,
250
+ timeoutMs: options.timeoutMs,
251
+ });
252
+ const status: DatabaseMigrationStatus =
253
+ commandResult.exitCode === 0
254
+ ? "current"
255
+ : commandResult.exitCode === databaseMigrationsPendingExitCode
256
+ ? "pending"
257
+ : "failed";
258
+
259
+ return {
260
+ schemaVersion: 1,
261
+ command: "status",
262
+ status,
263
+ cwd,
264
+ script,
265
+ runner,
266
+ args,
267
+ exitCode: commandResult.exitCode,
268
+ ...(options.captureOutput
269
+ ? { stdout: commandResult.stdout, stderr: commandResult.stderr }
270
+ : {}),
271
+ ...(commandResult.outputTruncated ? { outputTruncated: true } : {}),
272
+ ...(commandResult.timedOut ? { timedOut: true } : {}),
273
+ };
274
+ }
275
+
179
276
  /**
180
277
  * Sync the app-owned Drizzle schema entrypoint for Beignet provider tables.
181
278
  *