gencow 0.1.176 → 0.1.178

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 (69) hide show
  1. package/bin/gencow.mjs +8 -2
  2. package/core/index.js +26 -4
  3. package/dashboard/assets/index-CFHaaHZs.js +408 -0
  4. package/dashboard/assets/index-DQfrJITv.css +1 -0
  5. package/dashboard/index.html +2 -2
  6. package/lib/app-command.mjs +43 -12
  7. package/lib/app-create-response.mjs +51 -0
  8. package/lib/auth-schema-provenance-guard.mjs +55 -0
  9. package/lib/backend-env-resolver.mjs +147 -0
  10. package/lib/cli-project-runtime.mjs +40 -26
  11. package/lib/cli-schema-paths.mjs +7 -1
  12. package/lib/codegen-command.mjs +14 -32
  13. package/lib/component-readme.mjs +33 -10
  14. package/lib/db-command.mjs +31 -34
  15. package/lib/db-migration-command-steps.mjs +234 -0
  16. package/lib/db-push-command.mjs +238 -200
  17. package/lib/deploy-command.mjs +1 -0
  18. package/lib/deploy-contract.mjs +154 -0
  19. package/lib/deploy-existing-bundle-candidate.mjs +48 -0
  20. package/lib/deploy-package-claim.mjs +119 -0
  21. package/lib/deploy-package-runtime.mjs +206 -62
  22. package/lib/deploy-receipt-store.mjs +169 -0
  23. package/lib/deploy-runtime.mjs +113 -17
  24. package/lib/deploy-static-fullstack-runtime.mjs +34 -8
  25. package/lib/dev-cloud-bundle.mjs +50 -7
  26. package/lib/dev-cloud-command.mjs +58 -20
  27. package/lib/dev-cloud-migrations.mjs +30 -5
  28. package/lib/doctor-command.mjs +31 -12
  29. package/lib/drizzle-generate.mjs +38 -1
  30. package/lib/env-command.mjs +75 -10
  31. package/lib/init-command.mjs +44 -10
  32. package/lib/install-features.mjs +24 -5
  33. package/lib/migration-bundle-manifest.mjs +58 -7
  34. package/lib/migration-bundle-staging.mjs +59 -0
  35. package/lib/migration-client-diagnostic.mjs +61 -1
  36. package/lib/migration-diagnostic-contract.mjs +6 -238
  37. package/lib/migration-diagnostic.mjs +35 -25
  38. package/lib/migration-operation-client.mjs +92 -0
  39. package/lib/project-migration-manifest.mjs +111 -0
  40. package/lib/project-schema-deployment-preview.mjs +86 -0
  41. package/lib/project-validator.mjs +20 -4
  42. package/lib/readme-codegen.mjs +5 -4
  43. package/lib/static-artifact-manifest.mjs +40 -0
  44. package/lib/static-command.mjs +27 -4
  45. package/lib/static-deploy-command.mjs +98 -11
  46. package/package.json +10 -6
  47. package/runtime/config.mjs +4 -0
  48. package/runtime/server.mjs +4675 -2721
  49. package/runtime/server.mjs.map +4 -4
  50. package/runtime/tooling.mjs +184 -2
  51. package/templateFeature/ai/ai-errors.ts +3 -2
  52. package/templateFeature/ai/ai-provider.ts +5 -4
  53. package/templateFeature/ai/ai.ts +1 -1
  54. package/templateFeature/ai/manifest.json +2 -1
  55. package/templateFeature/embedding-profile.ts +9 -0
  56. package/templateFeature/memory/embedding-profile.ts +1 -0
  57. package/templateFeature/memory/manifest.json +6 -5
  58. package/templateFeature/memory/memory.ts +141 -46
  59. package/templateFeature/memory/schema-memory.ts +11 -2
  60. package/templateFeature/rag/embedding-profile.ts +1 -0
  61. package/templateFeature/rag/manifest.json +9 -8
  62. package/templateFeature/rag/rag.ts +104 -35
  63. package/templateFeature/rag/schema-rag.ts +11 -2
  64. package/templateFeature/search/embedding-profile.ts +1 -0
  65. package/templateFeature/search/manifest.json +5 -3
  66. package/templateFeature/search/schema-search.ts +14 -1
  67. package/templates/SECURITY.md +1 -1
  68. package/dashboard/assets/index-DjLw1oMy.css +0 -1
  69. package/dashboard/assets/index-DnlR7gj_.js +0 -408
