gencow 0.1.138 → 0.1.139

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gencow",
3
- "version": "0.1.138",
3
+ "version": "0.1.139",
4
4
  "description": "Gencow — AI Backend Engine",
5
5
  "type": "module",
6
6
  "bin": {
package/server/index.js CHANGED
@@ -125060,6 +125060,128 @@ var RAG_SYSTEM_SCHEMA_STATEMENTS = [
125060
125060
  `CREATE INDEX IF NOT EXISTS idx_rag_operation_metrics_operation ON rag_operation_metrics (operation, metric_name, recorded_at DESC)`
125061
125061
  ];
125062
125062
 
125063
+ // ../server/src/server-template-marketplace-bootstrap.ts
125064
+ var TEMPLATE_MARKETPLACE_BOOTSTRAP_SQL = [
125065
+ `CREATE TABLE IF NOT EXISTS template_listings (
125066
+ id SERIAL PRIMARY KEY,
125067
+ slug TEXT NOT NULL UNIQUE,
125068
+ owner_user_id TEXT NOT NULL,
125069
+ source_app_id INTEGER,
125070
+ public_preview_app_id INTEGER,
125071
+ current_release_id INTEGER,
125072
+ title TEXT NOT NULL,
125073
+ summary TEXT NOT NULL DEFAULT '',
125074
+ description TEXT NOT NULL DEFAULT '',
125075
+ category TEXT,
125076
+ tags_json TEXT NOT NULL DEFAULT '[]',
125077
+ status TEXT NOT NULL DEFAULT 'draft',
125078
+ visibility_intent TEXT NOT NULL DEFAULT 'private',
125079
+ price_type TEXT NOT NULL DEFAULT 'free',
125080
+ price_cents INTEGER NOT NULL DEFAULT 0,
125081
+ currency TEXT NOT NULL DEFAULT 'USD',
125082
+ license TEXT,
125083
+ rejection_reason TEXT,
125084
+ submitted_at TIMESTAMP,
125085
+ approved_at TIMESTAMP,
125086
+ approved_by TEXT,
125087
+ created_at TIMESTAMP DEFAULT NOW() NOT NULL,
125088
+ updated_at TIMESTAMP DEFAULT NOW() NOT NULL
125089
+ )`,
125090
+ `CREATE TABLE IF NOT EXISTS template_releases (
125091
+ id SERIAL PRIMARY KEY,
125092
+ template_id INTEGER NOT NULL,
125093
+ version TEXT NOT NULL,
125094
+ bundle_hash TEXT NOT NULL,
125095
+ bundle_storage_key TEXT NOT NULL,
125096
+ source_manifest_json TEXT NOT NULL DEFAULT '{}',
125097
+ preview_app_id INTEGER,
125098
+ preview_frontend_url TEXT,
125099
+ project_kind TEXT NOT NULL DEFAULT 'full_stack',
125100
+ frontend_framework TEXT NOT NULL DEFAULT 'unknown',
125101
+ package_manager TEXT NOT NULL DEFAULT 'unknown',
125102
+ frontend_root TEXT,
125103
+ backend_root TEXT,
125104
+ build_workdir TEXT,
125105
+ build_command TEXT,
125106
+ static_output_dir TEXT,
125107
+ code_size_bytes BIGINT NOT NULL DEFAULT 0,
125108
+ status TEXT NOT NULL DEFAULT 'draft',
125109
+ install_status TEXT NOT NULL DEFAULT 'pending',
125110
+ install_error TEXT,
125111
+ audit_status TEXT NOT NULL DEFAULT 'pending',
125112
+ audit_summary_json TEXT NOT NULL DEFAULT '{}',
125113
+ created_by TEXT NOT NULL,
125114
+ created_at TIMESTAMP DEFAULT NOW() NOT NULL,
125115
+ UNIQUE (template_id, version)
125116
+ )`,
125117
+ `CREATE TABLE IF NOT EXISTS template_entitlements (
125118
+ id SERIAL PRIMARY KEY,
125119
+ template_id INTEGER NOT NULL,
125120
+ user_id TEXT NOT NULL,
125121
+ source TEXT NOT NULL,
125122
+ purchase_id INTEGER,
125123
+ scope TEXT NOT NULL DEFAULT 'approved_releases',
125124
+ granted_at TIMESTAMP DEFAULT NOW() NOT NULL,
125125
+ revoked_at TIMESTAMP,
125126
+ UNIQUE (template_id, user_id)
125127
+ )`,
125128
+ `CREATE TABLE IF NOT EXISTS template_purchases (
125129
+ id SERIAL PRIMARY KEY,
125130
+ template_id INTEGER NOT NULL,
125131
+ buyer_user_id TEXT NOT NULL,
125132
+ seller_user_id TEXT NOT NULL,
125133
+ amount_cents INTEGER NOT NULL,
125134
+ currency TEXT NOT NULL,
125135
+ provider TEXT NOT NULL DEFAULT 'stripe',
125136
+ provider_session_id TEXT,
125137
+ provider_payment_id TEXT,
125138
+ provider_event_id TEXT,
125139
+ status TEXT NOT NULL DEFAULT 'pending',
125140
+ created_at TIMESTAMP DEFAULT NOW() NOT NULL,
125141
+ paid_at TIMESTAMP,
125142
+ refunded_at TIMESTAMP
125143
+ )`,
125144
+ `CREATE TABLE IF NOT EXISTS template_events (
125145
+ id SERIAL PRIMARY KEY,
125146
+ template_id INTEGER NOT NULL,
125147
+ release_id INTEGER,
125148
+ user_id TEXT,
125149
+ event_type TEXT NOT NULL,
125150
+ request_fingerprint TEXT,
125151
+ created_at TIMESTAMP DEFAULT NOW() NOT NULL
125152
+ )`,
125153
+ `CREATE TABLE IF NOT EXISTS template_daily_metrics (
125154
+ template_id INTEGER NOT NULL,
125155
+ day TEXT NOT NULL,
125156
+ views INTEGER NOT NULL DEFAULT 0,
125157
+ unique_viewers INTEGER NOT NULL DEFAULT 0,
125158
+ preview_opens INTEGER NOT NULL DEFAULT 0,
125159
+ downloads INTEGER NOT NULL DEFAULT 0,
125160
+ cli_clones INTEGER NOT NULL DEFAULT 0,
125161
+ purchases INTEGER NOT NULL DEFAULT 0,
125162
+ gross_revenue_cents BIGINT NOT NULL DEFAULT 0,
125163
+ refunds INTEGER NOT NULL DEFAULT 0,
125164
+ UNIQUE (template_id, day)
125165
+ )`,
125166
+ `CREATE INDEX IF NOT EXISTS idx_template_listings_owner_status
125167
+ ON template_listings (owner_user_id, status)`,
125168
+ `CREATE INDEX IF NOT EXISTS idx_template_releases_template_status
125169
+ ON template_releases (template_id, status)`,
125170
+ `CREATE INDEX IF NOT EXISTS idx_template_entitlements_user_template
125171
+ ON template_entitlements (user_id, template_id)`,
125172
+ `CREATE INDEX IF NOT EXISTS idx_template_purchases_buyer_status
125173
+ ON template_purchases (buyer_user_id, status)`,
125174
+ `CREATE INDEX IF NOT EXISTS idx_template_events_template_created
125175
+ ON template_events (template_id, created_at)`
125176
+ ];
125177
+ async function ensureTemplateMarketplacePlatformSchema(params) {
125178
+ if (!params.isPlatform) return;
125179
+ for (const statement of TEMPLATE_MARKETPLACE_BOOTSTRAP_SQL) {
125180
+ await params.rawSql(statement);
125181
+ }
125182
+ (params.logger ?? console).log("[db] template marketplace tables \u2713");
125183
+ }
125184
+
125063
125185
  // ../server/src/server-platform-db-bootstrap.ts
125064
125186
  var MARKUP_DEFAULTS = {
125065
125187
  free: { serviceMarkup: 1.5, platformMarkup: 3 },
@@ -125165,7 +125287,10 @@ async function mergeTierDefaults(params) {
125165
125287
  ]);
125166
125288
  } catch (error48) {
125167
125289
  const message = error48 instanceof Error ? error48.message : String(error48);
125168
- params.logger.warn(`[db] ${params.warningLabel} merge warning for tier=${params.tierId}:`, message.slice(0, 100));
125290
+ params.logger.warn(
125291
+ `[db] ${params.warningLabel} merge warning for tier=${params.tierId}:`,
125292
+ message.slice(0, 100)
125293
+ );
125169
125294
  }
