@ever-works/contracts 1.0.0 → 1.0.2

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/index.cjs CHANGED
@@ -16,7 +16,8 @@ var USER_SELECTABLE_WORK_KINDS = [
16
16
  "blog",
17
17
  "directory",
18
18
  "awesome-repo",
19
- "repo"
19
+ "repo",
20
+ "app"
20
21
  ];
21
22
  var WORK_KINDS = [...USER_SELECTABLE_WORK_KINDS, "company", "campaign", "default"];
22
23
  var WORK_KIND_SET = new Set(WORK_KINDS);
@@ -41,6 +42,9 @@ function isUserSelectableWorkKind(value) {
41
42
  function isRepositoryWorkKind(value) {
42
43
  return normalizeWorkKind(value) === "repo";
43
44
  }
45
+ function isAppWorkKind(value) {
46
+ return normalizeWorkKind(value) === "app";
47
+ }
44
48
 
45
49
  // src/domain/goal-kind.ts
46
50
  var GOAL_KINDS = ["metric", "delivery"];
@@ -196,6 +200,8 @@ var DIRECTORY_CAPABILITIES = {
196
200
  sourceValidation: true,
197
201
  deploy: true,
198
202
  kb: true,
203
+ builds: false,
204
+ appEnvironment: false,
199
205
  metrics: ["total-items", "categories", "comparisons", "generation-status", "days-active"],
200
206
  repos: { data: true, work: true, website: true }
201
207
  };
@@ -213,6 +219,8 @@ var WORK_KIND_CAPABILITIES = {
213
219
  sourceValidation: true,
214
220
  deploy: true,
215
221
  kb: true,
222
+ builds: false,
223
+ appEnvironment: false,
216
224
  metrics: ["total-items", "categories", "tags", "generation-status", "days-active"],
217
225
  repos: { data: true, work: true, website: true }
218
226
  },
@@ -225,6 +233,8 @@ var WORK_KIND_CAPABILITIES = {
225
233
  sourceValidation: false,
226
234
  deploy: true,
227
235
  kb: true,
236
+ builds: false,
237
+ appEnvironment: false,
228
238
  metrics: ["posts", "page-views", "registered-users", "deploy-status", "days-active"],
229
239
  repos: { data: true, work: true, website: true }
230
240
  },
@@ -237,6 +247,8 @@ var WORK_KIND_CAPABILITIES = {
237
247
  sourceValidation: false,
238
248
  deploy: true,
239
249
  kb: true,
250
+ builds: false,
251
+ appEnvironment: false,
240
252
  metrics: ["page-views", "registered-users", "sessions", "deploy-status", "generation-status"],
241
253
  repos: { data: true, work: true, website: true }
242
254
  },
@@ -249,6 +261,8 @@ var WORK_KIND_CAPABILITIES = {
249
261
  sourceValidation: false,
250
262
  deploy: true,
251
263
  kb: true,
264
+ builds: false,
265
+ appEnvironment: false,
252
266
  metrics: ["page-views", "conversions", "deploy-status", "days-active"],
253
267
  repos: { data: true, work: true, website: true }
254
268
  },
@@ -272,6 +286,8 @@ var WORK_KIND_CAPABILITIES = {
272
286
  sourceValidation: false,
273
287
  deploy: false,
274
288
  kb: true,
289
+ builds: false,
290
+ appEnvironment: false,
275
291
  metrics: ["agents", "open-tasks", "days-active"],
276
292
  repos: { data: true, work: false, website: false }
277
293
  },
@@ -286,6 +302,8 @@ var WORK_KIND_CAPABILITIES = {
286
302
  sourceValidation: false,
287
303
  deploy: false,
288
304
  kb: true,
305
+ builds: false,
306
+ appEnvironment: false,
289
307
  metrics: ["works-owned", "team-members", "agents", "open-tasks", "days-active"],
290
308
  repos: { data: true, work: true, website: false }
291
309
  },
@@ -305,8 +323,40 @@ var WORK_KIND_CAPABILITIES = {
305
323
  sourceValidation: false,
306
324
  deploy: false,
307
325
  kb: true,
326
+ builds: false,
327
+ appEnvironment: false,
308
328
  metrics: ["agents", "open-tasks", "conversions", "days-active"],
309
329
  repos: { data: true, work: true, website: false }
330
+ },
331
+ // An App Work wraps code the platform did not generate (README D1): the
332
+ // repository the member pasted, forked or copied IS its Work Repository,
333
+ // so the persisted `website` role is on and the `data` role — which holds
334
+ // a Work's generated data — is off. Nothing item-shaped applies: no
335
+ // items, taxonomy, comparisons, community-PR intake, import/export or
336
+ // source validation, and no generated site to render.
337
+ //
338
+ // `deploy` is ON where `repo` refuses it, which is the whole point of the
339
+ // kind: the second contract invariant this entry replaces is "a kind
340
+ // deploys only with a repository to deploy" — an App Work deploys the
341
+ // Work Repository without ever having generated one.
342
+ //
343
+ // `builds` and `appEnvironment` (Resolution R-7) are true HERE ONLY — the
344
+ // two flags exist so APW-05's Builds surface and APW-07's App env /
345
+ // dependencies surfaces can hang off the registry instead of off
346
+ // `kind === 'app'` inline tests, exactly as `deploy` does.
347
+ app: {
348
+ items: { enabled: false, labelKey: "items" },
349
+ taxonomy: false,
350
+ comparisons: false,
351
+ communityPr: false,
352
+ itemImportExport: false,
353
+ sourceValidation: false,
354
+ deploy: true,
355
+ kb: true,
356
+ builds: true,
357
+ appEnvironment: true,
358
+ metrics: ["agents", "open-tasks", "deploy-status", "days-active"],
359
+ repos: { data: false, work: false, website: true }
310
360
  }
311
361
  };
312
362
  function getWorkCapabilities(kind) {
@@ -316,6 +366,3120 @@ function workKindHasItems(kind) {
316
366
  return getWorkCapabilities(kind).items.enabled;
317
367
  }
318
368
 
369
+ // src/apps/app-dependencies.ts
370
+ var APP_DEPENDENCY_KINDS = ["postgres", "redis", "objectStorage", "smtp"];
371
+ var APP_DEPENDENCY_TARGETS = ["your-cluster", "ever-works-apps"];
372
+ var APP_DEPENDENCY_STATUSES = [
373
+ "pending",
374
+ "awaiting_config",
375
+ "provisioning",
376
+ "ready",
377
+ "degraded",
378
+ "failed",
379
+ "kept",
380
+ "deleting",
381
+ "deleted"
382
+ ];
383
+ var APP_DEPENDENCY_INACTIVE_STATUSES = ["kept", "deleted"];
384
+ var APP_DEPENDENCY_BACKUP_POLICIES = ["none", "operator", "provider", "managed"];
385
+ var APP_DEPENDENCY_BACKUP_STATES = [
386
+ "none",
387
+ "not_configured",
388
+ "healthy",
389
+ "overdue",
390
+ "failing",
391
+ "external",
392
+ "unknown"
393
+ ];
394
+ var APP_DEPENDENCY_REASONS = [
395
+ "noDefaultStorageClass",
396
+ "clusterUnreachable",
397
+ "smtpConnectFailed",
398
+ "smtpTlsFailed",
399
+ "smtpAuthRefused",
400
+ "bucketUnreadable",
401
+ "volumeNotReady",
402
+ "extensionUnavailable",
403
+ "platformServerRefused",
404
+ "deadlineExceeded",
405
+ "namespaceNotOwned",
406
+ "namespaceBaselineMissing",
407
+ "clusterPermissionMissing",
408
+ "operatorNamespaceUnknown",
409
+ "volumeExpansionUnsupported",
410
+ "sizeShrinkRefused",
411
+ "relayIneligible",
412
+ "relaySuspended",
413
+ "providerNotSupported",
414
+ "dependencyNotDeclared",
415
+ "confirmationMismatch",
416
+ "deleteInProgress",
417
+ "notGenerated",
418
+ "notAppWork",
419
+ // APW07-G28 — the last two of APW-06's four `unavailable` codes, in the
420
+ // port's own order (`target_none`, `target_not_checked`, then the two that
421
+ // already had a member: `namespace_owned_elsewhere` → `namespaceNotOwned`,
422
+ // `cluster_unreachable` → `clusterUnreachable`).
423
+ "targetNone",
424
+ "targetNotChecked"
425
+ ];
426
+ var APP_DEPENDENCY_STATUS_REASONS = [
427
+ "noDefaultStorageClass",
428
+ "clusterUnreachable",
429
+ "smtpConnectFailed",
430
+ "smtpTlsFailed",
431
+ "smtpAuthRefused",
432
+ "bucketUnreadable",
433
+ "volumeNotReady",
434
+ "extensionUnavailable",
435
+ "platformServerRefused",
436
+ "deadlineExceeded",
437
+ "namespaceNotOwned",
438
+ "namespaceBaselineMissing",
439
+ "clusterPermissionMissing",
440
+ "operatorNamespaceUnknown",
441
+ "relayIneligible",
442
+ "relaySuspended",
443
+ // APW07-G28: the port's `target_none` / `target_not_checked`.
444
+ "targetNone",
445
+ "targetNotChecked"
446
+ ];
447
+ var APP_DEPENDENCY_ERROR_CODES = [
448
+ "volumeExpansionUnsupported",
449
+ "sizeShrinkRefused",
450
+ "providerNotSupported",
451
+ "dependencyNotDeclared",
452
+ "confirmationMismatch",
453
+ "deleteInProgress",
454
+ "notGenerated",
455
+ "notAppWork"
456
+ ];
457
+ var APP_DEPENDENCY_REASON_MESSAGE_LEAVES = {
458
+ noDefaultStorageClass: "noDefaultStorageClass",
459
+ clusterUnreachable: "clusterUnreachable",
460
+ smtpConnectFailed: "smtpConnectFailed",
461
+ smtpTlsFailed: "smtpTlsFailed",
462
+ smtpAuthRefused: "smtpAuthRefused",
463
+ bucketUnreadable: "bucketUnreadable",
464
+ volumeNotReady: "volumeNotReady",
465
+ extensionUnavailable: "extensionUnavailable",
466
+ platformServerRefused: "platformServerRefused",
467
+ deadlineExceeded: "deadlineExceeded",
468
+ namespaceNotOwned: "namespaceNotOwned",
469
+ namespaceBaselineMissing: "namespaceBaselineMissing",
470
+ clusterPermissionMissing: "clusterPermissionMissing",
471
+ operatorNamespaceUnknown: "operatorNamespaceUnknown",
472
+ volumeExpansionUnsupported: "volumeExpansionUnsupported",
473
+ sizeShrinkRefused: "sizeShrinkRefused",
474
+ relayIneligible: "relayIneligible",
475
+ relaySuspended: "relaySuspended",
476
+ providerNotSupported: "providerNotSupported",
477
+ dependencyNotDeclared: "dependencyNotDeclared",
478
+ confirmationMismatch: "confirmationMismatch",
479
+ deleteInProgress: "deleteInProgress",
480
+ notGenerated: "notGenerated",
481
+ notAppWork: "notAppWork",
482
+ // APW07-G28 — no new copy subtree: the two port preconditions get one leaf
483
+ // each, exactly like every other reason, and T2's spec pins them against
484
+ // `apps/web/messages/en.json`.
485
+ targetNone: "targetNone",
486
+ targetNotChecked: "targetNotChecked"
487
+ };
488
+ var APP_DEPENDENCY_REASON_MESSAGE_KEY_PREFIX = "dashboard.workDetail.appDependencies.reasons";
489
+ var APP_DEPENDENCY_STATUS_MESSAGE_LEAVES = {
490
+ pending: "pending",
491
+ awaiting_config: "awaitingConfig",
492
+ provisioning: "provisioning",
493
+ ready: "ready",
494
+ degraded: "degraded",
495
+ failed: "failed",
496
+ kept: "kept",
497
+ deleting: "deleting",
498
+ deleted: "deleted"
499
+ };
500
+ var APP_DEPENDENCY_STATUS_MESSAGE_KEY_PREFIX = "dashboard.workDetail.appDependencies.status";
501
+ var APP_DEPENDENCY_BACKUP_STATE_MESSAGE_LEAVES = {
502
+ none: "none",
503
+ not_configured: "notConfigured",
504
+ healthy: "healthy",
505
+ overdue: "overdue",
506
+ failing: "failing",
507
+ external: "external",
508
+ unknown: "unknown"
509
+ };
510
+ var APP_DEPENDENCY_BACKUP_STATE_MESSAGE_KEY_PREFIX = "dashboard.workDetail.appDependencies.backup";
511
+ function appDependencyReasonMessageKey(reason) {
512
+ return `${APP_DEPENDENCY_REASON_MESSAGE_KEY_PREFIX}.${APP_DEPENDENCY_REASON_MESSAGE_LEAVES[reason]}`;
513
+ }
514
+ function appDependencyStatusMessageKey(status) {
515
+ return `${APP_DEPENDENCY_STATUS_MESSAGE_KEY_PREFIX}.${APP_DEPENDENCY_STATUS_MESSAGE_LEAVES[status]}`;
516
+ }
517
+ function appDependencyBackupStateMessageKey(state) {
518
+ return `${APP_DEPENDENCY_BACKUP_STATE_MESSAGE_KEY_PREFIX}.${APP_DEPENDENCY_BACKUP_STATE_MESSAGE_LEAVES[state]}`;
519
+ }
520
+ function isAppDependencyReason(value) {
521
+ return APP_DEPENDENCY_REASONS.includes(value);
522
+ }
523
+ var APP_DEPENDENCY_PROVIDER_IDS = [
524
+ "k8s-inline-postgres",
525
+ "k8s-inline-redis",
526
+ "k8s-inline-minio",
527
+ "smtp-external",
528
+ "s3-external",
529
+ "platform-smtp-relay",
530
+ "managed-postgres",
531
+ "managed-redis",
532
+ "managed-object-storage",
533
+ "managed-smtp"
534
+ ];
535
+ var APP_DEPENDENCY_OUTPUTS = {
536
+ postgres: { url: true, directUrl: true, host: false, port: false, database: false, user: false, password: true },
537
+ redis: { url: true, host: false, port: false, password: true },
538
+ objectStorage: { endpoint: false, region: false, accessKeyId: true, secretAccessKey: true, "bucket.*": false },
539
+ smtp: { host: false, port: false, user: false, password: true, from: false, secure: false }
540
+ };
541
+ var APP_DEPENDENCY_OUTPUT_NAMES = {
542
+ postgres: ["url", "directUrl", "host", "port", "database", "user", "password"],
543
+ redis: ["url", "host", "port", "password"],
544
+ objectStorage: ["endpoint", "region", "accessKeyId", "secretAccessKey", "bucket.*"],
545
+ smtp: ["host", "port", "user", "password", "from", "secure"]
546
+ };
547
+ var APP_DEPENDENCY_BUCKET_OUTPUT_PATTERN = "bucket.*";
548
+ var APP_DEPENDENCY_BUCKET_OUTPUT_PREFIX = "bucket.";
549
+ function appDependencyOutputNames(kind) {
550
+ return APP_DEPENDENCY_OUTPUT_NAMES[kind];
551
+ }
552
+ function isAppDependencyOutputSecret(kind, output) {
553
+ const flags = APP_DEPENDENCY_OUTPUTS[kind];
554
+ return flags[output] ?? true;
555
+ }
556
+ var APP_DEPENDENCY_TOKEN_SCHEME = "ew-dep://";
557
+ function appDependencyToken(kind, output) {
558
+ return `${APP_DEPENDENCY_TOKEN_SCHEME}${kind}/${output}`;
559
+ }
560
+ function parseAppDependencyToken(text) {
561
+ if (!text.startsWith(APP_DEPENDENCY_TOKEN_SCHEME)) return null;
562
+ const rest = text.slice(APP_DEPENDENCY_TOKEN_SCHEME.length);
563
+ const separator = rest.indexOf("/");
564
+ if (separator <= 0 || separator === rest.length - 1) return null;
565
+ const kind = rest.slice(0, separator);
566
+ const output = rest.slice(separator + 1);
567
+ if (!APP_DEPENDENCY_KINDS.includes(kind)) return null;
568
+ if (output.includes("/")) return null;
569
+ return { kind, output };
570
+ }
571
+ var APP_DEPENDENCY_TOKEN_UNKNOWN_CODE = "DEPENDENCY_TOKEN_UNKNOWN";
572
+ var APP_DEPENDENCY_READY_DEADLINE_MS = {
573
+ postgres: 6e5,
574
+ redis: 3e5,
575
+ objectStorage: 6e5,
576
+ smtp: 3e4
577
+ };
578
+ var APP_DEPENDENCY_EXTERNAL_TEST_MS = 3e4;
579
+ var APP_DEPENDENCY_DEFAULT_SIZE_GIB = { postgres: 10, objectStorage: 20, redis: 1 };
580
+ var APP_DEPENDENCY_TRANSIENT_ATTEMPTS = 3;
581
+ var APP_DEPENDENCY_RETRY_DELAY_MS = 3e5;
582
+ var APP_DEPENDENCY_REFRESH_AFTER_MS = 9e5;
583
+ var APP_DEPENDENCY_BACKUP_OVERDUE_MS = 26 * 36e5;
584
+ var APP_DEPENDENCY_RELAY_DAILY_LIMIT = 200;
585
+ var APP_DEPENDENCY_MANAGED = {
586
+ pgRoleConnectionLimit: 20,
587
+ pgDatabaseConnectionLimit: 25,
588
+ pgStatementTimeoutMs: 6e4,
589
+ pgIdleInTransactionTimeoutMs: 6e4,
590
+ bucketQuotaGiB: 10,
591
+ redisMaxMemoryMiB: 256,
592
+ backupMaxAgeMs: 864e5
593
+ };
594
+ var APP_DEPENDENCY_POSTGRES_DEFAULT_PORT = 5432;
595
+ var APP_DEPENDENCY_ZONE_BUCKET_PREFIX = "aw-";
596
+ var APP_DEPENDENCY_ZONE_BUCKET_NAME_SHAPE = "aw-<hex12>-<name>";
597
+ var APP_DEPENDENCY_ZONE_REDIS_MAX_MEMORY_MIB = 256;
598
+ var APP_DEPENDENCY_RELAY_LIMITS = {
599
+ perAccountPerDay: 1e3,
600
+ perOrganizationPerDay: 5e3,
601
+ suspendBounceRate: 0.05
602
+ };
603
+ var APP_DEPENDENCY_ENV_VARS = {
604
+ /** R-30 kill switch for dependency provisioning and the mail relay. */
605
+ depsEnabled: "EVER_WORKS_APP_DEPS_ENABLED",
606
+ /** R-30 kill switch for the relay alone. */
607
+ mailRelayEnabled: "EVER_WORKS_APP_MAIL_RELAY_ENABLED",
608
+ /** Comma-separated CIDRs that get past the public-endpoint guard (APW07-G09). */
609
+ privateAllowlist: "EVER_WORKS_APP_DEPENDENCY_PRIVATE_ALLOWLIST",
610
+ relayDailyLimitPerAccount: "EVER_WORKS_APP_RELAY_DAILY_LIMIT_PER_ACCOUNT",
611
+ relayDailyLimitPerOrganization: "EVER_WORKS_APP_RELAY_DAILY_LIMIT_PER_ORGANIZATION",
612
+ relaySuspendBounceRate: "EVER_WORKS_APP_RELAY_SUSPEND_BOUNCE_RATE",
613
+ /** Per-App-Work daily relay cap override — CONTRACTS §7A:669. */
614
+ mailMaxPerDay: "EVER_WORKS_APP_MAIL_MAX_PER_DAY"
615
+ };
616
+ function isAppDependencyBackupOverdue(lastBackupAt, now) {
617
+ if (!lastBackupAt) return false;
618
+ const last = Date.parse(lastBackupAt);
619
+ if (Number.isNaN(last)) return false;
620
+ return now - last > APP_DEPENDENCY_BACKUP_OVERDUE_MS;
621
+ }
622
+ function appDependencyReadyDeadlineMs(kind) {
623
+ return APP_DEPENDENCY_READY_DEADLINE_MS[kind];
624
+ }
625
+ function appDependencyDefaultSizeGiB(kind) {
626
+ return kind in APP_DEPENDENCY_DEFAULT_SIZE_GIB ? APP_DEPENDENCY_DEFAULT_SIZE_GIB[kind] : null;
627
+ }
628
+ function isAppDependencySizeChangeAllowed(previousGiB, nextGiB) {
629
+ if (previousGiB !== null && nextGiB < previousGiB) return { allowed: false, refusal: "dependencySizeShrink" };
630
+ return { allowed: true };
631
+ }
632
+ function canDeleteAppDependencyData(input) {
633
+ return input.hasEditAccess && input.confirmSlug !== null && input.confirmSlug === input.workSlug;
634
+ }
635
+ function appDependencyBlocksDeploy(kind, required) {
636
+ return kind === "smtp" ? required : true;
637
+ }
638
+
639
+ // src/apps/app-env.ts
640
+ var APP_ENV_ORIGINS = ["generated", "derived", "prompted", "user", "default"];
641
+ var APP_ENV_STORED_ORIGINS = ["generated", "prompted", "user", "derived"];
642
+ var APP_ENV_PHASES = ["build", "runtime", "both"];
643
+ var APP_ENV_GENERATOR_KINDS = ["base64", "hex", "chars", "uuid", "keypair"];
644
+ var APP_ENV_ALPHABETS = {
645
+ alnum: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
646
+ "alnum-symbols": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#%+,-.:=?@^_~",
647
+ "hex-lower": "0123456789abcdef",
648
+ base64url: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
649
+ };
650
+ var APP_ENV_KEYPAIR_TYPES = ["ed25519", "ec-p256", "rsa-2048", "rsa-4096"];
651
+ var APP_ENV_KEYPAIR_FORMATS = ["pem", "base64url-raw", "pkcs12"];
652
+ var APP_ENV_KEYPAIR_RAW_TYPES = ["ed25519", "ec-p256"];
653
+ var APP_ENV_KEYPAIR_DEFAULT_FORMAT = "pem";
654
+ var APP_ENV_NAME_PATTERN = "^[A-Z_][A-Z0-9_]{0,127}$";
655
+ var APP_ENV_DEP_PASSWORD_TOKEN_PREFIX = "DEP_";
656
+ var APP_ENV_DEP_PASSWORD_TOKEN_SUFFIX = "_PASSWORD";
657
+ var APP_ENV_RESERVED_PREFIX = "EVER_WORKS_";
658
+ var APP_ENV_PUBLIC_PREFIXES = [
659
+ "NEXT_PUBLIC_",
660
+ "VITE_",
661
+ "PUBLIC_",
662
+ "REACT_APP_",
663
+ "NUXT_PUBLIC_",
664
+ "EXPO_PUBLIC_"
665
+ ];
666
+ var APP_ENV_PUBLIC_HALF_SUFFIX = "_PUBLIC";
667
+ var APP_ENV_ROTATE_MODES = ["never"];
668
+ var APP_ENV_VALUE_MAX_BYTES = 65536;
669
+ var APP_ENV_TOTAL_MAX_BYTES = 1048576;
670
+ var APP_ENV_MAX_STORED = 300;
671
+ var APP_ENV_PUBLIC_HALF_MAX_BYTES = 16384;
672
+ var APP_ENV_PATTERN_BUDGET_MS = 50;
673
+ var APP_ENV_DOTENV_MAX_BYTES = 65536;
674
+ var APP_ENV_DOTENV_MAX_LINES = 500;
675
+ var APP_ENV_GENERATE_SLA_MS = 6e4;
676
+ var APP_ENV_ROTATIONS_PER_HOUR = 10;
677
+ var APP_ENV_PUTS_PER_MINUTE = 30;
678
+ var APP_ENV_TEMPLATE_MAX_DEPTH = 10;
679
+ var APP_ENV_CHARS_MIN_LENGTH = 16;
680
+ var APP_ENV_CHARS_MAX_LENGTH = 256;
681
+ var APP_ENV_BASE64_MIN_BYTES = 16;
682
+ var APP_ENV_BASE64_MAX_BYTES = 128;
683
+ var APP_ENV_UUID_LENGTH = 36;
684
+ var APP_ENV_REDACT_MIN_CHARS = 6;
685
+ function appEnvGeneratorFingerprint(generate) {
686
+ if (generate.kind === "keypair") {
687
+ const keypair = generate.keypair;
688
+ const type = keypair?.type ?? "ed25519";
689
+ const format = keypair?.format ?? APP_ENV_KEYPAIR_DEFAULT_FORMAT;
690
+ const suffix = format === "pkcs12" && keypair?.passwordEnv ? `:${keypair.passwordEnv}` : "";
691
+ return `keypair:${type}:${format}${suffix}`;
692
+ }
693
+ if (generate.kind === "uuid") return "uuid";
694
+ if (generate.kind === "chars")
695
+ return `chars:${generate.length ?? APP_ENV_CHARS_MIN_LENGTH}:${generate.alphabet ?? "alnum"}`;
696
+ return `${generate.kind}:${generate.bytes ?? APP_ENV_BASE64_MIN_BYTES}`;
697
+ }
698
+ function appEnvStoredFingerprint(version) {
699
+ return `v${version}`;
700
+ }
701
+ function appEnvDependencyFingerprint(outputsVersion) {
702
+ return `d${outputsVersion}`;
703
+ }
704
+ function appEnvTemplateFingerprint(text, placeholders) {
705
+ const sorted = placeholders.map((entry) => [entry.placeholder, entry.fingerprint]).sort((left, right) => {
706
+ if (left[0] !== right[0]) return left[0] < right[0] ? -1 : 1;
707
+ if (left[1] !== right[1]) return left[1] < right[1] ? -1 : 1;
708
+ return 0;
709
+ });
710
+ return `t${sorted.map(([placeholder, fingerprint]) => `${text}\0${placeholder}\0${fingerprint}`).join("")}`;
711
+ }
712
+ function appEnvPublicHalfName(name) {
713
+ return `${name}${APP_ENV_PUBLIC_HALF_SUFFIX}`;
714
+ }
715
+ function appEnvDependencyPasswordToken(kind) {
716
+ return `${APP_ENV_DEP_PASSWORD_TOKEN_PREFIX}${kind.toUpperCase()}${APP_ENV_DEP_PASSWORD_TOKEN_SUFFIX}`;
717
+ }
718
+ function appEnvKeypairFormatSupported(type, format, passwordEnv) {
719
+ if (format === "base64url-raw") return APP_ENV_KEYPAIR_RAW_TYPES.includes(type);
720
+ if (format === "pkcs12") return passwordEnv !== void 0 && passwordEnv.length > 0;
721
+ return true;
722
+ }
723
+ function hasAppEnvPublicPrefix(name) {
724
+ return APP_ENV_PUBLIC_PREFIXES.some((prefix) => name.startsWith(prefix));
725
+ }
726
+ var APP_ENV_VALIDATION_REFUSAL_CODES = [
727
+ "invalidName",
728
+ "reservedName",
729
+ "valueTooLarge",
730
+ "controlCharacter",
731
+ "lengthMismatch",
732
+ "tooShort",
733
+ "tooLong",
734
+ "patternMismatch"
735
+ ];
736
+ var APP_ENV_IMPORT_OUTCOMES = ["set", "created", "skipped", "refused"];
737
+ var APP_ENV_API_ERROR_CODES = [
738
+ "generatedValueUseRotate",
739
+ "neverRotateNotAcknowledged",
740
+ "rotateConfirmationMismatch",
741
+ "secureStorageUnavailable",
742
+ "tooManyValues",
743
+ "valuesTooLarge",
744
+ "malformedLine",
745
+ "rotateRateLimited"
746
+ ];
747
+ var APP_ENV_ERROR_CODES = [...APP_ENV_VALIDATION_REFUSAL_CODES, ...APP_ENV_API_ERROR_CODES];
748
+ var APP_ENV_ERROR_MESSAGE_LEAVES = {
749
+ invalidName: "invalidName",
750
+ reservedName: "reservedName",
751
+ valueTooLarge: "valueTooLarge",
752
+ controlCharacter: "controlCharacter",
753
+ lengthMismatch: "lengthMismatch",
754
+ tooShort: "tooShort",
755
+ tooLong: "tooLong",
756
+ patternMismatch: "patternMismatch",
757
+ generatedValueUseRotate: "generatedValueUseRotate",
758
+ neverRotateNotAcknowledged: "neverRotateNotAcknowledged",
759
+ rotateConfirmationMismatch: "rotateConfirmationMismatch",
760
+ secureStorageUnavailable: "secureStorageUnavailable",
761
+ tooManyValues: "tooManyValues",
762
+ valuesTooLarge: "valuesTooLarge",
763
+ malformedLine: "malformedLine",
764
+ rotateRateLimited: "rotateRateLimited"
765
+ };
766
+ var APP_ENV_ERROR_MESSAGE_KEY_PREFIX = "dashboard.workDetail.appEnv.errors";
767
+ function appEnvErrorMessageKey(code) {
768
+ return `${APP_ENV_ERROR_MESSAGE_KEY_PREFIX}.${APP_ENV_ERROR_MESSAGE_LEAVES[code]}`;
769
+ }
770
+ var APP_ENV_UNRESOLVED_REASONS = [
771
+ /** A required `prompt` entry has no stored value — plan §2.2:119. */
772
+ "missingRequired",
773
+ /** A `from: domains.primary.*` entry with no primary domain — plan §2.2:121. */
774
+ "noPrimaryDomain",
775
+ /** A build-phase `deps.<kind>.<out>` with no build service of that kind — plan §2.2:122, FR-22. */
776
+ "noBuildService",
777
+ /** A runtime `deps.<kind>.<out>` whose row is not `ready` — plan §2.2:122. */
778
+ "dependencyNotReady",
779
+ /** `platform.smtp.*` / `components.*.internalUrl` are not available at build — plan §2.2:123–124. */
780
+ "notAvailableAtBuild",
781
+ /** `platform.smtp.*` with no relay selected — plan §2.2:123. */
782
+ "relayNotSelected",
783
+ /** A template that cannot be resolved, failing closed — plan §4.6.1:449. */
784
+ "templateUnresolvable"
785
+ ];
786
+ var APP_ENV_RESOLUTION_TARGETS = ["cluster", "runner"];
787
+ var APP_ENV_DECLARED_SOURCES = ["generate", "from", "template", "prompt", "value"];
788
+ var APP_ENV_RECIPE_SOURCES = ["generate", "literal", "template", "prompted", "derived"];
789
+ var APP_ENV_RECIPE_TOKEN_KINDS = ["gen", "prompted", "dep"];
790
+ var APP_ENV_RUNNER_RECIPE_ENDPOINTS = {
791
+ postgres: { host: "postgres", port: 5432, user: "ever-works-build", database: "app" },
792
+ redis: { host: "redis", port: 6379, password: "" },
793
+ objectStorage: { host: "object-storage", port: 9e3, accessKeyId: "ever-works-build" }
794
+ };
795
+ var APP_ENV_BUILD_SERVICE_OUTPUTS = {
796
+ postgres: { host: "127.0.0.1", port: 5432, region: null, from: null },
797
+ redis: { host: "127.0.0.1", port: 6379, region: null, from: null },
798
+ objectStorage: { host: "127.0.0.1", port: 9e3, region: "us-east-1", from: null },
799
+ smtp: { host: "127.0.0.1", port: 1025, region: null, from: "build@example.invalid" }
800
+ };
801
+ var APP_ENV_BUILD_SERVICE_OBJECT_STORAGE_REGION = "us-east-1";
802
+ var APP_ENV_BUILD_SERVICE_SMTP_FROM = "build@example.invalid";
803
+ var APP_ENV_BUILD_SERVICE_VALUE_FLAG = "fromBuildService";
804
+
805
+ // src/apps/app-launcher.ts
806
+ var APP_LAUNCHER_ENVIRONMENTS = ["production", "stage", "develop"];
807
+ var APP_LAUNCHER_ITEM_KINDS = ["platform", "work"];
808
+ var APP_LAUNCHER_SECTIONS = ["pinned", "platforms", "works"];
809
+ var APP_LAUNCHER_WORK_CHIPS = ["deploying", "lastDeployFailed"];
810
+ var APP_LAUNCHER_MANAGE_STATES = ["listed", "notLive", "exposureOff"];
811
+ var APP_LAUNCHER_PLATFORM_STATUSES = ["available", "beta", "soon"];
812
+ var APP_LAUNCHER_REJECTION_REASONS = ["unknownItem", "cannotHideCurrent"];
813
+ var APP_LAUNCHER_EMPTY_ACTIONS = ["createAppWork", "goToWorks"];
814
+ var APP_LAUNCHER_ORIGIN_NOT_ALLOWED = "origin_not_allowed";
815
+ var APP_LAUNCHER_PIN_LIMIT = 6;
816
+ var APP_LAUNCHER_MAX_ITEMS_RESPONSE = 200;
817
+ var APP_LAUNCHER_MAX_CHANGES_PER_SAVE = 200;
818
+ var APP_LAUNCHER_MAX_PREFERENCE_ROWS = 500;
819
+ var APP_LAUNCHER_PANEL_PLATFORMS_MAX = 12;
820
+ var APP_LAUNCHER_PANEL_WORKS_MAX = 24;
821
+ var APP_LAUNCHER_CATALOG_MAX_ENTRIES = 24;
822
+ var APP_LAUNCHER_ICON_MAX_BYTES = 16384;
823
+ var APP_LAUNCHER_CLIENT_CACHE_MS = 5 * 6e4;
824
+ var APP_LAUNCHER_NAME_MAX_LENGTH = 100;
825
+ var APP_LAUNCHER_DESCRIPTION_MAX_LENGTH = 80;
826
+ var APP_LAUNCHER_FILTER_MAX_LENGTH = APP_LAUNCHER_NAME_MAX_LENGTH;
827
+ function isAppLauncherEnvironment(value) {
828
+ return typeof value === "string" && APP_LAUNCHER_ENVIRONMENTS.includes(value);
829
+ }
830
+ function appLauncherPinLimitExceeded(pinnedCount) {
831
+ if (!Number.isInteger(pinnedCount) || pinnedCount < 0) {
832
+ return true;
833
+ }
834
+ return pinnedCount > APP_LAUNCHER_PIN_LIMIT;
835
+ }
836
+
837
+ // src/apps/app-license.types.ts
838
+ var LICENSE_CLASSES = ["green", "amber", "red", "unknown"];
839
+ var LICENSE_CLASS_RANK = {
840
+ green: 0,
841
+ amber: 1,
842
+ unknown: 2,
843
+ red: 3
844
+ };
845
+ var LICENSE_SOURCES = ["detected", "blueprint", "user"];
846
+ var LICENSE_REGISTRY_SOURCES = ["live", "last_good", "snapshot"];
847
+ var MANAGED_HOSTING_REASONS = [
848
+ "licenseNotGreen",
849
+ "upstreamAgreementMissing",
850
+ "entryDisallows",
851
+ "blueprintNotVerified",
852
+ "managedTierDisabled"
853
+ ];
854
+ var MANAGED_HOSTING_AVAILABILITIES = ["available", ...MANAGED_HOSTING_REASONS];
855
+ var BLUEPRINT_MATCH_SOURCES = ["manifest", "alias", "fork", "probe", "explicit", "file"];
856
+ var LICENSE_HOSTING_DECISIONS = ["allowed", "attestationRequired"];
857
+ var LICENSE_TEXT_MATCH_THRESHOLD = 0.9;
858
+ var LICENSE_MAX_FILE_READS = 12;
859
+ var LICENSE_MIXED_DIR_NAMES = ["ee", "enterprise", "premium", "commercial"];
860
+ var LICENSE_MIXED_MAX_DEPTH = 4;
861
+ var LICENSE_EVIDENCE_MAX = 20;
862
+ var LICENSE_TREE_MAX_ENTRIES = 1e5;
863
+ var LICENSE_HEADER_SCAN_BYTES = 2048;
864
+ var LICENSE_ATTEST_PER_MIN = 10;
865
+ var APPS_MANAGED_REQUIRES_VERIFIED = true;
866
+
867
+ // src/apps/app-source.ts
868
+ var APP_SOURCE_REPOSITORY_TYPES = ["app_link", "app_fork", "app_private_copy"];
869
+ var APP_WORK_REPOSITORY_ROLE = "website";
870
+ var APP_REPOSITORY_MODES = ["link", "fork", "private-copy"];
871
+ var APP_SOURCE_REPOSITORY_TYPE_BY_MODE = {
872
+ link: "app_link",
873
+ fork: "app_fork",
874
+ "private-copy": "app_private_copy"
875
+ };
876
+ var APP_SOURCE_REPOSITORY_NAME_SUFFIXES = { app: "-app", default: "-website" };
877
+ var APP_SOURCE_SPEC_FILE = ".works/works.yml";
878
+ var APP_SOURCE_SPEC_VERSION = 2;
879
+ var APP_SOURCE_SPEC_KIND = "app";
880
+ var APP_DEPLOY_TARGET_CHOICES = ["none", "your-cluster", "ever-works-apps"];
881
+ var APP_SOURCE_REASON_CODES = [
882
+ "invalid_url",
883
+ "provider_not_connected",
884
+ "insufficient_scope",
885
+ "not_found",
886
+ "sso_authorization_required",
887
+ "oauth_app_restricted",
888
+ "empty_repository",
889
+ "no_push_access",
890
+ "archived",
891
+ "forking_disabled",
892
+ "own_repository",
893
+ "target_owner_unavailable",
894
+ "target_owner_forbidden",
895
+ "too_large_for_private_copy",
896
+ "uses_lfs",
897
+ "copy_name_unavailable",
898
+ "in_use_by_another_account",
899
+ "app_work_exists",
900
+ "create_in_progress",
901
+ "rate_limited",
902
+ "managed_hosting_unavailable",
903
+ "cluster_target_unavailable",
904
+ "app_works_disabled",
905
+ "blueprint_mismatch"
906
+ ];
907
+ function isAppSourceReasonCode(value) {
908
+ return typeof value === "string" && APP_SOURCE_REASON_CODES.includes(value);
909
+ }
910
+ var APP_SOURCE_BLUEPRINT_STATUSES = ["matched", "none", "unavailable"];
911
+ var APP_SOURCE_BLUEPRINT_MATCH_SOURCES = ["manifest", "alias", "fork", "probe", "explicit"];
912
+ var APP_SOURCE_LICENSE_CLASSES = ["green", "amber", "red", "unknown"];
913
+ var APP_SOURCE_LICENSE_SOURCES = ["detected", "blueprint", "user"];
914
+ function firstReason(candidates) {
915
+ for (const [matches, reason] of candidates) {
916
+ if (matches) {
917
+ return reason;
918
+ }
919
+ }
920
+ return void 0;
921
+ }
922
+ function resolveAppRepositoryModes(factsInput) {
923
+ const linkReason = firstReason([
924
+ [!factsInput.canPush, "no_push_access"],
925
+ [factsInput.archived, "archived"],
926
+ [factsInput.isInUseByAnotherAccount, "in_use_by_another_account"]
927
+ ]);
928
+ const forkReason = firstReason([
929
+ [!factsInput.allowForking, "forking_disabled"],
930
+ [factsInput.empty, "empty_repository"],
931
+ [factsInput.isOwnRepository, "own_repository"]
932
+ ]);
933
+ const sizeKnown = typeof factsInput.sizeKb === "number" && Number.isFinite(factsInput.sizeKb) && factsInput.sizeKb >= 0;
934
+ const copyReason = firstReason([
935
+ [!sizeKnown || factsInput.sizeKb > APP_PRIVATE_COPY_MAX_SIZE_KB, "too_large_for_private_copy"],
936
+ [factsInput.usesLfs, "uses_lfs"],
937
+ [factsInput.visibility === "private" && !factsInput.allowForking, "forking_disabled"]
938
+ ]);
939
+ const modes = {
940
+ link: linkReason ? { available: false, reason: linkReason } : { available: true },
941
+ fork: forkReason ? { available: false, reason: forkReason } : { available: true },
942
+ "private-copy": copyReason ? { available: false, reason: copyReason } : { available: true }
943
+ };
944
+ let defaultMode = null;
945
+ if (modes.link.available && factsInput.canPush && !factsInput.isFork) {
946
+ defaultMode = "link";
947
+ } else if (modes.fork.available && (!factsInput.canPush || factsInput.isFork)) {
948
+ defaultMode = "fork";
949
+ } else if (modes.link.available) {
950
+ defaultMode = "link";
951
+ }
952
+ return { modes, defaultMode };
953
+ }
954
+ var APP_INSPECT_MAX_PROVIDER_CALLS = 15;
955
+ var APP_INSPECT_FIXED_PROVIDER_CALLS = 5;
956
+ var APP_INSPECT_OWNER_MIN_CALLS_REMAINING = 3;
957
+ function canStartTargetOwnerScan(callsRemaining) {
958
+ return Number.isFinite(callsRemaining) && callsRemaining >= APP_INSPECT_OWNER_MIN_CALLS_REMAINING;
959
+ }
960
+ var APP_INSPECT_P95_BUDGET_MS = 8e3;
961
+ var APP_INSPECT_CACHE_TTL_MS = 6e4;
962
+ var APP_INSPECT_RATE_LIMIT_PER_MINUTE = 30;
963
+ var APP_TARGET_OWNER_SCAN_LIMIT_P1 = 30;
964
+ var APP_TARGET_OWNER_SCAN_LIMIT_P2 = 200;
965
+ var APP_PRIVATE_COPY_MAX_SIZE_KB = 512e3;
966
+ var APP_PRIVATE_COPY_NAME_ATTEMPTS = 5;
967
+ var APP_CREATE_LOCK_TTL_MS = 12e4;
968
+ var APP_CREATE_IDEMPOTENCY_WINDOW_MS = 6e5;
969
+ var APP_CREATE_RESPONSE_BUDGET_MS = 1e4;
970
+ var APP_REPOSITORY_URL_MAX_LENGTH = 400;
971
+ function appRepositoryUrlLengthExceeded(repositoryUrl) {
972
+ return typeof repositoryUrl !== "string" || repositoryUrl.length > APP_REPOSITORY_URL_MAX_LENGTH;
973
+ }
974
+
975
+ // src/apps/app-runtime.ts
976
+ var APP_DEPLOY_TARGETS = APP_DEPLOY_TARGET_CHOICES;
977
+ var APP_DEPLOY_PURPOSES = ["deploy", "verification"];
978
+ var APP_DEPLOY_PHASES = [
979
+ "prepare",
980
+ "pre-deploy-jobs",
981
+ "rollout",
982
+ "first-deploy-jobs",
983
+ "in-cluster-smoke",
984
+ "publish",
985
+ "public-smoke",
986
+ "post-deploy-jobs",
987
+ "cron",
988
+ "rollback",
989
+ "done"
990
+ ];
991
+ var APP_DEPLOY_OUTCOMES = [
992
+ "succeeded",
993
+ "succeeded-with-warnings",
994
+ "failed",
995
+ "rolled-back",
996
+ "cancelled",
997
+ "rollback-failed"
998
+ ];
999
+ var APP_CANCEL_REASONS = ["user", "quarantined", "app_work_deleting"];
1000
+ var APP_DEPLOYMENT_STATES = [
1001
+ "INITIALIZING",
1002
+ "QUEUED",
1003
+ "BUILDING",
1004
+ "DEPLOYING",
1005
+ "VERIFYING",
1006
+ "READY",
1007
+ "ERROR",
1008
+ "CANCELED",
1009
+ "TIMEOUT",
1010
+ "ROLLED_BACK",
1011
+ "SUPERSEDED"
1012
+ ];
1013
+ var APP_DEPLOYMENT_TERMINAL_STATES = [
1014
+ "READY",
1015
+ "ERROR",
1016
+ "CANCELED",
1017
+ "TIMEOUT",
1018
+ "ROLLED_BACK",
1019
+ "SUPERSEDED"
1020
+ ];
1021
+ var APP_DEPLOYMENT_DISPLAY_STATES = [
1022
+ "queued",
1023
+ "deploying",
1024
+ "checking",
1025
+ "live",
1026
+ "live-with-warnings",
1027
+ "failed",
1028
+ "rolled-back",
1029
+ "cancelled",
1030
+ "cancelled-quarantined",
1031
+ "skipped"
1032
+ ];
1033
+ var APP_RUNTIME_STATES = [
1034
+ "not-deployed",
1035
+ "live",
1036
+ "degraded",
1037
+ "down",
1038
+ "unreachable",
1039
+ "paused",
1040
+ "deleting"
1041
+ ];
1042
+ var APP_RUNTIME_HEALTH = ["unknown", "healthy", "degraded", "down", "unreachable"];
1043
+ var APP_PRECONDITION_CODES = [
1044
+ "spec_invalid",
1045
+ "license_blocks_target",
1046
+ "license_attestation_missing",
1047
+ "env_required_unset",
1048
+ "dependency_not_ready",
1049
+ "no_green_build",
1050
+ "no_green_build_for_head",
1051
+ "build_image_missing",
1052
+ "nothing_to_deploy",
1053
+ "image_not_pinned",
1054
+ "image_not_found",
1055
+ "image_private_unsupported",
1056
+ "image_unresolvable",
1057
+ "primary_domain_missing",
1058
+ "target_none",
1059
+ "target_not_checked",
1060
+ "cluster_changed_unconfirmed",
1061
+ "managed_disabled",
1062
+ "managed_scope_unverified_blueprint",
1063
+ "quota_exceeded",
1064
+ "managed_ineligible",
1065
+ "managed_sandbox_unavailable",
1066
+ "app_work_deleting",
1067
+ "paused",
1068
+ "deploy_in_progress",
1069
+ "cron_auth_env_unset",
1070
+ "job_auth_env_unset",
1071
+ "volume_replicas",
1072
+ "volume_shrink",
1073
+ "privileged_port",
1074
+ "cron_too_frequent",
1075
+ "managed_root_forbidden",
1076
+ "image_user_unverifiable",
1077
+ "worker_not_isolated",
1078
+ "env_source_unavailable",
1079
+ "pull_credential_unavailable",
1080
+ "namespace_foreign",
1081
+ "verification_namespace_forbidden"
1082
+ ];
1083
+ var APP_PRECONDITION_STATES = {
1084
+ spec_invalid: APP_RUNTIME_STATES,
1085
+ license_blocks_target: APP_RUNTIME_STATES,
1086
+ license_attestation_missing: APP_RUNTIME_STATES,
1087
+ env_required_unset: APP_RUNTIME_STATES,
1088
+ dependency_not_ready: APP_RUNTIME_STATES,
1089
+ no_green_build: APP_RUNTIME_STATES,
1090
+ no_green_build_for_head: APP_RUNTIME_STATES,
1091
+ build_image_missing: APP_RUNTIME_STATES,
1092
+ nothing_to_deploy: APP_RUNTIME_STATES,
1093
+ image_not_pinned: APP_RUNTIME_STATES,
1094
+ image_not_found: APP_RUNTIME_STATES,
1095
+ image_private_unsupported: APP_RUNTIME_STATES,
1096
+ image_unresolvable: APP_RUNTIME_STATES,
1097
+ primary_domain_missing: APP_RUNTIME_STATES,
1098
+ target_none: APP_RUNTIME_STATES,
1099
+ target_not_checked: APP_RUNTIME_STATES,
1100
+ cluster_changed_unconfirmed: APP_RUNTIME_STATES,
1101
+ managed_disabled: APP_RUNTIME_STATES,
1102
+ managed_scope_unverified_blueprint: APP_RUNTIME_STATES,
1103
+ quota_exceeded: APP_RUNTIME_STATES,
1104
+ managed_ineligible: APP_RUNTIME_STATES,
1105
+ managed_sandbox_unavailable: APP_RUNTIME_STATES,
1106
+ app_work_deleting: ["deleting"],
1107
+ paused: ["paused"],
1108
+ deploy_in_progress: APP_RUNTIME_STATES,
1109
+ cron_auth_env_unset: APP_RUNTIME_STATES,
1110
+ job_auth_env_unset: APP_RUNTIME_STATES,
1111
+ volume_replicas: APP_RUNTIME_STATES,
1112
+ volume_shrink: APP_RUNTIME_STATES,
1113
+ privileged_port: APP_RUNTIME_STATES,
1114
+ cron_too_frequent: APP_RUNTIME_STATES,
1115
+ managed_root_forbidden: APP_RUNTIME_STATES,
1116
+ image_user_unverifiable: APP_RUNTIME_STATES,
1117
+ worker_not_isolated: APP_RUNTIME_STATES,
1118
+ env_source_unavailable: APP_RUNTIME_STATES,
1119
+ pull_credential_unavailable: APP_RUNTIME_STATES,
1120
+ namespace_foreign: APP_RUNTIME_STATES,
1121
+ verification_namespace_forbidden: APP_RUNTIME_STATES
1122
+ };
1123
+ var APP_PRECONDITION_MESSAGE_LEAVES = {
1124
+ spec_invalid: "specInvalid",
1125
+ license_blocks_target: "licenseBlocksTarget",
1126
+ license_attestation_missing: "licenseAttestationMissing",
1127
+ env_required_unset: "envRequiredUnset",
1128
+ dependency_not_ready: "dependencyNotReady",
1129
+ no_green_build: "noGreenBuild",
1130
+ no_green_build_for_head: "noGreenBuildForHead",
1131
+ build_image_missing: "buildImageMissing",
1132
+ nothing_to_deploy: "nothingToDeploy",
1133
+ image_not_pinned: "imageNotPinned",
1134
+ image_not_found: "imageNotFound",
1135
+ image_private_unsupported: "imagePrivateUnsupported",
1136
+ image_unresolvable: "imageUnresolvable",
1137
+ primary_domain_missing: "primaryDomainMissing",
1138
+ target_none: "targetNone",
1139
+ target_not_checked: "targetNotChecked",
1140
+ cluster_changed_unconfirmed: "clusterChangedUnconfirmed",
1141
+ managed_disabled: "managedDisabled",
1142
+ managed_scope_unverified_blueprint: "managedScopeUnverifiedBlueprint",
1143
+ quota_exceeded: "quotaExceeded",
1144
+ managed_ineligible: "managedIneligible",
1145
+ managed_sandbox_unavailable: "managedSandboxUnavailable",
1146
+ app_work_deleting: "appWorkDeleting",
1147
+ paused: "paused",
1148
+ deploy_in_progress: "deployInProgress",
1149
+ cron_auth_env_unset: "cronAuthEnvUnset",
1150
+ job_auth_env_unset: "jobAuthEnvUnset",
1151
+ volume_replicas: "volumeReplicas",
1152
+ volume_shrink: "volumeShrink",
1153
+ privileged_port: "privilegedPort",
1154
+ cron_too_frequent: "cronTooFrequent",
1155
+ managed_root_forbidden: "managedRootForbidden",
1156
+ image_user_unverifiable: "imageUserUnverifiable",
1157
+ worker_not_isolated: "workerNotIsolated",
1158
+ env_source_unavailable: "envSourceUnavailable",
1159
+ pull_credential_unavailable: "pullCredentialUnavailable",
1160
+ namespace_foreign: "namespaceForeign",
1161
+ verification_namespace_forbidden: "verificationNamespaceForbidden"
1162
+ };
1163
+ var APP_FAILURE_CODES = [
1164
+ "crash_loop",
1165
+ "oom_killed",
1166
+ "image_pull",
1167
+ "create_container_config",
1168
+ "rollout_timeout",
1169
+ "job_failed",
1170
+ "smoke_failed",
1171
+ "publish_failed",
1172
+ "rollback_failed",
1173
+ "cluster_unreachable",
1174
+ "worker_failed",
1175
+ "isolation_not_enforced",
1176
+ "managed_root_forbidden",
1177
+ "image_user_unverifiable",
1178
+ "deadline_exceeded",
1179
+ "image_not_found",
1180
+ "image_private_unsupported",
1181
+ "image_unresolvable"
1182
+ ];
1183
+ var APP_FAILURE_MESSAGE_LEAVES = {
1184
+ crash_loop: "crashLoop",
1185
+ oom_killed: "oomKilled",
1186
+ image_pull: "imagePull",
1187
+ create_container_config: null,
1188
+ rollout_timeout: "rolloutTimeout",
1189
+ job_failed: "jobFailed",
1190
+ smoke_failed: "smokeFailed",
1191
+ publish_failed: "publishFailed",
1192
+ rollback_failed: "rollbackFailed",
1193
+ cluster_unreachable: null,
1194
+ worker_failed: null,
1195
+ isolation_not_enforced: null,
1196
+ managed_root_forbidden: "imageRunsAsRoot",
1197
+ image_user_unverifiable: "imageUserUnverifiable",
1198
+ deadline_exceeded: null,
1199
+ image_not_found: "imageNotFound",
1200
+ image_private_unsupported: "imagePrivateUnsupported",
1201
+ image_unresolvable: "imageUnresolvable"
1202
+ };
1203
+ var APP_FAILURE_CODES_WITHOUT_MESSAGE_LEAF = [
1204
+ "create_container_config",
1205
+ "cluster_unreachable",
1206
+ "worker_failed",
1207
+ "isolation_not_enforced",
1208
+ "deadline_exceeded"
1209
+ ];
1210
+ var APP_FAILURE_LEAVES_WITHOUT_FAILURE_CODE = ["imageNotPinned"];
1211
+ var APP_DEPLOY_REQUEST_BUDGET_MS = 2e3;
1212
+ var APP_PREPARE_TIMEOUT_S = 120;
1213
+ var APP_JOB_TIMEOUT_DEFAULT_S = 600;
1214
+ var APP_ROLLOUT_EXTRA_S = 120;
1215
+ var APP_ROLLOUT_MIN_S = 300;
1216
+ var APP_ROLLOUT_MAX_S = 2400;
1217
+ var APP_ROLLOUT_POLL_S = 5;
1218
+ var APP_ROLLOUT_RESTARTS_FAIL = 3;
1219
+ var APP_ROLLOUT_STUCK_POD_S = 180;
1220
+ var APP_WORKER_STABLE_S = 30;
1221
+ var APP_SMOKE_IN_CLUSTER_WINDOW_S = 120;
1222
+ var APP_SMOKE_RETRY_S = 10;
1223
+ var APP_SMOKE_PUBLIC_FIRST_WINDOW_S = 600;
1224
+ var APP_SMOKE_PUBLIC_WINDOW_S = 180;
1225
+ var APP_SMOKE_BODY_BYTES = 1048576;
1226
+ var APP_SMOKE_FOUND_CHARS = 200;
1227
+ var APP_PUBLISH_TIMEOUT_S = 60;
1228
+ var APP_DEPLOY_MAX_DURATION_S = 7200;
1229
+ var APP_ENV_SECRETS_KEPT = 3;
1230
+ var APP_ROLLBACK_CANDIDATES = 20;
1231
+ var APP_JOB_RUNS_KEPT = 3;
1232
+ var APP_JOB_TTL_S = 86400;
1233
+ var APP_TMP_SIZE_MI = 256;
1234
+ var APP_PAUSE_TIMEOUT_S = 120;
1235
+ var APP_REMOVE_TIMEOUT_S = 300;
1236
+ var APP_HEALTH_POLL_S = 60;
1237
+ var APP_HEALTH_BATCH = 500;
1238
+ var APP_HEALTH_POLL_TIMEOUT_S = 20;
1239
+ var APP_HEALTH_CLUSTER_CONCURRENCY = 5;
1240
+ var APP_HEALTH_FAILS_TO_NOTIFY = 5;
1241
+ var APP_HEALTH_PASSES_TO_RECOVER = 3;
1242
+ var APP_HEALTH_UNREACHABLE_POLLS = 10;
1243
+ var APP_HEALTH_NOTIFY_DEDUPE_H = 6;
1244
+ var APP_STATUS_STALE_S = 180;
1245
+ var APP_STATUS_REFRESH_MIN_S = 15;
1246
+ var APP_CERT_NOTIFY_AFTER_MIN = 30;
1247
+ var APP_LOG_LINES_DEFAULT = 200;
1248
+ var APP_LOG_LINES_MAX = 500;
1249
+ var APP_LOG_BYTES_MAX = 262144;
1250
+ var APP_LOG_CACHE_S = 300;
1251
+ var APP_LOG_REDACT_MIN_CHARS = 8;
1252
+ var APP_CLUSTER_CHECK_TIMEOUT_S = 30;
1253
+ var APP_CLUSTER_DIAL_TIMEOUT_S = 10;
1254
+ var APP_ISOLATION_PROBE_TIMEOUT_S = 3;
1255
+ var APP_DOMAIN_RECONCILE_S = 60;
1256
+ var APP_MANAGED_MAX_PER_USER_DEFAULT = 3;
1257
+ var APP_MANAGED_CRON_MIN_INTERVAL_MIN = 5;
1258
+ var APP_SUBDOMAIN_LABEL_MIN = 3;
1259
+ var APP_PREVIEWS_MAX = 3;
1260
+ var APP_PREVIEW_CLOSE_REMOVE_MIN = 10;
1261
+ var APP_PREVIEW_IDLE_H = 72;
1262
+ var APP_DEPLOY_LOCK_STALE_S = APP_DEPLOY_MAX_DURATION_S + 60;
1263
+ function probeToleranceSeconds(probe) {
1264
+ const period = Number.isFinite(probe.periodSeconds) ? Math.max(0, probe.periodSeconds) : 0;
1265
+ const threshold = Number.isFinite(probe.failureThreshold) ? Math.max(0, probe.failureThreshold) : 0;
1266
+ const tolerance = period * threshold;
1267
+ return Number.isFinite(tolerance) ? tolerance : 0;
1268
+ }
1269
+ function appComponentDeadlineSeconds(input) {
1270
+ const total = probeToleranceSeconds(input.startup) + probeToleranceSeconds(input.readiness) + APP_ROLLOUT_EXTRA_S;
1271
+ return Math.min(APP_ROLLOUT_MAX_S, Math.max(APP_ROLLOUT_MIN_S, total));
1272
+ }
1273
+
1274
+ // src/apps/app-spec-issues.ts
1275
+ var APP_SPEC_FILE_MAX_BYTES = 262144;
1276
+ var APP_SPEC_MAX_ISSUES = 200;
1277
+ var APP_SPEC_YAML_MAX_ALIASES = 100;
1278
+ var APP_SPEC_MAX_DEPTH = 12;
1279
+ var APP_SPEC_SUGGESTION_MAX_DISTANCE = 2;
1280
+ var APP_SPEC_SEVERITIES = ["error", "warning"];
1281
+ var APP_SPEC_VALIDATION_STATUSES = [
1282
+ "valid",
1283
+ "valid_with_warnings",
1284
+ "invalid",
1285
+ "missing",
1286
+ "unreadable"
1287
+ ];
1288
+ var APP_SPEC_VALIDATION_MODES = ["draft", "data-repository", "blueprint"];
1289
+ var APP_SPEC_ISSUE_CODES = [
1290
+ // Structural (schema.md §23:538-543)
1291
+ "yaml_syntax",
1292
+ "file_too_large",
1293
+ "yaml_alias_limit",
1294
+ "duplicate_key",
1295
+ "kind_mismatch",
1296
+ "required",
1297
+ "invalid_type",
1298
+ "invalid_enum",
1299
+ "out_of_range",
1300
+ "pattern",
1301
+ "unknown_field",
1302
+ "unknown_field_newer_version",
1303
+ "blueprint_mode_forbidden_key",
1304
+ "pattern_unsupported",
1305
+ "prompt_example_secret",
1306
+ "generated_not_secret",
1307
+ "worker_port_forbidden",
1308
+ "worker_probe_without_port",
1309
+ "http_job_requires_web_component",
1310
+ "public_bucket_undeclared",
1311
+ "extension_unavailable",
1312
+ "cron_invalid",
1313
+ "reference_syntax",
1314
+ "template_cycle",
1315
+ "template_too_deep",
1316
+ "blueprint_repo_outside_org",
1317
+ // Rule codes (schema.md §22:455-481, R1 → R27)
1318
+ "web_component_needs_port",
1319
+ "strategy_requires_components",
1320
+ "components_require_strategy",
1321
+ "primary_component_invalid",
1322
+ "duplicate_name",
1323
+ "reference_unresolved",
1324
+ "secret_reference_not_secret",
1325
+ "phase_mismatch",
1326
+ "env_source_count",
1327
+ "literal_secret_value",
1328
+ "generate_validate_conflict",
1329
+ "literal_secret_in_build_args",
1330
+ "secret_build_arg",
1331
+ "upstream_pr_approval_required",
1332
+ "upstream_forbidden_for_link",
1333
+ "upstream_sync_requires_upstream",
1334
+ "upstream_prs_require_fork",
1335
+ "component_ref_unknown",
1336
+ "auth_env_not_secret",
1337
+ "limit_below_request",
1338
+ "volume_replicas",
1339
+ "image_not_pinned",
1340
+ "advisory_check",
1341
+ "schedule_too_frequent",
1342
+ "path_outside_repository",
1343
+ "reserved_env_name",
1344
+ "license_declared_mismatch",
1345
+ "keypair_format_unsupported",
1346
+ "keypair_password_invalid",
1347
+ "sourceOfferMissing",
1348
+ // Server-only rules (schema.md §22:483-488)
1349
+ "source_relation_mismatch",
1350
+ "blueprint_unknown",
1351
+ "build_strategy_unavailable",
1352
+ "dependency_unavailable",
1353
+ "tracked_branch_missing"
1354
+ ];
1355
+
1356
+ // src/apps/app-spec.types.ts
1357
+ var APP_SPEC_VERSION = 1;
1358
+ var APP_SPEC_EVALUATE_COALESCE_MS = 5e3;
1359
+ var APP_SPEC_LAZY_HEAD_CHECK_MS = 6e4;
1360
+ var APP_SPEC_DRAFT_VALIDATE_PER_MIN = 30;
1361
+ var APP_SPEC_REFRESH_PER_MIN = 6;
1362
+ var APP_SPEC_MAX_PROTECTED_PATHS = 50;
1363
+ var APP_SPEC_MAX_REQUIRE_HUMAN_MERGE_PATHS = 50;
1364
+ var APP_SPEC_PUBLIC_KEY_SUFFIX = "_PUBLIC";
1365
+ var APP_SPEC_SOURCE_RELATIONS = ["fork", "private-copy", "link"];
1366
+ var APP_SPEC_BUILD_STRATEGIES = ["dockerfile", "image", "auto", "none"];
1367
+ var APP_SPEC_COMPONENT_ROLES = ["web", "worker"];
1368
+ var APP_SPEC_PROBE_KINDS = ["startup", "readiness", "liveness"];
1369
+ var APP_SPEC_ENV_PHASES = ["runtime", "build", "both"];
1370
+ var APP_SPEC_GENERATE_KINDS = ["base64", "hex", "chars", "uuid", "keypair"];
1371
+ var APP_SPEC_GENERATE_ALPHABETS = ["alnum", "alnum-symbols", "hex-lower", "base64url"];
1372
+ var APP_SPEC_GENERATE_ROTATIONS = ["never"];
1373
+ var APP_SPEC_KEYPAIR_TYPES = ["ed25519", "ec-p256", "rsa-2048", "rsa-4096"];
1374
+ var APP_SPEC_KEYPAIR_FORMATS = ["pem", "base64url-raw", "pkcs12"];
1375
+ var APP_SPEC_JOB_WHENS = ["pre-deploy", "first-deploy", "post-deploy"];
1376
+ var APP_SPEC_HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"];
1377
+ var APP_SPEC_HTTP_AUTH_SCHEMES = ["bearer", "raw"];
1378
+ var APP_SPEC_CRON_CONCURRENCIES = ["forbid", "allow"];
1379
+ var APP_SPEC_DOMAIN_CHANGES = ["restart", "rebuild"];
1380
+ var APP_SPEC_SMOKE_HTTP_METHODS = ["GET", "HEAD", "POST"];
1381
+ var APP_SPEC_SMOKE_WHENS = ["always", "first-deploy"];
1382
+ var APP_SPEC_UPSTREAM_SYNC_MODES = ["merge"];
1383
+ var APP_SPEC_POSTGRES_VERSIONS = ["14", "15", "16", "17"];
1384
+ var APP_SPEC_REDIS_VERSIONS = ["7"];
1385
+ var APP_SPEC_REDIS_MAXMEMORY_POLICIES = [
1386
+ "noeviction",
1387
+ "allkeys-lru",
1388
+ "volatile-lru",
1389
+ "allkeys-lfu",
1390
+ "volatile-lfu"
1391
+ ];
1392
+ var APP_SPEC_EVALUATION_TRIGGERS = [
1393
+ "created",
1394
+ "push",
1395
+ "pr_merged",
1396
+ "manual",
1397
+ "lazy",
1398
+ "blueprint_applied",
1399
+ "build"
1400
+ ];
1401
+ var APP_SPEC_BLOCK_DEFAULTS = {
1402
+ // §8 display
1403
+ "display.protectedPaths": [],
1404
+ // §9 build
1405
+ "build.dockerfile": "Dockerfile",
1406
+ "build.context": ".",
1407
+ "build.args": [],
1408
+ "build.services": [],
1409
+ "build.resources.cpu": 2,
1410
+ "build.resources.memory": "7Gi",
1411
+ "build.resources.timeoutMinutes": 60,
1412
+ // §10 components
1413
+ "components[].replicas": 1,
1414
+ "components[].writableRootFilesystem": false,
1415
+ "components[].probes.startup.periodSeconds": 10,
1416
+ "components[].probes.startup.timeoutSeconds": 5,
1417
+ "components[].probes.startup.initialDelaySeconds": 0,
1418
+ "components[].probes.startup.failureThreshold": 30,
1419
+ "components[].probes.readiness.periodSeconds": 10,
1420
+ "components[].probes.readiness.timeoutSeconds": 5,
1421
+ "components[].probes.readiness.initialDelaySeconds": 0,
1422
+ "components[].probes.readiness.failureThreshold": 3,
1423
+ "components[].probes.liveness.periodSeconds": 10,
1424
+ "components[].probes.liveness.timeoutSeconds": 5,
1425
+ "components[].probes.liveness.initialDelaySeconds": 0,
1426
+ "components[].probes.liveness.failureThreshold": 3,
1427
+ "components[].resources.cpu": "250m",
1428
+ "components[].resources.memory": "512Mi",
1429
+ "components[].volumes": [],
1430
+ "components[].volumes[].backup": true,
1431
+ // §11 dependencies
1432
+ "dependencies.postgres.version": "16",
1433
+ "dependencies.postgres.directUrl": false,
1434
+ "dependencies.postgres.extensions": [],
1435
+ "dependencies.redis.version": "7",
1436
+ "dependencies.redis.maxmemoryPolicy": "noeviction",
1437
+ "dependencies.redis.persistence": false,
1438
+ "dependencies.objectStorage.publicBuckets": [],
1439
+ "dependencies.smtp.required": false,
1440
+ // §12 env
1441
+ "env[].secret": false,
1442
+ "env[].phase": "runtime",
1443
+ "env[].generate.bytes": 32,
1444
+ "env[].generate.length": 32,
1445
+ "env[].generate.alphabet": "alnum",
1446
+ "env[].generate.keypair.type": "ed25519",
1447
+ "env[].generate.keypair.format": "pem",
1448
+ "env[].generate.rotate": "never",
1449
+ "env[].prompt.required": true,
1450
+ // §13 jobs
1451
+ "jobs[].http.method": "POST",
1452
+ "jobs[].http.authScheme": "bearer",
1453
+ "jobs[].http.expect.status": [200, 201, 204],
1454
+ "jobs[].timeoutSeconds": 600,
1455
+ "jobs[].retries": 0,
1456
+ // §14 cron
1457
+ "cron[].http.method": "POST",
1458
+ "cron[].http.authScheme": "bearer",
1459
+ "cron[].http.expect.status": [200, 201, 204],
1460
+ "cron[].timeoutSeconds": 300,
1461
+ "cron[].concurrency": "forbid",
1462
+ // §15 domains
1463
+ "domains.publicUrlEnv": [],
1464
+ "domains.onChange": "restart",
1465
+ "domains.needsHairpin": false,
1466
+ // §16 smoke
1467
+ "smoke[].http.method": "GET",
1468
+ "smoke[].expect.status": [200],
1469
+ "smoke[].expect.bodyContains": [],
1470
+ "smoke[].expect.bodyNotContains": [],
1471
+ "smoke[].expect.maxLatencyMs": 1e4,
1472
+ "smoke[].when": "always",
1473
+ // §17 checks
1474
+ "checks[].required": true,
1475
+ "checks[].timeoutSeconds": 1800,
1476
+ // §18 agents
1477
+ "agents.instructionFiles": [],
1478
+ "agents.maxPullRequestChangedLines": 500,
1479
+ "agents.maxPullRequestChangedFiles": 50,
1480
+ "agents.requireHumanMergePaths": [],
1481
+ // §19 upstreamSync
1482
+ "upstreamSync.enabled": true,
1483
+ "upstreamSync.schedule": "0 6 * * 1",
1484
+ "upstreamSync.mode": "merge",
1485
+ // §20 upstreamPullRequests, provisioning
1486
+ "upstreamPullRequests.enabled": false,
1487
+ "upstreamPullRequests.requireApproval": true,
1488
+ "upstreamPullRequests.maxOpen": 3,
1489
+ "provisioning.autoReprovision": false
1490
+ };
1491
+ var APP_SPEC_EXTENSION_KEY_PREFIX = "x-";
1492
+ var APP_SPEC_SOURCE_ONLY_KEYS = ["kind", "appSpecVersion", "source"];
1493
+ function isSourceOnlyAppSpec(spec) {
1494
+ if (typeof spec !== "object" || spec === null || Array.isArray(spec)) {
1495
+ return false;
1496
+ }
1497
+ const allowed = APP_SPEC_SOURCE_ONLY_KEYS;
1498
+ for (const key of Object.keys(spec)) {
1499
+ if (key.startsWith(APP_SPEC_EXTENSION_KEY_PREFIX)) {
1500
+ continue;
1501
+ }
1502
+ if (!allowed.includes(key)) {
1503
+ return false;
1504
+ }
1505
+ }
1506
+ return true;
1507
+ }
1508
+
1509
+ // src/apps/app-upstream.ts
1510
+ var APP_READINESS_STATES = ["preparing", "ready", "timed_out", "failed", "waiting_for_setup_pr"];
1511
+ var APP_SYNC_RESULTS = [
1512
+ "up_to_date",
1513
+ "fast_forwarded",
1514
+ "pull_request_opened",
1515
+ "pull_request_updated",
1516
+ "conflict",
1517
+ "skipped",
1518
+ "paused",
1519
+ "failed"
1520
+ ];
1521
+ var APP_SYNC_REASONS = [
1522
+ "up_to_date",
1523
+ "fast_forwarded",
1524
+ "pull_request_opened",
1525
+ "pull_request_updated",
1526
+ "pull_request_merged",
1527
+ "pull_request_closed",
1528
+ "conflict",
1529
+ "held_for_workflow_review",
1530
+ "skipped_rate_limited",
1531
+ "skipped_budget",
1532
+ "license_worse",
1533
+ "disabled_by_spec",
1534
+ "paused",
1535
+ "provider_unsupported",
1536
+ "failed"
1537
+ ];
1538
+ var APP_READINESS_FAILURE_REASONS = [
1539
+ "access_revoked",
1540
+ "dispatch_unavailable",
1541
+ "copy_refused",
1542
+ "too_large",
1543
+ "provider_unsupported",
1544
+ "timed_out",
1545
+ "setup_pull_request_closed",
1546
+ "handler_failed",
1547
+ "blueprint_apply_failed",
1548
+ "data_repository_missing"
1549
+ ];
1550
+ var APP_UPSTREAM_WARNING_CODES = [
1551
+ "upstreamArchived",
1552
+ "upstreamUnavailable",
1553
+ "forkMissing",
1554
+ "privateCopyMissing",
1555
+ "rateLimited",
1556
+ "defaultBranchRenamed",
1557
+ "privateCopyTooLarge",
1558
+ "historyRewritten",
1559
+ "needsAdmin",
1560
+ "appPermissionMissing",
1561
+ "notReady",
1562
+ "workflowsGated"
1563
+ ];
1564
+ var APP_UPSTREAM_STATUSES = ["available", "archived", "unavailable", "none", "unknown"];
1565
+ var APP_ACTIONS_STATES = [
1566
+ "pending",
1567
+ "clean",
1568
+ "needs_admin",
1569
+ "permission_missing",
1570
+ "failed",
1571
+ "not_applicable"
1572
+ ];
1573
+ var APP_FORK_READINESS_REASONS = ["initial", "retry", "redispatch", "setup_merged"];
1574
+ var APP_FORK_READINESS_POLL_DELAYS_MS = [2e3, 4e3, 8e3, 15e3];
1575
+ var APP_FORK_READINESS_POLL_INTERVAL_MS = 15e3;
1576
+ var APP_FORK_READINESS_TIMEOUT_MS = 9e5;
1577
+ var APP_FORK_READINESS_READY_LATENCY_MS = 3e4;
1578
+ var APP_FORK_READINESS_MANUAL_RETRIES_PER_HOUR = 3;
1579
+ var APP_FORK_READINESS_MAX_REDISPATCH = 3;
1580
+ var APP_FORK_READINESS_IDLE_MS = 6e5;
1581
+ var APP_FORK_READINESS_TIMEOUT_OVERRIDE_MIN_MS = 5e3;
1582
+ var APP_FORK_READINESS_TIMEOUT_ENV = "EVER_WORKS_APP_FORK_READINESS_TIMEOUT_MS";
1583
+ var APP_SETUP_PR_CHECK_ON_VIEW_MIN_INTERVAL_MS = 6e4;
1584
+ var APP_SETUP_PR_CHECK_BATCH = 50;
1585
+ var APP_UPSTREAM_SYNC_DEFAULT_SCHEDULE = "0 6 * * 1";
1586
+ var APP_UPSTREAM_SYNC_MIN_INTERVAL_MS = 36e5;
1587
+ var APP_UPSTREAM_SYNC_JITTER_MAX_MS = 3e5;
1588
+ var APP_UPSTREAM_SYNC_MANUAL_PER_HOUR = 6;
1589
+ var APP_UPSTREAM_SYNC_ACK_BUDGET_MS = 2e3;
1590
+ var APP_UPSTREAM_SYNC_LOCK_TTL_MS = 18e5;
1591
+ var APP_UPSTREAM_SYNC_DISPATCH_CRON = "*/10 * * * *";
1592
+ var APP_UPSTREAM_SYNC_DISPATCH_BATCH = 50;
1593
+ var APP_UPSTREAM_SYNC_MAX_PROVIDER_CALLS = 20;
1594
+ var APP_UPSTREAM_SYNC_BRANCH = "ever-works/upstream-sync";
1595
+ var APP_UPSTREAM_CONFLICT_LABEL_PREFIX = "app-upstream-conflict:";
1596
+ var APP_UPSTREAM_CONFLICT_MAX_PATHS = 50;
1597
+ var APP_ACTIONS_HYGIENE_MAX_WORKFLOWS = 100;
1598
+ var APP_RATE_LIMIT_MIN_REMAINING = 300;
1599
+ var APP_RATE_LIMIT_RESET_GRACE_MS = 6e4;
1600
+ var APP_RATE_LIMIT_BACKOFF_BASE_MS = 6e4;
1601
+ var APP_RATE_LIMIT_BACKOFF_MAX_MS = 36e5;
1602
+ var APP_RATE_LIMITED_PERSISTENT_AFTER = 3;
1603
+ var APP_DIVERGENCE_TTL_MS = 6e5;
1604
+ var APP_DIVERGENCE_DAILY_MS = 864e5;
1605
+ var APP_BEHIND_EVENT_STEP = 25;
1606
+ var APP_UPSTREAM_UNAVAILABLE_RECHECK_MS = 864e5;
1607
+ var APP_LICENSE_EVALUATION_REASONS = ["upstream_synced", "upstream_merged", "blueprint_applied"];
1608
+ function appManualSyncAllowed(manualSyncsThisHour) {
1609
+ return Number.isFinite(manualSyncsThisHour) && manualSyncsThisHour >= 0 && manualSyncsThisHour < APP_UPSTREAM_SYNC_MANUAL_PER_HOUR;
1610
+ }
1611
+ function appRateLimitAllowsSync(remainingRequests) {
1612
+ return Number.isFinite(remainingRequests) && remainingRequests >= APP_RATE_LIMIT_MIN_REMAINING;
1613
+ }
1614
+
1615
+ // src/apps/apps-catalog.types.ts
1616
+ var APPS_CATALOG_CACHE_TTL_MS = 36e5;
1617
+ var APPS_CATALOG_FAILURE_TTL_MS = 3e4;
1618
+ var APPS_CATALOG_FETCH_TIMEOUT_MS = 8e3;
1619
+ var APPS_CATALOG_MANIFEST_MAX_BYTES = 2097152;
1620
+ var APPS_CATALOG_MAX_ENTRIES = 1e3;
1621
+ var APPS_CATALOG_REGISTRY_MAX_BYTES = 262144;
1622
+ var APPS_CATALOG_LAST_GOOD_REGISTRY_MS = 7 * 864e5;
1623
+ var APPS_CATALOG_PAGE_SIZE = 24;
1624
+ var APPS_CATALOG_PAGE_SIZE_MAX = 100;
1625
+ var APPS_CATALOG_SEARCH_MIN_CHARS = 2;
1626
+ var APPS_CATALOG_README_MAX_BYTES = 65536;
1627
+ var APPS_CATALOG_PUBLIC_PER_MIN = 120;
1628
+ var APPS_CATALOG_FANOUT_PER_RUN = 500;
1629
+ var APPS_CATALOG_REFRESH_CRON = "23 * * * *";
1630
+ var BLUEPRINT_RESOLVE_HIT_TTL_MS = 36e5;
1631
+ var BLUEPRINT_RESOLVE_MISS_TTL_MS = 6e5;
1632
+ var BLUEPRINT_PROBE_MAX_READS = 3;
1633
+ var BLUEPRINT_ALTERNATIVES_MAX = 5;
1634
+ var BLUEPRINT_OVERLAY_MAX_FILES = 50;
1635
+ var BLUEPRINT_OVERLAY_FILE_MAX_BYTES = 1048576;
1636
+ var BLUEPRINT_OVERLAY_TOTAL_MAX_BYTES = 5242880;
1637
+ var BLUEPRINT_APPLY_RETRIES = 3;
1638
+ var BLUEPRINT_APPLY_PER_HOUR = 5;
1639
+ var APPS_CATALOG_CATEGORIES = [
1640
+ "analytics",
1641
+ "communication",
1642
+ "content",
1643
+ "crm",
1644
+ "developer-tools",
1645
+ "finance",
1646
+ "forms",
1647
+ "knowledge",
1648
+ "marketing",
1649
+ "productivity",
1650
+ "project-management",
1651
+ "scheduling",
1652
+ "security",
1653
+ "support",
1654
+ "other"
1655
+ ];
1656
+ var APPS_CATALOG_ENTRY_STATUSES = ["production", "beta", "placeholder"];
1657
+ var APPS_CATALOG_VERIFICATION_STATUSES = ["candidate", "verified", "at-risk", "not-verified"];
1658
+ var APPS_CATALOG_ENTRY_LICENSE_CLASSES = ["green", "amber"];
1659
+ var BLUEPRINT_RESOLUTION_REASONS = ["notListed", "lookupFailed", "refMismatch", "blueprintNotFound"];
1660
+
1661
+ // src/apps/apps-limits.ts
1662
+ var APP_REPOSITORY_STAGES = ["private-copy", "provisioning", "build", "sandbox"];
1663
+ var APP_REPOSITORY_STAGE_REFUSAL_CODES = [
1664
+ "too_large_for_private_copy",
1665
+ "uses_lfs",
1666
+ "repository-too-large"
1667
+ ];
1668
+ var APP_REPOSITORY_STAGE_LIMITS = {
1669
+ "private-copy": {
1670
+ maxSizeKb: APP_PRIVATE_COPY_MAX_SIZE_KB,
1671
+ fetchesLfs: false,
1672
+ refusalCodes: ["too_large_for_private_copy", "uses_lfs"]
1673
+ },
1674
+ provisioning: {
1675
+ maxSizeKb: 3 * 1024 * 1024,
1676
+ refusalCodes: ["repository-too-large"]
1677
+ },
1678
+ build: {
1679
+ refusalCodes: []
1680
+ },
1681
+ sandbox: {
1682
+ refusalCodes: []
1683
+ }
1684
+ };
1685
+ var APP_REPOSITORY_STAGES_WITHOUT_SPEC_LIMIT = ["build", "sandbox"];
1686
+ function firstRefusingRepositoryStage(input) {
1687
+ const stages = input.stages ?? APP_REPOSITORY_STAGES;
1688
+ const sizeKnown = typeof input.sizeKb === "number" && Number.isFinite(input.sizeKb) && input.sizeKb >= 0;
1689
+ for (const stage of stages) {
1690
+ const limit = APP_REPOSITORY_STAGE_LIMITS[stage];
1691
+ if (stage === "private-copy" && input.usesLfs === true) {
1692
+ return stage;
1693
+ }
1694
+ if (limit.maxSizeKb === void 0) {
1695
+ continue;
1696
+ }
1697
+ if (!sizeKnown || input.sizeKb > limit.maxSizeKb) {
1698
+ return stage;
1699
+ }
1700
+ }
1701
+ return null;
1702
+ }
1703
+ var APP_QUOTA_SCOPES = ["member", "org"];
1704
+ var APP_WORK_QUOTA_CAPS = {
1705
+ /** Active App Works per member / organization (CONTRACTS.md:658). */
1706
+ activeAppWorks: { member: 25, org: 200, env: "EVER_WORKS_APPS_MAX_ACTIVE" },
1707
+ /** Creates per day (CONTRACTS.md:659). */
1708
+ createsPerDay: { member: 20, org: 100, env: "EVER_WORKS_APPS_MAX_CREATES_PER_DAY" },
1709
+ /** Private copies held, each already bounded by the 500 MB of APW-01 FR-20 (CONTRACTS.md:660). */
1710
+ privateCopies: { member: 10, org: 50, env: "EVER_WORKS_APPS_MAX_PRIVATE_COPIES" }
1711
+ };
1712
+ function appWorkQuotaAllows(cap, currentCount) {
1713
+ return Number.isFinite(cap) && cap > 0 && Number.isFinite(currentCount) && currentCount < cap;
1714
+ }
1715
+
1716
+ // src/apps/apps-tier.ts
1717
+ var LAUNCH_GATE_ITEM_IDS = [
1718
+ "LG-01",
1719
+ "LG-02",
1720
+ "LG-03",
1721
+ "LG-04",
1722
+ "LG-05",
1723
+ "LG-06",
1724
+ "LG-07",
1725
+ "LG-08",
1726
+ "LG-09",
1727
+ "LG-10",
1728
+ "LG-11",
1729
+ "LG-12",
1730
+ "LG-13",
1731
+ "LG-14",
1732
+ "LG-15",
1733
+ "LG-16",
1734
+ "LG-17",
1735
+ "LG-18",
1736
+ "LG-19",
1737
+ "LG-20",
1738
+ "LG-21",
1739
+ "LG-22",
1740
+ "LG-23",
1741
+ "LG-24",
1742
+ "LG-25"
1743
+ ];
1744
+ var LAUNCH_GATE_KINDS = ["automated", "attested", "both"];
1745
+ var LAUNCH_GATE_PHASES = ["P2", "P3"];
1746
+ var LAUNCH_GATE_OUTCOMES = ["passed", "failed", "inconclusive", "error"];
1747
+ var LAUNCH_GATE_ITEMS = [
1748
+ { id: "LG-01", title: "Dedicated capacity", kind: "attested", phase: "P2" },
1749
+ { id: "LG-02", title: "Network segmentation", kind: "both", phase: "P2" },
1750
+ { id: "LG-03", title: "Separate egress identity", kind: "both", phase: "P2" },
1751
+ { id: "LG-04", title: "Sandboxed runtime, enforced", kind: "automated", phase: "P2" },
1752
+ { id: "LG-05", title: "Restricted pod security by default", kind: "automated", phase: "P2" },
1753
+ { id: "LG-06", title: "Default-deny networking", kind: "automated", phase: "P2" },
1754
+ { id: "LG-07", title: "Egress deny list", kind: "automated", phase: "P2" },
1755
+ { id: "LG-08", title: "Mail and mining ports blocked", kind: "automated", phase: "P2" },
1756
+ { id: "LG-09", title: "Quotas and limits", kind: "automated", phase: "P2" },
1757
+ { id: "LG-10", title: "One namespace per App Work", kind: "automated", phase: "P2" },
1758
+ { id: "LG-11", title: "No platform credentials in tenants", kind: "automated", phase: "P2" },
1759
+ { id: "LG-12", title: "Platform credential is narrow", kind: "automated", phase: "P2" },
1760
+ { id: "LG-13", title: "Image supply chain", kind: "automated", phase: "P2" },
1761
+ { id: "LG-14", title: "Tenant-only data servers", kind: "both", phase: "P2" },
1762
+ { id: "LG-15", title: "User-apps domain", kind: "both", phase: "P2" },
1763
+ { id: "LG-16", title: "Separate edge", kind: "both", phase: "P2" },
1764
+ { id: "LG-17", title: "Custom hostnames", kind: "automated", phase: "P2" },
1765
+ { id: "LG-18", title: "Tenant quarantine drill", kind: "automated", phase: "P2" },
1766
+ { id: "LG-19", title: "Abuse controls", kind: "both", phase: "P2" },
1767
+ { id: "LG-20", title: "Metering flowing", kind: "automated", phase: "P2" },
1768
+ { id: "LG-21", title: "Audit trail", kind: "both", phase: "P2" },
1769
+ { id: "LG-22", title: "Policies from Git, no drift", kind: "automated", phase: "P2" },
1770
+ { id: "LG-23", title: "Controller healthy", kind: "automated", phase: "P2" },
1771
+ { id: "LG-24", title: "Sandboxed in-zone builds", kind: "both", phase: "P3" },
1772
+ { id: "LG-25", title: "Build limits", kind: "automated", phase: "P3" }
1773
+ ];
1774
+ function launchGateItemsForPhase(phase) {
1775
+ return LAUNCH_GATE_ITEMS.filter((item) => item.phase === phase);
1776
+ }
1777
+ var APPS_TIER_PROBE_REASON_CODES = [
1778
+ "PHASE_NOT_ENABLED",
1779
+ "misconfigured",
1780
+ "PRIVATE_RANGE_REACHABLE",
1781
+ "PLATFORM_ENDPOINT_REACHABLE",
1782
+ "CONTROL_UNREACHABLE",
1783
+ "EGRESS_IDENTITY_SHARED",
1784
+ "SANDBOX_KERNEL_NOT_DETECTED",
1785
+ "UNSANDBOXED_POD_ADMITTED",
1786
+ "PRIVILEGED_POD_ADMITTED",
1787
+ "CROSS_TENANT_REACHABLE",
1788
+ "DIRECT_POD_INGRESS_REACHABLE",
1789
+ "METADATA_REACHABLE",
1790
+ "CONTROL_PLANE_REACHABLE",
1791
+ "MAIL_PORT_OPEN",
1792
+ "MINING_PORT_OPEN",
1793
+ "QUOTA_MISMATCH",
1794
+ "LOADBALANCER_ADMITTED",
1795
+ "OVER_QUOTA_ADMITTED",
1796
+ "NAMESPACE_SHARED",
1797
+ "NAMESPACE_FIELD_ACCEPTED",
1798
+ "SA_TOKEN_PRESENT",
1799
+ "PLANTED_CREDENTIAL_ADMITTED",
1800
+ "CREDENTIAL_TOO_BROAD",
1801
+ "UNSIGNED_IMAGE_ADMITTED",
1802
+ "FOREIGN_IMAGE_ADMITTED",
1803
+ "VULNERABLE_IMAGE_PROMOTED",
1804
+ "CROSS_TENANT_DB_REACHABLE",
1805
+ "CONNECTION_LIMIT_NOT_ENFORCED",
1806
+ "STATEMENT_TIMEOUT_NOT_ENFORCED",
1807
+ "APEX_UNDER_PLATFORM_DOMAIN",
1808
+ "APEX_NOT_ON_PSL",
1809
+ "PSL_UNREACHABLE",
1810
+ "CANARY_TLS_INVALID",
1811
+ "CANARY_UNREACHABLE",
1812
+ "CUSTOM_HOSTNAME_NOT_ACTIVE",
1813
+ "UNREGISTERED_HOST_ADMITTED",
1814
+ "QUARANTINE_ISOLATION_SLOW",
1815
+ "QUARANTINE_SCALE_SLOW",
1816
+ "QUARANTINE_EDGE_SLOW",
1817
+ "QUARANTINE_NOT_ISOLATING",
1818
+ "RELEASE_SLOW",
1819
+ "MARKER_LOST",
1820
+ "BANDWIDTH_LIMIT_MISSING",
1821
+ "SENSOR_SILENT",
1822
+ "SIGNAL_NOT_IMPORTED",
1823
+ "USAGE_REPORT_STALE",
1824
+ "USAGE_IMPORT_STALE",
1825
+ "AUDIT_ROWS_MISSING",
1826
+ "POLICY_DRIFT",
1827
+ "POLICY_MANIFEST_MISSING",
1828
+ "HEARTBEAT_STALE",
1829
+ "CONTROLLER_TOO_OLD",
1830
+ "BUILD_UNSANDBOXED",
1831
+ "BUILD_EGRESS_OPEN",
1832
+ "BUILD_PUSH_CROSS_TENANT",
1833
+ "BUILD_CAP_NOT_ENFORCED"
1834
+ ];
1835
+ var APPS_TIER_STATES = ["closed", "open-verified-blueprints", "open-any"];
1836
+ var APPS_TIER_SCOPES = ["verified-blueprints", "any"];
1837
+ var APPS_TIER_CLOSED_REASON_CODES = [
1838
+ /** The operator ceiling `EVER_WORKS_APPS_MANAGED_ENABLED` is off — plan §5.4:682. */
1839
+ "CEILING_OFF",
1840
+ /** An operator closed the tier — plan §5.4:683. */
1841
+ "CLOSED_BY_OPERATOR",
1842
+ /** `open-any` was asked for while `EVER_WORKS_APPS_MAX_SCOPE` forbids it — plan §5.4:685. */
1843
+ "SCOPE_NOT_ALLOWED",
1844
+ /** No finished gate run exists — plan §5.4:689. */
1845
+ "NO_RUN",
1846
+ /** The newest run is not green for the scope — plan §5.4:690. */
1847
+ "RUN_NOT_GREEN",
1848
+ /** The newest green run is older than the maximum age — plan §5.4:691. */
1849
+ "RUN_STALE",
1850
+ /** An attested item has no current attestation — plan §5.4:692. */
1851
+ "NOT_ATTESTED",
1852
+ /** An attestation expired — plan §5.4:692. */
1853
+ "ATTESTATION_EXPIRED",
1854
+ /** The controller heartbeat is missing or older than 120 s — plan §5.4:694. */
1855
+ "CONTROLLER_STALE",
1856
+ /** The controller version is below the platform's minimum — plan §5.4:695. */
1857
+ "CONTROLLER_TOO_OLD"
1858
+ ];
1859
+ var APPS_TIER_AUTO_REOPENABLE_REASON_CODES = ["RUN_STALE", "CONTROLLER_STALE"];
1860
+ var APPS_TIER_POLICY_DEFAULT_SCOPE = "verified-blueprints";
1861
+ function isSemverLessThan(left, right) {
1862
+ const parse = (version) => {
1863
+ const withoutPrefix = version.replace(/^v/, "");
1864
+ const [core, ...rest] = withoutPrefix.split("-");
1865
+ return {
1866
+ parts: core.split(".").map((part) => Number.parseInt(part, 10) || 0),
1867
+ prerelease: rest.length > 0 ? rest.join("-") : null
1868
+ };
1869
+ };
1870
+ const a = parse(left);
1871
+ const b = parse(right);
1872
+ for (let index = 0; index < Math.max(a.parts.length, b.parts.length); index += 1) {
1873
+ const difference = (a.parts[index] ?? 0) - (b.parts[index] ?? 0);
1874
+ if (difference !== 0) return difference < 0;
1875
+ }
1876
+ if (a.prerelease === null && b.prerelease === null) return false;
1877
+ if (a.prerelease !== null && b.prerelease === null) return true;
1878
+ if (a.prerelease === null && b.prerelease !== null) return false;
1879
+ return (a.prerelease ?? "") < (b.prerelease ?? "");
1880
+ }
1881
+ function evaluateAppsTierPolicyState(input) {
1882
+ const closed = (scope2, reasons2) => ({
1883
+ open: false,
1884
+ scope: scope2,
1885
+ reasons: reasons2,
1886
+ autoReopenable: false
1887
+ });
1888
+ if (!input.ceilingEnabled) return closed(APPS_TIER_POLICY_DEFAULT_SCOPE, ["CEILING_OFF"]);
1889
+ if (input.lastEvent === null) return closed(APPS_TIER_POLICY_DEFAULT_SCOPE, ["CLOSED_BY_OPERATOR"]);
1890
+ if (input.lastEvent.state === "closed") {
1891
+ return closed(
1892
+ APPS_TIER_POLICY_DEFAULT_SCOPE,
1893
+ input.lastEvent.automatic ? input.lastEvent.reasonCodes : ["CLOSED_BY_OPERATOR"]
1894
+ );
1895
+ }
1896
+ const scope = input.lastEvent.state === "open-any" ? "any" : "verified-blueprints";
1897
+ if (scope === "any" && input.maxScope !== "any") return closed(scope, ["SCOPE_NOT_ALLOWED"]);
1898
+ const maxAgeMs = Math.min(input.gateMaxAgeHours, GATE_MAX_AGE_HOURS) * 36e5;
1899
+ const reasons = [];
1900
+ const run = input.latestRun;
1901
+ if (run === null) {
1902
+ reasons.push("NO_RUN");
1903
+ } else if (run.status !== "green" || run.coversScope !== "any" && run.coversScope !== scope) {
1904
+ reasons.push("RUN_NOT_GREEN");
1905
+ } else if (input.now - run.finishedAtEpochMs > maxAgeMs) {
1906
+ reasons.push("RUN_STALE");
1907
+ }
1908
+ reasons.push(...input.attestationReasons);
1909
+ if (input.controllerRenewedAtEpochMs === null || input.now - input.controllerRenewedAtEpochMs > HEARTBEAT_MAX_AGE_MS) {
1910
+ reasons.push("CONTROLLER_STALE");
1911
+ }
1912
+ if (isSemverLessThan(input.controllerVersion, input.controllerMinVersion)) reasons.push("CONTROLLER_TOO_OLD");
1913
+ if (reasons.length === 0) return { open: true, scope, reasons, autoReopenable: false };
1914
+ return {
1915
+ open: false,
1916
+ scope,
1917
+ reasons,
1918
+ autoReopenable: reasons.every(
1919
+ (reason) => APPS_TIER_AUTO_REOPENABLE_REASON_CODES.includes(reason)
1920
+ )
1921
+ };
1922
+ }
1923
+ var APPS_TIER_ELIGIBILITY_REASONS = [
1924
+ "emailUnverified",
1925
+ "planRequired",
1926
+ "ownerQuarantined",
1927
+ "capReached",
1928
+ "tierClosed"
1929
+ ];
1930
+ var APPS_TIER_ELIGIBILITY_DISABLED_REASONS = ["tierClosed"];
1931
+ var APPS_TIER_QUARANTINE_CATEGORIES = ["abuse", "security", "billing", "legal", "pause-all", "drill"];
1932
+ var APPS_TIER_QUARANTINE_SOURCES = ["operator", "detector", "self-check"];
1933
+ var APPS_TIER_BILLING_QUARANTINE_CATEGORY = "billing";
1934
+ var APPS_TIER_PAUSE_ALL_CATEGORY = "security";
1935
+ var APPS_TIER_PAUSE_ALL_CONFIRMATION = "PAUSE ALL";
1936
+ var APPS_TIER_SIGNAL_KINDS = ["runtime", "mining", "mail", "bandwidth", "report"];
1937
+ var APPS_TIER_SIGNAL_SEVERITIES = ["low", "medium", "high"];
1938
+ var APPS_TIER_API_GROUP = "hosting.ever.works";
1939
+ var APPS_TIER_API_VERSION = "v1alpha1";
1940
+ var APPS_TIER_CONTROL_NAMESPACE_DEFAULT = "ever-works-apps-control";
1941
+ var APPS_TIER_WORK_NAME_PREFIX = "w-";
1942
+ var APPS_TIER_TENANT_NAMESPACE_PREFIX = "ewa-";
1943
+ var APPS_TIER_WORK_OWNER_LABEL = "hosting.ever.works/owner";
1944
+ var APPS_TIER_WORK_CANARY_LABEL = "hosting.ever.works/canary";
1945
+ var APPS_TIER_QUARANTINED_LABEL = "hosting.ever.works/quarantined";
1946
+ var APPS_TIER_TENANT_LABEL = "hosting.ever.works/tenant";
1947
+ var APPS_TIER_WORK_ID_LABEL = "hosting.ever.works/work-id";
1948
+ var APPS_TIER_ALLOWED_HOSTS_ANNOTATION = "hosting.ever.works/allowed-hosts";
1949
+ var APPS_TIER_RETAINED_UNTIL_LABEL = "hosting.ever.works/retained-until";
1950
+ var APPS_TIER_RUN_JOB_ANNOTATION = "hosting.ever.works/run-job";
1951
+ var APPS_TIER_WORK_DESIRED_STATES = ["running", "paused", "quarantined", "removed"];
1952
+ var APPS_TIER_WORK_PHASES = [
1953
+ "Pending",
1954
+ "Promoting",
1955
+ "Provisioning",
1956
+ "Ready",
1957
+ "Degraded",
1958
+ "Paused",
1959
+ "Quarantined",
1960
+ "Refused",
1961
+ "Failed",
1962
+ "Removed"
1963
+ ];
1964
+ var APPS_TIER_DEPLOY_PHASES = [
1965
+ "prepare",
1966
+ "pre-deploy-jobs",
1967
+ "rollout",
1968
+ "first-deploy-jobs",
1969
+ "in-cluster-smoke",
1970
+ "publish",
1971
+ "public-smoke",
1972
+ "post-deploy-jobs",
1973
+ "cron",
1974
+ "done"
1975
+ ];
1976
+ var APPS_TIER_COMPONENT_ROLES = ["web", "worker"];
1977
+ var APPS_TIER_JOB_PHASES = ["pre-deploy", "first-deploy", "post-deploy"];
1978
+ var APPS_TIER_JOB_STATUSES = ["succeeded", "failed", "timeout", "running"];
1979
+ var APPS_TIER_SMOKE_SCOPES = ["in-cluster", "public"];
1980
+ var APPS_TIER_SMOKE_STATUSES = ["passed", "failed", "skipped"];
1981
+ var APPS_TIER_DEPENDENCY_PHASES = ["pending", "ready", "failed", "released"];
1982
+ var APPS_TIER_WORK_REFUSAL_CODES = [
1983
+ "SPEC_LIMIT_EXCEEDED",
1984
+ "NAMESPACE_FIELD_FORBIDDEN",
1985
+ "QUOTA_PROFILE_UNKNOWN",
1986
+ "PLATFORM_CREDENTIAL_IN_ENV",
1987
+ "IMAGE_NOT_DIGEST_PINNED",
1988
+ "IMAGE_SCAN_BLOCKED",
1989
+ "IMAGE_UNSIGNED",
1990
+ "IMAGE_OUTSIDE_TENANT_REGISTRY",
1991
+ "HOST_NOT_VERIFIED",
1992
+ "HOST_CLAIMED",
1993
+ "SEALED_PAYLOAD_INVALID",
1994
+ "CRON_TOO_FREQUENT",
1995
+ /** An `ew-dep://` token the zone cannot resolve — CONTRACTS §3:371. */
1996
+ "DEPENDENCY_TOKEN_UNKNOWN",
1997
+ /** The zone cannot prove the isolation the Work requires — plan §3.1:277–280. */
1998
+ "ISOLATION_NOT_ENFORCED"
1999
+ ];
2000
+ var APPS_TIER_WORK_DEGRADED_REASONS = ["IMAGE_RUNS_AS_ROOT", "QUOTA_EXCEEDED"];
2001
+ var APPS_TIER_MAX_COMPONENTS = 8;
2002
+ var APPS_TIER_MAX_JOBS = 10;
2003
+ var APPS_TIER_MAX_CRON = 10;
2004
+ var APPS_TIER_MAX_SMOKE = 20;
2005
+ var APPS_TIER_MAX_HOSTS = 20;
2006
+ var APPS_TIER_MAX_ENV_NAMES = 200;
2007
+ var APPS_TIER_MAX_COMPONENT_VOLUMES = 4;
2008
+ var APPS_TIER_MAX_COMPONENT_REPLICAS = 10;
2009
+ var APPS_TIER_MAX_IMAGES = 8;
2010
+ var APPS_TIER_MAX_JOB_TIMEOUT_SECONDS = 3600;
2011
+ var APPS_TIER_MAX_SEALED_ENV_BYTES = 262144;
2012
+ var APPS_TIER_MAX_WORK_BYTES = 524288;
2013
+ var APPS_TIER_MIN_CRON_INTERVAL_MS = 3e5;
2014
+ var APPS_TIER_MAX_PULL_CREDENTIAL_BYTES = 8192;
2015
+ var PULL_CREDENTIAL_MAX_MS = 9e5;
2016
+ var APPS_TIER_QUOTA_PROFILES = {
2017
+ starter: {
2018
+ name: "starter",
2019
+ cpuRequest: 1,
2020
+ cpuLimit: 2,
2021
+ memoryRequestGiB: 2,
2022
+ memoryLimitGiB: 4,
2023
+ pods: 10,
2024
+ volumes: 4,
2025
+ volumeTotalGiB: 10,
2026
+ bandwidthOutMbps: 20,
2027
+ bandwidthInMbps: 50,
2028
+ monthlyEgressGiB: 100,
2029
+ loadBalancers: 0,
2030
+ nodePorts: 0
2031
+ },
2032
+ standard: {
2033
+ name: "standard",
2034
+ cpuRequest: 2,
2035
+ cpuLimit: 4,
2036
+ memoryRequestGiB: 4,
2037
+ memoryLimitGiB: 8,
2038
+ pods: 20,
2039
+ volumes: 8,
2040
+ volumeTotalGiB: 50,
2041
+ bandwidthOutMbps: 50,
2042
+ bandwidthInMbps: 100,
2043
+ monthlyEgressGiB: 500,
2044
+ loadBalancers: 0,
2045
+ nodePorts: 0
2046
+ }
2047
+ };
2048
+ var APPS_TIER_QUOTA_CEILINGS = {
2049
+ cpu: 16,
2050
+ memoryGiB: 32,
2051
+ pods: 100,
2052
+ storageGiB: 500
2053
+ };
2054
+ var APPS_TIER_QUOTA_PROFILE_NAMES = ["starter", "standard"];
2055
+ function resolveAppsTierQuotaProfile(name) {
2056
+ const profiles = APPS_TIER_QUOTA_PROFILES;
2057
+ return profiles[name] ?? null;
2058
+ }
2059
+ function clampAppsTierQuotaProfile(profile) {
2060
+ const clamped = [];
2061
+ const reduce = (current, ceiling, field) => {
2062
+ if (current <= ceiling) return current;
2063
+ clamped.push(field);
2064
+ return ceiling;
2065
+ };
2066
+ return {
2067
+ profile: {
2068
+ ...profile,
2069
+ cpuRequest: reduce(profile.cpuRequest, APPS_TIER_QUOTA_CEILINGS.cpu, "cpuRequest"),
2070
+ cpuLimit: reduce(profile.cpuLimit, APPS_TIER_QUOTA_CEILINGS.cpu, "cpuLimit"),
2071
+ memoryRequestGiB: reduce(profile.memoryRequestGiB, APPS_TIER_QUOTA_CEILINGS.memoryGiB, "memoryRequestGiB"),
2072
+ memoryLimitGiB: reduce(profile.memoryLimitGiB, APPS_TIER_QUOTA_CEILINGS.memoryGiB, "memoryLimitGiB"),
2073
+ pods: reduce(profile.pods, APPS_TIER_QUOTA_CEILINGS.pods, "pods"),
2074
+ volumeTotalGiB: reduce(profile.volumeTotalGiB, APPS_TIER_QUOTA_CEILINGS.storageGiB, "volumeTotalGiB")
2075
+ },
2076
+ clamped
2077
+ };
2078
+ }
2079
+ var GATE_MAX_AGE_HOURS = 24;
2080
+ var SELF_CHECK_BUDGET_MS = 9e5;
2081
+ var PROBE_CONNECT_TIMEOUT_MS = 3e3;
2082
+ var PROBE_ATTEMPTS = 2;
2083
+ var SELF_CHECK_INTERVAL_HOURS = 6;
2084
+ var ATTESTATION_TTL_DAYS = 90;
2085
+ var ATTESTATION_NOTICE_DAYS = [14, 1];
2086
+ var HEARTBEAT_MAX_AGE_MS = 12e4;
2087
+ var GATE_WATCH_INTERVAL_MIN = 5;
2088
+ var QUARANTINE_ISOLATE_MS = 15e3;
2089
+ var QUARANTINE_SCALE_MS = 6e4;
2090
+ var QUARANTINE_EDGE_MS = 12e4;
2091
+ var RELEASE_RESTORE_MS = 18e4;
2092
+ var DETECTOR_QUARANTINE_MS = 6e4;
2093
+ var IMAGE_ALLOWANCE_MAX_DAYS = 30;
2094
+ var REMOVED_DATA_RETENTION_DAYS = 30;
2095
+ var APPS_TIER_SELF_CHECK_RUN_RETENTION_DAYS = 180;
2096
+ var APPS_TIER_SELF_CHECK_RUN_RETENTION_COUNT = 500;
2097
+ var APPS_TIER_ZONE_AUDIT_RETENTION_DAYS = 90;
2098
+ var APPS_TIER_USAGE_FRESHNESS_MS = 72e5;
2099
+ var APPS_TIER_EGRESS_NOTICE_SHARE = 0.8;
2100
+ var APPS_TIER_EGRESS_THROTTLE_MBPS = 2;
2101
+ var APPS_TIER_BILLING_GRACE_DAYS = 7;
2102
+ var APPS_TIER_MINING_CPU_SHARE = 0.9;
2103
+ var APPS_TIER_MINING_CPU_WINDOW_MS = 18e5;
2104
+ var APPS_TIER_MINING_REFUSED_CONNECTIONS = 10;
2105
+ var APPS_TIER_MINING_MEDIUM_WINDOW_MS = 216e5;
2106
+ var APPS_TIER_MAIL_REFUSED_ATTEMPTS_PER_HOUR = 50;
2107
+ var APPS_TIER_SIGNAL_SUMMARY_MAX_CHARS = 500;
2108
+ var APPS_TIER_QUARANTINE_REASON_MIN_CHARS = 10;
2109
+ var APPS_TIER_ATTESTATION_EVIDENCE_MIN_CHARS = 20;
2110
+ var APPS_TIER_ATTESTATION_EVIDENCE_MAX_CHARS = 2e3;
2111
+ var APPS_TIER_ATTESTATION_EVIDENCE_REFERENCE_MAX_CHARS = 500;
2112
+ var APPS_TIER_HEARTBEAT_STALE_MS = 216e5;
2113
+ var APPS_TIER_PRICEBOOK_VERSION = 2;
2114
+ var APPS_TIER_PRICE_GROUP = "hosting";
2115
+ var APPS_TIER_PRICE_KEYS = {
2116
+ cpuCoreHour: "hosting.cpu_core_hour",
2117
+ memoryGiBHour: "hosting.memory_gib_hour",
2118
+ egressGiB: "hosting.egress_gib",
2119
+ storageGiBMonth: "hosting.storage_gib_month",
2120
+ buildMinute: "hosting.build_minute",
2121
+ dependencyStorageGiBHour: "hosting.dependency_storage_gib_hour",
2122
+ dependencyBackupGiBHour: "hosting.dependency_backup_gib_hour",
2123
+ relayMessages: "relay.messages"
2124
+ };
2125
+ var APPS_TIER_PRICE_UNITS = {
2126
+ cpuCoreSecondsPerUnit: 3600,
2127
+ memoryMiBHoursPerUnit: 1024,
2128
+ egressMiBPerUnit: 1024,
2129
+ storageGiBHoursPerUnit: 720
2130
+ };
2131
+ var APPS_TIER_USAGE_UNITS = [
2132
+ "cpuCoreSeconds",
2133
+ "memoryMiBHours",
2134
+ "egressMiB",
2135
+ "storageGiBHours",
2136
+ "buildMinutes",
2137
+ "dependencyStorageGiBHours",
2138
+ "dependencyBackupGiBHours"
2139
+ ];
2140
+ function appsTierReceiptIdempotencyKey(workId, day) {
2141
+ return `apps-tier:${workId}:${day}`;
2142
+ }
2143
+ var APPS_TIER_METERING_IMPORT_CRON = "7 * * * *";
2144
+ var APPS_TIER_DAILY_RECEIPTS_CRON = "15 0 * * *";
2145
+ var APPS_TIER_EDGE_TLS_MODE = "edge";
2146
+ var APPS_TIER_MANAGED_ENABLED_ENV_VAR = "EVER_WORKS_APPS_MANAGED_ENABLED";
2147
+ var APPS_TIER_MAX_SCOPE_ENV_VAR = "EVER_WORKS_APPS_MAX_SCOPE";
2148
+ var APPS_TIER_GATE_MAX_AGE_HOURS_ENV_VAR = "EVER_WORKS_APPS_GATE_MAX_AGE_HOURS";
2149
+ var APPS_TIER_CONTROLLER_MIN_VERSION_ENV_VAR = "EVER_WORKS_APPS_CONTROLLER_MIN_VERSION";
2150
+ var APPS_TIER_CONTROL_KUBECONFIG_ENV_VAR = "EVER_WORKS_APPS_CONTROL_KUBECONFIG";
2151
+ var APPS_TIER_MAX_PER_USER_ENV_VAR = "EVER_WORKS_APPS_MAX_PER_USER";
2152
+ var APPS_TIER_PUBLIC_KEY_CONFIG_MAP = "ever-works-apps-controller-public-key";
2153
+ var APPS_TIER_ZONE_INFO_CONFIG_MAP = "ever-works-apps-zone-info";
2154
+ var APPS_TIER_SEAL_AAD_PREFIX = "hosting.ever.works/v1alpha1";
2155
+ var APPS_TIER_ACTIVITY_ACTION_TYPE = "app_tier";
2156
+ var APPS_TIER_EVENT_NAMES = [
2157
+ "app.tier.quarantined",
2158
+ "app.tier.released",
2159
+ "app.tier.deploy_refused",
2160
+ "app.tier.egress_threshold",
2161
+ "app.tier.usage_daily"
2162
+ ];
2163
+ var APPS_TIER_NOTIFICATION_IDS = [
2164
+ "app_tier_usage_80",
2165
+ "app_tier_quarantined",
2166
+ "app_tier_egress",
2167
+ "app_attestation_expiry"
2168
+ ];
2169
+ var APPS_TIER_OPEN_REFUSED_CODE = "apps_tier_open_refused";
2170
+ var APPS_TIER_QUOTA_CEILING_EXCEEDED_CODE = "quota_ceiling_exceeded";
2171
+
2172
+ // src/apps/builds.ts
2173
+ var APP_BUILD_STATUSES = ["queued", "running", "succeeded", "failed", "cancelled", "blocked"];
2174
+ var APP_BUILD_TRIGGERS = ["push", "pull_request", "manual", "verification"];
2175
+ var APP_BUILD_DEPLOYABLE_TRIGGERS = ["push", "manual"];
2176
+ var APP_BUILD_FAILURE_CLASSES = [
2177
+ "outOfMemory",
2178
+ "diskFull",
2179
+ "dockerfileError",
2180
+ "dependencyDownloadFailed",
2181
+ "registryPushDenied",
2182
+ "missingBuildValue",
2183
+ "secretInImage",
2184
+ "timeout",
2185
+ "workflowInvalid",
2186
+ "digestMismatch",
2187
+ "verificationFailed",
2188
+ "egressBlocked",
2189
+ "lost",
2190
+ "unknown"
2191
+ ];
2192
+ var APP_BUILD_BLOCKED_REASONS = [
2193
+ "workflowPending",
2194
+ "workflowEditedByHand",
2195
+ "workflowWriteFailed",
2196
+ "actionsDisabled",
2197
+ "missingBuildValues",
2198
+ "runnerTooSmall",
2199
+ "tooManyBuildValues",
2200
+ "buildValueTooLarge",
2201
+ "secretLimitReached",
2202
+ "strategyNotSupported",
2203
+ "specInvalid",
2204
+ "gitConnectionMissing",
2205
+ "repositoryUnavailable",
2206
+ "managedConcurrencyLimit",
2207
+ "buildValueNameReserved",
2208
+ "buildServicePortRequired",
2209
+ "verificationDependencyUnsupported"
2210
+ ];
2211
+ var APP_BUILD_NOT_DEPLOYABLE_REASONS = [
2212
+ "notSucceeded",
2213
+ "pullRequest",
2214
+ "verification",
2215
+ "specInvalid",
2216
+ "staleInputs",
2217
+ "secretCheckFailed",
2218
+ "digestUnconfirmed",
2219
+ "criticalVulnerability",
2220
+ "unsigned"
2221
+ ];
2222
+ var APP_BUILD_CANCEL_REASONS = ["user", "superseded"];
2223
+ var APP_BUILD_SECRET_CHECK_RESULTS = ["passed", "failed", "not_needed"];
2224
+ var APP_BUILD_RUNNER_CLASSES = ["github-public", "github-private", "github-larger", "apps-builder"];
2225
+ var APP_BUILD_SYNC_ORIGINS = ["none", "upstreamSync"];
2226
+ var APP_BUILD_SIGNATURE_STATES = ["signed", "unsigned", "foreign"];
2227
+ var APP_BUILD_WORKFLOW_STATES = ["none", "committed", "pullRequestOpen", "editedByHand"];
2228
+ var APP_BUILD_PREPARE_WORKFLOW_STATES = [
2229
+ "unchanged",
2230
+ "committed",
2231
+ "pullRequestOpened",
2232
+ "pullRequestUpdated",
2233
+ "editedByHand"
2234
+ ];
2235
+ var APP_BUILD_WEBHOOK_STATES = ["none", "installed", "skipped", "permissionMissing"];
2236
+ var APP_BUILD_STRATEGIES = ["dockerfile", "image", "auto", "none"];
2237
+ var APP_BUILD_KINDS = ["github-actions", "apps-builder"];
2238
+ var APP_BUILD_EVENT_NAMES = [
2239
+ "app.build.queued",
2240
+ "app.build.started",
2241
+ "app.build.succeeded",
2242
+ "app.build.failed",
2243
+ "app.build.cancelled"
2244
+ ];
2245
+ var APP_BUILD_ACTIVITY_ACTION_TYPE = "app_build";
2246
+ var APP_BUILD_STATUS_EVENT_MAP = {
2247
+ queued: "app.build.queued",
2248
+ running: "app.build.started",
2249
+ succeeded: "app.build.succeeded",
2250
+ failed: "app.build.failed",
2251
+ cancelled: "app.build.cancelled",
2252
+ blocked: null
2253
+ };
2254
+ function appBuildEventNameForStatus(status) {
2255
+ return APP_BUILD_STATUS_EVENT_MAP[status];
2256
+ }
2257
+ var APP_BUILD_WORKFLOW_PATH = ".github/workflows/ever-works-build.yml";
2258
+ var APP_BUILD_WORKFLOW_BRANCH = "ever-works/build-workflow";
2259
+ var APP_BUILD_SECRET_PREFIX = "EW_";
2260
+ var APP_BUILD_IMAGE_NAME = "ever-works-app";
2261
+ var APP_BUILD_GENERATOR_VERSION = 1;
2262
+ var APP_BUILD_MAX_VALUES = 50;
2263
+ var APP_BUILD_SECRET_MAX_BYTES = 48e3;
2264
+ var APP_BUILD_SECRET_CHECK_MIN_CHARS = 8;
2265
+ var APP_BUILD_REBUILD_DEDUPE_MS = 1e4;
2266
+ var APP_BUILD_REBUILDS_PER_HOUR = 10;
2267
+ var APP_BUILD_ENV_SYNC_SLA_MS = 6e4;
2268
+ var APP_BUILD_POLL_AFTER_SILENCE_MS = 9e4;
2269
+ var APP_BUILD_SWEEP_BATCH = 200;
2270
+ var APP_BUILD_ADOPT_WINDOW_MS = 3e5;
2271
+ var APP_BUILD_LOST_GRACE_MINUTES = 30;
2272
+ var APP_BUILD_RESULT_MAX_BYTES = 8192;
2273
+ var APP_BUILD_LOG_TAIL_BYTES = 2097152;
2274
+ var APP_BUILD_EXCERPT_MAX_LINES = 20;
2275
+ var APP_BUILD_EXCERPT_MAX_LINE_CHARS = 300;
2276
+ var APP_BUILD_RUNNER_HEADROOM_GIB = 2;
2277
+ var APP_BUILD_RUNNERS = {
2278
+ githubPublic: { label: "ubuntu-latest", vcpu: 4, memoryGiB: 16, runnerClass: "github-public" },
2279
+ githubPrivate: { label: "ubuntu-latest", vcpu: 2, memoryGiB: 7, runnerClass: "github-private" }
2280
+ };
2281
+ var APP_BUILD_VERIFY_TIMEOUT_MINUTES = 30;
2282
+ var APP_BUILD_VERIFY_MEMORY_GIB = 12;
2283
+ var APP_BUILD_VERIFY_PLAN_MAX_CHARS = 6e4;
2284
+ var APP_BUILD_PULL_TOKEN_EXPIRY_WARN_DAYS = 14;
2285
+ var APP_BUILD_LIST_PAGE_SIZE = 20;
2286
+ var APP_BUILD_LIST_MAX_PAGE_SIZE = 100;
2287
+ var APP_BUILD_MANAGED_DEFAULTS = {
2288
+ vcpu: 4,
2289
+ memoryGiB: 12,
2290
+ diskGiB: 30,
2291
+ timeoutMinutes: 60
2292
+ };
2293
+ var APP_BUILD_MANAGED_MAXIMUMS = { vcpu: 16, memoryGiB: 64, timeoutMinutes: 180 };
2294
+ var APP_BUILD_MANAGED_CONCURRENCY = { perAppWork: 1, perAccount: 3 };
2295
+ var APP_BUILD_CHECKS_JOB_ID = "checks";
2296
+ var APP_BUILD_CHECK_NAME_PREFIX = "Ever Works check: ";
2297
+ var APP_BUILD_CHECKS_MAX = 20;
2298
+ var APP_BUILD_CHECKS_MAX_PARALLEL = 5;
2299
+ var APP_BUILD_VERIFY_PROMPTED_SECRET = "EW_VERIFY__PROMPTED";
2300
+ var APP_BUILD_VERIFY_PLAN_INPUT = "ew_verify_plan";
2301
+ var APP_BUILD_RESULT_ARTIFACT_NAME = "ever-works-build-result";
2302
+ var APP_BUILD_RESULT_ARTIFACT_FILE = "ever-works-build-result.json";
2303
+ var APP_BUILD_RESULT_ARTIFACT_RETENTION_DAYS = 7;
2304
+ var APP_BUILD_BRANCH_SLUG_MAX_CHARS = 100;
2305
+ var APP_BUILD_SETTING_RECLAIM_DISK = "reclaimDisk";
2306
+ var APP_BUILD_SETTING_ATTESTATIONS = "attestations";
2307
+ var APP_BUILD_SETTING_ALLOW_VALUES_ON_PULL_REQUESTS = "allowBuildValuesOnPullRequests";
2308
+ var APP_BUILD_SETTING_VERIFICATION_PROMPTED_REQUIRES_APPROVAL = "verificationPromptedValuesRequireApproval";
2309
+ var APP_BUILD_RESTRICTED_VALUE_LITERAL = "ew-restricted";
2310
+ var APP_BUILD_WEBHOOK_EVENT = "workflow_run";
2311
+ var APP_BUILD_SWEEP_CRON = "*/2 * * * *";
2312
+ var BUILD_SERVICE_HOST = "127.0.0.1";
2313
+ var BUILD_SERVICE_HEALTH_KINDS = { command: "command", http: "http", waitLoop: "waitLoop" };
2314
+ var BUILD_SERVICE_DEFAULTS = {
2315
+ postgres: {
2316
+ imagePrefixes: ["postgres"],
2317
+ env: { POSTGRES_USER: "ever-works-build", POSTGRES_PASSWORD: "ever-works-build", POSTGRES_DB: "app" },
2318
+ containerPort: 5432,
2319
+ health: { kind: "command", command: "pg_isready -U <user> -d <db>" }
2320
+ },
2321
+ redis: {
2322
+ imagePrefixes: ["redis"],
2323
+ env: {},
2324
+ containerPort: 6379,
2325
+ health: { kind: "command", command: "redis-cli ping" }
2326
+ },
2327
+ minio: {
2328
+ imagePrefixes: ["minio"],
2329
+ env: { MINIO_ROOT_USER: "ever-works-build", MINIO_ROOT_PASSWORD: "ever-works-build" },
2330
+ containerPort: 9e3,
2331
+ health: { kind: "http", path: "/minio/health/live" }
2332
+ },
2333
+ smtp: {
2334
+ imagePrefixes: [],
2335
+ env: {},
2336
+ containerPort: 1025,
2337
+ health: { kind: "waitLoop", seconds: 60 }
2338
+ }
2339
+ };
2340
+ var BUILD_SERVICE_KINDS = ["postgres", "redis", "minio", "smtp"];
2341
+ function resolveBuildServiceKind(image) {
2342
+ for (const kind of BUILD_SERVICE_KINDS) {
2343
+ const prefixes = BUILD_SERVICE_DEFAULTS[kind].imagePrefixes;
2344
+ for (const prefix of prefixes) {
2345
+ if (image.startsWith(prefix)) return kind;
2346
+ }
2347
+ }
2348
+ return null;
2349
+ }
2350
+ function resolveBuildServiceEnv(kind, declared) {
2351
+ const merged = { ...BUILD_SERVICE_DEFAULTS[kind].env };
2352
+ for (const entry of declared ?? []) {
2353
+ merged[entry.name] = entry.value;
2354
+ }
2355
+ return merged;
2356
+ }
2357
+ function resolveBuildServicePort(image, declaredPort) {
2358
+ const kind = resolveBuildServiceKind(image);
2359
+ if (kind === null) {
2360
+ return declaredPort === void 0 ? null : `${declaredPort}:${declaredPort}`;
2361
+ }
2362
+ return `${declaredPort ?? BUILD_SERVICE_DEFAULTS[kind].containerPort}:${BUILD_SERVICE_DEFAULTS[kind].containerPort}`;
2363
+ }
2364
+ function evaluateBuildServicePort(service) {
2365
+ const published = resolveBuildServicePort(service.image, service.port);
2366
+ return published === null ? { ok: false, blockedReason: "buildServicePortRequired" } : { ok: true, published };
2367
+ }
2368
+ function appBuildRunnerCapacity(runner) {
2369
+ return { vcpu: runner.vcpu, memoryGiB: runner.memoryGiB - APP_BUILD_RUNNER_HEADROOM_GIB };
2370
+ }
2371
+ function evaluateBuildRunnerFit(runner, declaredMemoryGiB) {
2372
+ const capacity = appBuildRunnerCapacity(runner);
2373
+ if (declaredMemoryGiB === void 0 || declaredMemoryGiB <= capacity.memoryGiB) return { fits: true };
2374
+ return { fits: false, blockedReason: "runnerTooSmall", maxMemoryGiB: capacity.memoryGiB };
2375
+ }
2376
+ function appBuildCheckName(name) {
2377
+ return `${APP_BUILD_CHECK_NAME_PREFIX}${name}`;
2378
+ }
2379
+ function isAppBuildCheckJobName(jobName) {
2380
+ return jobName.startsWith(APP_BUILD_CHECK_NAME_PREFIX);
2381
+ }
2382
+ var SHA256_ROUND_CONSTANTS = [
2383
+ 1116352408,
2384
+ 1899447441,
2385
+ 3049323471,
2386
+ 3921009573,
2387
+ 961987163,
2388
+ 1508970993,
2389
+ 2453635748,
2390
+ 2870763221,
2391
+ 3624381080,
2392
+ 310598401,
2393
+ 607225278,
2394
+ 1426881987,
2395
+ 1925078388,
2396
+ 2162078206,
2397
+ 2614888103,
2398
+ 3248222580,
2399
+ 3835390401,
2400
+ 4022224774,
2401
+ 264347078,
2402
+ 604807628,
2403
+ 770255983,
2404
+ 1249150122,
2405
+ 1555081692,
2406
+ 1996064986,
2407
+ 2554220882,
2408
+ 2821834349,
2409
+ 2952996808,
2410
+ 3210313671,
2411
+ 3336571891,
2412
+ 3584528711,
2413
+ 113926993,
2414
+ 338241895,
2415
+ 666307205,
2416
+ 773529912,
2417
+ 1294757372,
2418
+ 1396182291,
2419
+ 1695183700,
2420
+ 1986661051,
2421
+ 2177026350,
2422
+ 2456956037,
2423
+ 2730485921,
2424
+ 2820302411,
2425
+ 3259730800,
2426
+ 3345764771,
2427
+ 3516065817,
2428
+ 3600352804,
2429
+ 4094571909,
2430
+ 275423344,
2431
+ 430227734,
2432
+ 506948616,
2433
+ 659060556,
2434
+ 883997877,
2435
+ 958139571,
2436
+ 1322822218,
2437
+ 1537002063,
2438
+ 1747873779,
2439
+ 1955562222,
2440
+ 2024104815,
2441
+ 2227730452,
2442
+ 2361852424,
2443
+ 2428436474,
2444
+ 2756734187,
2445
+ 3204031479,
2446
+ 3329325298
2447
+ ];
2448
+ var SHA256_INITIAL_HASH = [
2449
+ 1779033703,
2450
+ 3144134277,
2451
+ 1013904242,
2452
+ 2773480762,
2453
+ 1359893119,
2454
+ 2600822924,
2455
+ 528734635,
2456
+ 1541459225
2457
+ ];
2458
+ function rotateRight32(value, bits) {
2459
+ return (value >>> bits | value << 32 - bits) >>> 0;
2460
+ }
2461
+ function toHexWords(words) {
2462
+ let hex = "";
2463
+ for (const word of words) hex += word.toString(16).padStart(8, "0");
2464
+ return hex;
2465
+ }
2466
+ function sha256Hex(text) {
2467
+ const message = new TextEncoder().encode(text);
2468
+ const bitLength = message.length * 8;
2469
+ const paddedLength = Math.ceil((message.length + 9) / 64) * 64;
2470
+ const padded = new Uint8Array(paddedLength);
2471
+ padded.set(message);
2472
+ padded[message.length] = 128;
2473
+ const high = Math.floor(bitLength / 4294967296);
2474
+ const low = bitLength >>> 0;
2475
+ padded[paddedLength - 8] = high >>> 24 & 255;
2476
+ padded[paddedLength - 7] = high >>> 16 & 255;
2477
+ padded[paddedLength - 6] = high >>> 8 & 255;
2478
+ padded[paddedLength - 5] = high & 255;
2479
+ padded[paddedLength - 4] = low >>> 24 & 255;
2480
+ padded[paddedLength - 3] = low >>> 16 & 255;
2481
+ padded[paddedLength - 2] = low >>> 8 & 255;
2482
+ padded[paddedLength - 1] = low & 255;
2483
+ const schedule = new Uint32Array(64);
2484
+ const hash = new Uint32Array(SHA256_INITIAL_HASH);
2485
+ for (let offset = 0; offset < paddedLength; offset += 64) {
2486
+ for (let index = 0; index < 16; index += 1) {
2487
+ const at = offset + index * 4;
2488
+ schedule[index] = (padded[at] << 24 | padded[at + 1] << 16 | padded[at + 2] << 8 | padded[at + 3]) >>> 0;
2489
+ }
2490
+ for (let index = 16; index < 64; index += 1) {
2491
+ const w15 = schedule[index - 15];
2492
+ const w2 = schedule[index - 2];
2493
+ const sigma0 = (rotateRight32(w15, 7) ^ rotateRight32(w15, 18) ^ w15 >>> 3) >>> 0;
2494
+ const sigma1 = (rotateRight32(w2, 17) ^ rotateRight32(w2, 19) ^ w2 >>> 10) >>> 0;
2495
+ schedule[index] = schedule[index - 16] + sigma0 + schedule[index - 7] + sigma1 >>> 0;
2496
+ }
2497
+ let a = hash[0];
2498
+ let b = hash[1];
2499
+ let c = hash[2];
2500
+ let d = hash[3];
2501
+ let e = hash[4];
2502
+ let f = hash[5];
2503
+ let g = hash[6];
2504
+ let h = hash[7];
2505
+ for (let index = 0; index < 64; index += 1) {
2506
+ const sum1 = (rotateRight32(e, 6) ^ rotateRight32(e, 11) ^ rotateRight32(e, 25)) >>> 0;
2507
+ const choose = (e & f ^ ~e & g) >>> 0;
2508
+ const temp1 = h + sum1 + choose + SHA256_ROUND_CONSTANTS[index] + schedule[index] >>> 0;
2509
+ const sum0 = (rotateRight32(a, 2) ^ rotateRight32(a, 13) ^ rotateRight32(a, 22)) >>> 0;
2510
+ const majority = (a & b ^ a & c ^ b & c) >>> 0;
2511
+ const temp2 = sum0 + majority >>> 0;
2512
+ h = g;
2513
+ g = f;
2514
+ f = e;
2515
+ e = d + temp1 >>> 0;
2516
+ d = c;
2517
+ c = b;
2518
+ b = a;
2519
+ a = temp1 + temp2 >>> 0;
2520
+ }
2521
+ hash[0] = hash[0] + a >>> 0;
2522
+ hash[1] = hash[1] + b >>> 0;
2523
+ hash[2] = hash[2] + c >>> 0;
2524
+ hash[3] = hash[3] + d >>> 0;
2525
+ hash[4] = hash[4] + e >>> 0;
2526
+ hash[5] = hash[5] + f >>> 0;
2527
+ hash[6] = hash[6] + g >>> 0;
2528
+ hash[7] = hash[7] + h >>> 0;
2529
+ }
2530
+ return toHexWords([hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7]]);
2531
+ }
2532
+ function computeBuildInputsHash(values) {
2533
+ for (const value of values) {
2534
+ if (value.name.includes("\0") || value.name.includes("")) {
2535
+ throw new Error("computeBuildInputsHash: an env name may not contain U+0000 or U+0001");
2536
+ }
2537
+ if (value.fingerprint.includes("\0") || value.fingerprint.includes("")) {
2538
+ throw new Error("computeBuildInputsHash: a fingerprint may not contain U+0000 or U+0001");
2539
+ }
2540
+ }
2541
+ const canonical = values.map((value) => [value.name, value.fingerprint]).sort((left, right) => {
2542
+ if (left[0] !== right[0]) return left[0] < right[0] ? -1 : 1;
2543
+ if (left[1] !== right[1]) return left[1] < right[1] ? -1 : 1;
2544
+ return 0;
2545
+ }).map(([name, fingerprint]) => `${name}\0${fingerprint}`).join("");
2546
+ return sha256Hex(canonical);
2547
+ }
2548
+ function buildFailureExcerpt(lines, endAtLine) {
2549
+ const end = endAtLine === void 0 ? lines.length : Math.min(endAtLine + 1, lines.length);
2550
+ const start = Math.max(0, end - APP_BUILD_EXCERPT_MAX_LINES);
2551
+ return lines.slice(start, end).map((line) => line.slice(0, APP_BUILD_EXCERPT_MAX_LINE_CHARS));
2552
+ }
2553
+ function evaluateBuildDeployability(input) {
2554
+ const notDeployable = (reason) => ({ deployable: false, notDeployableReason: reason });
2555
+ if (input.status !== "succeeded") return notDeployable("notSucceeded");
2556
+ if (input.trigger === "verification") return notDeployable("verification");
2557
+ if (input.trigger !== "push" && input.trigger !== "manual") return notDeployable("pullRequest");
2558
+ if (input.branch !== input.trackedBranch) return notDeployable("pullRequest");
2559
+ if (input.specValidAtCommit !== true) return notDeployable("specInvalid");
2560
+ if (input.secretsSyncedAtEpochMs === null || input.startedAtEpochMs === null) return notDeployable("staleInputs");
2561
+ if (input.secretsSyncedAtEpochMs > input.startedAtEpochMs) return notDeployable("staleInputs");
2562
+ if (input.buildInputsHash === null || input.buildInputsHash !== input.currentInputsHash) {
2563
+ return notDeployable("staleInputs");
2564
+ }
2565
+ if (input.secretCheck !== "passed" && input.secretCheck !== "not_needed") return notDeployable("secretCheckFailed");
2566
+ if (!input.digestConfirmed) return notDeployable("digestUnconfirmed");
2567
+ if (input.buildKind === "apps-builder") {
2568
+ if (input.signatureState !== "signed") return notDeployable("unsigned");
2569
+ if (input.policy.blockFixableCritical && (input.scan?.fixableCritical ?? 0) > 0) {
2570
+ return notDeployable("criticalVulnerability");
2571
+ }
2572
+ }
2573
+ return { deployable: true, notDeployableReason: null };
2574
+ }
2575
+ var APP_BUILD_RUN_SOURCES = ["event", "poll"];
2576
+ var APP_BUILD_RUN_DISCOVERY_PER_PAGE = 20;
2577
+ var APP_BUILD_RUN_DISCOVERY_BATCH = 100;
2578
+ var APP_BUILD_FAILURE_COPY_EN = {
2579
+ outOfMemory: {
2580
+ title: "Ran out of memory",
2581
+ suggestion: "Raise build.resources.memory (now {memory}) or lower the build's heap size. On this runner a build can use at most {max}."
2582
+ },
2583
+ diskFull: {
2584
+ title: "Ran out of disk space",
2585
+ suggestion: 'Turn on "Reclaim runner disk" in build settings, or shrink the build context with a .dockerignore file.'
2586
+ },
2587
+ dockerfileError: {
2588
+ title: "The Dockerfile failed at step {step} of {total}",
2589
+ suggestion: "The failing step was: {command}. Fix it in {dockerfile} and push, or ask an agent to fix it."
2590
+ },
2591
+ dependencyDownloadFailed: {
2592
+ title: "Couldn't download dependencies",
2593
+ suggestion: "A package or base image registry didn't answer. Rebuild in a few minutes; if it keeps failing, pin the versions you depend on."
2594
+ },
2595
+ registryPushDenied: {
2596
+ title: "Couldn't push the image",
2597
+ suggestion: "Allow workflows in this repository to write packages (Settings \u25B8 Actions \u25B8 General \u25B8 Workflow permissions), then rebuild."
2598
+ },
2599
+ missingBuildValue: {
2600
+ title: "A build value is missing: {names}",
2601
+ suggestion: "Set it in Settings \u25B8 Environment, then rebuild."
2602
+ },
2603
+ secretInImage: {
2604
+ title: "A secret would have been published inside the image: {name}",
2605
+ suggestion: "Use this value only in an earlier build stage, or pass it as a build secret mount. Nothing was pushed."
2606
+ },
2607
+ timeout: {
2608
+ title: "Took longer than {minutes} minutes",
2609
+ suggestion: "Raise build.resources.timeoutMinutes (maximum 180) or speed the build up with caching."
2610
+ },
2611
+ workflowInvalid: {
2612
+ title: "The workflow file is invalid",
2613
+ suggestion: "GitHub can't run the build workflow. Review the open pull request from Ever Works to restore it."
2614
+ },
2615
+ digestMismatch: {
2616
+ title: "The pushed image could not be confirmed",
2617
+ suggestion: "The registry reported a different image than the build did. Rebuild; nothing unconfirmed will be deployed."
2618
+ },
2619
+ verificationFailed: {
2620
+ title: "The app didn't pass its smoke tests",
2621
+ suggestion: "{failed} of {total} smoke tests failed. See the results below."
2622
+ },
2623
+ egressBlocked: {
2624
+ title: "Network access was blocked",
2625
+ suggestion: "The build tried to reach {hosts}, which aren't on the builder's allowed list. Get what you need from your source repository or an allowed registry, then rebuild."
2626
+ },
2627
+ lost: {
2628
+ title: "Lost track of this build",
2629
+ suggestion: "GitHub stopped answering about this build. Check it on GitHub."
2630
+ },
2631
+ unknown: {
2632
+ title: "Something else went wrong",
2633
+ suggestion: "Open the logs on GitHub, or ask an agent to look."
2634
+ }
2635
+ };
2636
+ var APP_BUILD_BLOCKED_ACTIONS = [
2637
+ "reviewPullRequest",
2638
+ "turnOnActions",
2639
+ "setValue",
2640
+ "useLargerRunner",
2641
+ "openRepositorySettings",
2642
+ "reconnectGithub",
2643
+ "rebuild",
2644
+ "openEnvironment"
2645
+ ];
2646
+ var APP_BUILD_BLOCKED_REASON_ACTIONS = {
2647
+ workflowPending: "reviewPullRequest",
2648
+ workflowEditedByHand: "reviewPullRequest",
2649
+ workflowWriteFailed: "rebuild",
2650
+ actionsDisabled: "turnOnActions",
2651
+ missingBuildValues: "setValue",
2652
+ runnerTooSmall: "useLargerRunner",
2653
+ tooManyBuildValues: "openEnvironment",
2654
+ buildValueTooLarge: "openEnvironment",
2655
+ buildServicePortRequired: "openEnvironment",
2656
+ verificationDependencyUnsupported: null,
2657
+ strategyNotSupported: null,
2658
+ specInvalid: null,
2659
+ repositoryUnavailable: null,
2660
+ managedConcurrencyLimit: null,
2661
+ buildValueNameReserved: "openEnvironment",
2662
+ secretLimitReached: "openRepositorySettings",
2663
+ gitConnectionMissing: "reconnectGithub"
2664
+ };
2665
+ var APP_VERIFICATION_PLAN_VERSION = 1;
2666
+ var APP_BUILD_VERIFY_PLAN_MAX_COMPONENTS = 10;
2667
+ var APP_BUILD_VERIFY_PLAN_MAX_DEPENDENCIES = 3;
2668
+ var APP_BUILD_VERIFY_PLAN_MAX_JOBS = 10;
2669
+ var APP_BUILD_VERIFY_PLAN_MAX_SMOKE = 20;
2670
+ var APP_BUILD_VERIFY_PLAN_MAX_ENV_ENTRIES = 100;
2671
+ var APP_BUILD_VERIFICATION_RESULT_MAX_SMOKE = 50;
2672
+ var APP_VERIFICATION_JOB_PHASES = ["pre-deploy", "first-deploy"];
2673
+ var APP_MANIFEST_JOB_PHASES = ["pre-deploy", "first-deploy", "post-deploy"];
2674
+ var APP_VERIFICATION_PROBE_KINDS = ["http", "tcp"];
2675
+ var APP_HTTP_AUTH_SCHEMES = ["bearer", "raw"];
2676
+ var APP_VERIFICATION_HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"];
2677
+ var APP_VERIFICATION_SMOKE_WHENS = ["after-deploy", "after-jobs"];
2678
+ var APP_VERIFICATION_COMPONENT_ROLES = ["web", "worker"];
2679
+ var APP_VERIFICATION_DEPENDENCY_KINDS = ["postgres", "redis", "objectStorage"];
2680
+ var APP_VERIFICATION_DEPENDENCY_CONTAINERS = {
2681
+ postgres: "ew-dep-postgres",
2682
+ redis: "ew-dep-redis",
2683
+ objectStorage: "ew-dep-object-storage"
2684
+ };
2685
+
2686
+ // src/apps/ever-id.ts
2687
+ var EVER_ID_REGISTRATION_PROVIDER = "ever-id";
2688
+ var EVER_ID_SCOPES = { APPS_READ: "apps:read", SESSION_EXCHANGE: "ever-works:session" };
2689
+ var EVER_ID_DEFAULT_API_AUDIENCE = "ever-works";
2690
+ var EVER_ID_DEFAULT_DISPLAY_NAME = "Ever ID";
2691
+ var EVER_ID_SIGNING_ALGS = ["RS256", "ES256", "EdDSA"];
2692
+ var EVER_ID_QUERY_TOKEN_PARAMS = [
2693
+ "access_token",
2694
+ "id_token",
2695
+ "logout_token",
2696
+ "token",
2697
+ "sessionToken",
2698
+ "code_verifier"
2699
+ ];
2700
+ var EVER_ID_DELEGATED_SCOPES = ["apps:read"];
2701
+ var EVER_ID_DELEGATED_AUTH_METHOD = "ever-id-delegated";
2702
+ var EVER_ID_LINKED_VIA = ["sign-up", "settings"];
2703
+ var EVER_ID_LIMITS = {
2704
+ /** FR-9 — fresh random bytes per sign-in. */
2705
+ stateBytes: 32,
2706
+ /** FR-9 — fresh random bytes per sign-in. */
2707
+ nonceBytes: 32,
2708
+ /** FR-9 — the PKCE code verifier is 64 characters. */
2709
+ codeVerifierLength: 64,
2710
+ /** FR-9 — the transaction cookie lives 600 seconds. */
2711
+ transactionTtlSeconds: 600,
2712
+ /** FR-23 — a pending account creation expires after 600 seconds and is single-use. */
2713
+ signUpPendingTtlSeconds: 600,
2714
+ /** FR-26 — a pending connection expires after 300 seconds and is single-use. */
2715
+ connectPendingTtlSeconds: 300,
2716
+ /** FR-11 — `iat` may be no earlier than 600 seconds ago. */
2717
+ idTokenMaxAgeSeconds: 600,
2718
+ /** FR-25 — `auth_time` no older than 300 seconds plus the skew. */
2719
+ connectMaxAuthAgeSeconds: 300,
2720
+ /** FR-25 — connecting needs a session opened at most 12 hours ago. */
2721
+ connectMaxSessionAgeSeconds: 43200,
2722
+ /** FR-2 — the default clock-skew tolerance. */
2723
+ defaultClockSkewSeconds: 60,
2724
+ /** FR-2 — the highest clock-skew tolerance an administrator may configure. */
2725
+ maxClockSkewSeconds: 120,
2726
+ /** FR-13 — signing keys are cached for 600 seconds. */
2727
+ jwksCacheSeconds: 600,
2728
+ /** FR-13 — an unknown key id triggers at most one refresh per 30 seconds. */
2729
+ jwksUnknownKidCooldownSeconds: 30,
2730
+ /** FR-13 — cached keys stay usable for at most 21 600 seconds, then validation fails closed. */
2731
+ jwksMaxStaleSeconds: 21600,
2732
+ /** FR-14 — the discovery document is cached for 3 600 seconds. */
2733
+ discoveryCacheSeconds: 3600,
2734
+ /** FR-15 — calls to the provider time out after 5 seconds. */
2735
+ outboundTimeoutMs: 5e3,
2736
+ /** FR-33 — a sign-out notice's `iat` may be no older than 300 seconds. */
2737
+ logoutTokenMaxAgeSeconds: 300,
2738
+ /** FR-33 — a `jti` not seen in the last 600 seconds. */
2739
+ replayWindowSeconds: 600,
2740
+ /** FR-40 — an exchange token's `iat` may be no older than 300 seconds. */
2741
+ exchangeTokenMaxAgeSeconds: 300,
2742
+ /** FR-45 — a delegated token's lifetime (`exp` − `iat`) is at most 3 600 seconds. */
2743
+ delegatedTokenMaxLifetimeSeconds: 3600,
2744
+ /** FR-2 — 1–3 allowed issuers, so a provider move stays reversible (R-28). */
2745
+ allowedIssuersMax: 3,
2746
+ /** FR-2 — 0–5 local-client ids allowed to exchange for a session. */
2747
+ localClientsMax: 5,
2748
+ /** FR-31/FR-48 — at most 10 apps whose delegated reads are remembered. */
2749
+ delegatedClientsMax: 10,
2750
+ /** FR-48 — the Connected identities card lists apps seen in the last 30 days. */
2751
+ delegatedClientsWindowDays: 30,
2752
+ /** FR-5 — the availability answer is cached for 60 seconds. */
2753
+ availabilityCacheSeconds: 60,
2754
+ /** FR-31 — the names kept per delegated client. */
2755
+ delegatedClientNamesMax: 10,
2756
+ /** FR-41 — clients poll no faster than the interval the provider returns, at least 5 seconds. */
2757
+ devicePollMinIntervalSeconds: 5,
2758
+ /** FR-41 — add 5 seconds on every `slow_down`. */
2759
+ devicePollSlowDownStepSeconds: 5,
2760
+ /** FR-41 — a device code expires in at most 900 seconds. */
2761
+ deviceCodeMaxLifetimeSeconds: 900
2762
+ };
2763
+ function isEverIdClockSkewAllowed(seconds) {
2764
+ return Number.isInteger(seconds) && seconds >= 0 && seconds <= EVER_ID_LIMITS.maxClockSkewSeconds;
2765
+ }
2766
+ function isEverIdAllowedIssuerCountAllowed(count) {
2767
+ return Number.isInteger(count) && count >= 1 && count <= EVER_ID_LIMITS.allowedIssuersMax;
2768
+ }
2769
+ var EVER_ID_WIRE_ERROR_CODES = [
2770
+ "ever_id_disabled",
2771
+ "provider_unavailable",
2772
+ "transaction_invalid",
2773
+ "email_not_verified",
2774
+ "email_in_use",
2775
+ "sign_up_not_allowed",
2776
+ "subject_linked",
2777
+ "user_has_issuer",
2778
+ "reauth_required",
2779
+ "session_required",
2780
+ "last_sign_in_method",
2781
+ "not_connected",
2782
+ "account_disabled",
2783
+ "ever_id_signed_out",
2784
+ "token_in_query",
2785
+ "insufficient_scope"
2786
+ ];
2787
+ var EVER_ID_ERROR_CODE_WIRE_VALUES = {
2788
+ everIdDisabled: "ever_id_disabled",
2789
+ providerUnavailable: "provider_unavailable",
2790
+ transactionInvalid: "transaction_invalid",
2791
+ emailNotVerified: "email_not_verified",
2792
+ emailInUse: "email_in_use",
2793
+ signUpNotAllowed: "sign_up_not_allowed",
2794
+ subjectLinked: "subject_linked",
2795
+ userHasIssuer: "user_has_issuer",
2796
+ reauthRequired: "reauth_required",
2797
+ sessionRequired: "session_required",
2798
+ lastSignInMethod: "last_sign_in_method",
2799
+ notConnected: "not_connected",
2800
+ accountDisabled: "account_disabled",
2801
+ everIdSignedOut: "ever_id_signed_out",
2802
+ tokenInQuery: "token_in_query",
2803
+ insufficientScope: "insufficient_scope"
2804
+ };
2805
+
2806
+ // src/apps/tenant-postgres-ddl.ts
2807
+ var TENANT_POSTGRES_DATABASE_PREFIX = "awd_";
2808
+ var TENANT_POSTGRES_ROLE_PREFIX = "awr_";
2809
+ var TENANT_POSTGRES_PASSWORD_PATTERN = "^[0-9a-f]{32}$";
2810
+ var TENANT_POSTGRES_ROLE_CONNECTION_LIMIT = APP_DEPENDENCY_MANAGED.pgRoleConnectionLimit;
2811
+ var TENANT_POSTGRES_DATABASE_CONNECTION_LIMIT = APP_DEPENDENCY_MANAGED.pgDatabaseConnectionLimit;
2812
+ var TENANT_POSTGRES_STATEMENT_TIMEOUT_MS = APP_DEPENDENCY_MANAGED.pgStatementTimeoutMs;
2813
+ var TENANT_POSTGRES_IDLE_IN_TRANSACTION_TIMEOUT_MS = APP_DEPENDENCY_MANAGED.pgIdleInTransactionTimeoutMs;
2814
+ var TENANT_POSTGRES_ROLE_ATTRIBUTES = [
2815
+ "LOGIN",
2816
+ "NOSUPERUSER",
2817
+ "NOCREATEDB",
2818
+ "NOCREATEROLE",
2819
+ "NOREPLICATION",
2820
+ "NOBYPASSRLS"
2821
+ ];
2822
+ var TENANT_POSTGRES_DEFAULT_PORT = APP_DEPENDENCY_POSTGRES_DEFAULT_PORT;
2823
+ var TENANT_POSTGRES_DDL_REFUSALS = [
2824
+ "identifierInvalid",
2825
+ "passwordInvalid",
2826
+ "connectionLimitInvalid",
2827
+ "timeoutInvalid"
2828
+ ];
2829
+ var TENANT_POSTGRES_IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]{0,62}$/;
2830
+ function quoteTenantPostgresIdentifier(name) {
2831
+ return `"${name.replace(/"/g, '""')}"`;
2832
+ }
2833
+ function quoteTenantPostgresLiteral(value) {
2834
+ return `'${value.replace(/'/g, "''")}'`;
2835
+ }
2836
+ function buildTenantPostgresDdl(input) {
2837
+ if (!TENANT_POSTGRES_IDENTIFIER_PATTERN.test(input.dbName)) return { ok: false, refusal: "identifierInvalid" };
2838
+ if (!TENANT_POSTGRES_IDENTIFIER_PATTERN.test(input.roleName)) return { ok: false, refusal: "identifierInvalid" };
2839
+ if (!new RegExp(TENANT_POSTGRES_PASSWORD_PATTERN).test(input.password))
2840
+ return { ok: false, refusal: "passwordInvalid" };
2841
+ const roleLimit = input.roleConnectionLimit ?? TENANT_POSTGRES_ROLE_CONNECTION_LIMIT;
2842
+ const databaseLimit = input.databaseConnectionLimit ?? TENANT_POSTGRES_DATABASE_CONNECTION_LIMIT;
2843
+ const statementTimeoutMs = input.statementTimeoutMs ?? TENANT_POSTGRES_STATEMENT_TIMEOUT_MS;
2844
+ const idleTimeoutMs = input.idleInTransactionTimeoutMs ?? TENANT_POSTGRES_IDLE_IN_TRANSACTION_TIMEOUT_MS;
2845
+ if (!Number.isSafeInteger(roleLimit) || roleLimit < 1) return { ok: false, refusal: "connectionLimitInvalid" };
2846
+ if (!Number.isSafeInteger(databaseLimit) || databaseLimit < 1)
2847
+ return { ok: false, refusal: "connectionLimitInvalid" };
2848
+ if (!Number.isSafeInteger(statementTimeoutMs) || statementTimeoutMs < 1)
2849
+ return { ok: false, refusal: "timeoutInvalid" };
2850
+ if (!Number.isSafeInteger(idleTimeoutMs) || idleTimeoutMs < 1) return { ok: false, refusal: "timeoutInvalid" };
2851
+ const db = quoteTenantPostgresIdentifier(input.dbName);
2852
+ const role = quoteTenantPostgresIdentifier(input.roleName);
2853
+ const password = quoteTenantPostgresLiteral(input.password);
2854
+ const attributes = TENANT_POSTGRES_ROLE_ATTRIBUTES.join(" ");
2855
+ const server = [
2856
+ input.roleExists ? `ALTER ROLE ${role} WITH ${attributes} PASSWORD ${password} CONNECTION LIMIT ${roleLimit};` : `CREATE ROLE ${role} WITH ${attributes} PASSWORD ${password} CONNECTION LIMIT ${roleLimit};`,
2857
+ `ALTER ROLE ${role} SET statement_timeout = ${quoteTenantPostgresLiteral(toPostgresSeconds(statementTimeoutMs))};`,
2858
+ `ALTER ROLE ${role} SET idle_in_transaction_session_timeout = ${quoteTenantPostgresLiteral(
2859
+ toPostgresSeconds(idleTimeoutMs)
2860
+ )};`
2861
+ ];
2862
+ if (!input.databaseExists) {
2863
+ server.push(`CREATE DATABASE ${db} OWNER ${role} CONNECTION LIMIT ${databaseLimit};`);
2864
+ }
2865
+ server.push(`REVOKE CONNECT, TEMPORARY ON DATABASE ${db} FROM PUBLIC;`);
2866
+ server.push(`GRANT CONNECT, TEMPORARY ON DATABASE ${db} TO ${role};`);
2867
+ const database = [`REVOKE ALL ON SCHEMA public FROM PUBLIC;`, `ALTER SCHEMA public OWNER TO ${role};`];
2868
+ for (const extension of input.extensions ?? []) {
2869
+ if (!TENANT_POSTGRES_IDENTIFIER_PATTERN.test(extension)) return { ok: false, refusal: "identifierInvalid" };
2870
+ database.push(`CREATE EXTENSION IF NOT EXISTS ${quoteTenantPostgresIdentifier(extension)};`);
2871
+ }
2872
+ return {
2873
+ ok: true,
2874
+ plan: {
2875
+ server,
2876
+ database,
2877
+ statements: [...server, ...database],
2878
+ createsDatabase: !input.databaseExists,
2879
+ altersRole: input.roleExists
2880
+ }
2881
+ };
2882
+ }
2883
+ function toPostgresSeconds(milliseconds) {
2884
+ return `${milliseconds / 1e3}s`;
2885
+ }
2886
+ function normaliseDataServerEndpoint(host, port) {
2887
+ let normalisedHost = host.trim().toLowerCase();
2888
+ if (normalisedHost.startsWith("[") && normalisedHost.endsWith("]")) {
2889
+ normalisedHost = normalisedHost.slice(1, -1);
2890
+ }
2891
+ if (normalisedHost.length === 0) return null;
2892
+ if (port !== void 0 && (!Number.isSafeInteger(port) || port < 1 || port > 65535)) return null;
2893
+ return { host: normalisedHost, port: port ?? TENANT_POSTGRES_DEFAULT_PORT };
2894
+ }
2895
+ function parseDataServerUrl(url) {
2896
+ const trimmed = url.trim();
2897
+ if (trimmed.length === 0) return null;
2898
+ const schemeAt = trimmed.indexOf("://");
2899
+ if (schemeAt >= 0) {
2900
+ const rest = trimmed.slice(schemeAt + 3);
2901
+ const authority = rest.split(/[/?#]/, 1)[0] ?? "";
2902
+ const withoutUserInfo = authority.includes("@") ? authority.slice(authority.lastIndexOf("@") + 1) : authority;
2903
+ if (withoutUserInfo.startsWith("[")) {
2904
+ const closing = withoutUserInfo.indexOf("]");
2905
+ if (closing < 0) return null;
2906
+ const host2 = withoutUserInfo.slice(1, closing);
2907
+ const tail = withoutUserInfo.slice(closing + 1);
2908
+ if (tail.length === 0) return normaliseDataServerEndpoint(host2);
2909
+ if (!tail.startsWith(":")) return null;
2910
+ return normaliseDataServerEndpoint(host2, Number(tail.slice(1)));
2911
+ }
2912
+ const separator2 = withoutUserInfo.lastIndexOf(":");
2913
+ if (separator2 < 0) return normaliseDataServerEndpoint(withoutUserInfo);
2914
+ const host = withoutUserInfo.slice(0, separator2);
2915
+ const portText = withoutUserInfo.slice(separator2 + 1);
2916
+ return normaliseDataServerEndpoint(host, portText.length === 0 ? void 0 : Number(portText));
2917
+ }
2918
+ if (trimmed.startsWith("[")) {
2919
+ const closing = trimmed.indexOf("]");
2920
+ if (closing < 0) return null;
2921
+ const host = trimmed.slice(1, closing);
2922
+ const tail = trimmed.slice(closing + 1);
2923
+ if (tail.length === 0) return normaliseDataServerEndpoint(host);
2924
+ if (!tail.startsWith(":")) return null;
2925
+ return normaliseDataServerEndpoint(host, Number(tail.slice(1)));
2926
+ }
2927
+ const separator = trimmed.lastIndexOf(":");
2928
+ if (separator < 0) return normaliseDataServerEndpoint(trimmed);
2929
+ return normaliseDataServerEndpoint(trimmed.slice(0, separator), Number(trimmed.slice(separator + 1)));
2930
+ }
2931
+ function isPlatformDataServer(candidate, platformEndpoints) {
2932
+ const parsed = parseDataServerUrl(candidate);
2933
+ if (parsed === null) return false;
2934
+ return platformEndpoints.some((endpoint) => {
2935
+ const normalised = normaliseDataServerEndpoint(endpoint.host, endpoint.port);
2936
+ return normalised !== null && normalised.host === parsed.host && normalised.port === parsed.port;
2937
+ });
2938
+ }
2939
+ function platformDataServerEndpoints(set) {
2940
+ return [set.platform, set.sharedWorks];
2941
+ }
2942
+
2943
+ // src/apps/work-app-spec.dto.ts
2944
+ function buildAppSpecLineLink(links, line) {
2945
+ const base = links.file.base;
2946
+ const anchor = links.lineAnchor;
2947
+ if (typeof line !== "number" || !Number.isInteger(line) || line < 1 || !anchor || !anchor.includes("{line}")) {
2948
+ return base;
2949
+ }
2950
+ return `${base}${anchor.replace("{line}", String(line))}`;
2951
+ }
2952
+ var APP_BLUEPRINT_APPLY_STATUSES = ["applying", "applied", "failed"];
2953
+
2954
+ // src/apps/app-provisioning.ts
2955
+ var APP_PROVISIONING_STATUSES = [
2956
+ "queued",
2957
+ "running",
2958
+ "needs_input",
2959
+ "succeeded",
2960
+ "merged",
2961
+ "failed",
2962
+ "cancelled"
2963
+ ];
2964
+ var APP_PROVISIONING_STEPS = [
2965
+ "repository",
2966
+ "analysis",
2967
+ "proposal",
2968
+ "validate",
2969
+ "build",
2970
+ "boot",
2971
+ "smoke",
2972
+ "evidence"
2973
+ ];
2974
+ var APP_PROVISIONING_STEP_STATES = ["pending", "running", "passed", "failed", "blocked", "skipped"];
2975
+ var APP_PROVISIONING_FAILURE_REASONS = [
2976
+ "no-isolated-runtime",
2977
+ "repository-not-ready",
2978
+ "repository-too-large",
2979
+ "not-runnable",
2980
+ "token-cap",
2981
+ "runner-minute-cap",
2982
+ "deadline",
2983
+ "could-not-verify",
2984
+ "no-answer",
2985
+ "verification-infrastructure",
2986
+ // Appended — see the module docstring's correction 1.
2987
+ "private-repository"
2988
+ ];
2989
+ var APP_PROVISIONING_QUESTION_REASONS = [
2990
+ "attempts-spent",
2991
+ "repeated-failure",
2992
+ "missing-required-value",
2993
+ "runner-capacity",
2994
+ "token-cap",
2995
+ "runner-minute-cap",
2996
+ "multiple-apps",
2997
+ "agent-asked",
2998
+ "safety-rail"
2999
+ // R-17: a rail refused or held an action (grants, ladder, caps, rules)
3000
+ ];
3001
+ var APP_PROVISIONING_PARK_REASONS = [
3002
+ "kill-switch",
3003
+ "agent-paused",
3004
+ "workspace-paused",
3005
+ "scope-paused"
3006
+ ];
3007
+ var APP_PROVISIONING_DETECTION_SOURCES = [
3008
+ "app-spec",
3009
+ "compose",
3010
+ "dockerfile",
3011
+ "helm",
3012
+ "descriptor-hint",
3013
+ "auto"
3014
+ // R-13 zero-config build; the builder is the build plugin's choice
3015
+ ];
3016
+ var APP_PROVISION_LIMITS = {
3017
+ attemptsDefault: 3,
3018
+ attemptsMin: 1,
3019
+ attemptsMax: 5,
3020
+ attemptsPerAnswer: 2,
3021
+ questionsMax: 3,
3022
+ attemptsCeiling: 9,
3023
+ optionsMax: 4,
3024
+ tokenCapDefault: 3e6,
3025
+ tokenCapMin: 5e5,
3026
+ tokenCapMax: 1e7,
3027
+ runnerMinuteCapDefault: 240,
3028
+ runnerMinuteCapMin: 60,
3029
+ runnerMinuteCapMax: 600,
3030
+ /** Two starts of the same App Work inside this window yield one row (§4 "Start semantics"). */
3031
+ startDedupeMs: 1e4,
3032
+ analysisRunMs: 45 * 6e4,
3033
+ iterateRunMs: 30 * 6e4,
3034
+ forkWaitMs: 30 * 6e4,
3035
+ activeDeadlineMs: 8 * 36e5,
3036
+ /**
3037
+ * Verification-Build reservation: `min(headSpec.build.resources.timeoutMinutes, buildMinutesMax)
3038
+ * + runnerBootMinutesMax` — 90 minutes at the defaults, and the number §6.4 compares against the cap.
3039
+ */
3040
+ buildMinutesMax: 60,
3041
+ jobSecondsMax: 900,
3042
+ startupSecondsMax: 900,
3043
+ smokeRequestMs: 3e4,
3044
+ smokeTotalMs: 3e5,
3045
+ runnerBootMinutesMax: 30,
3046
+ runnerBootMemoryGiB: 12,
3047
+ buildMemoryGiBMax: 14,
3048
+ namespaceTtlMinutes: 90,
3049
+ repoMaxBytes: 3 * 1024 ** 3,
3050
+ diffMaxFiles: 12,
3051
+ diffMaxLines: 3e3,
3052
+ fileMaxBytes: 128 * 1024,
3053
+ outputMaxBytes: 512 * 1024,
3054
+ reportMaxChars: 4e4,
3055
+ instructionFileMaxBytes: 32 * 1024,
3056
+ logTailLines: 200,
3057
+ logTailBytes: 16 * 1024,
3058
+ evidenceCommentMaxChars: 6e4,
3059
+ chatMessagesMax: 12,
3060
+ questionReminderMs: 72 * 36e5,
3061
+ questionExpiryMs: 14 * 864e5,
3062
+ activePerUser: 3,
3063
+ activePerOrg: 10,
3064
+ startsPerHour: 10,
3065
+ pollMs: 5e3,
3066
+ infraRetries: 3,
3067
+ infraRetryWindowMs: 30 * 6e4,
3068
+ suggestionsPer30Days: 5,
3069
+ autoReprovisionPerSync: 1,
3070
+ autoReprovisionPer7Days: 2,
3071
+ clusterProbeMs: 1e4,
3072
+ podPendingInfraMs: 10 * 6e4
3073
+ };
3074
+ var APP_PROVISION_WRITABLE_PATHS = [".works/works.yml", ".works/overlay/**"];
3075
+ var APP_PROVISION_PRESERVED_SPEC_FIELDS = [
3076
+ "source",
3077
+ "blueprint",
3078
+ "license",
3079
+ "display.protectedPaths",
3080
+ "upstreamSync",
3081
+ "upstreamPullRequests",
3082
+ "provisioning"
3083
+ ];
3084
+ var APP_PROVISIONING_QUESTION_REASON_I18N_KEY = {
3085
+ "attempts-spent": "attemptsSpent",
3086
+ "repeated-failure": "repeatedFailure",
3087
+ "missing-required-value": "missingRequiredValue",
3088
+ "runner-capacity": "runnerCapacity",
3089
+ "token-cap": "tokenCap",
3090
+ "runner-minute-cap": "runnerMinuteCap",
3091
+ "multiple-apps": "multipleApps",
3092
+ "agent-asked": "agentAsked",
3093
+ "safety-rail": "safetyRail"
3094
+ };
3095
+ var APP_PROVISIONING_FAILURE_REASON_I18N_KEY = {
3096
+ "no-isolated-runtime": "noIsolatedRuntime",
3097
+ "repository-not-ready": "repositoryNotReady",
3098
+ "repository-too-large": "repositoryTooLarge",
3099
+ "not-runnable": "notRunnable",
3100
+ "token-cap": "tokenCap",
3101
+ "runner-minute-cap": "runnerMinuteCap",
3102
+ deadline: "deadline",
3103
+ "could-not-verify": "couldNotVerify",
3104
+ "no-answer": "noAnswer",
3105
+ "verification-infrastructure": "verificationInfrastructure",
3106
+ "private-repository": "privateRepository"
3107
+ };
3108
+ var APP_PROVISIONING_QUEUED_REASON_I18N_KEY = {
3109
+ "user-limit": "userLimit",
3110
+ "org-limit": "orgLimit"
3111
+ };
3112
+ var APP_PROVISIONING_OPTION_I18N_KEY = {
3113
+ retry: "retry",
3114
+ optional: "optional",
3115
+ "verify-on-cluster": "verifyOnCluster",
3116
+ "accept-build-only": "acceptBuildOnly",
3117
+ "raise-cap": "raiseCap",
3118
+ choose: "choose",
3119
+ stop: "stop",
3120
+ "retry-after-setting": "retryAfterSetting"
3121
+ };
3122
+
3123
+ // src/apps/app-provisioning-copy.ts
3124
+ var APP_PROVISION_COPY_PARAMS = [
3125
+ "repo",
3126
+ "attempts",
3127
+ "variable",
3128
+ "step",
3129
+ "reason",
3130
+ "candidate",
3131
+ "candidates",
3132
+ "pr",
3133
+ "n",
3134
+ "budget",
3135
+ "detail",
3136
+ "tokens",
3137
+ "minutes"
3138
+ ];
3139
+ var APP_PROVISION_REASON_TEXT_NO_ISOLATED_RUNTIME = "no isolated sandbox is available.";
3140
+ var APP_PROVISION_REASON_TEXT_REPOSITORY_NOT_READY = "the repository was not ready after 30 minutes.";
3141
+ var APP_PROVISION_REASON_TEXT_REPOSITORY_TOO_LARGE = "the repository is larger than 3 GiB.";
3142
+ var APP_PROVISION_REASON_TEXT_NOT_RUNNABLE = "this repository is not something that can run as a service.";
3143
+ var APP_PROVISION_REASON_TEXT_TOKEN_CAP = "the token cap was reached.";
3144
+ var APP_PROVISION_REASON_TEXT_RUNNER_MINUTE_CAP = "the runner-minute cap was reached.";
3145
+ var APP_PROVISION_REASON_TEXT_DEADLINE = "it ran for more than 8 hours.";
3146
+ var APP_PROVISION_REASON_TEXT_COULD_NOT_VERIFY = "it could not be verified after {attempts} attempts.";
3147
+ var APP_PROVISION_REASON_TEXT_NO_ANSWER = "the question went unanswered for 14 days.";
3148
+ var APP_PROVISION_REASON_TEXT_VERIFICATION_INFRASTRUCTURE = "builds are not available for this repository.";
3149
+ var APP_PROVISION_REASON_TEXT_PRIVATE_REPOSITORY = "private repositories can't be provisioned yet.";
3150
+ var APP_PROVISION_REASON_TEXTS = {
3151
+ "no-isolated-runtime": APP_PROVISION_REASON_TEXT_NO_ISOLATED_RUNTIME,
3152
+ "repository-not-ready": APP_PROVISION_REASON_TEXT_REPOSITORY_NOT_READY,
3153
+ "repository-too-large": APP_PROVISION_REASON_TEXT_REPOSITORY_TOO_LARGE,
3154
+ "not-runnable": APP_PROVISION_REASON_TEXT_NOT_RUNNABLE,
3155
+ "token-cap": APP_PROVISION_REASON_TEXT_TOKEN_CAP,
3156
+ "runner-minute-cap": APP_PROVISION_REASON_TEXT_RUNNER_MINUTE_CAP,
3157
+ deadline: APP_PROVISION_REASON_TEXT_DEADLINE,
3158
+ "could-not-verify": APP_PROVISION_REASON_TEXT_COULD_NOT_VERIFY,
3159
+ "no-answer": APP_PROVISION_REASON_TEXT_NO_ANSWER,
3160
+ "verification-infrastructure": APP_PROVISION_REASON_TEXT_VERIFICATION_INFRASTRUCTURE,
3161
+ "private-repository": APP_PROVISION_REASON_TEXT_PRIVATE_REPOSITORY
3162
+ };
3163
+ var APP_PROVISION_QUESTION_SUBJECT_PREFIX = "Provisioning {repo}: ";
3164
+ var APP_PROVISION_QUESTION_SUBJECT_ATTEMPTS_SPENT = "the app could not be verified in {attempts} attempts.";
3165
+ var APP_PROVISION_QUESTION_SUBJECT_REPEATED_FAILURE = "the same failure happened twice.";
3166
+ var APP_PROVISION_QUESTION_SUBJECT_MISSING_REQUIRED_VALUE = "the app will not start without {variable}.";
3167
+ var APP_PROVISION_QUESTION_SUBJECT_RUNNER_CAPACITY = "this app cannot boot in the build runner.";
3168
+ var APP_PROVISION_QUESTION_SUBJECT_TOKEN_CAP = "the token cap was reached.";
3169
+ var APP_PROVISION_QUESTION_SUBJECT_RUNNER_MINUTE_CAP = "the runner-minute cap was reached.";
3170
+ var APP_PROVISION_QUESTION_SUBJECT_MULTIPLE_APPS = "this repository has more than one app.";
3171
+ var APP_PROVISION_QUESTION_SUBJECT_AGENT_ASKED = "the agent needs a decision.";
3172
+ var APP_PROVISION_QUESTION_SUBJECT_SAFETY_RAIL = "a safety rule stopped the run: {reason}.";
3173
+ var APP_PROVISION_QUESTION_SUBJECTS = {
3174
+ "attempts-spent": APP_PROVISION_QUESTION_SUBJECT_ATTEMPTS_SPENT,
3175
+ "repeated-failure": APP_PROVISION_QUESTION_SUBJECT_REPEATED_FAILURE,
3176
+ "missing-required-value": APP_PROVISION_QUESTION_SUBJECT_MISSING_REQUIRED_VALUE,
3177
+ "runner-capacity": APP_PROVISION_QUESTION_SUBJECT_RUNNER_CAPACITY,
3178
+ "token-cap": APP_PROVISION_QUESTION_SUBJECT_TOKEN_CAP,
3179
+ "runner-minute-cap": APP_PROVISION_QUESTION_SUBJECT_RUNNER_MINUTE_CAP,
3180
+ "multiple-apps": APP_PROVISION_QUESTION_SUBJECT_MULTIPLE_APPS,
3181
+ "agent-asked": APP_PROVISION_QUESTION_SUBJECT_AGENT_ASKED,
3182
+ "safety-rail": APP_PROVISION_QUESTION_SUBJECT_SAFETY_RAIL
3183
+ };
3184
+ var APP_PROVISION_OPTION_RETRY = "Try again";
3185
+ var APP_PROVISION_OPTION_RETRY_AFTER_SETTING = "I set it on the App env page \u2014 try again";
3186
+ var APP_PROVISION_OPTION_OPTIONAL = "Treat it as optional";
3187
+ var APP_PROVISION_OPTION_VERIFY_ON_CLUSTER = "Verify on my cluster instead";
3188
+ var APP_PROVISION_OPTION_ACCEPT_BUILD_ONLY = "Build and check only";
3189
+ var APP_PROVISION_OPTION_RAISE_CAP_TOKENS = "Raise the cap by 1,000,000 tokens";
3190
+ var APP_PROVISION_OPTION_RAISE_CAP_MINUTES = "Raise the cap by 60 runner minutes";
3191
+ var APP_PROVISION_OPTION_CHOOSE = "Use {candidate}";
3192
+ var APP_PROVISION_OPTION_STOP = "Stop provisioning";
3193
+ var APP_PROVISION_OPTION_LABELS = {
3194
+ retry: APP_PROVISION_OPTION_RETRY,
3195
+ "retry-after-setting": APP_PROVISION_OPTION_RETRY_AFTER_SETTING,
3196
+ optional: APP_PROVISION_OPTION_OPTIONAL,
3197
+ "verify-on-cluster": APP_PROVISION_OPTION_VERIFY_ON_CLUSTER,
3198
+ "accept-build-only": APP_PROVISION_OPTION_ACCEPT_BUILD_ONLY,
3199
+ choose: APP_PROVISION_OPTION_CHOOSE,
3200
+ stop: APP_PROVISION_OPTION_STOP
3201
+ };
3202
+ var APP_PROVISION_RAISE_CAP_LABELS = {
3203
+ "token-cap": APP_PROVISION_OPTION_RAISE_CAP_TOKENS,
3204
+ "runner-minute-cap": APP_PROVISION_OPTION_RAISE_CAP_MINUTES
3205
+ };
3206
+ var APP_PROVISION_CHAT_STARTED = "Started provisioning {repo}. I'll post here at each milestone.";
3207
+ var APP_PROVISION_CHAT_PROPOSED = "Opened pull request #{pr} with the App spec. Verifying now.";
3208
+ var APP_PROVISION_CHAT_ATTEMPT_RED = "Attempt {n} of {budget} failed at {step}: {detail}. Fixing it.";
3209
+ var APP_PROVISION_CHAT_SUCCEEDED = "Verified. Review and merge pull request #{pr}.";
3210
+ var APP_PROVISION_CHAT_NEEDS_INPUT = "I need a decision from you \u2014 it's in My Decisions.";
3211
+ var APP_PROVISION_CHAT_FAILED = "Provisioning stopped: {reason}.";
3212
+ var APP_PROVISION_CHAT_TEMPLATES = {
3213
+ started: APP_PROVISION_CHAT_STARTED,
3214
+ proposed: APP_PROVISION_CHAT_PROPOSED,
3215
+ attemptRed: APP_PROVISION_CHAT_ATTEMPT_RED,
3216
+ succeeded: APP_PROVISION_CHAT_SUCCEEDED,
3217
+ needsInput: APP_PROVISION_CHAT_NEEDS_INPUT,
3218
+ failed: APP_PROVISION_CHAT_FAILED
3219
+ };
3220
+ var APP_PROVISION_EVIDENCE_ATTEMPT = "Attempt";
3221
+ var APP_PROVISION_EVIDENCE_STEP = "Step";
3222
+ var APP_PROVISION_EVIDENCE_VERDICT = "Verdict";
3223
+ var APP_PROVISION_EVIDENCE_DURATION = "Duration";
3224
+ var APP_PROVISION_EVIDENCE_BUILD_LOG = "Build log";
3225
+ var APP_PROVISION_EVIDENCE_IMAGE_DIGEST = "Image digest";
3226
+ var APP_PROVISION_EVIDENCE_TARGET = "Target";
3227
+ var APP_PROVISION_EVIDENCE_SMOKE = "Smoke tests";
3228
+ var APP_PROVISION_EVIDENCE_SPEND = "Spend";
3229
+ var APP_PROVISION_EVIDENCE_HEADINGS = {
3230
+ attempt: APP_PROVISION_EVIDENCE_ATTEMPT,
3231
+ step: APP_PROVISION_EVIDENCE_STEP,
3232
+ verdict: APP_PROVISION_EVIDENCE_VERDICT,
3233
+ duration: APP_PROVISION_EVIDENCE_DURATION,
3234
+ buildLog: APP_PROVISION_EVIDENCE_BUILD_LOG,
3235
+ imageDigest: APP_PROVISION_EVIDENCE_IMAGE_DIGEST,
3236
+ target: APP_PROVISION_EVIDENCE_TARGET,
3237
+ smoke: APP_PROVISION_EVIDENCE_SMOKE,
3238
+ spend: APP_PROVISION_EVIDENCE_SPEND
3239
+ };
3240
+ var APP_PROVISION_QUEUED_REASON_USER_LIMIT = "you already have 3 provisionings running.";
3241
+ var APP_PROVISION_QUEUED_REASON_ORG_LIMIT = "this workspace already has 10 provisionings running.";
3242
+ var APP_PROVISION_QUEUED_REASON_TEXTS = {
3243
+ "user-limit": APP_PROVISION_QUEUED_REASON_USER_LIMIT,
3244
+ "org-limit": APP_PROVISION_QUEUED_REASON_ORG_LIMIT
3245
+ };
3246
+ var APP_PROVISION_REMINDER_TITLE = "Still waiting on your answer";
3247
+ var APP_PROVISION_REMINDER_BODY = "Still waiting on your answer about {repo}. The provisioning keeps waiting and fails after 14 days without an answer.";
3248
+ var APP_PROVISION_COPY_TEMPLATES = [
3249
+ {
3250
+ name: "APP_PROVISION_REASON_TEXT_NO_ISOLATED_RUNTIME",
3251
+ value: APP_PROVISION_REASON_TEXT_NO_ISOLATED_RUNTIME,
3252
+ params: []
3253
+ },
3254
+ {
3255
+ name: "APP_PROVISION_REASON_TEXT_REPOSITORY_NOT_READY",
3256
+ value: APP_PROVISION_REASON_TEXT_REPOSITORY_NOT_READY,
3257
+ params: []
3258
+ },
3259
+ {
3260
+ name: "APP_PROVISION_REASON_TEXT_REPOSITORY_TOO_LARGE",
3261
+ value: APP_PROVISION_REASON_TEXT_REPOSITORY_TOO_LARGE,
3262
+ params: []
3263
+ },
3264
+ { name: "APP_PROVISION_REASON_TEXT_NOT_RUNNABLE", value: APP_PROVISION_REASON_TEXT_NOT_RUNNABLE, params: [] },
3265
+ { name: "APP_PROVISION_REASON_TEXT_TOKEN_CAP", value: APP_PROVISION_REASON_TEXT_TOKEN_CAP, params: [] },
3266
+ {
3267
+ name: "APP_PROVISION_REASON_TEXT_RUNNER_MINUTE_CAP",
3268
+ value: APP_PROVISION_REASON_TEXT_RUNNER_MINUTE_CAP,
3269
+ params: []
3270
+ },
3271
+ { name: "APP_PROVISION_REASON_TEXT_DEADLINE", value: APP_PROVISION_REASON_TEXT_DEADLINE, params: [] },
3272
+ {
3273
+ name: "APP_PROVISION_REASON_TEXT_COULD_NOT_VERIFY",
3274
+ value: APP_PROVISION_REASON_TEXT_COULD_NOT_VERIFY,
3275
+ params: ["attempts"]
3276
+ },
3277
+ { name: "APP_PROVISION_REASON_TEXT_NO_ANSWER", value: APP_PROVISION_REASON_TEXT_NO_ANSWER, params: ["attempts"] },
3278
+ {
3279
+ name: "APP_PROVISION_REASON_TEXT_VERIFICATION_INFRASTRUCTURE",
3280
+ value: APP_PROVISION_REASON_TEXT_VERIFICATION_INFRASTRUCTURE,
3281
+ params: []
3282
+ },
3283
+ {
3284
+ name: "APP_PROVISION_REASON_TEXT_PRIVATE_REPOSITORY",
3285
+ value: APP_PROVISION_REASON_TEXT_PRIVATE_REPOSITORY,
3286
+ params: []
3287
+ },
3288
+ { name: "APP_PROVISION_QUESTION_SUBJECT_PREFIX", value: APP_PROVISION_QUESTION_SUBJECT_PREFIX, params: ["repo"] },
3289
+ {
3290
+ name: "APP_PROVISION_QUESTION_SUBJECT_ATTEMPTS_SPENT",
3291
+ value: APP_PROVISION_QUESTION_SUBJECT_ATTEMPTS_SPENT,
3292
+ params: ["attempts"]
3293
+ },
3294
+ {
3295
+ name: "APP_PROVISION_QUESTION_SUBJECT_REPEATED_FAILURE",
3296
+ value: APP_PROVISION_QUESTION_SUBJECT_REPEATED_FAILURE,
3297
+ params: []
3298
+ },
3299
+ {
3300
+ name: "APP_PROVISION_QUESTION_SUBJECT_MISSING_REQUIRED_VALUE",
3301
+ value: APP_PROVISION_QUESTION_SUBJECT_MISSING_REQUIRED_VALUE,
3302
+ params: ["variable"]
3303
+ },
3304
+ {
3305
+ name: "APP_PROVISION_QUESTION_SUBJECT_RUNNER_CAPACITY",
3306
+ value: APP_PROVISION_QUESTION_SUBJECT_RUNNER_CAPACITY,
3307
+ params: []
3308
+ },
3309
+ { name: "APP_PROVISION_QUESTION_SUBJECT_TOKEN_CAP", value: APP_PROVISION_QUESTION_SUBJECT_TOKEN_CAP, params: [] },
3310
+ {
3311
+ name: "APP_PROVISION_QUESTION_SUBJECT_RUNNER_MINUTE_CAP",
3312
+ value: APP_PROVISION_QUESTION_SUBJECT_RUNNER_MINUTE_CAP,
3313
+ params: []
3314
+ },
3315
+ {
3316
+ name: "APP_PROVISION_QUESTION_SUBJECT_MULTIPLE_APPS",
3317
+ value: APP_PROVISION_QUESTION_SUBJECT_MULTIPLE_APPS,
3318
+ params: []
3319
+ },
3320
+ {
3321
+ name: "APP_PROVISION_QUESTION_SUBJECT_AGENT_ASKED",
3322
+ value: APP_PROVISION_QUESTION_SUBJECT_AGENT_ASKED,
3323
+ params: []
3324
+ },
3325
+ {
3326
+ name: "APP_PROVISION_QUESTION_SUBJECT_SAFETY_RAIL",
3327
+ value: APP_PROVISION_QUESTION_SUBJECT_SAFETY_RAIL,
3328
+ params: ["reason"]
3329
+ },
3330
+ { name: "APP_PROVISION_OPTION_RETRY", value: APP_PROVISION_OPTION_RETRY, params: [] },
3331
+ { name: "APP_PROVISION_OPTION_RETRY_AFTER_SETTING", value: APP_PROVISION_OPTION_RETRY_AFTER_SETTING, params: [] },
3332
+ { name: "APP_PROVISION_OPTION_OPTIONAL", value: APP_PROVISION_OPTION_OPTIONAL, params: [] },
3333
+ { name: "APP_PROVISION_OPTION_VERIFY_ON_CLUSTER", value: APP_PROVISION_OPTION_VERIFY_ON_CLUSTER, params: [] },
3334
+ { name: "APP_PROVISION_OPTION_ACCEPT_BUILD_ONLY", value: APP_PROVISION_OPTION_ACCEPT_BUILD_ONLY, params: [] },
3335
+ { name: "APP_PROVISION_OPTION_RAISE_CAP_TOKENS", value: APP_PROVISION_OPTION_RAISE_CAP_TOKENS, params: [] },
3336
+ { name: "APP_PROVISION_OPTION_RAISE_CAP_MINUTES", value: APP_PROVISION_OPTION_RAISE_CAP_MINUTES, params: [] },
3337
+ { name: "APP_PROVISION_OPTION_CHOOSE", value: APP_PROVISION_OPTION_CHOOSE, params: ["candidate"] },
3338
+ { name: "APP_PROVISION_OPTION_STOP", value: APP_PROVISION_OPTION_STOP, params: [] },
3339
+ { name: "APP_PROVISION_CHAT_STARTED", value: APP_PROVISION_CHAT_STARTED, params: ["repo"] },
3340
+ { name: "APP_PROVISION_CHAT_PROPOSED", value: APP_PROVISION_CHAT_PROPOSED, params: ["pr"] },
3341
+ {
3342
+ name: "APP_PROVISION_CHAT_ATTEMPT_RED",
3343
+ value: APP_PROVISION_CHAT_ATTEMPT_RED,
3344
+ params: ["n", "budget", "step", "detail"]
3345
+ },
3346
+ { name: "APP_PROVISION_CHAT_SUCCEEDED", value: APP_PROVISION_CHAT_SUCCEEDED, params: ["pr"] },
3347
+ { name: "APP_PROVISION_CHAT_NEEDS_INPUT", value: APP_PROVISION_CHAT_NEEDS_INPUT, params: [] },
3348
+ { name: "APP_PROVISION_CHAT_FAILED", value: APP_PROVISION_CHAT_FAILED, params: ["reason"] },
3349
+ { name: "APP_PROVISION_EVIDENCE_ATTEMPT", value: APP_PROVISION_EVIDENCE_ATTEMPT, params: [] },
3350
+ { name: "APP_PROVISION_EVIDENCE_STEP", value: APP_PROVISION_EVIDENCE_STEP, params: [] },
3351
+ { name: "APP_PROVISION_EVIDENCE_VERDICT", value: APP_PROVISION_EVIDENCE_VERDICT, params: [] },
3352
+ { name: "APP_PROVISION_EVIDENCE_DURATION", value: APP_PROVISION_EVIDENCE_DURATION, params: [] },
3353
+ { name: "APP_PROVISION_EVIDENCE_BUILD_LOG", value: APP_PROVISION_EVIDENCE_BUILD_LOG, params: [] },
3354
+ { name: "APP_PROVISION_EVIDENCE_IMAGE_DIGEST", value: APP_PROVISION_EVIDENCE_IMAGE_DIGEST, params: [] },
3355
+ { name: "APP_PROVISION_EVIDENCE_TARGET", value: APP_PROVISION_EVIDENCE_TARGET, params: [] },
3356
+ { name: "APP_PROVISION_EVIDENCE_SMOKE", value: APP_PROVISION_EVIDENCE_SMOKE, params: [] },
3357
+ { name: "APP_PROVISION_EVIDENCE_SPEND", value: APP_PROVISION_EVIDENCE_SPEND, params: [] },
3358
+ { name: "APP_PROVISION_QUEUED_REASON_USER_LIMIT", value: APP_PROVISION_QUEUED_REASON_USER_LIMIT, params: [] },
3359
+ { name: "APP_PROVISION_QUEUED_REASON_ORG_LIMIT", value: APP_PROVISION_QUEUED_REASON_ORG_LIMIT, params: [] },
3360
+ { name: "APP_PROVISION_REMINDER_TITLE", value: APP_PROVISION_REMINDER_TITLE, params: [] },
3361
+ { name: "APP_PROVISION_REMINDER_BODY", value: APP_PROVISION_REMINDER_BODY, params: ["repo"] }
3362
+ ];
3363
+ var PLACEHOLDER = /\{([a-zA-Z][a-zA-Z0-9]*)\}/g;
3364
+ function resolveAppProvisionCopy(template, values = {}) {
3365
+ return template.replace(PLACEHOLDER, (placeholder, name) => {
3366
+ const value = values[name];
3367
+ return value === void 0 ? placeholder : String(value);
3368
+ });
3369
+ }
3370
+ function appProvisionCopyPlaceholders(template) {
3371
+ return [...template.matchAll(PLACEHOLDER)].map((match) => match[1]);
3372
+ }
3373
+ var OPTION_ORDER = {
3374
+ "attempts-spent": ["retry", "stop"],
3375
+ "repeated-failure": ["retry", "stop"],
3376
+ "missing-required-value": ["retry-after-setting", "optional", "stop"],
3377
+ "runner-capacity": ["verify-on-cluster", "accept-build-only", "stop"],
3378
+ "token-cap": ["raise-cap", "stop"],
3379
+ "runner-minute-cap": ["raise-cap", "stop"],
3380
+ "multiple-apps": ["stop"],
3381
+ "agent-asked": ["retry", "stop"],
3382
+ "safety-rail": ["retry", "stop"]
3383
+ };
3384
+ var MAX_CANDIDATE_OPTIONS = APP_PROVISION_LIMITS.optionsMax - 1;
3385
+ function optionLabel(reason, id) {
3386
+ if (id === "raise-cap") {
3387
+ return reason === "runner-minute-cap" ? APP_PROVISION_OPTION_RAISE_CAP_MINUTES : APP_PROVISION_OPTION_RAISE_CAP_TOKENS;
3388
+ }
3389
+ return APP_PROVISION_OPTION_LABELS[id];
3390
+ }
3391
+ var appProvisionCopy = {
3392
+ /**
3393
+ * The composed Inbox subject: `Provisioning <repo>: <fragment>`
3394
+ * (spec §6:511). `repo` and every fragment param travel in `values`.
3395
+ */
3396
+ questionSubject(reason, values = {}) {
3397
+ return resolveAppProvisionCopy(
3398
+ APP_PROVISION_QUESTION_SUBJECT_PREFIX + APP_PROVISION_QUESTION_SUBJECTS[reason],
3399
+ values
3400
+ );
3401
+ },
3402
+ /**
3403
+ * The options for one question, in order, always ending with `stop`.
3404
+ *
3405
+ * `multiple-apps` offers one `choose:<n>` per candidate in
3406
+ * `values.candidates` (a comma-separated list of names), capped so the total
3407
+ * never exceeds `APP_PROVISION_LIMITS.optionsMax`.
3408
+ */
3409
+ questionOptions(reason, values = {}) {
3410
+ const options = [];
3411
+ if (reason === "multiple-apps") {
3412
+ const candidates = String(values.candidates ?? "").split(",").map((candidate) => candidate.trim()).filter((candidate) => candidate.length > 0).slice(0, MAX_CANDIDATE_OPTIONS);
3413
+ candidates.forEach((candidate, index) => {
3414
+ options.push({
3415
+ id: `choose:${index + 1}`,
3416
+ i18nKey: APP_PROVISIONING_OPTION_I18N_KEY.choose,
3417
+ label: resolveAppProvisionCopy(APP_PROVISION_OPTION_CHOOSE, { candidate }),
3418
+ candidate: index + 1
3419
+ });
3420
+ });
3421
+ }
3422
+ for (const id of OPTION_ORDER[reason]) {
3423
+ options.push({
3424
+ id,
3425
+ i18nKey: APP_PROVISIONING_OPTION_I18N_KEY[id],
3426
+ label: resolveAppProvisionCopy(optionLabel(reason, id), values)
3427
+ });
3428
+ }
3429
+ return options;
3430
+ },
3431
+ /** The failure text for the card's `Failed` headline (spec §6:485). */
3432
+ reasonText(failureReason, values = {}) {
3433
+ return resolveAppProvisionCopy(APP_PROVISION_REASON_TEXTS[failureReason], values);
3434
+ },
3435
+ /** The queued headline's reason clause, per `AppProvisioningView.queuedReason`. */
3436
+ queuedReason(queuedReason) {
3437
+ return APP_PROVISION_QUEUED_REASON_TEXTS[queuedReason];
3438
+ },
3439
+ /** The six chat milestones, resolved on call. */
3440
+ chat: {
3441
+ started: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_CHAT_STARTED, values),
3442
+ proposed: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_CHAT_PROPOSED, values),
3443
+ attemptRed: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_CHAT_ATTEMPT_RED, values),
3444
+ succeeded: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_CHAT_SUCCEEDED, values),
3445
+ needsInput: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_CHAT_NEEDS_INPUT, values),
3446
+ failed: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_CHAT_FAILED, values)
3447
+ },
3448
+ /** The nine evidence-comment headings, by leaf. */
3449
+ evidence: {
3450
+ attempt: APP_PROVISION_EVIDENCE_ATTEMPT,
3451
+ step: APP_PROVISION_EVIDENCE_STEP,
3452
+ verdict: APP_PROVISION_EVIDENCE_VERDICT,
3453
+ duration: APP_PROVISION_EVIDENCE_DURATION,
3454
+ buildLog: APP_PROVISION_EVIDENCE_BUILD_LOG,
3455
+ imageDigest: APP_PROVISION_EVIDENCE_IMAGE_DIGEST,
3456
+ target: APP_PROVISION_EVIDENCE_TARGET,
3457
+ smoke: APP_PROVISION_EVIDENCE_SMOKE,
3458
+ spend: APP_PROVISION_EVIDENCE_SPEND
3459
+ },
3460
+ /** The 72-hour reminder (S20): title and body. */
3461
+ reminder: {
3462
+ title: APP_PROVISION_REMINDER_TITLE,
3463
+ body: (values = {}) => resolveAppProvisionCopy(APP_PROVISION_REMINDER_BODY, values)
3464
+ },
3465
+ /**
3466
+ * The i18n leaf for a question reason — the same lookup the card makes, so
3467
+ * the server's English and the viewer's locale cannot diverge on WHICH
3468
+ * string they mean.
3469
+ */
3470
+ reasonI18nKey(reason) {
3471
+ return APP_PROVISIONING_QUESTION_REASON_I18N_KEY[reason];
3472
+ },
3473
+ /** The i18n leaf for a failure reason. */
3474
+ failureI18nKey(failureReason) {
3475
+ return APP_PROVISIONING_FAILURE_REASON_I18N_KEY[failureReason];
3476
+ },
3477
+ /** The i18n leaf for a queued reason. */
3478
+ queuedI18nKey(queuedReason) {
3479
+ return APP_PROVISIONING_QUEUED_REASON_I18N_KEY[queuedReason];
3480
+ }
3481
+ };
3482
+
319
3483
  // src/github/index.ts
320
3484
  function parseGitHubRepositoryUrl(input) {
321
3485
  try {
@@ -5441,7 +8605,7 @@ var DEFAULT_CREDIT_SETTLEMENT_MODE = "provider_cost";
5441
8605
  function isCreditSettlementMode(value) {
5442
8606
  return typeof value === "string" && CREDIT_SETTLEMENT_MODES.includes(value);
5443
8607
  }
5444
- var CREDIT_PRICE_GROUPS = ["research", "data", "tools", "models"];
8608
+ var CREDIT_PRICE_GROUPS = ["research", "data", "tools", "models", "hosting"];
5445
8609
 
5446
8610
  // src/notifications/attention.types.ts
5447
8611
  var ATTENTION_TARGET_CLASSES = ["email", "channel"];
@@ -6018,6 +9182,113 @@ var SAFETY_CANCEL_WRITES_PER_MINUTE = 5;
6018
9182
  var UNCLASSIFIED_ACTION_POLICY = "warn";
6019
9183
  var SHIPPED_DEFAULT_RUNG_POLICY = "display";
6020
9184
 
9185
+ // src/ever-platform/stats.ts
9186
+ var EVER_STATS_V1_SCHEMA_ID = "ever.stats.v1";
9187
+ var EVER_STATS_REPORTS_PATH = "/v1/stats/reports";
9188
+ var EVER_PLATFORM_DEFAULT_API_URL = "https://api.ever.co";
9189
+ var EVER_STATS_KEY_HEADER = "Ever-Stats-Key";
9190
+ var EVER_STATS_SIGNATURE_HEADER = "Ever-Stats-Signature";
9191
+ var EVER_STATS_KEY_ID_HEADER = "Ever-Stats-Key-Id";
9192
+ var EVER_STATS_SIGNATURE_PREFIX = "ed25519=";
9193
+ var EVER_STATS_MAX_BODY_BYTES = 16384;
9194
+ var EVER_STATS_V1_SOURCE = {
9195
+ repository: "https://github.com/ever-co/ever-connect-sdk",
9196
+ commit: "2fd74dad9357a18471292f38012a5f5e4e6d2938",
9197
+ path: "contracts/schemas/ever.stats.v1.json",
9198
+ sha256: "0cd746f7dec75117a6b812b7a832f9ceca4c97a6ecf65d22d6967a6475efc6e5"
9199
+ };
9200
+ function isPrivateStatsHost(hostname) {
9201
+ const host = hostname.toLowerCase().replace(/^\[|\]$/g, "");
9202
+ if (host === "localhost" || host.endsWith(".localhost")) return true;
9203
+ if (host === "::1") return true;
9204
+ if (/^f[cd][0-9a-f]{2}:/.test(host)) return true;
9205
+ const ipv4 = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
9206
+ if (ipv4) {
9207
+ const a = Number(ipv4[1]);
9208
+ const b = Number(ipv4[2]);
9209
+ return a === 127 || a === 10 || a === 172 && b >= 16 && b <= 31 || a === 192 && b === 168;
9210
+ }
9211
+ return host.length > 0 && !host.includes(".") && !host.includes(":");
9212
+ }
9213
+ function normaliseStatsBaseUrl(raw) {
9214
+ let url;
9215
+ try {
9216
+ url = new URL(raw.trim());
9217
+ } catch {
9218
+ return null;
9219
+ }
9220
+ if (url.username || url.password || url.search || url.hash) return null;
9221
+ if (url.protocol === "http:") {
9222
+ if (!isPrivateStatsHost(url.hostname)) return null;
9223
+ } else if (url.protocol !== "https:") {
9224
+ return null;
9225
+ }
9226
+ return `${url.origin}${url.pathname}`.replace(/\/+$/, "");
9227
+ }
9228
+ var EVER_STATS_PRODUCTS = ["gauzy", "teams", "works", "rec", "traduora"];
9229
+ var EVER_STATS_CHANNELS = ["stable", "rc", "beta", "dev", "custom"];
9230
+ var WORKS_STATS_WORK_KIND_KEYS = [
9231
+ "website",
9232
+ "landing_page",
9233
+ "blog",
9234
+ "directory",
9235
+ "awesome_repo",
9236
+ "repo",
9237
+ "company",
9238
+ "campaign",
9239
+ "default",
9240
+ "app",
9241
+ "other"
9242
+ ];
9243
+ var WORKS_STATS_DEPLOYMENT_PROVIDER_KEYS = [
9244
+ "ever_works",
9245
+ "vercel",
9246
+ "k8s",
9247
+ "your_cluster",
9248
+ "ever_works_apps",
9249
+ "other"
9250
+ ];
9251
+ var WORKS_STATS_FEATURE_KEYS = [
9252
+ "app_works_enabled",
9253
+ "app_launcher_enabled",
9254
+ "dynamic_plugins",
9255
+ "deploy_ever_works_enabled",
9256
+ "subscriptions_enabled",
9257
+ "mcp_enabled"
9258
+ ];
9259
+ var STATS_SEND_ERROR_CODES = [
9260
+ "schema_violation",
9261
+ "key_mismatch",
9262
+ "too_large",
9263
+ "signature_invalid",
9264
+ "validation_failed",
9265
+ "unsupported_media_type",
9266
+ "rate_limited",
9267
+ "server_error",
9268
+ "http_error",
9269
+ "network",
9270
+ "timeout",
9271
+ "invalid_url",
9272
+ "redirect",
9273
+ "sink_unavailable",
9274
+ "build_failed",
9275
+ "key_unreadable"
9276
+ ];
9277
+ function isInstanceStatsOperatorStatus(status) {
9278
+ return status.operator === true;
9279
+ }
9280
+ /**
9281
+ * One header finding of the licence scan (plan §2.6:324-325, FR-54): the
9282
+ * `SPDX-License-Identifier:` / `@license` tag a file declares in its first
9283
+ * `LICENSE_HEADER_SCAN_BYTES` bytes.
9284
+ *
9285
+ * **Gap, named rather than guessed:** plan §3.1:437 writes the column's third
9286
+ * field as `headerFindings: …` without a shape. `path` is certain — it is the
9287
+ * first field of the scan's input — and the detected identifier is the second
9288
+ * fact the scan produces, so both are declared; anything further an
9289
+ * implementation adds is additive.
9290
+ */
9291
+
6021
9292
  exports.ACTION_CATEGORIES = ACTION_CATEGORIES;
6022
9293
  exports.ACTION_CATEGORY_CEILING = ACTION_CATEGORY_CEILING;
6023
9294
  exports.ACTION_CATEGORY_DEFAULT = ACTION_CATEGORY_DEFAULT;
@@ -6047,7 +9318,579 @@ exports.AGENT_STATUS_BATCH_MAX = AGENT_STATUS_BATCH_MAX;
6047
9318
  exports.AGENT_STATUS_DOT = AGENT_STATUS_DOT;
6048
9319
  exports.AGENT_STATUS_POLL_INTERVAL_MS = AGENT_STATUS_POLL_INTERVAL_MS;
6049
9320
  exports.AGENT_STATUS_REASONS = AGENT_STATUS_REASONS;
9321
+ exports.APPS_CATALOG_CACHE_TTL_MS = APPS_CATALOG_CACHE_TTL_MS;
9322
+ exports.APPS_CATALOG_CATEGORIES = APPS_CATALOG_CATEGORIES;
9323
+ exports.APPS_CATALOG_ENTRY_LICENSE_CLASSES = APPS_CATALOG_ENTRY_LICENSE_CLASSES;
9324
+ exports.APPS_CATALOG_ENTRY_STATUSES = APPS_CATALOG_ENTRY_STATUSES;
9325
+ exports.APPS_CATALOG_FAILURE_TTL_MS = APPS_CATALOG_FAILURE_TTL_MS;
9326
+ exports.APPS_CATALOG_FANOUT_PER_RUN = APPS_CATALOG_FANOUT_PER_RUN;
9327
+ exports.APPS_CATALOG_FETCH_TIMEOUT_MS = APPS_CATALOG_FETCH_TIMEOUT_MS;
9328
+ exports.APPS_CATALOG_LAST_GOOD_REGISTRY_MS = APPS_CATALOG_LAST_GOOD_REGISTRY_MS;
9329
+ exports.APPS_CATALOG_MANIFEST_MAX_BYTES = APPS_CATALOG_MANIFEST_MAX_BYTES;
9330
+ exports.APPS_CATALOG_MAX_ENTRIES = APPS_CATALOG_MAX_ENTRIES;
9331
+ exports.APPS_CATALOG_PAGE_SIZE = APPS_CATALOG_PAGE_SIZE;
9332
+ exports.APPS_CATALOG_PAGE_SIZE_MAX = APPS_CATALOG_PAGE_SIZE_MAX;
9333
+ exports.APPS_CATALOG_PUBLIC_PER_MIN = APPS_CATALOG_PUBLIC_PER_MIN;
9334
+ exports.APPS_CATALOG_README_MAX_BYTES = APPS_CATALOG_README_MAX_BYTES;
9335
+ exports.APPS_CATALOG_REFRESH_CRON = APPS_CATALOG_REFRESH_CRON;
9336
+ exports.APPS_CATALOG_REGISTRY_MAX_BYTES = APPS_CATALOG_REGISTRY_MAX_BYTES;
9337
+ exports.APPS_CATALOG_SEARCH_MIN_CHARS = APPS_CATALOG_SEARCH_MIN_CHARS;
9338
+ exports.APPS_CATALOG_VERIFICATION_STATUSES = APPS_CATALOG_VERIFICATION_STATUSES;
9339
+ exports.APPS_MANAGED_REQUIRES_VERIFIED = APPS_MANAGED_REQUIRES_VERIFIED;
9340
+ exports.APPS_TIER_ACTIVITY_ACTION_TYPE = APPS_TIER_ACTIVITY_ACTION_TYPE;
9341
+ exports.APPS_TIER_ALLOWED_HOSTS_ANNOTATION = APPS_TIER_ALLOWED_HOSTS_ANNOTATION;
9342
+ exports.APPS_TIER_API_GROUP = APPS_TIER_API_GROUP;
9343
+ exports.APPS_TIER_API_VERSION = APPS_TIER_API_VERSION;
9344
+ exports.APPS_TIER_ATTESTATION_EVIDENCE_MAX_CHARS = APPS_TIER_ATTESTATION_EVIDENCE_MAX_CHARS;
9345
+ exports.APPS_TIER_ATTESTATION_EVIDENCE_MIN_CHARS = APPS_TIER_ATTESTATION_EVIDENCE_MIN_CHARS;
9346
+ exports.APPS_TIER_ATTESTATION_EVIDENCE_REFERENCE_MAX_CHARS = APPS_TIER_ATTESTATION_EVIDENCE_REFERENCE_MAX_CHARS;
9347
+ exports.APPS_TIER_AUTO_REOPENABLE_REASON_CODES = APPS_TIER_AUTO_REOPENABLE_REASON_CODES;
9348
+ exports.APPS_TIER_BILLING_GRACE_DAYS = APPS_TIER_BILLING_GRACE_DAYS;
9349
+ exports.APPS_TIER_BILLING_QUARANTINE_CATEGORY = APPS_TIER_BILLING_QUARANTINE_CATEGORY;
9350
+ exports.APPS_TIER_CLOSED_REASON_CODES = APPS_TIER_CLOSED_REASON_CODES;
9351
+ exports.APPS_TIER_COMPONENT_ROLES = APPS_TIER_COMPONENT_ROLES;
9352
+ exports.APPS_TIER_CONTROLLER_MIN_VERSION_ENV_VAR = APPS_TIER_CONTROLLER_MIN_VERSION_ENV_VAR;
9353
+ exports.APPS_TIER_CONTROL_KUBECONFIG_ENV_VAR = APPS_TIER_CONTROL_KUBECONFIG_ENV_VAR;
9354
+ exports.APPS_TIER_CONTROL_NAMESPACE_DEFAULT = APPS_TIER_CONTROL_NAMESPACE_DEFAULT;
9355
+ exports.APPS_TIER_DAILY_RECEIPTS_CRON = APPS_TIER_DAILY_RECEIPTS_CRON;
9356
+ exports.APPS_TIER_DEPENDENCY_PHASES = APPS_TIER_DEPENDENCY_PHASES;
9357
+ exports.APPS_TIER_DEPLOY_PHASES = APPS_TIER_DEPLOY_PHASES;
9358
+ exports.APPS_TIER_EDGE_TLS_MODE = APPS_TIER_EDGE_TLS_MODE;
9359
+ exports.APPS_TIER_EGRESS_NOTICE_SHARE = APPS_TIER_EGRESS_NOTICE_SHARE;
9360
+ exports.APPS_TIER_EGRESS_THROTTLE_MBPS = APPS_TIER_EGRESS_THROTTLE_MBPS;
9361
+ exports.APPS_TIER_ELIGIBILITY_DISABLED_REASONS = APPS_TIER_ELIGIBILITY_DISABLED_REASONS;
9362
+ exports.APPS_TIER_ELIGIBILITY_REASONS = APPS_TIER_ELIGIBILITY_REASONS;
9363
+ exports.APPS_TIER_EVENT_NAMES = APPS_TIER_EVENT_NAMES;
9364
+ exports.APPS_TIER_GATE_MAX_AGE_HOURS_ENV_VAR = APPS_TIER_GATE_MAX_AGE_HOURS_ENV_VAR;
9365
+ exports.APPS_TIER_HEARTBEAT_STALE_MS = APPS_TIER_HEARTBEAT_STALE_MS;
9366
+ exports.APPS_TIER_JOB_PHASES = APPS_TIER_JOB_PHASES;
9367
+ exports.APPS_TIER_JOB_STATUSES = APPS_TIER_JOB_STATUSES;
9368
+ exports.APPS_TIER_MAIL_REFUSED_ATTEMPTS_PER_HOUR = APPS_TIER_MAIL_REFUSED_ATTEMPTS_PER_HOUR;
9369
+ exports.APPS_TIER_MANAGED_ENABLED_ENV_VAR = APPS_TIER_MANAGED_ENABLED_ENV_VAR;
9370
+ exports.APPS_TIER_MAX_COMPONENTS = APPS_TIER_MAX_COMPONENTS;
9371
+ exports.APPS_TIER_MAX_COMPONENT_REPLICAS = APPS_TIER_MAX_COMPONENT_REPLICAS;
9372
+ exports.APPS_TIER_MAX_COMPONENT_VOLUMES = APPS_TIER_MAX_COMPONENT_VOLUMES;
9373
+ exports.APPS_TIER_MAX_CRON = APPS_TIER_MAX_CRON;
9374
+ exports.APPS_TIER_MAX_ENV_NAMES = APPS_TIER_MAX_ENV_NAMES;
9375
+ exports.APPS_TIER_MAX_HOSTS = APPS_TIER_MAX_HOSTS;
9376
+ exports.APPS_TIER_MAX_IMAGES = APPS_TIER_MAX_IMAGES;
9377
+ exports.APPS_TIER_MAX_JOBS = APPS_TIER_MAX_JOBS;
9378
+ exports.APPS_TIER_MAX_JOB_TIMEOUT_SECONDS = APPS_TIER_MAX_JOB_TIMEOUT_SECONDS;
9379
+ exports.APPS_TIER_MAX_PER_USER_ENV_VAR = APPS_TIER_MAX_PER_USER_ENV_VAR;
9380
+ exports.APPS_TIER_MAX_PULL_CREDENTIAL_BYTES = APPS_TIER_MAX_PULL_CREDENTIAL_BYTES;
9381
+ exports.APPS_TIER_MAX_SCOPE_ENV_VAR = APPS_TIER_MAX_SCOPE_ENV_VAR;
9382
+ exports.APPS_TIER_MAX_SEALED_ENV_BYTES = APPS_TIER_MAX_SEALED_ENV_BYTES;
9383
+ exports.APPS_TIER_MAX_SMOKE = APPS_TIER_MAX_SMOKE;
9384
+ exports.APPS_TIER_MAX_WORK_BYTES = APPS_TIER_MAX_WORK_BYTES;
9385
+ exports.APPS_TIER_METERING_IMPORT_CRON = APPS_TIER_METERING_IMPORT_CRON;
9386
+ exports.APPS_TIER_MINING_CPU_SHARE = APPS_TIER_MINING_CPU_SHARE;
9387
+ exports.APPS_TIER_MINING_CPU_WINDOW_MS = APPS_TIER_MINING_CPU_WINDOW_MS;
9388
+ exports.APPS_TIER_MINING_MEDIUM_WINDOW_MS = APPS_TIER_MINING_MEDIUM_WINDOW_MS;
9389
+ exports.APPS_TIER_MINING_REFUSED_CONNECTIONS = APPS_TIER_MINING_REFUSED_CONNECTIONS;
9390
+ exports.APPS_TIER_MIN_CRON_INTERVAL_MS = APPS_TIER_MIN_CRON_INTERVAL_MS;
9391
+ exports.APPS_TIER_NOTIFICATION_IDS = APPS_TIER_NOTIFICATION_IDS;
9392
+ exports.APPS_TIER_OPEN_REFUSED_CODE = APPS_TIER_OPEN_REFUSED_CODE;
9393
+ exports.APPS_TIER_PAUSE_ALL_CATEGORY = APPS_TIER_PAUSE_ALL_CATEGORY;
9394
+ exports.APPS_TIER_PAUSE_ALL_CONFIRMATION = APPS_TIER_PAUSE_ALL_CONFIRMATION;
9395
+ exports.APPS_TIER_POLICY_DEFAULT_SCOPE = APPS_TIER_POLICY_DEFAULT_SCOPE;
9396
+ exports.APPS_TIER_PRICEBOOK_VERSION = APPS_TIER_PRICEBOOK_VERSION;
9397
+ exports.APPS_TIER_PRICE_GROUP = APPS_TIER_PRICE_GROUP;
9398
+ exports.APPS_TIER_PRICE_KEYS = APPS_TIER_PRICE_KEYS;
9399
+ exports.APPS_TIER_PRICE_UNITS = APPS_TIER_PRICE_UNITS;
9400
+ exports.APPS_TIER_PROBE_REASON_CODES = APPS_TIER_PROBE_REASON_CODES;
9401
+ exports.APPS_TIER_PUBLIC_KEY_CONFIG_MAP = APPS_TIER_PUBLIC_KEY_CONFIG_MAP;
9402
+ exports.APPS_TIER_QUARANTINED_LABEL = APPS_TIER_QUARANTINED_LABEL;
9403
+ exports.APPS_TIER_QUARANTINE_CATEGORIES = APPS_TIER_QUARANTINE_CATEGORIES;
9404
+ exports.APPS_TIER_QUARANTINE_REASON_MIN_CHARS = APPS_TIER_QUARANTINE_REASON_MIN_CHARS;
9405
+ exports.APPS_TIER_QUARANTINE_SOURCES = APPS_TIER_QUARANTINE_SOURCES;
9406
+ exports.APPS_TIER_QUOTA_CEILINGS = APPS_TIER_QUOTA_CEILINGS;
9407
+ exports.APPS_TIER_QUOTA_CEILING_EXCEEDED_CODE = APPS_TIER_QUOTA_CEILING_EXCEEDED_CODE;
9408
+ exports.APPS_TIER_QUOTA_PROFILES = APPS_TIER_QUOTA_PROFILES;
9409
+ exports.APPS_TIER_QUOTA_PROFILE_NAMES = APPS_TIER_QUOTA_PROFILE_NAMES;
9410
+ exports.APPS_TIER_RETAINED_UNTIL_LABEL = APPS_TIER_RETAINED_UNTIL_LABEL;
9411
+ exports.APPS_TIER_RUN_JOB_ANNOTATION = APPS_TIER_RUN_JOB_ANNOTATION;
9412
+ exports.APPS_TIER_SCOPES = APPS_TIER_SCOPES;
9413
+ exports.APPS_TIER_SEAL_AAD_PREFIX = APPS_TIER_SEAL_AAD_PREFIX;
9414
+ exports.APPS_TIER_SELF_CHECK_RUN_RETENTION_COUNT = APPS_TIER_SELF_CHECK_RUN_RETENTION_COUNT;
9415
+ exports.APPS_TIER_SELF_CHECK_RUN_RETENTION_DAYS = APPS_TIER_SELF_CHECK_RUN_RETENTION_DAYS;
9416
+ exports.APPS_TIER_SIGNAL_KINDS = APPS_TIER_SIGNAL_KINDS;
9417
+ exports.APPS_TIER_SIGNAL_SEVERITIES = APPS_TIER_SIGNAL_SEVERITIES;
9418
+ exports.APPS_TIER_SIGNAL_SUMMARY_MAX_CHARS = APPS_TIER_SIGNAL_SUMMARY_MAX_CHARS;
9419
+ exports.APPS_TIER_SMOKE_SCOPES = APPS_TIER_SMOKE_SCOPES;
9420
+ exports.APPS_TIER_SMOKE_STATUSES = APPS_TIER_SMOKE_STATUSES;
9421
+ exports.APPS_TIER_STATES = APPS_TIER_STATES;
9422
+ exports.APPS_TIER_TENANT_LABEL = APPS_TIER_TENANT_LABEL;
9423
+ exports.APPS_TIER_TENANT_NAMESPACE_PREFIX = APPS_TIER_TENANT_NAMESPACE_PREFIX;
9424
+ exports.APPS_TIER_USAGE_FRESHNESS_MS = APPS_TIER_USAGE_FRESHNESS_MS;
9425
+ exports.APPS_TIER_USAGE_UNITS = APPS_TIER_USAGE_UNITS;
9426
+ exports.APPS_TIER_WORK_CANARY_LABEL = APPS_TIER_WORK_CANARY_LABEL;
9427
+ exports.APPS_TIER_WORK_DEGRADED_REASONS = APPS_TIER_WORK_DEGRADED_REASONS;
9428
+ exports.APPS_TIER_WORK_DESIRED_STATES = APPS_TIER_WORK_DESIRED_STATES;
9429
+ exports.APPS_TIER_WORK_ID_LABEL = APPS_TIER_WORK_ID_LABEL;
9430
+ exports.APPS_TIER_WORK_NAME_PREFIX = APPS_TIER_WORK_NAME_PREFIX;
9431
+ exports.APPS_TIER_WORK_OWNER_LABEL = APPS_TIER_WORK_OWNER_LABEL;
9432
+ exports.APPS_TIER_WORK_PHASES = APPS_TIER_WORK_PHASES;
9433
+ exports.APPS_TIER_WORK_REFUSAL_CODES = APPS_TIER_WORK_REFUSAL_CODES;
9434
+ exports.APPS_TIER_ZONE_AUDIT_RETENTION_DAYS = APPS_TIER_ZONE_AUDIT_RETENTION_DAYS;
9435
+ exports.APPS_TIER_ZONE_INFO_CONFIG_MAP = APPS_TIER_ZONE_INFO_CONFIG_MAP;
9436
+ exports.APP_ACTIONS_HYGIENE_MAX_WORKFLOWS = APP_ACTIONS_HYGIENE_MAX_WORKFLOWS;
9437
+ exports.APP_ACTIONS_STATES = APP_ACTIONS_STATES;
9438
+ exports.APP_BEHIND_EVENT_STEP = APP_BEHIND_EVENT_STEP;
9439
+ exports.APP_BLUEPRINT_APPLY_STATUSES = APP_BLUEPRINT_APPLY_STATUSES;
9440
+ exports.APP_BUILD_ACTIVITY_ACTION_TYPE = APP_BUILD_ACTIVITY_ACTION_TYPE;
9441
+ exports.APP_BUILD_ADOPT_WINDOW_MS = APP_BUILD_ADOPT_WINDOW_MS;
9442
+ exports.APP_BUILD_BLOCKED_ACTIONS = APP_BUILD_BLOCKED_ACTIONS;
9443
+ exports.APP_BUILD_BLOCKED_REASONS = APP_BUILD_BLOCKED_REASONS;
9444
+ exports.APP_BUILD_BLOCKED_REASON_ACTIONS = APP_BUILD_BLOCKED_REASON_ACTIONS;
9445
+ exports.APP_BUILD_BRANCH_SLUG_MAX_CHARS = APP_BUILD_BRANCH_SLUG_MAX_CHARS;
9446
+ exports.APP_BUILD_CANCEL_REASONS = APP_BUILD_CANCEL_REASONS;
9447
+ exports.APP_BUILD_CHECKS_JOB_ID = APP_BUILD_CHECKS_JOB_ID;
9448
+ exports.APP_BUILD_CHECKS_MAX = APP_BUILD_CHECKS_MAX;
9449
+ exports.APP_BUILD_CHECKS_MAX_PARALLEL = APP_BUILD_CHECKS_MAX_PARALLEL;
9450
+ exports.APP_BUILD_CHECK_NAME_PREFIX = APP_BUILD_CHECK_NAME_PREFIX;
9451
+ exports.APP_BUILD_DEPLOYABLE_TRIGGERS = APP_BUILD_DEPLOYABLE_TRIGGERS;
9452
+ exports.APP_BUILD_ENV_SYNC_SLA_MS = APP_BUILD_ENV_SYNC_SLA_MS;
9453
+ exports.APP_BUILD_EVENT_NAMES = APP_BUILD_EVENT_NAMES;
9454
+ exports.APP_BUILD_EXCERPT_MAX_LINES = APP_BUILD_EXCERPT_MAX_LINES;
9455
+ exports.APP_BUILD_EXCERPT_MAX_LINE_CHARS = APP_BUILD_EXCERPT_MAX_LINE_CHARS;
9456
+ exports.APP_BUILD_FAILURE_CLASSES = APP_BUILD_FAILURE_CLASSES;
9457
+ exports.APP_BUILD_FAILURE_COPY_EN = APP_BUILD_FAILURE_COPY_EN;
9458
+ exports.APP_BUILD_GENERATOR_VERSION = APP_BUILD_GENERATOR_VERSION;
9459
+ exports.APP_BUILD_IMAGE_NAME = APP_BUILD_IMAGE_NAME;
9460
+ exports.APP_BUILD_KINDS = APP_BUILD_KINDS;
9461
+ exports.APP_BUILD_LIST_MAX_PAGE_SIZE = APP_BUILD_LIST_MAX_PAGE_SIZE;
9462
+ exports.APP_BUILD_LIST_PAGE_SIZE = APP_BUILD_LIST_PAGE_SIZE;
9463
+ exports.APP_BUILD_LOG_TAIL_BYTES = APP_BUILD_LOG_TAIL_BYTES;
9464
+ exports.APP_BUILD_LOST_GRACE_MINUTES = APP_BUILD_LOST_GRACE_MINUTES;
9465
+ exports.APP_BUILD_MANAGED_CONCURRENCY = APP_BUILD_MANAGED_CONCURRENCY;
9466
+ exports.APP_BUILD_MANAGED_DEFAULTS = APP_BUILD_MANAGED_DEFAULTS;
9467
+ exports.APP_BUILD_MANAGED_MAXIMUMS = APP_BUILD_MANAGED_MAXIMUMS;
9468
+ exports.APP_BUILD_MAX_VALUES = APP_BUILD_MAX_VALUES;
9469
+ exports.APP_BUILD_NOT_DEPLOYABLE_REASONS = APP_BUILD_NOT_DEPLOYABLE_REASONS;
9470
+ exports.APP_BUILD_POLL_AFTER_SILENCE_MS = APP_BUILD_POLL_AFTER_SILENCE_MS;
9471
+ exports.APP_BUILD_PREPARE_WORKFLOW_STATES = APP_BUILD_PREPARE_WORKFLOW_STATES;
9472
+ exports.APP_BUILD_PULL_TOKEN_EXPIRY_WARN_DAYS = APP_BUILD_PULL_TOKEN_EXPIRY_WARN_DAYS;
9473
+ exports.APP_BUILD_REBUILDS_PER_HOUR = APP_BUILD_REBUILDS_PER_HOUR;
9474
+ exports.APP_BUILD_REBUILD_DEDUPE_MS = APP_BUILD_REBUILD_DEDUPE_MS;
9475
+ exports.APP_BUILD_RESTRICTED_VALUE_LITERAL = APP_BUILD_RESTRICTED_VALUE_LITERAL;
9476
+ exports.APP_BUILD_RESULT_ARTIFACT_FILE = APP_BUILD_RESULT_ARTIFACT_FILE;
9477
+ exports.APP_BUILD_RESULT_ARTIFACT_NAME = APP_BUILD_RESULT_ARTIFACT_NAME;
9478
+ exports.APP_BUILD_RESULT_ARTIFACT_RETENTION_DAYS = APP_BUILD_RESULT_ARTIFACT_RETENTION_DAYS;
9479
+ exports.APP_BUILD_RESULT_MAX_BYTES = APP_BUILD_RESULT_MAX_BYTES;
9480
+ exports.APP_BUILD_RUNNERS = APP_BUILD_RUNNERS;
9481
+ exports.APP_BUILD_RUNNER_CLASSES = APP_BUILD_RUNNER_CLASSES;
9482
+ exports.APP_BUILD_RUNNER_HEADROOM_GIB = APP_BUILD_RUNNER_HEADROOM_GIB;
9483
+ exports.APP_BUILD_RUN_DISCOVERY_BATCH = APP_BUILD_RUN_DISCOVERY_BATCH;
9484
+ exports.APP_BUILD_RUN_DISCOVERY_PER_PAGE = APP_BUILD_RUN_DISCOVERY_PER_PAGE;
9485
+ exports.APP_BUILD_RUN_SOURCES = APP_BUILD_RUN_SOURCES;
9486
+ exports.APP_BUILD_SECRET_CHECK_MIN_CHARS = APP_BUILD_SECRET_CHECK_MIN_CHARS;
9487
+ exports.APP_BUILD_SECRET_CHECK_RESULTS = APP_BUILD_SECRET_CHECK_RESULTS;
9488
+ exports.APP_BUILD_SECRET_MAX_BYTES = APP_BUILD_SECRET_MAX_BYTES;
9489
+ exports.APP_BUILD_SECRET_PREFIX = APP_BUILD_SECRET_PREFIX;
9490
+ exports.APP_BUILD_SETTING_ALLOW_VALUES_ON_PULL_REQUESTS = APP_BUILD_SETTING_ALLOW_VALUES_ON_PULL_REQUESTS;
9491
+ exports.APP_BUILD_SETTING_ATTESTATIONS = APP_BUILD_SETTING_ATTESTATIONS;
9492
+ exports.APP_BUILD_SETTING_RECLAIM_DISK = APP_BUILD_SETTING_RECLAIM_DISK;
9493
+ exports.APP_BUILD_SETTING_VERIFICATION_PROMPTED_REQUIRES_APPROVAL = APP_BUILD_SETTING_VERIFICATION_PROMPTED_REQUIRES_APPROVAL;
9494
+ exports.APP_BUILD_SIGNATURE_STATES = APP_BUILD_SIGNATURE_STATES;
9495
+ exports.APP_BUILD_STATUSES = APP_BUILD_STATUSES;
9496
+ exports.APP_BUILD_STATUS_EVENT_MAP = APP_BUILD_STATUS_EVENT_MAP;
9497
+ exports.APP_BUILD_STRATEGIES = APP_BUILD_STRATEGIES;
9498
+ exports.APP_BUILD_SWEEP_BATCH = APP_BUILD_SWEEP_BATCH;
9499
+ exports.APP_BUILD_SWEEP_CRON = APP_BUILD_SWEEP_CRON;
9500
+ exports.APP_BUILD_SYNC_ORIGINS = APP_BUILD_SYNC_ORIGINS;
9501
+ exports.APP_BUILD_TRIGGERS = APP_BUILD_TRIGGERS;
9502
+ exports.APP_BUILD_VERIFICATION_RESULT_MAX_SMOKE = APP_BUILD_VERIFICATION_RESULT_MAX_SMOKE;
9503
+ exports.APP_BUILD_VERIFY_MEMORY_GIB = APP_BUILD_VERIFY_MEMORY_GIB;
9504
+ exports.APP_BUILD_VERIFY_PLAN_INPUT = APP_BUILD_VERIFY_PLAN_INPUT;
9505
+ exports.APP_BUILD_VERIFY_PLAN_MAX_CHARS = APP_BUILD_VERIFY_PLAN_MAX_CHARS;
9506
+ exports.APP_BUILD_VERIFY_PLAN_MAX_COMPONENTS = APP_BUILD_VERIFY_PLAN_MAX_COMPONENTS;
9507
+ exports.APP_BUILD_VERIFY_PLAN_MAX_DEPENDENCIES = APP_BUILD_VERIFY_PLAN_MAX_DEPENDENCIES;
9508
+ exports.APP_BUILD_VERIFY_PLAN_MAX_ENV_ENTRIES = APP_BUILD_VERIFY_PLAN_MAX_ENV_ENTRIES;
9509
+ exports.APP_BUILD_VERIFY_PLAN_MAX_JOBS = APP_BUILD_VERIFY_PLAN_MAX_JOBS;
9510
+ exports.APP_BUILD_VERIFY_PLAN_MAX_SMOKE = APP_BUILD_VERIFY_PLAN_MAX_SMOKE;
9511
+ exports.APP_BUILD_VERIFY_PROMPTED_SECRET = APP_BUILD_VERIFY_PROMPTED_SECRET;
9512
+ exports.APP_BUILD_VERIFY_TIMEOUT_MINUTES = APP_BUILD_VERIFY_TIMEOUT_MINUTES;
9513
+ exports.APP_BUILD_WEBHOOK_EVENT = APP_BUILD_WEBHOOK_EVENT;
9514
+ exports.APP_BUILD_WEBHOOK_STATES = APP_BUILD_WEBHOOK_STATES;
9515
+ exports.APP_BUILD_WORKFLOW_BRANCH = APP_BUILD_WORKFLOW_BRANCH;
9516
+ exports.APP_BUILD_WORKFLOW_PATH = APP_BUILD_WORKFLOW_PATH;
9517
+ exports.APP_BUILD_WORKFLOW_STATES = APP_BUILD_WORKFLOW_STATES;
9518
+ exports.APP_CANCEL_REASONS = APP_CANCEL_REASONS;
9519
+ exports.APP_CERT_NOTIFY_AFTER_MIN = APP_CERT_NOTIFY_AFTER_MIN;
9520
+ exports.APP_CLUSTER_CHECK_TIMEOUT_S = APP_CLUSTER_CHECK_TIMEOUT_S;
9521
+ exports.APP_CLUSTER_DIAL_TIMEOUT_S = APP_CLUSTER_DIAL_TIMEOUT_S;
9522
+ exports.APP_CREATE_IDEMPOTENCY_WINDOW_MS = APP_CREATE_IDEMPOTENCY_WINDOW_MS;
9523
+ exports.APP_CREATE_LOCK_TTL_MS = APP_CREATE_LOCK_TTL_MS;
9524
+ exports.APP_CREATE_RESPONSE_BUDGET_MS = APP_CREATE_RESPONSE_BUDGET_MS;
9525
+ exports.APP_DEPENDENCY_BACKUP_OVERDUE_MS = APP_DEPENDENCY_BACKUP_OVERDUE_MS;
9526
+ exports.APP_DEPENDENCY_BACKUP_POLICIES = APP_DEPENDENCY_BACKUP_POLICIES;
9527
+ exports.APP_DEPENDENCY_BACKUP_STATES = APP_DEPENDENCY_BACKUP_STATES;
9528
+ exports.APP_DEPENDENCY_BACKUP_STATE_MESSAGE_KEY_PREFIX = APP_DEPENDENCY_BACKUP_STATE_MESSAGE_KEY_PREFIX;
9529
+ exports.APP_DEPENDENCY_BACKUP_STATE_MESSAGE_LEAVES = APP_DEPENDENCY_BACKUP_STATE_MESSAGE_LEAVES;
9530
+ exports.APP_DEPENDENCY_BUCKET_OUTPUT_PATTERN = APP_DEPENDENCY_BUCKET_OUTPUT_PATTERN;
9531
+ exports.APP_DEPENDENCY_BUCKET_OUTPUT_PREFIX = APP_DEPENDENCY_BUCKET_OUTPUT_PREFIX;
9532
+ exports.APP_DEPENDENCY_DEFAULT_SIZE_GIB = APP_DEPENDENCY_DEFAULT_SIZE_GIB;
9533
+ exports.APP_DEPENDENCY_ENV_VARS = APP_DEPENDENCY_ENV_VARS;
9534
+ exports.APP_DEPENDENCY_ERROR_CODES = APP_DEPENDENCY_ERROR_CODES;
9535
+ exports.APP_DEPENDENCY_EXTERNAL_TEST_MS = APP_DEPENDENCY_EXTERNAL_TEST_MS;
9536
+ exports.APP_DEPENDENCY_INACTIVE_STATUSES = APP_DEPENDENCY_INACTIVE_STATUSES;
9537
+ exports.APP_DEPENDENCY_KINDS = APP_DEPENDENCY_KINDS;
9538
+ exports.APP_DEPENDENCY_MANAGED = APP_DEPENDENCY_MANAGED;
9539
+ exports.APP_DEPENDENCY_OUTPUTS = APP_DEPENDENCY_OUTPUTS;
9540
+ exports.APP_DEPENDENCY_OUTPUT_NAMES = APP_DEPENDENCY_OUTPUT_NAMES;
9541
+ exports.APP_DEPENDENCY_POSTGRES_DEFAULT_PORT = APP_DEPENDENCY_POSTGRES_DEFAULT_PORT;
9542
+ exports.APP_DEPENDENCY_PROVIDER_IDS = APP_DEPENDENCY_PROVIDER_IDS;
9543
+ exports.APP_DEPENDENCY_READY_DEADLINE_MS = APP_DEPENDENCY_READY_DEADLINE_MS;
9544
+ exports.APP_DEPENDENCY_REASONS = APP_DEPENDENCY_REASONS;
9545
+ exports.APP_DEPENDENCY_REASON_MESSAGE_KEY_PREFIX = APP_DEPENDENCY_REASON_MESSAGE_KEY_PREFIX;
9546
+ exports.APP_DEPENDENCY_REASON_MESSAGE_LEAVES = APP_DEPENDENCY_REASON_MESSAGE_LEAVES;
9547
+ exports.APP_DEPENDENCY_REFRESH_AFTER_MS = APP_DEPENDENCY_REFRESH_AFTER_MS;
9548
+ exports.APP_DEPENDENCY_RELAY_DAILY_LIMIT = APP_DEPENDENCY_RELAY_DAILY_LIMIT;
9549
+ exports.APP_DEPENDENCY_RELAY_LIMITS = APP_DEPENDENCY_RELAY_LIMITS;
9550
+ exports.APP_DEPENDENCY_RETRY_DELAY_MS = APP_DEPENDENCY_RETRY_DELAY_MS;
9551
+ exports.APP_DEPENDENCY_STATUSES = APP_DEPENDENCY_STATUSES;
9552
+ exports.APP_DEPENDENCY_STATUS_MESSAGE_KEY_PREFIX = APP_DEPENDENCY_STATUS_MESSAGE_KEY_PREFIX;
9553
+ exports.APP_DEPENDENCY_STATUS_MESSAGE_LEAVES = APP_DEPENDENCY_STATUS_MESSAGE_LEAVES;
9554
+ exports.APP_DEPENDENCY_STATUS_REASONS = APP_DEPENDENCY_STATUS_REASONS;
9555
+ exports.APP_DEPENDENCY_TARGETS = APP_DEPENDENCY_TARGETS;
9556
+ exports.APP_DEPENDENCY_TOKEN_SCHEME = APP_DEPENDENCY_TOKEN_SCHEME;
9557
+ exports.APP_DEPENDENCY_TOKEN_UNKNOWN_CODE = APP_DEPENDENCY_TOKEN_UNKNOWN_CODE;
9558
+ exports.APP_DEPENDENCY_TRANSIENT_ATTEMPTS = APP_DEPENDENCY_TRANSIENT_ATTEMPTS;
9559
+ exports.APP_DEPENDENCY_ZONE_BUCKET_NAME_SHAPE = APP_DEPENDENCY_ZONE_BUCKET_NAME_SHAPE;
9560
+ exports.APP_DEPENDENCY_ZONE_BUCKET_PREFIX = APP_DEPENDENCY_ZONE_BUCKET_PREFIX;
9561
+ exports.APP_DEPENDENCY_ZONE_REDIS_MAX_MEMORY_MIB = APP_DEPENDENCY_ZONE_REDIS_MAX_MEMORY_MIB;
9562
+ exports.APP_DEPLOYMENT_DISPLAY_STATES = APP_DEPLOYMENT_DISPLAY_STATES;
9563
+ exports.APP_DEPLOYMENT_STATES = APP_DEPLOYMENT_STATES;
9564
+ exports.APP_DEPLOYMENT_TERMINAL_STATES = APP_DEPLOYMENT_TERMINAL_STATES;
9565
+ exports.APP_DEPLOY_LOCK_STALE_S = APP_DEPLOY_LOCK_STALE_S;
9566
+ exports.APP_DEPLOY_MAX_DURATION_S = APP_DEPLOY_MAX_DURATION_S;
9567
+ exports.APP_DEPLOY_OUTCOMES = APP_DEPLOY_OUTCOMES;
9568
+ exports.APP_DEPLOY_PHASES = APP_DEPLOY_PHASES;
9569
+ exports.APP_DEPLOY_PURPOSES = APP_DEPLOY_PURPOSES;
9570
+ exports.APP_DEPLOY_REQUEST_BUDGET_MS = APP_DEPLOY_REQUEST_BUDGET_MS;
9571
+ exports.APP_DEPLOY_TARGETS = APP_DEPLOY_TARGETS;
9572
+ exports.APP_DEPLOY_TARGET_CHOICES = APP_DEPLOY_TARGET_CHOICES;
9573
+ exports.APP_DIVERGENCE_DAILY_MS = APP_DIVERGENCE_DAILY_MS;
9574
+ exports.APP_DIVERGENCE_TTL_MS = APP_DIVERGENCE_TTL_MS;
9575
+ exports.APP_DOMAIN_RECONCILE_S = APP_DOMAIN_RECONCILE_S;
9576
+ exports.APP_ENV_ALPHABETS = APP_ENV_ALPHABETS;
9577
+ exports.APP_ENV_API_ERROR_CODES = APP_ENV_API_ERROR_CODES;
9578
+ exports.APP_ENV_BASE64_MAX_BYTES = APP_ENV_BASE64_MAX_BYTES;
9579
+ exports.APP_ENV_BASE64_MIN_BYTES = APP_ENV_BASE64_MIN_BYTES;
9580
+ exports.APP_ENV_BUILD_SERVICE_OBJECT_STORAGE_REGION = APP_ENV_BUILD_SERVICE_OBJECT_STORAGE_REGION;
9581
+ exports.APP_ENV_BUILD_SERVICE_OUTPUTS = APP_ENV_BUILD_SERVICE_OUTPUTS;
9582
+ exports.APP_ENV_BUILD_SERVICE_SMTP_FROM = APP_ENV_BUILD_SERVICE_SMTP_FROM;
9583
+ exports.APP_ENV_BUILD_SERVICE_VALUE_FLAG = APP_ENV_BUILD_SERVICE_VALUE_FLAG;
9584
+ exports.APP_ENV_CHARS_MAX_LENGTH = APP_ENV_CHARS_MAX_LENGTH;
9585
+ exports.APP_ENV_CHARS_MIN_LENGTH = APP_ENV_CHARS_MIN_LENGTH;
9586
+ exports.APP_ENV_DECLARED_SOURCES = APP_ENV_DECLARED_SOURCES;
9587
+ exports.APP_ENV_DEP_PASSWORD_TOKEN_PREFIX = APP_ENV_DEP_PASSWORD_TOKEN_PREFIX;
9588
+ exports.APP_ENV_DEP_PASSWORD_TOKEN_SUFFIX = APP_ENV_DEP_PASSWORD_TOKEN_SUFFIX;
9589
+ exports.APP_ENV_DOTENV_MAX_BYTES = APP_ENV_DOTENV_MAX_BYTES;
9590
+ exports.APP_ENV_DOTENV_MAX_LINES = APP_ENV_DOTENV_MAX_LINES;
9591
+ exports.APP_ENV_ERROR_CODES = APP_ENV_ERROR_CODES;
9592
+ exports.APP_ENV_ERROR_MESSAGE_KEY_PREFIX = APP_ENV_ERROR_MESSAGE_KEY_PREFIX;
9593
+ exports.APP_ENV_ERROR_MESSAGE_LEAVES = APP_ENV_ERROR_MESSAGE_LEAVES;
9594
+ exports.APP_ENV_GENERATE_SLA_MS = APP_ENV_GENERATE_SLA_MS;
9595
+ exports.APP_ENV_GENERATOR_KINDS = APP_ENV_GENERATOR_KINDS;
9596
+ exports.APP_ENV_IMPORT_OUTCOMES = APP_ENV_IMPORT_OUTCOMES;
9597
+ exports.APP_ENV_KEYPAIR_DEFAULT_FORMAT = APP_ENV_KEYPAIR_DEFAULT_FORMAT;
9598
+ exports.APP_ENV_KEYPAIR_FORMATS = APP_ENV_KEYPAIR_FORMATS;
9599
+ exports.APP_ENV_KEYPAIR_RAW_TYPES = APP_ENV_KEYPAIR_RAW_TYPES;
9600
+ exports.APP_ENV_KEYPAIR_TYPES = APP_ENV_KEYPAIR_TYPES;
9601
+ exports.APP_ENV_MAX_STORED = APP_ENV_MAX_STORED;
9602
+ exports.APP_ENV_NAME_PATTERN = APP_ENV_NAME_PATTERN;
9603
+ exports.APP_ENV_ORIGINS = APP_ENV_ORIGINS;
9604
+ exports.APP_ENV_PATTERN_BUDGET_MS = APP_ENV_PATTERN_BUDGET_MS;
9605
+ exports.APP_ENV_PHASES = APP_ENV_PHASES;
9606
+ exports.APP_ENV_PUBLIC_HALF_MAX_BYTES = APP_ENV_PUBLIC_HALF_MAX_BYTES;
9607
+ exports.APP_ENV_PUBLIC_HALF_SUFFIX = APP_ENV_PUBLIC_HALF_SUFFIX;
9608
+ exports.APP_ENV_PUBLIC_PREFIXES = APP_ENV_PUBLIC_PREFIXES;
9609
+ exports.APP_ENV_PUTS_PER_MINUTE = APP_ENV_PUTS_PER_MINUTE;
9610
+ exports.APP_ENV_RECIPE_SOURCES = APP_ENV_RECIPE_SOURCES;
9611
+ exports.APP_ENV_RECIPE_TOKEN_KINDS = APP_ENV_RECIPE_TOKEN_KINDS;
9612
+ exports.APP_ENV_REDACT_MIN_CHARS = APP_ENV_REDACT_MIN_CHARS;
9613
+ exports.APP_ENV_RESERVED_PREFIX = APP_ENV_RESERVED_PREFIX;
9614
+ exports.APP_ENV_RESOLUTION_TARGETS = APP_ENV_RESOLUTION_TARGETS;
9615
+ exports.APP_ENV_ROTATE_MODES = APP_ENV_ROTATE_MODES;
9616
+ exports.APP_ENV_ROTATIONS_PER_HOUR = APP_ENV_ROTATIONS_PER_HOUR;
9617
+ exports.APP_ENV_RUNNER_RECIPE_ENDPOINTS = APP_ENV_RUNNER_RECIPE_ENDPOINTS;
9618
+ exports.APP_ENV_SECRETS_KEPT = APP_ENV_SECRETS_KEPT;
9619
+ exports.APP_ENV_STORED_ORIGINS = APP_ENV_STORED_ORIGINS;
9620
+ exports.APP_ENV_TEMPLATE_MAX_DEPTH = APP_ENV_TEMPLATE_MAX_DEPTH;
9621
+ exports.APP_ENV_TOTAL_MAX_BYTES = APP_ENV_TOTAL_MAX_BYTES;
9622
+ exports.APP_ENV_UNRESOLVED_REASONS = APP_ENV_UNRESOLVED_REASONS;
9623
+ exports.APP_ENV_UUID_LENGTH = APP_ENV_UUID_LENGTH;
9624
+ exports.APP_ENV_VALIDATION_REFUSAL_CODES = APP_ENV_VALIDATION_REFUSAL_CODES;
9625
+ exports.APP_ENV_VALUE_MAX_BYTES = APP_ENV_VALUE_MAX_BYTES;
9626
+ exports.APP_FAILURE_CODES = APP_FAILURE_CODES;
9627
+ exports.APP_FAILURE_CODES_WITHOUT_MESSAGE_LEAF = APP_FAILURE_CODES_WITHOUT_MESSAGE_LEAF;
9628
+ exports.APP_FAILURE_LEAVES_WITHOUT_FAILURE_CODE = APP_FAILURE_LEAVES_WITHOUT_FAILURE_CODE;
9629
+ exports.APP_FAILURE_MESSAGE_LEAVES = APP_FAILURE_MESSAGE_LEAVES;
9630
+ exports.APP_FORK_READINESS_IDLE_MS = APP_FORK_READINESS_IDLE_MS;
9631
+ exports.APP_FORK_READINESS_MANUAL_RETRIES_PER_HOUR = APP_FORK_READINESS_MANUAL_RETRIES_PER_HOUR;
9632
+ exports.APP_FORK_READINESS_MAX_REDISPATCH = APP_FORK_READINESS_MAX_REDISPATCH;
9633
+ exports.APP_FORK_READINESS_POLL_DELAYS_MS = APP_FORK_READINESS_POLL_DELAYS_MS;
9634
+ exports.APP_FORK_READINESS_POLL_INTERVAL_MS = APP_FORK_READINESS_POLL_INTERVAL_MS;
9635
+ exports.APP_FORK_READINESS_READY_LATENCY_MS = APP_FORK_READINESS_READY_LATENCY_MS;
9636
+ exports.APP_FORK_READINESS_REASONS = APP_FORK_READINESS_REASONS;
9637
+ exports.APP_FORK_READINESS_TIMEOUT_ENV = APP_FORK_READINESS_TIMEOUT_ENV;
9638
+ exports.APP_FORK_READINESS_TIMEOUT_MS = APP_FORK_READINESS_TIMEOUT_MS;
9639
+ exports.APP_FORK_READINESS_TIMEOUT_OVERRIDE_MIN_MS = APP_FORK_READINESS_TIMEOUT_OVERRIDE_MIN_MS;
9640
+ exports.APP_HEALTH_BATCH = APP_HEALTH_BATCH;
9641
+ exports.APP_HEALTH_CLUSTER_CONCURRENCY = APP_HEALTH_CLUSTER_CONCURRENCY;
9642
+ exports.APP_HEALTH_FAILS_TO_NOTIFY = APP_HEALTH_FAILS_TO_NOTIFY;
9643
+ exports.APP_HEALTH_NOTIFY_DEDUPE_H = APP_HEALTH_NOTIFY_DEDUPE_H;
9644
+ exports.APP_HEALTH_PASSES_TO_RECOVER = APP_HEALTH_PASSES_TO_RECOVER;
9645
+ exports.APP_HEALTH_POLL_S = APP_HEALTH_POLL_S;
9646
+ exports.APP_HEALTH_POLL_TIMEOUT_S = APP_HEALTH_POLL_TIMEOUT_S;
9647
+ exports.APP_HEALTH_UNREACHABLE_POLLS = APP_HEALTH_UNREACHABLE_POLLS;
9648
+ exports.APP_HTTP_AUTH_SCHEMES = APP_HTTP_AUTH_SCHEMES;
9649
+ exports.APP_INSPECT_CACHE_TTL_MS = APP_INSPECT_CACHE_TTL_MS;
9650
+ exports.APP_INSPECT_FIXED_PROVIDER_CALLS = APP_INSPECT_FIXED_PROVIDER_CALLS;
9651
+ exports.APP_INSPECT_MAX_PROVIDER_CALLS = APP_INSPECT_MAX_PROVIDER_CALLS;
9652
+ exports.APP_INSPECT_OWNER_MIN_CALLS_REMAINING = APP_INSPECT_OWNER_MIN_CALLS_REMAINING;
9653
+ exports.APP_INSPECT_P95_BUDGET_MS = APP_INSPECT_P95_BUDGET_MS;
9654
+ exports.APP_INSPECT_RATE_LIMIT_PER_MINUTE = APP_INSPECT_RATE_LIMIT_PER_MINUTE;
9655
+ exports.APP_ISOLATION_PROBE_TIMEOUT_S = APP_ISOLATION_PROBE_TIMEOUT_S;
9656
+ exports.APP_JOB_RUNS_KEPT = APP_JOB_RUNS_KEPT;
9657
+ exports.APP_JOB_TIMEOUT_DEFAULT_S = APP_JOB_TIMEOUT_DEFAULT_S;
9658
+ exports.APP_JOB_TTL_S = APP_JOB_TTL_S;
9659
+ exports.APP_LAUNCHER_CATALOG_MAX_ENTRIES = APP_LAUNCHER_CATALOG_MAX_ENTRIES;
9660
+ exports.APP_LAUNCHER_CLIENT_CACHE_MS = APP_LAUNCHER_CLIENT_CACHE_MS;
9661
+ exports.APP_LAUNCHER_DESCRIPTION_MAX_LENGTH = APP_LAUNCHER_DESCRIPTION_MAX_LENGTH;
9662
+ exports.APP_LAUNCHER_EMPTY_ACTIONS = APP_LAUNCHER_EMPTY_ACTIONS;
9663
+ exports.APP_LAUNCHER_ENVIRONMENTS = APP_LAUNCHER_ENVIRONMENTS;
9664
+ exports.APP_LAUNCHER_FILTER_MAX_LENGTH = APP_LAUNCHER_FILTER_MAX_LENGTH;
9665
+ exports.APP_LAUNCHER_ICON_MAX_BYTES = APP_LAUNCHER_ICON_MAX_BYTES;
9666
+ exports.APP_LAUNCHER_ITEM_KINDS = APP_LAUNCHER_ITEM_KINDS;
9667
+ exports.APP_LAUNCHER_MANAGE_STATES = APP_LAUNCHER_MANAGE_STATES;
9668
+ exports.APP_LAUNCHER_MAX_CHANGES_PER_SAVE = APP_LAUNCHER_MAX_CHANGES_PER_SAVE;
9669
+ exports.APP_LAUNCHER_MAX_ITEMS_RESPONSE = APP_LAUNCHER_MAX_ITEMS_RESPONSE;
9670
+ exports.APP_LAUNCHER_MAX_PREFERENCE_ROWS = APP_LAUNCHER_MAX_PREFERENCE_ROWS;
9671
+ exports.APP_LAUNCHER_NAME_MAX_LENGTH = APP_LAUNCHER_NAME_MAX_LENGTH;
9672
+ exports.APP_LAUNCHER_ORIGIN_NOT_ALLOWED = APP_LAUNCHER_ORIGIN_NOT_ALLOWED;
9673
+ exports.APP_LAUNCHER_PANEL_PLATFORMS_MAX = APP_LAUNCHER_PANEL_PLATFORMS_MAX;
9674
+ exports.APP_LAUNCHER_PANEL_WORKS_MAX = APP_LAUNCHER_PANEL_WORKS_MAX;
9675
+ exports.APP_LAUNCHER_PIN_LIMIT = APP_LAUNCHER_PIN_LIMIT;
9676
+ exports.APP_LAUNCHER_PLATFORM_STATUSES = APP_LAUNCHER_PLATFORM_STATUSES;
9677
+ exports.APP_LAUNCHER_REJECTION_REASONS = APP_LAUNCHER_REJECTION_REASONS;
9678
+ exports.APP_LAUNCHER_SECTIONS = APP_LAUNCHER_SECTIONS;
9679
+ exports.APP_LAUNCHER_WORK_CHIPS = APP_LAUNCHER_WORK_CHIPS;
9680
+ exports.APP_LICENSE_EVALUATION_REASONS = APP_LICENSE_EVALUATION_REASONS;
9681
+ exports.APP_LOG_BYTES_MAX = APP_LOG_BYTES_MAX;
9682
+ exports.APP_LOG_CACHE_S = APP_LOG_CACHE_S;
9683
+ exports.APP_LOG_LINES_DEFAULT = APP_LOG_LINES_DEFAULT;
9684
+ exports.APP_LOG_LINES_MAX = APP_LOG_LINES_MAX;
9685
+ exports.APP_LOG_REDACT_MIN_CHARS = APP_LOG_REDACT_MIN_CHARS;
9686
+ exports.APP_MANAGED_CRON_MIN_INTERVAL_MIN = APP_MANAGED_CRON_MIN_INTERVAL_MIN;
9687
+ exports.APP_MANAGED_MAX_PER_USER_DEFAULT = APP_MANAGED_MAX_PER_USER_DEFAULT;
9688
+ exports.APP_MANIFEST_JOB_PHASES = APP_MANIFEST_JOB_PHASES;
9689
+ exports.APP_PAUSE_TIMEOUT_S = APP_PAUSE_TIMEOUT_S;
9690
+ exports.APP_PRECONDITION_CODES = APP_PRECONDITION_CODES;
9691
+ exports.APP_PRECONDITION_MESSAGE_LEAVES = APP_PRECONDITION_MESSAGE_LEAVES;
9692
+ exports.APP_PRECONDITION_STATES = APP_PRECONDITION_STATES;
9693
+ exports.APP_PREPARE_TIMEOUT_S = APP_PREPARE_TIMEOUT_S;
9694
+ exports.APP_PREVIEWS_MAX = APP_PREVIEWS_MAX;
9695
+ exports.APP_PREVIEW_CLOSE_REMOVE_MIN = APP_PREVIEW_CLOSE_REMOVE_MIN;
9696
+ exports.APP_PREVIEW_IDLE_H = APP_PREVIEW_IDLE_H;
9697
+ exports.APP_PRIVATE_COPY_MAX_SIZE_KB = APP_PRIVATE_COPY_MAX_SIZE_KB;
9698
+ exports.APP_PRIVATE_COPY_NAME_ATTEMPTS = APP_PRIVATE_COPY_NAME_ATTEMPTS;
9699
+ exports.APP_PROVISIONING_DETECTION_SOURCES = APP_PROVISIONING_DETECTION_SOURCES;
9700
+ exports.APP_PROVISIONING_FAILURE_REASONS = APP_PROVISIONING_FAILURE_REASONS;
9701
+ exports.APP_PROVISIONING_FAILURE_REASON_I18N_KEY = APP_PROVISIONING_FAILURE_REASON_I18N_KEY;
9702
+ exports.APP_PROVISIONING_OPTION_I18N_KEY = APP_PROVISIONING_OPTION_I18N_KEY;
9703
+ exports.APP_PROVISIONING_PARK_REASONS = APP_PROVISIONING_PARK_REASONS;
9704
+ exports.APP_PROVISIONING_QUESTION_REASONS = APP_PROVISIONING_QUESTION_REASONS;
9705
+ exports.APP_PROVISIONING_QUESTION_REASON_I18N_KEY = APP_PROVISIONING_QUESTION_REASON_I18N_KEY;
9706
+ exports.APP_PROVISIONING_QUEUED_REASON_I18N_KEY = APP_PROVISIONING_QUEUED_REASON_I18N_KEY;
9707
+ exports.APP_PROVISIONING_STATUSES = APP_PROVISIONING_STATUSES;
9708
+ exports.APP_PROVISIONING_STEPS = APP_PROVISIONING_STEPS;
9709
+ exports.APP_PROVISIONING_STEP_STATES = APP_PROVISIONING_STEP_STATES;
9710
+ exports.APP_PROVISION_CHAT_ATTEMPT_RED = APP_PROVISION_CHAT_ATTEMPT_RED;
9711
+ exports.APP_PROVISION_CHAT_FAILED = APP_PROVISION_CHAT_FAILED;
9712
+ exports.APP_PROVISION_CHAT_NEEDS_INPUT = APP_PROVISION_CHAT_NEEDS_INPUT;
9713
+ exports.APP_PROVISION_CHAT_PROPOSED = APP_PROVISION_CHAT_PROPOSED;
9714
+ exports.APP_PROVISION_CHAT_STARTED = APP_PROVISION_CHAT_STARTED;
9715
+ exports.APP_PROVISION_CHAT_SUCCEEDED = APP_PROVISION_CHAT_SUCCEEDED;
9716
+ exports.APP_PROVISION_CHAT_TEMPLATES = APP_PROVISION_CHAT_TEMPLATES;
9717
+ exports.APP_PROVISION_COPY_PARAMS = APP_PROVISION_COPY_PARAMS;
9718
+ exports.APP_PROVISION_COPY_TEMPLATES = APP_PROVISION_COPY_TEMPLATES;
9719
+ exports.APP_PROVISION_EVIDENCE_ATTEMPT = APP_PROVISION_EVIDENCE_ATTEMPT;
9720
+ exports.APP_PROVISION_EVIDENCE_BUILD_LOG = APP_PROVISION_EVIDENCE_BUILD_LOG;
9721
+ exports.APP_PROVISION_EVIDENCE_DURATION = APP_PROVISION_EVIDENCE_DURATION;
9722
+ exports.APP_PROVISION_EVIDENCE_HEADINGS = APP_PROVISION_EVIDENCE_HEADINGS;
9723
+ exports.APP_PROVISION_EVIDENCE_IMAGE_DIGEST = APP_PROVISION_EVIDENCE_IMAGE_DIGEST;
9724
+ exports.APP_PROVISION_EVIDENCE_SMOKE = APP_PROVISION_EVIDENCE_SMOKE;
9725
+ exports.APP_PROVISION_EVIDENCE_SPEND = APP_PROVISION_EVIDENCE_SPEND;
9726
+ exports.APP_PROVISION_EVIDENCE_STEP = APP_PROVISION_EVIDENCE_STEP;
9727
+ exports.APP_PROVISION_EVIDENCE_TARGET = APP_PROVISION_EVIDENCE_TARGET;
9728
+ exports.APP_PROVISION_EVIDENCE_VERDICT = APP_PROVISION_EVIDENCE_VERDICT;
9729
+ exports.APP_PROVISION_LIMITS = APP_PROVISION_LIMITS;
9730
+ exports.APP_PROVISION_OPTION_ACCEPT_BUILD_ONLY = APP_PROVISION_OPTION_ACCEPT_BUILD_ONLY;
9731
+ exports.APP_PROVISION_OPTION_CHOOSE = APP_PROVISION_OPTION_CHOOSE;
9732
+ exports.APP_PROVISION_OPTION_LABELS = APP_PROVISION_OPTION_LABELS;
9733
+ exports.APP_PROVISION_OPTION_OPTIONAL = APP_PROVISION_OPTION_OPTIONAL;
9734
+ exports.APP_PROVISION_OPTION_RAISE_CAP_MINUTES = APP_PROVISION_OPTION_RAISE_CAP_MINUTES;
9735
+ exports.APP_PROVISION_OPTION_RAISE_CAP_TOKENS = APP_PROVISION_OPTION_RAISE_CAP_TOKENS;
9736
+ exports.APP_PROVISION_OPTION_RETRY = APP_PROVISION_OPTION_RETRY;
9737
+ exports.APP_PROVISION_OPTION_RETRY_AFTER_SETTING = APP_PROVISION_OPTION_RETRY_AFTER_SETTING;
9738
+ exports.APP_PROVISION_OPTION_STOP = APP_PROVISION_OPTION_STOP;
9739
+ exports.APP_PROVISION_OPTION_VERIFY_ON_CLUSTER = APP_PROVISION_OPTION_VERIFY_ON_CLUSTER;
9740
+ exports.APP_PROVISION_PRESERVED_SPEC_FIELDS = APP_PROVISION_PRESERVED_SPEC_FIELDS;
9741
+ exports.APP_PROVISION_QUESTION_SUBJECTS = APP_PROVISION_QUESTION_SUBJECTS;
9742
+ exports.APP_PROVISION_QUESTION_SUBJECT_AGENT_ASKED = APP_PROVISION_QUESTION_SUBJECT_AGENT_ASKED;
9743
+ exports.APP_PROVISION_QUESTION_SUBJECT_ATTEMPTS_SPENT = APP_PROVISION_QUESTION_SUBJECT_ATTEMPTS_SPENT;
9744
+ exports.APP_PROVISION_QUESTION_SUBJECT_MISSING_REQUIRED_VALUE = APP_PROVISION_QUESTION_SUBJECT_MISSING_REQUIRED_VALUE;
9745
+ exports.APP_PROVISION_QUESTION_SUBJECT_MULTIPLE_APPS = APP_PROVISION_QUESTION_SUBJECT_MULTIPLE_APPS;
9746
+ exports.APP_PROVISION_QUESTION_SUBJECT_PREFIX = APP_PROVISION_QUESTION_SUBJECT_PREFIX;
9747
+ exports.APP_PROVISION_QUESTION_SUBJECT_REPEATED_FAILURE = APP_PROVISION_QUESTION_SUBJECT_REPEATED_FAILURE;
9748
+ exports.APP_PROVISION_QUESTION_SUBJECT_RUNNER_CAPACITY = APP_PROVISION_QUESTION_SUBJECT_RUNNER_CAPACITY;
9749
+ exports.APP_PROVISION_QUESTION_SUBJECT_RUNNER_MINUTE_CAP = APP_PROVISION_QUESTION_SUBJECT_RUNNER_MINUTE_CAP;
9750
+ exports.APP_PROVISION_QUESTION_SUBJECT_SAFETY_RAIL = APP_PROVISION_QUESTION_SUBJECT_SAFETY_RAIL;
9751
+ exports.APP_PROVISION_QUESTION_SUBJECT_TOKEN_CAP = APP_PROVISION_QUESTION_SUBJECT_TOKEN_CAP;
9752
+ exports.APP_PROVISION_QUEUED_REASON_ORG_LIMIT = APP_PROVISION_QUEUED_REASON_ORG_LIMIT;
9753
+ exports.APP_PROVISION_QUEUED_REASON_TEXTS = APP_PROVISION_QUEUED_REASON_TEXTS;
9754
+ exports.APP_PROVISION_QUEUED_REASON_USER_LIMIT = APP_PROVISION_QUEUED_REASON_USER_LIMIT;
9755
+ exports.APP_PROVISION_RAISE_CAP_LABELS = APP_PROVISION_RAISE_CAP_LABELS;
9756
+ exports.APP_PROVISION_REASON_TEXTS = APP_PROVISION_REASON_TEXTS;
9757
+ exports.APP_PROVISION_REASON_TEXT_COULD_NOT_VERIFY = APP_PROVISION_REASON_TEXT_COULD_NOT_VERIFY;
9758
+ exports.APP_PROVISION_REASON_TEXT_DEADLINE = APP_PROVISION_REASON_TEXT_DEADLINE;
9759
+ exports.APP_PROVISION_REASON_TEXT_NOT_RUNNABLE = APP_PROVISION_REASON_TEXT_NOT_RUNNABLE;
9760
+ exports.APP_PROVISION_REASON_TEXT_NO_ANSWER = APP_PROVISION_REASON_TEXT_NO_ANSWER;
9761
+ exports.APP_PROVISION_REASON_TEXT_NO_ISOLATED_RUNTIME = APP_PROVISION_REASON_TEXT_NO_ISOLATED_RUNTIME;
9762
+ exports.APP_PROVISION_REASON_TEXT_PRIVATE_REPOSITORY = APP_PROVISION_REASON_TEXT_PRIVATE_REPOSITORY;
9763
+ exports.APP_PROVISION_REASON_TEXT_REPOSITORY_NOT_READY = APP_PROVISION_REASON_TEXT_REPOSITORY_NOT_READY;
9764
+ exports.APP_PROVISION_REASON_TEXT_REPOSITORY_TOO_LARGE = APP_PROVISION_REASON_TEXT_REPOSITORY_TOO_LARGE;
9765
+ exports.APP_PROVISION_REASON_TEXT_RUNNER_MINUTE_CAP = APP_PROVISION_REASON_TEXT_RUNNER_MINUTE_CAP;
9766
+ exports.APP_PROVISION_REASON_TEXT_TOKEN_CAP = APP_PROVISION_REASON_TEXT_TOKEN_CAP;
9767
+ exports.APP_PROVISION_REASON_TEXT_VERIFICATION_INFRASTRUCTURE = APP_PROVISION_REASON_TEXT_VERIFICATION_INFRASTRUCTURE;
9768
+ exports.APP_PROVISION_REMINDER_BODY = APP_PROVISION_REMINDER_BODY;
9769
+ exports.APP_PROVISION_REMINDER_TITLE = APP_PROVISION_REMINDER_TITLE;
9770
+ exports.APP_PROVISION_WRITABLE_PATHS = APP_PROVISION_WRITABLE_PATHS;
9771
+ exports.APP_PUBLISH_TIMEOUT_S = APP_PUBLISH_TIMEOUT_S;
9772
+ exports.APP_QUOTA_SCOPES = APP_QUOTA_SCOPES;
9773
+ exports.APP_RATE_LIMITED_PERSISTENT_AFTER = APP_RATE_LIMITED_PERSISTENT_AFTER;
9774
+ exports.APP_RATE_LIMIT_BACKOFF_BASE_MS = APP_RATE_LIMIT_BACKOFF_BASE_MS;
9775
+ exports.APP_RATE_LIMIT_BACKOFF_MAX_MS = APP_RATE_LIMIT_BACKOFF_MAX_MS;
9776
+ exports.APP_RATE_LIMIT_MIN_REMAINING = APP_RATE_LIMIT_MIN_REMAINING;
9777
+ exports.APP_RATE_LIMIT_RESET_GRACE_MS = APP_RATE_LIMIT_RESET_GRACE_MS;
9778
+ exports.APP_READINESS_FAILURE_REASONS = APP_READINESS_FAILURE_REASONS;
9779
+ exports.APP_READINESS_STATES = APP_READINESS_STATES;
9780
+ exports.APP_REMOVE_TIMEOUT_S = APP_REMOVE_TIMEOUT_S;
9781
+ exports.APP_REPOSITORY_MODES = APP_REPOSITORY_MODES;
9782
+ exports.APP_REPOSITORY_STAGES = APP_REPOSITORY_STAGES;
9783
+ exports.APP_REPOSITORY_STAGES_WITHOUT_SPEC_LIMIT = APP_REPOSITORY_STAGES_WITHOUT_SPEC_LIMIT;
9784
+ exports.APP_REPOSITORY_STAGE_LIMITS = APP_REPOSITORY_STAGE_LIMITS;
9785
+ exports.APP_REPOSITORY_STAGE_REFUSAL_CODES = APP_REPOSITORY_STAGE_REFUSAL_CODES;
9786
+ exports.APP_REPOSITORY_URL_MAX_LENGTH = APP_REPOSITORY_URL_MAX_LENGTH;
9787
+ exports.APP_ROLLBACK_CANDIDATES = APP_ROLLBACK_CANDIDATES;
9788
+ exports.APP_ROLLOUT_EXTRA_S = APP_ROLLOUT_EXTRA_S;
9789
+ exports.APP_ROLLOUT_MAX_S = APP_ROLLOUT_MAX_S;
9790
+ exports.APP_ROLLOUT_MIN_S = APP_ROLLOUT_MIN_S;
9791
+ exports.APP_ROLLOUT_POLL_S = APP_ROLLOUT_POLL_S;
9792
+ exports.APP_ROLLOUT_RESTARTS_FAIL = APP_ROLLOUT_RESTARTS_FAIL;
9793
+ exports.APP_ROLLOUT_STUCK_POD_S = APP_ROLLOUT_STUCK_POD_S;
9794
+ exports.APP_RUNTIME_HEALTH = APP_RUNTIME_HEALTH;
9795
+ exports.APP_RUNTIME_STATES = APP_RUNTIME_STATES;
9796
+ exports.APP_SETUP_PR_CHECK_BATCH = APP_SETUP_PR_CHECK_BATCH;
9797
+ exports.APP_SETUP_PR_CHECK_ON_VIEW_MIN_INTERVAL_MS = APP_SETUP_PR_CHECK_ON_VIEW_MIN_INTERVAL_MS;
9798
+ exports.APP_SMOKE_BODY_BYTES = APP_SMOKE_BODY_BYTES;
9799
+ exports.APP_SMOKE_FOUND_CHARS = APP_SMOKE_FOUND_CHARS;
9800
+ exports.APP_SMOKE_IN_CLUSTER_WINDOW_S = APP_SMOKE_IN_CLUSTER_WINDOW_S;
9801
+ exports.APP_SMOKE_PUBLIC_FIRST_WINDOW_S = APP_SMOKE_PUBLIC_FIRST_WINDOW_S;
9802
+ exports.APP_SMOKE_PUBLIC_WINDOW_S = APP_SMOKE_PUBLIC_WINDOW_S;
9803
+ exports.APP_SMOKE_RETRY_S = APP_SMOKE_RETRY_S;
9804
+ exports.APP_SOURCE_BLUEPRINT_MATCH_SOURCES = APP_SOURCE_BLUEPRINT_MATCH_SOURCES;
9805
+ exports.APP_SOURCE_BLUEPRINT_STATUSES = APP_SOURCE_BLUEPRINT_STATUSES;
9806
+ exports.APP_SOURCE_LICENSE_CLASSES = APP_SOURCE_LICENSE_CLASSES;
9807
+ exports.APP_SOURCE_LICENSE_SOURCES = APP_SOURCE_LICENSE_SOURCES;
9808
+ exports.APP_SOURCE_REASON_CODES = APP_SOURCE_REASON_CODES;
9809
+ exports.APP_SOURCE_REPOSITORY_NAME_SUFFIXES = APP_SOURCE_REPOSITORY_NAME_SUFFIXES;
9810
+ exports.APP_SOURCE_REPOSITORY_TYPES = APP_SOURCE_REPOSITORY_TYPES;
9811
+ exports.APP_SOURCE_REPOSITORY_TYPE_BY_MODE = APP_SOURCE_REPOSITORY_TYPE_BY_MODE;
9812
+ exports.APP_SOURCE_SPEC_FILE = APP_SOURCE_SPEC_FILE;
9813
+ exports.APP_SOURCE_SPEC_KIND = APP_SOURCE_SPEC_KIND;
9814
+ exports.APP_SOURCE_SPEC_VERSION = APP_SOURCE_SPEC_VERSION;
9815
+ exports.APP_SPEC_BLOCK_DEFAULTS = APP_SPEC_BLOCK_DEFAULTS;
9816
+ exports.APP_SPEC_BUILD_STRATEGIES = APP_SPEC_BUILD_STRATEGIES;
9817
+ exports.APP_SPEC_COMPONENT_ROLES = APP_SPEC_COMPONENT_ROLES;
9818
+ exports.APP_SPEC_CRON_CONCURRENCIES = APP_SPEC_CRON_CONCURRENCIES;
9819
+ exports.APP_SPEC_DOMAIN_CHANGES = APP_SPEC_DOMAIN_CHANGES;
9820
+ exports.APP_SPEC_DRAFT_VALIDATE_PER_MIN = APP_SPEC_DRAFT_VALIDATE_PER_MIN;
9821
+ exports.APP_SPEC_ENV_PHASES = APP_SPEC_ENV_PHASES;
9822
+ exports.APP_SPEC_EVALUATE_COALESCE_MS = APP_SPEC_EVALUATE_COALESCE_MS;
9823
+ exports.APP_SPEC_EVALUATION_TRIGGERS = APP_SPEC_EVALUATION_TRIGGERS;
9824
+ exports.APP_SPEC_EXTENSION_KEY_PREFIX = APP_SPEC_EXTENSION_KEY_PREFIX;
9825
+ exports.APP_SPEC_FILE_MAX_BYTES = APP_SPEC_FILE_MAX_BYTES;
9826
+ exports.APP_SPEC_GENERATE_ALPHABETS = APP_SPEC_GENERATE_ALPHABETS;
9827
+ exports.APP_SPEC_GENERATE_KINDS = APP_SPEC_GENERATE_KINDS;
9828
+ exports.APP_SPEC_GENERATE_ROTATIONS = APP_SPEC_GENERATE_ROTATIONS;
9829
+ exports.APP_SPEC_HTTP_AUTH_SCHEMES = APP_SPEC_HTTP_AUTH_SCHEMES;
9830
+ exports.APP_SPEC_HTTP_METHODS = APP_SPEC_HTTP_METHODS;
9831
+ exports.APP_SPEC_ISSUE_CODES = APP_SPEC_ISSUE_CODES;
9832
+ exports.APP_SPEC_JOB_WHENS = APP_SPEC_JOB_WHENS;
9833
+ exports.APP_SPEC_KEYPAIR_FORMATS = APP_SPEC_KEYPAIR_FORMATS;
9834
+ exports.APP_SPEC_KEYPAIR_TYPES = APP_SPEC_KEYPAIR_TYPES;
9835
+ exports.APP_SPEC_LAZY_HEAD_CHECK_MS = APP_SPEC_LAZY_HEAD_CHECK_MS;
9836
+ exports.APP_SPEC_MAX_DEPTH = APP_SPEC_MAX_DEPTH;
9837
+ exports.APP_SPEC_MAX_ISSUES = APP_SPEC_MAX_ISSUES;
9838
+ exports.APP_SPEC_MAX_PROTECTED_PATHS = APP_SPEC_MAX_PROTECTED_PATHS;
9839
+ exports.APP_SPEC_MAX_REQUIRE_HUMAN_MERGE_PATHS = APP_SPEC_MAX_REQUIRE_HUMAN_MERGE_PATHS;
9840
+ exports.APP_SPEC_POSTGRES_VERSIONS = APP_SPEC_POSTGRES_VERSIONS;
9841
+ exports.APP_SPEC_PROBE_KINDS = APP_SPEC_PROBE_KINDS;
9842
+ exports.APP_SPEC_PUBLIC_KEY_SUFFIX = APP_SPEC_PUBLIC_KEY_SUFFIX;
9843
+ exports.APP_SPEC_REDIS_MAXMEMORY_POLICIES = APP_SPEC_REDIS_MAXMEMORY_POLICIES;
9844
+ exports.APP_SPEC_REDIS_VERSIONS = APP_SPEC_REDIS_VERSIONS;
9845
+ exports.APP_SPEC_REFRESH_PER_MIN = APP_SPEC_REFRESH_PER_MIN;
9846
+ exports.APP_SPEC_SEVERITIES = APP_SPEC_SEVERITIES;
9847
+ exports.APP_SPEC_SMOKE_HTTP_METHODS = APP_SPEC_SMOKE_HTTP_METHODS;
9848
+ exports.APP_SPEC_SMOKE_WHENS = APP_SPEC_SMOKE_WHENS;
9849
+ exports.APP_SPEC_SOURCE_ONLY_KEYS = APP_SPEC_SOURCE_ONLY_KEYS;
9850
+ exports.APP_SPEC_SOURCE_RELATIONS = APP_SPEC_SOURCE_RELATIONS;
9851
+ exports.APP_SPEC_SUGGESTION_MAX_DISTANCE = APP_SPEC_SUGGESTION_MAX_DISTANCE;
9852
+ exports.APP_SPEC_UPSTREAM_SYNC_MODES = APP_SPEC_UPSTREAM_SYNC_MODES;
9853
+ exports.APP_SPEC_VALIDATION_MODES = APP_SPEC_VALIDATION_MODES;
9854
+ exports.APP_SPEC_VALIDATION_STATUSES = APP_SPEC_VALIDATION_STATUSES;
9855
+ exports.APP_SPEC_VERSION = APP_SPEC_VERSION;
9856
+ exports.APP_SPEC_YAML_MAX_ALIASES = APP_SPEC_YAML_MAX_ALIASES;
9857
+ exports.APP_STATUS_REFRESH_MIN_S = APP_STATUS_REFRESH_MIN_S;
9858
+ exports.APP_STATUS_STALE_S = APP_STATUS_STALE_S;
9859
+ exports.APP_SUBDOMAIN_LABEL_MIN = APP_SUBDOMAIN_LABEL_MIN;
9860
+ exports.APP_SYNC_REASONS = APP_SYNC_REASONS;
9861
+ exports.APP_SYNC_RESULTS = APP_SYNC_RESULTS;
9862
+ exports.APP_TARGET_OWNER_SCAN_LIMIT_P1 = APP_TARGET_OWNER_SCAN_LIMIT_P1;
9863
+ exports.APP_TARGET_OWNER_SCAN_LIMIT_P2 = APP_TARGET_OWNER_SCAN_LIMIT_P2;
9864
+ exports.APP_TMP_SIZE_MI = APP_TMP_SIZE_MI;
9865
+ exports.APP_UPSTREAM_CONFLICT_LABEL_PREFIX = APP_UPSTREAM_CONFLICT_LABEL_PREFIX;
9866
+ exports.APP_UPSTREAM_CONFLICT_MAX_PATHS = APP_UPSTREAM_CONFLICT_MAX_PATHS;
9867
+ exports.APP_UPSTREAM_STATUSES = APP_UPSTREAM_STATUSES;
9868
+ exports.APP_UPSTREAM_SYNC_ACK_BUDGET_MS = APP_UPSTREAM_SYNC_ACK_BUDGET_MS;
9869
+ exports.APP_UPSTREAM_SYNC_BRANCH = APP_UPSTREAM_SYNC_BRANCH;
9870
+ exports.APP_UPSTREAM_SYNC_DEFAULT_SCHEDULE = APP_UPSTREAM_SYNC_DEFAULT_SCHEDULE;
9871
+ exports.APP_UPSTREAM_SYNC_DISPATCH_BATCH = APP_UPSTREAM_SYNC_DISPATCH_BATCH;
9872
+ exports.APP_UPSTREAM_SYNC_DISPATCH_CRON = APP_UPSTREAM_SYNC_DISPATCH_CRON;
9873
+ exports.APP_UPSTREAM_SYNC_JITTER_MAX_MS = APP_UPSTREAM_SYNC_JITTER_MAX_MS;
9874
+ exports.APP_UPSTREAM_SYNC_LOCK_TTL_MS = APP_UPSTREAM_SYNC_LOCK_TTL_MS;
9875
+ exports.APP_UPSTREAM_SYNC_MANUAL_PER_HOUR = APP_UPSTREAM_SYNC_MANUAL_PER_HOUR;
9876
+ exports.APP_UPSTREAM_SYNC_MAX_PROVIDER_CALLS = APP_UPSTREAM_SYNC_MAX_PROVIDER_CALLS;
9877
+ exports.APP_UPSTREAM_SYNC_MIN_INTERVAL_MS = APP_UPSTREAM_SYNC_MIN_INTERVAL_MS;
9878
+ exports.APP_UPSTREAM_UNAVAILABLE_RECHECK_MS = APP_UPSTREAM_UNAVAILABLE_RECHECK_MS;
9879
+ exports.APP_UPSTREAM_WARNING_CODES = APP_UPSTREAM_WARNING_CODES;
9880
+ exports.APP_VERIFICATION_COMPONENT_ROLES = APP_VERIFICATION_COMPONENT_ROLES;
9881
+ exports.APP_VERIFICATION_DEPENDENCY_CONTAINERS = APP_VERIFICATION_DEPENDENCY_CONTAINERS;
9882
+ exports.APP_VERIFICATION_DEPENDENCY_KINDS = APP_VERIFICATION_DEPENDENCY_KINDS;
9883
+ exports.APP_VERIFICATION_HTTP_METHODS = APP_VERIFICATION_HTTP_METHODS;
9884
+ exports.APP_VERIFICATION_JOB_PHASES = APP_VERIFICATION_JOB_PHASES;
9885
+ exports.APP_VERIFICATION_PLAN_VERSION = APP_VERIFICATION_PLAN_VERSION;
9886
+ exports.APP_VERIFICATION_PROBE_KINDS = APP_VERIFICATION_PROBE_KINDS;
9887
+ exports.APP_VERIFICATION_SMOKE_WHENS = APP_VERIFICATION_SMOKE_WHENS;
9888
+ exports.APP_WORKER_STABLE_S = APP_WORKER_STABLE_S;
9889
+ exports.APP_WORK_QUOTA_CAPS = APP_WORK_QUOTA_CAPS;
9890
+ exports.APP_WORK_REPOSITORY_ROLE = APP_WORK_REPOSITORY_ROLE;
6050
9891
  exports.ATTENTION_TARGET_CLASSES = ATTENTION_TARGET_CLASSES;
9892
+ exports.ATTESTATION_NOTICE_DAYS = ATTESTATION_NOTICE_DAYS;
9893
+ exports.ATTESTATION_TTL_DAYS = ATTESTATION_TTL_DAYS;
6051
9894
  exports.AUTONOMY_GRANT_SCOPE_PRECEDENCE = AUTONOMY_GRANT_SCOPE_PRECEDENCE;
6052
9895
  exports.AUTO_RECHARGE_MAX_CONSECUTIVE_FAILURES = AUTO_RECHARGE_MAX_CONSECUTIVE_FAILURES;
6053
9896
  exports.AUTO_RECHARGE_MONTHLY_CAP_DEFAULT_CENTS = AUTO_RECHARGE_MONTHLY_CAP_DEFAULT_CENTS;
@@ -6063,8 +9906,23 @@ exports.BACKUP_FORMAT_VERSION = BACKUP_FORMAT_VERSION;
6063
9906
  exports.BACKUP_FULL_HISTORY_CEILING_DAYS = BACKUP_FULL_HISTORY_CEILING_DAYS;
6064
9907
  exports.BACKUP_MANIFEST_SENTINEL_FIELDS = BACKUP_MANIFEST_SENTINEL_FIELDS;
6065
9908
  exports.BACKUP_TRIM_POLICIES = BACKUP_TRIM_POLICIES;
9909
+ exports.BLUEPRINT_ALTERNATIVES_MAX = BLUEPRINT_ALTERNATIVES_MAX;
9910
+ exports.BLUEPRINT_APPLY_PER_HOUR = BLUEPRINT_APPLY_PER_HOUR;
9911
+ exports.BLUEPRINT_APPLY_RETRIES = BLUEPRINT_APPLY_RETRIES;
9912
+ exports.BLUEPRINT_MATCH_SOURCES = BLUEPRINT_MATCH_SOURCES;
9913
+ exports.BLUEPRINT_OVERLAY_FILE_MAX_BYTES = BLUEPRINT_OVERLAY_FILE_MAX_BYTES;
9914
+ exports.BLUEPRINT_OVERLAY_MAX_FILES = BLUEPRINT_OVERLAY_MAX_FILES;
9915
+ exports.BLUEPRINT_OVERLAY_TOTAL_MAX_BYTES = BLUEPRINT_OVERLAY_TOTAL_MAX_BYTES;
9916
+ exports.BLUEPRINT_PROBE_MAX_READS = BLUEPRINT_PROBE_MAX_READS;
9917
+ exports.BLUEPRINT_RESOLUTION_REASONS = BLUEPRINT_RESOLUTION_REASONS;
9918
+ exports.BLUEPRINT_RESOLVE_HIT_TTL_MS = BLUEPRINT_RESOLVE_HIT_TTL_MS;
9919
+ exports.BLUEPRINT_RESOLVE_MISS_TTL_MS = BLUEPRINT_RESOLVE_MISS_TTL_MS;
6066
9920
  exports.BREAKDOWN_EVERYTHING_ELSE_KEY = BREAKDOWN_EVERYTHING_ELSE_KEY;
6067
9921
  exports.BREAKDOWN_TOP_N = BREAKDOWN_TOP_N;
9922
+ exports.BUILD_SERVICE_DEFAULTS = BUILD_SERVICE_DEFAULTS;
9923
+ exports.BUILD_SERVICE_HEALTH_KINDS = BUILD_SERVICE_HEALTH_KINDS;
9924
+ exports.BUILD_SERVICE_HOST = BUILD_SERVICE_HOST;
9925
+ exports.BUILD_SERVICE_KINDS = BUILD_SERVICE_KINDS;
6068
9926
  exports.CATALOG_SEARCH_MIN_CHARS = CATALOG_SEARCH_MIN_CHARS;
6069
9927
  exports.COMPUTER_AUTO_REFRESH_AFTER_MS = COMPUTER_AUTO_REFRESH_AFTER_MS;
6070
9928
  exports.COMPUTER_BLOCKED_SHORTCUTS = COMPUTER_BLOCKED_SHORTCUTS;
@@ -6156,6 +10014,7 @@ exports.DEFAULT_GOAL_KIND = DEFAULT_GOAL_KIND;
6156
10014
  exports.DEFAULT_REASONING_EFFORT = DEFAULT_REASONING_EFFORT;
6157
10015
  exports.DEFAULT_TASK_CHECK_PHASE = DEFAULT_TASK_CHECK_PHASE;
6158
10016
  exports.DEFAULT_WORK_REPO_DECLARED_COMMAND_POLICY = DEFAULT_WORK_REPO_DECLARED_COMMAND_POLICY;
10017
+ exports.DETECTOR_QUARANTINE_MS = DETECTOR_QUARANTINE_MS;
6159
10018
  exports.DRAFTABLE_CATEGORIES = DRAFTABLE_CATEGORIES;
6160
10019
  exports.DomainType = DomainType;
6161
10020
  exports.EMAIL_ADDRESS_ALIAS_GRACE_DAYS = EMAIL_ADDRESS_ALIAS_GRACE_DAYS;
@@ -6196,6 +10055,29 @@ exports.EMAIL_SEND_ORIGINS = EMAIL_SEND_ORIGINS;
6196
10055
  exports.EMAIL_SEND_UNDO_GRACE_MS = EMAIL_SEND_UNDO_GRACE_MS;
6197
10056
  exports.EMAIL_WORKSPACE_DAILY_CAP = EMAIL_WORKSPACE_DAILY_CAP;
6198
10057
  exports.EMAIL_WORKSPACE_MONTHLY_CAP = EMAIL_WORKSPACE_MONTHLY_CAP;
10058
+ exports.EVER_ID_DEFAULT_API_AUDIENCE = EVER_ID_DEFAULT_API_AUDIENCE;
10059
+ exports.EVER_ID_DEFAULT_DISPLAY_NAME = EVER_ID_DEFAULT_DISPLAY_NAME;
10060
+ exports.EVER_ID_DELEGATED_AUTH_METHOD = EVER_ID_DELEGATED_AUTH_METHOD;
10061
+ exports.EVER_ID_DELEGATED_SCOPES = EVER_ID_DELEGATED_SCOPES;
10062
+ exports.EVER_ID_ERROR_CODE_WIRE_VALUES = EVER_ID_ERROR_CODE_WIRE_VALUES;
10063
+ exports.EVER_ID_LIMITS = EVER_ID_LIMITS;
10064
+ exports.EVER_ID_LINKED_VIA = EVER_ID_LINKED_VIA;
10065
+ exports.EVER_ID_QUERY_TOKEN_PARAMS = EVER_ID_QUERY_TOKEN_PARAMS;
10066
+ exports.EVER_ID_REGISTRATION_PROVIDER = EVER_ID_REGISTRATION_PROVIDER;
10067
+ exports.EVER_ID_SCOPES = EVER_ID_SCOPES;
10068
+ exports.EVER_ID_SIGNING_ALGS = EVER_ID_SIGNING_ALGS;
10069
+ exports.EVER_ID_WIRE_ERROR_CODES = EVER_ID_WIRE_ERROR_CODES;
10070
+ exports.EVER_PLATFORM_DEFAULT_API_URL = EVER_PLATFORM_DEFAULT_API_URL;
10071
+ exports.EVER_STATS_CHANNELS = EVER_STATS_CHANNELS;
10072
+ exports.EVER_STATS_KEY_HEADER = EVER_STATS_KEY_HEADER;
10073
+ exports.EVER_STATS_KEY_ID_HEADER = EVER_STATS_KEY_ID_HEADER;
10074
+ exports.EVER_STATS_MAX_BODY_BYTES = EVER_STATS_MAX_BODY_BYTES;
10075
+ exports.EVER_STATS_PRODUCTS = EVER_STATS_PRODUCTS;
10076
+ exports.EVER_STATS_REPORTS_PATH = EVER_STATS_REPORTS_PATH;
10077
+ exports.EVER_STATS_SIGNATURE_HEADER = EVER_STATS_SIGNATURE_HEADER;
10078
+ exports.EVER_STATS_SIGNATURE_PREFIX = EVER_STATS_SIGNATURE_PREFIX;
10079
+ exports.EVER_STATS_V1_SCHEMA_ID = EVER_STATS_V1_SCHEMA_ID;
10080
+ exports.EVER_STATS_V1_SOURCE = EVER_STATS_V1_SOURCE;
6199
10081
  exports.FEED_ACTORS_WINDOW_HOURS_DEFAULT = FEED_ACTORS_WINDOW_HOURS_DEFAULT;
6200
10082
  exports.FEED_ACTORS_WINDOW_HOURS_MAX = FEED_ACTORS_WINDOW_HOURS_MAX;
6201
10083
  exports.FEED_ACTOR_KINDS = FEED_ACTOR_KINDS;
@@ -6346,11 +10228,14 @@ exports.GATE_JUDGE_MAX_REASON_CHARS = GATE_JUDGE_MAX_REASON_CHARS;
6346
10228
  exports.GATE_JUDGE_MAX_UNMET_CHARS = GATE_JUDGE_MAX_UNMET_CHARS;
6347
10229
  exports.GATE_JUDGE_MAX_UNMET_ENTRIES = GATE_JUDGE_MAX_UNMET_ENTRIES;
6348
10230
  exports.GATE_JUDGE_VERDICTS = GATE_JUDGE_VERDICTS;
10231
+ exports.GATE_MAX_AGE_HOURS = GATE_MAX_AGE_HOURS;
6349
10232
  exports.GATE_VERDICTS = GATE_VERDICTS;
10233
+ exports.GATE_WATCH_INTERVAL_MIN = GATE_WATCH_INTERVAL_MIN;
6350
10234
  exports.GOAL_KINDS = GOAL_KINDS;
6351
10235
  exports.GTM_SKILLS = GTM_SKILLS;
6352
10236
  exports.GTM_SKILL_SLUGS = GTM_SKILL_SLUGS;
6353
10237
  exports.GTM_SKILL_STAGES = GTM_SKILL_STAGES;
10238
+ exports.HEARTBEAT_MAX_AGE_MS = HEARTBEAT_MAX_AGE_MS;
6354
10239
  exports.HELD_ACTION_EXPIRY_DAYS = HELD_ACTION_EXPIRY_DAYS;
6355
10240
  exports.HELD_ACTION_WARN_DAYS = HELD_ACTION_WARN_DAYS;
6356
10241
  exports.HITL_MAX_CONTEXT_CHARS = HITL_MAX_CONTEXT_CHARS;
@@ -6391,6 +10276,7 @@ exports.HOME_TODAY_DUE_MAX = HOME_TODAY_DUE_MAX;
6391
10276
  exports.HOME_TODAY_RAN_MAX = HOME_TODAY_RAN_MAX;
6392
10277
  exports.HOME_WAITING_WARN_HOURS = HOME_WAITING_WARN_HOURS;
6393
10278
  exports.HOME_WORKING_NOW_MAX = HOME_WORKING_NOW_MAX;
10279
+ exports.IMAGE_ALLOWANCE_MAX_DAYS = IMAGE_ALLOWANCE_MAX_DAYS;
6394
10280
  exports.INBOX_DECISION_DORMANT_AFTER_DAYS = INBOX_DECISION_DORMANT_AFTER_DAYS;
6395
10281
  exports.INBOX_DECISION_KINDS = INBOX_DECISION_KINDS;
6396
10282
  exports.INBOX_DECISION_MAX_LIMIT = INBOX_DECISION_MAX_LIMIT;
@@ -6452,6 +10338,26 @@ exports.KB_SYNTHESIS_PATH_PREFIX = KB_SYNTHESIS_PATH_PREFIX;
6452
10338
  exports.KB_SYNTHESIS_TAG = KB_SYNTHESIS_TAG;
6453
10339
  exports.KB_UPLOAD_EXTRACTION_STATUSES = KB_UPLOAD_EXTRACTION_STATUSES;
6454
10340
  exports.LADDERED_CATEGORIES = LADDERED_CATEGORIES;
10341
+ exports.LAUNCH_GATE_ITEMS = LAUNCH_GATE_ITEMS;
10342
+ exports.LAUNCH_GATE_ITEM_IDS = LAUNCH_GATE_ITEM_IDS;
10343
+ exports.LAUNCH_GATE_KINDS = LAUNCH_GATE_KINDS;
10344
+ exports.LAUNCH_GATE_OUTCOMES = LAUNCH_GATE_OUTCOMES;
10345
+ exports.LAUNCH_GATE_PHASES = LAUNCH_GATE_PHASES;
10346
+ exports.LICENSE_ATTEST_PER_MIN = LICENSE_ATTEST_PER_MIN;
10347
+ exports.LICENSE_CLASSES = LICENSE_CLASSES;
10348
+ exports.LICENSE_CLASS_RANK = LICENSE_CLASS_RANK;
10349
+ exports.LICENSE_EVIDENCE_MAX = LICENSE_EVIDENCE_MAX;
10350
+ exports.LICENSE_HEADER_SCAN_BYTES = LICENSE_HEADER_SCAN_BYTES;
10351
+ exports.LICENSE_HOSTING_DECISIONS = LICENSE_HOSTING_DECISIONS;
10352
+ exports.LICENSE_MAX_FILE_READS = LICENSE_MAX_FILE_READS;
10353
+ exports.LICENSE_MIXED_DIR_NAMES = LICENSE_MIXED_DIR_NAMES;
10354
+ exports.LICENSE_MIXED_MAX_DEPTH = LICENSE_MIXED_MAX_DEPTH;
10355
+ exports.LICENSE_REGISTRY_SOURCES = LICENSE_REGISTRY_SOURCES;
10356
+ exports.LICENSE_SOURCES = LICENSE_SOURCES;
10357
+ exports.LICENSE_TEXT_MATCH_THRESHOLD = LICENSE_TEXT_MATCH_THRESHOLD;
10358
+ exports.LICENSE_TREE_MAX_ENTRIES = LICENSE_TREE_MAX_ENTRIES;
10359
+ exports.MANAGED_HOSTING_AVAILABILITIES = MANAGED_HOSTING_AVAILABILITIES;
10360
+ exports.MANAGED_HOSTING_REASONS = MANAGED_HOSTING_REASONS;
6455
10361
  exports.MAX_ALWAYS_LOADED_WORKSPACE_FILES = MAX_ALWAYS_LOADED_WORKSPACE_FILES;
6456
10362
  exports.MAX_ATTACHMENTS_PER_MESSAGE = MAX_ATTACHMENTS_PER_MESSAGE;
6457
10363
  exports.MAX_BROADCAST_AGENTS = MAX_BROADCAST_AGENTS;
@@ -6522,6 +10428,8 @@ exports.PLAYBOOK_SLUG_PATTERN = PLAYBOOK_SLUG_PATTERN;
6522
10428
  exports.PLAYBOOK_TEXT_LIMITS = PLAYBOOK_TEXT_LIMITS;
6523
10429
  exports.PLAYBOOK_TRIGGER_KINDS = PLAYBOOK_TRIGGER_KINDS;
6524
10430
  exports.PLAYBOOK_VERSION_PATTERN = PLAYBOOK_VERSION_PATTERN;
10431
+ exports.PROBE_ATTEMPTS = PROBE_ATTEMPTS;
10432
+ exports.PROBE_CONNECT_TIMEOUT_MS = PROBE_CONNECT_TIMEOUT_MS;
6525
10433
  exports.PROMOTION_CARRY_DAYS = PROMOTION_CARRY_DAYS;
6526
10434
  exports.PROMOTION_CARRY_MESSAGES = PROMOTION_CARRY_MESSAGES;
6527
10435
  exports.PROMOTION_GATE_DECISION_GRACE_MS = PROMOTION_GATE_DECISION_GRACE_MS;
@@ -6532,6 +10440,10 @@ exports.PROMOTION_LANE_OPEN = PROMOTION_LANE_OPEN;
6532
10440
  exports.PROMOTION_RUNGS = PROMOTION_RUNGS;
6533
10441
  exports.PROMOTION_STATES = PROMOTION_STATES;
6534
10442
  exports.PROMOTION_TASK_LABEL = PROMOTION_TASK_LABEL;
10443
+ exports.PULL_CREDENTIAL_MAX_MS = PULL_CREDENTIAL_MAX_MS;
10444
+ exports.QUARANTINE_EDGE_MS = QUARANTINE_EDGE_MS;
10445
+ exports.QUARANTINE_ISOLATE_MS = QUARANTINE_ISOLATE_MS;
10446
+ exports.QUARANTINE_SCALE_MS = QUARANTINE_SCALE_MS;
6535
10447
  exports.QUEUED_REASON_WAITING_FOR_RUNNER = QUEUED_REASON_WAITING_FOR_RUNNER;
6536
10448
  exports.RAIL_REFUSAL_COLLAPSE_THRESHOLD = RAIL_REFUSAL_COLLAPSE_THRESHOLD;
6537
10449
  exports.RAIL_REFUSAL_PAGE_SIZE = RAIL_REFUSAL_PAGE_SIZE;
@@ -6547,6 +10459,7 @@ exports.READINESS_WINDOW_DAYS = READINESS_WINDOW_DAYS;
6547
10459
  exports.REASONING_EFFORTS = REASONING_EFFORTS;
6548
10460
  exports.RELEASE_BRANCH_MAX_LENGTH = RELEASE_BRANCH_MAX_LENGTH;
6549
10461
  exports.RELEASE_ENVIRONMENTS = RELEASE_ENVIRONMENTS;
10462
+ exports.RELEASE_RESTORE_MS = RELEASE_RESTORE_MS;
6550
10463
  exports.RELEASE_REVERT_TASK_LABEL = RELEASE_REVERT_TASK_LABEL;
6551
10464
  exports.RELEASE_VERIFY_ATTEMPT_INTERVAL_MS = RELEASE_VERIFY_ATTEMPT_INTERVAL_MS;
6552
10465
  exports.RELEASE_VERIFY_BUDGET_MS = RELEASE_VERIFY_BUDGET_MS;
@@ -6559,6 +10472,7 @@ exports.RELEASE_VERIFY_ROLLOUT_CONFIRMATIONS = RELEASE_VERIFY_ROLLOUT_CONFIRMATI
6559
10472
  exports.RELEASE_VERIFY_SHA_EXPECT_LENGTH = RELEASE_VERIFY_SHA_EXPECT_LENGTH;
6560
10473
  exports.RELEASE_VERIFY_STATES = RELEASE_VERIFY_STATES;
6561
10474
  exports.RELEASE_VERIFY_URL_MAX_LENGTH = RELEASE_VERIFY_URL_MAX_LENGTH;
10475
+ exports.REMOVED_DATA_RETENTION_DAYS = REMOVED_DATA_RETENTION_DAYS;
6562
10476
  exports.REPO_DECLARED_COMMANDS_MAX = REPO_DECLARED_COMMANDS_MAX;
6563
10477
  exports.REPO_DECLARED_COMMAND_ID_PREFIX = REPO_DECLARED_COMMAND_ID_PREFIX;
6564
10478
  exports.REQUIRE_HTTPS_FOR_CREDENTIALS_SETTING = REQUIRE_HTTPS_FOR_CREDENTIALS_SETTING;
@@ -6585,6 +10499,8 @@ exports.SAFETY_PAUSE_WRITES_PER_MINUTE = SAFETY_PAUSE_WRITES_PER_MINUTE;
6585
10499
  exports.SAFETY_RAIL_ORDER = SAFETY_RAIL_ORDER;
6586
10500
  exports.SAFETY_REASON_CODES = SAFETY_REASON_CODES;
6587
10501
  exports.SAFETY_RUNG_WRITES_PER_MINUTE = SAFETY_RUNG_WRITES_PER_MINUTE;
10502
+ exports.SELF_CHECK_BUDGET_MS = SELF_CHECK_BUDGET_MS;
10503
+ exports.SELF_CHECK_INTERVAL_HOURS = SELF_CHECK_INTERVAL_HOURS;
6588
10504
  exports.SHIPPED_DEFAULT_RUNG_POLICY = SHIPPED_DEFAULT_RUNG_POLICY;
6589
10505
  exports.SKILL_CAPTURE_BODY_MAX_CHARS = SKILL_CAPTURE_BODY_MAX_CHARS;
6590
10506
  exports.SKILL_CAPTURE_BODY_MIN_CHARS = SKILL_CAPTURE_BODY_MIN_CHARS;
@@ -6618,6 +10534,7 @@ exports.SPEND_CAP_MIN_CENTS = SPEND_CAP_MIN_CENTS;
6618
10534
  exports.SPEND_CAP_PROPAGATION_MS = SPEND_CAP_PROPAGATION_MS;
6619
10535
  exports.SPEND_CAP_THRESHOLDS = SPEND_CAP_THRESHOLDS;
6620
10536
  exports.STALE_PRICE_DELTA = STALE_PRICE_DELTA;
10537
+ exports.STATS_SEND_ERROR_CODES = STATS_SEND_ERROR_CODES;
6621
10538
  exports.SUB_AGENT_DELEGATION_REFUSAL_CODES = SUB_AGENT_DELEGATION_REFUSAL_CODES;
6622
10539
  exports.SUB_AGENT_DELEGATION_STATUSES = SUB_AGENT_DELEGATION_STATUSES;
6623
10540
  exports.SUB_AGENT_MAX_DELEGATION_DEPTH = SUB_AGENT_MAX_DELEGATION_DEPTH;
@@ -6647,6 +10564,16 @@ exports.TASK_MAX_EXTRA_REPOS = TASK_MAX_EXTRA_REPOS;
6647
10564
  exports.TASK_PROVENANCE_PRECEDENCE = TASK_PROVENANCE_PRECEDENCE;
6648
10565
  exports.TASK_PROVENANCE_VISIBLE_CHIPS = TASK_PROVENANCE_VISIBLE_CHIPS;
6649
10566
  exports.TASK_RUN_FINISHED_STATUSES = TASK_RUN_FINISHED_STATUSES;
10567
+ exports.TENANT_POSTGRES_DATABASE_CONNECTION_LIMIT = TENANT_POSTGRES_DATABASE_CONNECTION_LIMIT;
10568
+ exports.TENANT_POSTGRES_DATABASE_PREFIX = TENANT_POSTGRES_DATABASE_PREFIX;
10569
+ exports.TENANT_POSTGRES_DDL_REFUSALS = TENANT_POSTGRES_DDL_REFUSALS;
10570
+ exports.TENANT_POSTGRES_DEFAULT_PORT = TENANT_POSTGRES_DEFAULT_PORT;
10571
+ exports.TENANT_POSTGRES_IDLE_IN_TRANSACTION_TIMEOUT_MS = TENANT_POSTGRES_IDLE_IN_TRANSACTION_TIMEOUT_MS;
10572
+ exports.TENANT_POSTGRES_PASSWORD_PATTERN = TENANT_POSTGRES_PASSWORD_PATTERN;
10573
+ exports.TENANT_POSTGRES_ROLE_ATTRIBUTES = TENANT_POSTGRES_ROLE_ATTRIBUTES;
10574
+ exports.TENANT_POSTGRES_ROLE_CONNECTION_LIMIT = TENANT_POSTGRES_ROLE_CONNECTION_LIMIT;
10575
+ exports.TENANT_POSTGRES_ROLE_PREFIX = TENANT_POSTGRES_ROLE_PREFIX;
10576
+ exports.TENANT_POSTGRES_STATEMENT_TIMEOUT_MS = TENANT_POSTGRES_STATEMENT_TIMEOUT_MS;
6650
10577
  exports.TERMINAL_CLIENT_TO_SERVER_KINDS = TERMINAL_CLIENT_TO_SERVER_KINDS;
6651
10578
  exports.TERMINAL_EXIT_REASONS = TERMINAL_EXIT_REASONS;
6652
10579
  exports.TERMINAL_MAX_AUTH_TOKEN_LENGTH = TERMINAL_MAX_AUTH_TOKEN_LENGTH;
@@ -6677,6 +10604,9 @@ exports.WORKSPACE_CONTEXT_FILE_SLUGS = WORKSPACE_CONTEXT_FILE_SLUGS;
6677
10604
  exports.WORKSPACE_PAUSED_UNVERIFIED = WORKSPACE_PAUSED_UNVERIFIED;
6678
10605
  exports.WORKSPACE_PAUSE_REASON_MAX = WORKSPACE_PAUSE_REASON_MAX;
6679
10606
  exports.WORKSPACE_RUNNING = WORKSPACE_RUNNING;
10607
+ exports.WORKS_STATS_DEPLOYMENT_PROVIDER_KEYS = WORKS_STATS_DEPLOYMENT_PROVIDER_KEYS;
10608
+ exports.WORKS_STATS_FEATURE_KEYS = WORKS_STATS_FEATURE_KEYS;
10609
+ exports.WORKS_STATS_WORK_KIND_KEYS = WORKS_STATS_WORK_KIND_KEYS;
6680
10610
  exports.WORK_CHECKS_POLICIES = WORK_CHECKS_POLICIES;
6681
10611
  exports.WORK_EXTERNAL_REFS_MAX_PER_KIND = WORK_EXTERNAL_REFS_MAX_PER_KIND;
6682
10612
  exports.WORK_EXTERNAL_REF_KINDS = WORK_EXTERNAL_REF_KINDS;
@@ -6688,12 +10618,46 @@ exports.WORK_REPO_DECLARED_COMMAND_MAX_ALLOW = WORK_REPO_DECLARED_COMMAND_MAX_AL
6688
10618
  exports.WORK_REPO_DECLARED_COMMAND_MAX_LENGTH = WORK_REPO_DECLARED_COMMAND_MAX_LENGTH;
6689
10619
  exports.WORK_REPO_DECLARED_COMMAND_MODES = WORK_REPO_DECLARED_COMMAND_MODES;
6690
10620
  exports.acceptPlaybookEntry = acceptPlaybookEntry;
10621
+ exports.appBuildCheckName = appBuildCheckName;
10622
+ exports.appBuildEventNameForStatus = appBuildEventNameForStatus;
10623
+ exports.appBuildRunnerCapacity = appBuildRunnerCapacity;
10624
+ exports.appComponentDeadlineSeconds = appComponentDeadlineSeconds;
10625
+ exports.appDependencyBackupStateMessageKey = appDependencyBackupStateMessageKey;
10626
+ exports.appDependencyBlocksDeploy = appDependencyBlocksDeploy;
10627
+ exports.appDependencyDefaultSizeGiB = appDependencyDefaultSizeGiB;
10628
+ exports.appDependencyOutputNames = appDependencyOutputNames;
10629
+ exports.appDependencyReadyDeadlineMs = appDependencyReadyDeadlineMs;
10630
+ exports.appDependencyReasonMessageKey = appDependencyReasonMessageKey;
10631
+ exports.appDependencyStatusMessageKey = appDependencyStatusMessageKey;
10632
+ exports.appDependencyToken = appDependencyToken;
10633
+ exports.appEnvDependencyFingerprint = appEnvDependencyFingerprint;
10634
+ exports.appEnvDependencyPasswordToken = appEnvDependencyPasswordToken;
10635
+ exports.appEnvErrorMessageKey = appEnvErrorMessageKey;
10636
+ exports.appEnvGeneratorFingerprint = appEnvGeneratorFingerprint;
10637
+ exports.appEnvKeypairFormatSupported = appEnvKeypairFormatSupported;
10638
+ exports.appEnvPublicHalfName = appEnvPublicHalfName;
10639
+ exports.appEnvStoredFingerprint = appEnvStoredFingerprint;
10640
+ exports.appEnvTemplateFingerprint = appEnvTemplateFingerprint;
10641
+ exports.appLauncherPinLimitExceeded = appLauncherPinLimitExceeded;
10642
+ exports.appManualSyncAllowed = appManualSyncAllowed;
10643
+ exports.appProvisionCopy = appProvisionCopy;
10644
+ exports.appProvisionCopyPlaceholders = appProvisionCopyPlaceholders;
10645
+ exports.appRateLimitAllowsSync = appRateLimitAllowsSync;
10646
+ exports.appRepositoryUrlLengthExceeded = appRepositoryUrlLengthExceeded;
10647
+ exports.appWorkQuotaAllows = appWorkQuotaAllows;
6691
10648
  exports.applyConnectionScopePresetToToolGrant = applyConnectionScopePresetToToolGrant;
6692
10649
  exports.applyConnectionScopePresetWithOwnership = applyConnectionScopePresetWithOwnership;
6693
10650
  exports.applyWorkflowInputMapping = applyWorkflowInputMapping;
10651
+ exports.appsTierReceiptIdempotencyKey = appsTierReceiptIdempotencyKey;
6694
10652
  exports.assessCredentialTransport = assessCredentialTransport;
10653
+ exports.buildAppSpecLineLink = buildAppSpecLineLink;
6695
10654
  exports.buildBackupArchiveFilename = buildBackupArchiveFilename;
10655
+ exports.buildFailureExcerpt = buildFailureExcerpt;
10656
+ exports.buildTenantPostgresDdl = buildTenantPostgresDdl;
10657
+ exports.canDeleteAppDependencyData = canDeleteAppDependencyData;
10658
+ exports.canStartTargetOwnerScan = canStartTargetOwnerScan;
6696
10659
  exports.catalogSearchRank = catalogSearchRank;
10660
+ exports.clampAppsTierQuotaProfile = clampAppsTierQuotaProfile;
6697
10661
  exports.clampEscalationConfidence = clampEscalationConfidence;
6698
10662
  exports.clampLeaseTtlSec = clampLeaseTtlSec;
6699
10663
  exports.clampMaxAttempts = clampMaxAttempts;
@@ -6706,6 +10670,7 @@ exports.comparePlaybookVersions = comparePlaybookVersions;
6706
10670
  exports.compareRung = compareRung;
6707
10671
  exports.compareTaskBoardCards = compareTaskBoardCards;
6708
10672
  exports.composeFleetPushCommitMessage = composeFleetPushCommitMessage;
10673
+ exports.computeBuildInputsHash = computeBuildInputsHash;
6709
10674
  exports.computeEmailCapRetryAfterSeconds = computeEmailCapRetryAfterSeconds;
6710
10675
  exports.computerStallStateForAge = computerStallStateForAge;
6711
10676
  exports.connectionHealthIsWarning = connectionHealthIsWarning;
@@ -6737,12 +10702,17 @@ exports.effectiveModelAccountHealth = effectiveModelAccountHealth;
6737
10702
  exports.emailSendCapWindowsInForce = emailSendCapWindowsInForce;
6738
10703
  exports.encodeComputerFrame = encodeComputerFrame;
6739
10704
  exports.encodeTerminalFrame = encodeTerminalFrame;
10705
+ exports.evaluateAppsTierPolicyState = evaluateAppsTierPolicyState;
10706
+ exports.evaluateBuildDeployability = evaluateBuildDeployability;
10707
+ exports.evaluateBuildRunnerFit = evaluateBuildRunnerFit;
10708
+ exports.evaluateBuildServicePort = evaluateBuildServicePort;
6740
10709
  exports.evaluateCollaboratorDelegation = evaluateCollaboratorDelegation;
6741
10710
  exports.evaluateEmailSendCaps = evaluateEmailSendCaps;
6742
10711
  exports.evaluateWorkflowCondition = evaluateWorkflowCondition;
6743
10712
  exports.filterToolNamesBySubAgentScope = filterToolNamesBySubAgentScope;
6744
10713
  exports.findConversationDocumentReferences = findConversationDocumentReferences;
6745
10714
  exports.findTaskBoardColumn = findTaskBoardColumn;
10715
+ exports.firstRefusingRepositoryStage = firstRefusingRepositoryStage;
6746
10716
  exports.fleetAgentExecutionProviderSupportsMountGrants = fleetAgentExecutionProviderSupportsMountGrants;
6747
10717
  exports.fleetModelCostUsdToCents = fleetModelCostUsdToCents;
6748
10718
  exports.fleetModelPluginId = fleetModelPluginId;
@@ -6753,6 +10723,7 @@ exports.getBackupDomain = getBackupDomain;
6753
10723
  exports.getGtmSkill = getGtmSkill;
6754
10724
  exports.getWorkCapabilities = getWorkCapabilities;
6755
10725
  exports.getWorkMetricDefinition = getWorkMetricDefinition;
10726
+ exports.hasAppEnvPublicPrefix = hasAppEnvPublicPrefix;
6756
10727
  exports.homeCapTone = homeCapTone;
6757
10728
  exports.homeRunChip = homeRunChip;
6758
10729
  exports.homeWaitingTone = homeWaitingTone;
@@ -6760,6 +10731,14 @@ exports.inboxDecisionNeedsReason = inboxDecisionNeedsReason;
6760
10731
  exports.isActionCategory = isActionCategory;
6761
10732
  exports.isAgentRunTimelineInsertionOrderTieBreak = isAgentRunTimelineInsertionOrderTieBreak;
6762
10733
  exports.isAllowedTerminalWsUrl = isAllowedTerminalWsUrl;
10734
+ exports.isAppBuildCheckJobName = isAppBuildCheckJobName;
10735
+ exports.isAppDependencyBackupOverdue = isAppDependencyBackupOverdue;
10736
+ exports.isAppDependencyOutputSecret = isAppDependencyOutputSecret;
10737
+ exports.isAppDependencyReason = isAppDependencyReason;
10738
+ exports.isAppDependencySizeChangeAllowed = isAppDependencySizeChangeAllowed;
10739
+ exports.isAppLauncherEnvironment = isAppLauncherEnvironment;
10740
+ exports.isAppSourceReasonCode = isAppSourceReasonCode;
10741
+ exports.isAppWorkKind = isAppWorkKind;
6763
10742
  exports.isAutonomyGrantScopeType = isAutonomyGrantScopeType;
6764
10743
  exports.isComputerChannel = isComputerChannel;
6765
10744
  exports.isComputerClientToServerFrame = isComputerClientToServerFrame;
@@ -6789,6 +10768,8 @@ exports.isCredentialKey = isCredentialKey;
6789
10768
  exports.isCreditSettlementMode = isCreditSettlementMode;
6790
10769
  exports.isDeliveryGoalKind = isDeliveryGoalKind;
6791
10770
  exports.isDraftableCategory = isDraftableCategory;
10771
+ exports.isEverIdAllowedIssuerCountAllowed = isEverIdAllowedIssuerCountAllowed;
10772
+ exports.isEverIdClockSkewAllowed = isEverIdClockSkewAllowed;
6792
10773
  exports.isFleetAgentExecutionEffort = isFleetAgentExecutionEffort;
6793
10774
  exports.isFleetAgentExecutionMode = isFleetAgentExecutionMode;
6794
10775
  exports.isFleetAgentExecutionPermissionMode = isFleetAgentExecutionPermissionMode;
@@ -6809,6 +10790,7 @@ exports.isHomeBlockId = isHomeBlockId;
6809
10790
  exports.isHomeDecisionOverdue = isHomeDecisionOverdue;
6810
10791
  exports.isHomeTimezone = isHomeTimezone;
6811
10792
  exports.isInboxDecisionKind = isInboxDecisionKind;
10793
+ exports.isInstanceStatsOperatorStatus = isInstanceStatsOperatorStatus;
6812
10794
  exports.isLadderedCategory = isLadderedCategory;
6813
10795
  exports.isLocalExecutionMode = isLocalExecutionMode;
6814
10796
  exports.isMemoryFactScope = isMemoryFactScope;
@@ -6818,6 +10800,8 @@ exports.isNarrowerConnectionScopePreset = isNarrowerConnectionScopePreset;
6818
10800
  exports.isNodeBusy = isNodeBusy;
6819
10801
  exports.isOverLinkLimits = isOverLinkLimits;
6820
10802
  exports.isPersonallyDeletableConversationKind = isPersonallyDeletableConversationKind;
10803
+ exports.isPlatformDataServer = isPlatformDataServer;
10804
+ exports.isPrivateStatsHost = isPrivateStatsHost;
6821
10805
  exports.isPromotionGateDecided = isPromotionGateDecided;
6822
10806
  exports.isPromotionGateDecisionOverdue = isPromotionGateDecisionOverdue;
6823
10807
  exports.isPromotionGateOverridden = isPromotionGateOverridden;
@@ -6838,8 +10822,10 @@ exports.isReservedMountDir = isReservedMountDir;
6838
10822
  exports.isRunLedgerCalendarDate = isRunLedgerCalendarDate;
6839
10823
  exports.isSafetyRailId = isSafetyRailId;
6840
10824
  exports.isSafetyReasonCode = isSafetyReasonCode;
10825
+ exports.isSemverLessThan = isSemverLessThan;
6841
10826
  exports.isSkillCardState = isSkillCardState;
6842
10827
  exports.isSkillReadinessState = isSkillReadinessState;
10828
+ exports.isSourceOnlyAppSpec = isSourceOnlyAppSpec;
6843
10829
  exports.isSubAgentDelegationSuccessful = isSubAgentDelegationSuccessful;
6844
10830
  exports.isSubAgentScopeSubset = isSubAgentScopeSubset;
6845
10831
  exports.isTaskBoardLayout = isTaskBoardLayout;
@@ -6855,6 +10841,7 @@ exports.isValidFleetRunEnvFilePath = isValidFleetRunEnvFilePath;
6855
10841
  exports.isValidTerminalRunId = isValidTerminalRunId;
6856
10842
  exports.isWorkflowEdgeKind = isWorkflowEdgeKind;
6857
10843
  exports.isWorkspaceContextFileSlug = isWorkspaceContextFileSlug;
10844
+ exports.launchGateItemsForPhase = launchGateItemsForPhase;
6858
10845
  exports.listGtmSkills = listGtmSkills;
6859
10846
  exports.listGtmSkillsForStage = listGtmSkillsForStage;
6860
10847
  exports.lowerComputerQuality = lowerComputerQuality;
@@ -6871,6 +10858,8 @@ exports.moreRestrictiveCategory = moreRestrictiveCategory;
6871
10858
  exports.narrowSubAgentScope = narrowSubAgentScope;
6872
10859
  exports.nextRungUp = nextRungUp;
6873
10860
  exports.nodeSatisfiesCapabilities = nodeSatisfiesCapabilities;
10861
+ exports.normaliseDataServerEndpoint = normaliseDataServerEndpoint;
10862
+ exports.normaliseStatsBaseUrl = normaliseStatsBaseUrl;
6874
10863
  exports.normalizeCommitSha = normalizeCommitSha;
6875
10864
  exports.normalizeComputerFrame = normalizeComputerFrame;
6876
10865
  exports.normalizeConnectionScopePresetOwnership = normalizeConnectionScopePresetOwnership;
@@ -6901,13 +10890,16 @@ exports.onFailureEdgeCatches = onFailureEdgeCatches;
6901
10890
  exports.orderTaskProvenance = orderTaskProvenance;
6902
10891
  exports.organizationRequiresHttpsForCredentials = organizationRequiresHttpsForCredentials;
6903
10892
  exports.outgoingWorkflowEdges = outgoingWorkflowEdges;
10893
+ exports.parseAppDependencyToken = parseAppDependencyToken;
6904
10894
  exports.parseConversationMentions = parseConversationMentions;
10895
+ exports.parseDataServerUrl = parseDataServerUrl;
6905
10896
  exports.parseFleetAgentTaskQuestionMarkdown = parseFleetAgentTaskQuestionMarkdown;
6906
10897
  exports.parseGitHubRepositoryUrl = parseGitHubRepositoryUrl;
6907
10898
  exports.parseHitlAnswer = parseHitlAnswer;
6908
10899
  exports.parseHitlQuestion = parseHitlQuestion;
6909
10900
  exports.parseHomeBlockIds = parseHomeBlockIds;
6910
10901
  exports.parseModelPolicyScheduleKey = parseModelPolicyScheduleKey;
10902
+ exports.platformDataServerEndpoints = platformDataServerEndpoints;
6911
10903
  exports.playbookSearchFields = playbookSearchFields;
6912
10904
  exports.promotionGateVerdictFromRun = promotionGateVerdictFromRun;
6913
10905
  exports.promotionLaneKey = promotionLaneKey;
@@ -6915,6 +10907,7 @@ exports.promotionRungFromLabels = promotionRungFromLabels;
6915
10907
  exports.promotionRungLabel = promotionRungLabel;
6916
10908
  exports.promotionTaskLabels = promotionTaskLabels;
6917
10909
  exports.pruneConnectionScopePresetOwnership = pruneConnectionScopePresetOwnership;
10910
+ exports.quoteTenantPostgresIdentifier = quoteTenantPostgresIdentifier;
6918
10911
  exports.readKbConnectorSource = readKbConnectorSource;
6919
10912
  exports.redactSecrets = redactSecrets;
6920
10913
  exports.refuseSubAgentDelegation = refuseSubAgentDelegation;
@@ -6926,6 +10919,12 @@ exports.releaseVerificationProbe = releaseVerificationProbe;
6926
10919
  exports.releaseVerifyAppProof = releaseVerifyAppProof;
6927
10920
  exports.releaseVerifyIdempotencyKey = releaseVerifyIdempotencyKey;
6928
10921
  exports.repoDeclaredCommandId = repoDeclaredCommandId;
10922
+ exports.resolveAppProvisionCopy = resolveAppProvisionCopy;
10923
+ exports.resolveAppRepositoryModes = resolveAppRepositoryModes;
10924
+ exports.resolveAppsTierQuotaProfile = resolveAppsTierQuotaProfile;
10925
+ exports.resolveBuildServiceEnv = resolveBuildServiceEnv;
10926
+ exports.resolveBuildServiceKind = resolveBuildServiceKind;
10927
+ exports.resolveBuildServicePort = resolveBuildServicePort;
6929
10928
  exports.resolveEffectiveConnectionScopePreset = resolveEffectiveConnectionScopePreset;
6930
10929
  exports.resolveEmailSendCaps = resolveEmailSendCaps;
6931
10930
  exports.resolveExclusiveAgentCredentials = resolveExclusiveAgentCredentials;
@@ -6950,6 +10949,7 @@ exports.sanitizeToolGrantOverride = sanitizeToolGrantOverride;
6950
10949
  exports.scanForSecrets = scanForSecrets;
6951
10950
  exports.serializeHitlAnswer = serializeHitlAnswer;
6952
10951
  exports.serializeHitlQuestion = serializeHitlQuestion;
10952
+ exports.sha256Hex = sha256Hex;
6953
10953
  exports.shouldDegrade = shouldDegrade;
6954
10954
  exports.shouldRecover = shouldRecover;
6955
10955
  exports.skillCardStateNeedsAttention = skillCardStateNeedsAttention;