package/bin/gencow.mjs CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Commands:
6
6
  * gencow dev — push schema → start server with hot-reload
7
- * gencow db:push — push schema.ts changes to DB (instant, no migration files)
7
+ * gencow db:push — generate and apply versioned cloud migrations
8
8
  * gencow db:generate — generate SQL migration files from schema.ts
9
9
  * gencow db:migrate — apply pending migrations
10
10
  * gencow db:reset — backup + reset DB (safe reset)
@@ -125,6 +125,7 @@ const runCodegenCommand = createCodegenCommand({
125
125
  RESET,
126
126
  });
127
127
  const runDoctorCommand = createDoctorCommand({
128
+ cliVersion: CLI_VERSION,
128
129
  loadConfig,
129
130
  logImpl: log,
130
131
  infoImpl: info,
@@ -142,6 +143,7 @@ const {
142
143
  dbRestore: runDbRestoreCommand,
143
144
  dbPush: runDbPushCommand,
144
145
  dbCheck: runDbCheckCommand,
146
+ dbCheckForProject: runDbCheckForProjectCommand,
145
147
  dbGenerate: runDbGenerateCommand,
146
148
  dbMigrate: runDbMigrateCommand,
147
149
  dbStudio: runDbStudioCommand,
@@ -156,6 +158,7 @@ const {
156
158
  runInServer,
157
159
  });
158
160
  const runDevCloudCommand = createDevCloudCommand({
161
+ cliVersion: CLI_VERSION,
159
162
  buildEnvImpl: buildEnv,
160
163
  requireCreds,
161
164
  loadConfig,
@@ -220,6 +223,7 @@ const { dev: runDevCommand, devLocal: runDevLocalCommand } = createDevLocalComma
220
223
  const runConfigCommand = createConfigCommand();
221
224
  const runCorsCommand = createCorsCommand();
222
225
  const runStaticDeployRuntime = createStaticDeployRuntime({
226
+ cliVersion: CLI_VERSION,
223
227
  cwdImpl: () => process.cwd(),
224
228
  drizzleKitCmdImpl: _drizzleKitCmd,
225
229
  verifyAppReadyImpl: verifyAppReady,
@@ -227,6 +231,7 @@ const runStaticDeployRuntime = createStaticDeployRuntime({
227
231
  });
228
232
  const runDeployCommand = createDeployCommand({
229
233
  buildEnvImpl: buildEnv,
234
+ cliVersion: CLI_VERSION,
230
235
  cwdImpl: () => process.cwd(),
231
236
  drizzleKitCmdImpl: _drizzleKitCmd,
232
237
  existsSyncImpl: existsSync,
@@ -234,6 +239,7 @@ const runDeployCommand = createDeployCommand({
234
239
  handleDeployReadonlySubcommandImpl: handleDeployReadonlySubcommand,
235
240
  isMonorepoImpl: isMonorepo,
236
241
  loadConfigImpl: loadConfig,
242
+ runDbCheckForProjectImpl: runDbCheckForProjectCommand,
237
243
  platformFetchImpl: platformFetch,
238
244
  processEnv: process.env,
239
245
  processRef: process,
@@ -356,7 +362,7 @@ ${BOLD}Commands (login required):${RESET}
356
362
  ${GREEN}whoami${RESET} Show current user info
357
363
  ${GREEN}dev${RESET} Watch + auto-deploy to cloud + live logs
358
364
  ${DIM}--verbose Show all HTTP logs (including admin/ws)${RESET}
359
- ${GREEN}db:push${RESET} Sync schema.ts cloud DB
365
+ ${GREEN}db:push${RESET} Apply versioned migrations to cloud DB
360
366
  ${DIM}--prod Push to production DB (confirmation required)${RESET}
361
367
  ${GREEN}db:check${RESET} Audit cloud migrations without applying DDL
362
368
  ${DIM}--prod Check production DB without mutation${RESET}
package/core/index.js CHANGED
@@ -274,7 +274,21 @@ function buildWakeAppSuccessResult(status, port) {
274
274
  }
275
275
  function buildWakeAppBootFailedResult(error) {
276
276
  const message = error instanceof Error ? error.message : String(error);
277
- return { ok: false, status: "boot_failed", error: message };
277
+ if (!error || typeof error !== "object") {
278
+ return { ok: false, status: "boot_failed", error: message };
279
+ }
280
+ const metadata = error;
281
+ const publicMessage = typeof metadata.publicMessage === "string" && metadata.publicMessage.length <= 200 ? metadata.publicMessage : message;
282
+ const reasonCode = typeof metadata.reasonCode === "string" && /^[a-z][a-z0-9_]{2,80}$/.test(metadata.reasonCode) ? metadata.reasonCode : void 0;
283
+ const correlationId = typeof metadata.correlationId === "string" && /^rt_[A-Za-z0-9_-]{8,80}$/.test(metadata.correlationId) ? metadata.correlationId : void 0;
284
+ return {
285
+ ok: false,
286
+ status: "boot_failed",
287
+ error: publicMessage,
288
+ ...reasonCode ? { reasonCode } : {},
289
+ ...typeof metadata.retryable === "boolean" ? { retryable: metadata.retryable } : {},
290
+ ...correlationId ? { correlationId } : {}
291
+ };
278
292
  }
279
293
  function isWakeAppDeferredResult(result) {
280
294
  return !result.ok && (result.status === "capacity_rejected" || result.status === "queue_timeout");
@@ -2954,7 +2968,7 @@ function sleep(ms) {
2954
2968
  }
2955
2969
 
2956
2970
  // ../core/src/runtime-env-policy.ts
2957
- var RESERVED_TENANT_RUNTIME_ENV_KEYS = /* @__PURE__ */ new Set([
2971
+ var RESERVED_TENANT_RUNTIME_ENV_KEYS = [
2958
2972
  "PORT",
2959
2973
  "DATABASE_URL",
2960
2974
  "GENCOW_DB_URL",
@@ -2978,6 +2992,11 @@ var RESERVED_TENANT_RUNTIME_ENV_KEYS = /* @__PURE__ */ new Set([
2978
2992
  "COWBOX_WARM_POOL_PROFILE",
2979
2993
  "PGBOUNCER_PORT",
2980
2994
  "DIRECT_PG_PORT",
2995
+ "GENCOW_DIRECT_DATABASE_URL",
2996
+ "DIRECT_DATABASE_URL",
2997
+ "GENCOW_APP_USER_PASS",
2998
+ "GENCOW_DDL_USER_PASS",
2999
+ "GENCOW_SYSTEM_USER_PASS",
2981
3000
  "GENCOW_WAKE_SIGNAL_ENABLED",
2982
3001
  "GENCOW_WAKE_SIGNAL_DATABASE_URL",
2983
3002
  "GENCOW_REALTIME_OUTBOX_POLL_INTERVAL_MS",
@@ -3022,19 +3041,22 @@ var RESERVED_TENANT_RUNTIME_ENV_KEYS = /* @__PURE__ */ new Set([
3022
3041
  "BUN_JSC_forceRAMSize",
3023
3042
  "MIMALLOC_PURGE_DELAY",
3024
3043
  "NODE_PATH"
3025
- ]);
3044
+ ];
3045
+ var RESERVED_TENANT_RUNTIME_ENV_KEY_SET = new Set(RESERVED_TENANT_RUNTIME_ENV_KEYS);
3026
3046
  var RESERVED_TENANT_RUNTIME_ENV_PREFIXES = [
3027
3047
  "__GENCOW_",
3048
+ "GENCOW_CONTROL_PLANE_",
3028
3049
  "GENCOW_PLATFORM_STORAGE_",
3029
3050
  "GENCOW_DOCUMENT_",
3030
3051
  "GENCOW_TEMPLATE_",
3031
3052
  "GENCOW_WARM_",
3032
3053
  "GENCOW_DIRECT_RUNNER_",
3054
+ "GENCOW_RUNTIME_PINNING_",
3033
3055
  "GENCOW_COWBOX_"
3034
3056
  ];
3035
3057
  function isReservedTenantRuntimeEnvKey(key) {
3036
3058
  const normalized = key.trim();
3037
- return RESERVED_TENANT_RUNTIME_ENV_KEYS.has(normalized) || RESERVED_TENANT_RUNTIME_ENV_PREFIXES.some((prefix) => normalized.startsWith(prefix));
3059
+ return RESERVED_TENANT_RUNTIME_ENV_KEY_SET.has(normalized) || RESERVED_TENANT_RUNTIME_ENV_PREFIXES.some((prefix) => normalized.startsWith(prefix));
3038
3060
  }
3039
3061
  function filterTenantRuntimeEnvVars(vars) {
3040
3062
  const allowed = {};