125170
125295
  }
125171
125296
  async function ensurePlatformSchemaUpgrade(params) {
@@ -125180,9 +125305,15 @@ async function ensurePlatformSchemaUpgrade(params) {
125180
125305
  await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS custom_domain TEXT UNIQUE`);
125181
125306
  await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS custom_domain_status TEXT`);
125182
125307
  await params.rawSql(`ALTER TABLE deployments ADD COLUMN IF NOT EXISTS env TEXT DEFAULT 'dev'`);
125183
- await params.rawSql(`ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_bandwidth_bytes BIGINT DEFAULT 0 NOT NULL`);
125184
- await params.rawSql(`ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_requests INTEGER DEFAULT 0 NOT NULL`);
125185
- await params.rawSql(`ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_storage_bytes BIGINT DEFAULT 0 NOT NULL`);
125308
+ await params.rawSql(
125309
+ `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_bandwidth_bytes BIGINT DEFAULT 0 NOT NULL`
125310
+ );
125311
+ await params.rawSql(
125312
+ `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_requests INTEGER DEFAULT 0 NOT NULL`
125313
+ );
125314
+ await params.rawSql(
125315
+ `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_storage_bytes BIGINT DEFAULT 0 NOT NULL`
125316
+ );
125186
125317
  await params.rawSql(`CREATE TABLE IF NOT EXISTS user_credits (
125187
125318
  id SERIAL PRIMARY KEY,
125188
125319
  user_id TEXT NOT NULL UNIQUE,
@@ -125208,7 +125339,9 @@ async function ensurePlatformSchemaUpgrade(params) {
125208
125339
  status TEXT NOT NULL DEFAULT 'enabled',
125209
125340
  created_at TIMESTAMP DEFAULT NOW() NOT NULL
125210
125341
  )`);
125211
- await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_cron_jobs_poll ON cron_jobs (status, next_run_at) WHERE status = 'enabled'`);
125342
+ await params.rawSql(
125343
+ `CREATE INDEX IF NOT EXISTS idx_cron_jobs_poll ON cron_jobs (status, next_run_at) WHERE status = 'enabled'`
125344
+ );
125212
125345
  await params.rawSql(`CREATE TABLE IF NOT EXISTS scheduled_jobs (
125213
125346
  id TEXT PRIMARY KEY,
125214
125347
  app_id INTEGER NOT NULL,
@@ -125223,7 +125356,9 @@ async function ensurePlatformSchemaUpgrade(params) {
125223
125356
  created_at TIMESTAMPTZ DEFAULT NOW(),
125224
125357
  updated_at TIMESTAMPTZ DEFAULT NOW()
125225
125358
  )`);
125226
- await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_poll ON scheduled_jobs (status, run_at) WHERE status = 'pending'`);
125359
+ await params.rawSql(
125360
+ `CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_poll ON scheduled_jobs (status, run_at) WHERE status = 'pending'`
125361
+ );
125227
125362
  await params.rawSql(`CREATE TABLE IF NOT EXISTS cron_job_runs (
125228
125363
  id SERIAL PRIMARY KEY,
125229
125364
  cron_job_id INTEGER NOT NULL,
@@ -125235,7 +125370,9 @@ async function ensurePlatformSchemaUpgrade(params) {
125235
125370
  started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
125236
125371
  completed_at TIMESTAMPTZ
125237
125372
  )`);
125238
- await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_cron_job_runs_lookup ON cron_job_runs (cron_job_id, started_at DESC)`);
125373
+ await params.rawSql(
125374
+ `CREATE INDEX IF NOT EXISTS idx_cron_job_runs_lookup ON cron_job_runs (cron_job_id, started_at DESC)`
125375
+ );
125239
125376
  await params.rawSql(`CREATE TABLE IF NOT EXISTS pricing_tiers (
125240
125377
  id TEXT PRIMARY KEY,
125241
125378
  display_name TEXT NOT NULL,
@@ -125268,7 +125405,9 @@ async function ensurePlatformSchemaUpgrade(params) {
125268
125405
  created_at TIMESTAMP DEFAULT NOW() NOT NULL,
125269
125406
  updated_at TIMESTAMP DEFAULT NOW() NOT NULL
125270
125407
  )`);
125271
- await params.rawSql(`ALTER TABLE model_pricing ADD COLUMN IF NOT EXISTS unit_label TEXT NOT NULL DEFAULT ''`);
125408
+ await params.rawSql(
125409
+ `ALTER TABLE model_pricing ADD COLUMN IF NOT EXISTS unit_label TEXT NOT NULL DEFAULT ''`
125410
+ );
125272
125411
  await params.rawSql(`INSERT INTO model_pricing (model, type, provider, display_name, unit_label, input_credit_per_token, output_credit_per_token, active, sort_order)
125273
125412
  VALUES
125274
125413
  ('gpt-4o', 'chat', 'openai', 'GPT-4o', '1K tok', 25, 100, true, 0),
@@ -125309,6 +125448,11 @@ async function ensurePlatformSchemaUpgrade(params) {
125309
125448
  logger: logger2
125310
125449
  });
125311
125450
  }
125451
+ await ensureTemplateMarketplacePlatformSchema({
125452
+ rawSql: params.rawSql,
125453
+ isPlatform: params.isPlatform,
125454
+ logger: logger2
125455
+ });
125312
125456
  logger2.log("[db] schema upgrade \u2713");
125313
125457
  } catch (error48) {
125314
125458
  logger2.warn("[db] schema upgrade warning:", error48 instanceof Error ? error48.message : String(error48));