@ever-works/contracts 1.0.0 → 1.0.1

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