@elevasis/sdk 1.25.0 → 1.26.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.
Files changed (64) hide show
  1. package/dist/cli.cjs +87 -120
  2. package/dist/index.d.ts +220 -50
  3. package/dist/index.js +4 -435
  4. package/dist/node/index.d.ts +46 -38
  5. package/dist/test-utils/index.d.ts +154 -40
  6. package/dist/test-utils/index.js +27 -355
  7. package/dist/types/worker/adapters/clickup.d.ts +22 -0
  8. package/dist/types/worker/adapters/index.d.ts +1 -0
  9. package/dist/worker/index.js +32 -354
  10. package/package.json +2 -2
  11. package/reference/_navigation.md +11 -1
  12. package/reference/_reference-manifest.json +70 -0
  13. package/reference/claude-config/rules/organization-model.md +12 -1
  14. package/reference/claude-config/rules/organization-os.md +12 -1
  15. package/reference/claude-config/skills/om/SKILL.md +13 -5
  16. package/reference/claude-config/skills/om/operations/codify-level-a.md +109 -100
  17. package/reference/claude-config/skills/om/operations/customers.md +10 -6
  18. package/reference/claude-config/skills/om/operations/features.md +7 -3
  19. package/reference/claude-config/skills/om/operations/goals.md +10 -6
  20. package/reference/claude-config/skills/om/operations/identity.md +8 -5
  21. package/reference/claude-config/skills/om/operations/labels.md +17 -1
  22. package/reference/claude-config/skills/om/operations/offerings.md +11 -7
  23. package/reference/claude-config/skills/om/operations/roles.md +11 -7
  24. package/reference/claude-config/skills/om/operations/techStack.md +10 -2
  25. package/reference/claude-config/skills/setup/SKILL.md +2 -2
  26. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -0
  27. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -0
  28. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -0
  29. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -0
  30. package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +49 -0
  31. package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +42 -0
  32. package/reference/cli-management.mdx +541 -0
  33. package/reference/cli.mdx +4 -532
  34. package/reference/concepts.mdx +134 -146
  35. package/reference/deployment/api.mdx +296 -297
  36. package/reference/deployment/command-center.mdx +208 -209
  37. package/reference/deployment/index.mdx +194 -195
  38. package/reference/deployment/provided-features.mdx +110 -107
  39. package/reference/deployment/ui-execution.mdx +249 -250
  40. package/reference/examples/organization-model.ts +14 -4
  41. package/reference/framework/index.mdx +111 -195
  42. package/reference/framework/resource-documentation.mdx +90 -0
  43. package/reference/framework/tutorial-system.mdx +135 -135
  44. package/reference/getting-started.mdx +141 -142
  45. package/reference/index.mdx +95 -106
  46. package/reference/packages/ui/src/auth/README.md +6 -6
  47. package/reference/platform-tools/adapters-integration.mdx +300 -301
  48. package/reference/platform-tools/adapters-platform.mdx +552 -553
  49. package/reference/platform-tools/index.mdx +216 -217
  50. package/reference/platform-tools/type-safety.mdx +82 -82
  51. package/reference/resources/index.mdx +348 -349
  52. package/reference/resources/patterns.mdx +446 -449
  53. package/reference/resources/types.mdx +115 -116
  54. package/reference/roadmap.mdx +164 -165
  55. package/reference/rules/organization-model.md +14 -0
  56. package/reference/runtime.mdx +172 -173
  57. package/reference/scaffold/operations/propagation-pipeline.md +1 -1
  58. package/reference/scaffold/recipes/extend-lead-gen.md +130 -77
  59. package/reference/scaffold/reference/contracts.md +376 -446
  60. package/reference/scaffold/reference/glossary.md +8 -6
  61. package/reference/scaffold/ui/feature-flags-and-gating.md +59 -46
  62. package/reference/scaffold/ui/feature-shell.mdx +11 -11
  63. package/reference/scaffold/ui/recipes.md +24 -24
  64. package/reference/troubleshooting.mdx +222 -223
package/dist/index.js CHANGED
@@ -506,107 +506,6 @@ var EntitySchema = z.object({
506
506
  z.record(z.string(), EntitySchema).refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
507
507
  message: "Each entity entry id must match its map key"
508
508
  }).default({});
509
- var ENTITY_ENTRY_INPUTS = [
510
- {
511
- id: "crm.deal",
512
- order: 10,
513
- label: "Deal",
514
- description: "A CRM opportunity or sales pipeline record.",
515
- ownedBySystemId: "sales.crm",
516
- table: "crm_deals",
517
- stateCatalogId: "crm.pipeline",
518
- links: [{ toEntity: "crm.contact", kind: "has-many", via: "deal_contacts", label: "contacts" }]
519
- },
520
- {
521
- id: "crm.contact",
522
- order: 20,
523
- label: "CRM Contact",
524
- description: "A person associated with a CRM relationship or deal.",
525
- ownedBySystemId: "sales.crm",
526
- table: "crm_contacts"
527
- },
528
- {
529
- id: "leadgen.list",
530
- order: 30,
531
- label: "Lead List",
532
- description: "A prospecting list that groups companies and contacts for acquisition workflows.",
533
- ownedBySystemId: "sales.lead-gen",
534
- table: "acq_lists",
535
- links: [
536
- { toEntity: "leadgen.company", kind: "has-many", via: "acq_list_companies", label: "companies" },
537
- { toEntity: "leadgen.contact", kind: "has-many", via: "acq_list_members", label: "contacts" }
538
- ]
539
- },
540
- {
541
- id: "leadgen.company",
542
- order: 40,
543
- label: "Lead Company",
544
- description: "A company record sourced, enriched, and qualified during prospecting.",
545
- ownedBySystemId: "sales.lead-gen",
546
- table: "acq_list_companies",
547
- stateCatalogId: "lead-gen.company",
548
- links: [
549
- { toEntity: "leadgen.list", kind: "belongs-to", via: "list_id", label: "list" },
550
- { toEntity: "leadgen.contact", kind: "has-many", via: "company_id", label: "contacts" }
551
- ]
552
- },
553
- {
554
- id: "leadgen.contact",
555
- order: 50,
556
- label: "Lead Contact",
557
- description: "A prospect contact discovered or enriched during lead generation.",
558
- ownedBySystemId: "sales.lead-gen",
559
- table: "acq_list_members",
560
- stateCatalogId: "lead-gen.contact",
561
- links: [
562
- { toEntity: "leadgen.list", kind: "belongs-to", via: "list_id", label: "list" },
563
- { toEntity: "leadgen.company", kind: "belongs-to", via: "company_id", label: "company" }
564
- ]
565
- },
566
- {
567
- id: "delivery.project",
568
- order: 60,
569
- label: "Project",
570
- description: "A client delivery project.",
571
- ownedBySystemId: "projects",
572
- table: "projects",
573
- links: [
574
- { toEntity: "delivery.milestone", kind: "has-many", via: "project_id", label: "milestones" },
575
- { toEntity: "delivery.task", kind: "has-many", via: "project_id", label: "tasks" }
576
- ]
577
- },
578
- {
579
- id: "delivery.milestone",
580
- order: 70,
581
- label: "Milestone",
582
- description: "A delivery checkpoint within a project.",
583
- ownedBySystemId: "projects",
584
- table: "project_milestones",
585
- links: [
586
- { toEntity: "delivery.project", kind: "belongs-to", via: "project_id", label: "project" },
587
- { toEntity: "delivery.task", kind: "has-many", via: "milestone_id", label: "tasks" }
588
- ]
589
- },
590
- {
591
- id: "delivery.task",
592
- order: 80,
593
- label: "Task",
594
- description: "A delivery task that can move through the task status catalog.",
595
- ownedBySystemId: "projects",
596
- table: "project_tasks",
597
- stateCatalogId: "delivery.task",
598
- links: [
599
- { toEntity: "delivery.project", kind: "belongs-to", via: "project_id", label: "project" },
600
- { toEntity: "delivery.milestone", kind: "belongs-to", via: "milestone_id", label: "milestone" }
601
- ]
602
- }
603
- ];
604
- Object.fromEntries(
605
- ENTITY_ENTRY_INPUTS.map((entity) => {
606
- const parsed = EntitySchema.parse(entity);
607
- return [parsed.id, parsed];
608
- })
609
- );
610
509
 
611
510
  // ../core/src/organization-model/domains/actions.ts
612
511
  var ActionResourceIdSchema = z.string().trim().min(1).max(255).regex(/^[A-Za-z0-9]+(?:[-._][A-Za-z0-9]+)*$/, "Resource IDs must use letters, numbers, -, _, or . separators");
@@ -1214,312 +1113,6 @@ var ProspectingBuildTemplateSchema = DisplayMetadataSchema.extend({
1214
1113
  id: ModelIdSchema,
1215
1114
  steps: z.array(ProspectingBuildTemplateStepSchema).min(1)
1216
1115
  });
1217
- var DTC_RECORD_COLUMNS = {
1218
- populated: {
1219
- company: [
1220
- { key: "name", label: "Company", path: "company.name" },
1221
- { key: "domain", label: "Domain", path: "company.domain" },
1222
- { key: "employee-count", label: "Employees", path: "company.numEmployees", renderType: "count" },
1223
- { key: "apollo-industry", label: "Apollo industry", path: "company.category" },
1224
- { key: "location", label: "Location", path: "company.locationState" }
1225
- ]
1226
- },
1227
- crawled: {
1228
- company: [
1229
- { key: "name", label: "Company", path: "company.name" },
1230
- { key: "domain", label: "Domain", path: "company.domain" },
1231
- { key: "page-count", label: "Pages", path: "company.enrichmentData.websiteCrawl.pageCount", renderType: "count" },
1232
- { key: "crawl-status", label: "Crawl status", path: "processingState.crawled.status", renderType: "badge" }
1233
- ]
1234
- },
1235
- extracted: {
1236
- company: [
1237
- { key: "name", label: "Company", path: "company.name" },
1238
- { key: "domain", label: "Domain", path: "company.domain" },
1239
- { key: "description", label: "Description", path: "company.enrichmentData.websiteCrawl.companyDescription" },
1240
- { key: "services", label: "Services", path: "company.enrichmentData.websiteCrawl.services", renderType: "json" },
1241
- {
1242
- key: "automation-gaps",
1243
- label: "Automation gaps",
1244
- path: "company.enrichmentData.websiteCrawl.automationGaps",
1245
- renderType: "json"
1246
- },
1247
- {
1248
- key: "contact-count",
1249
- label: "Contacts",
1250
- path: "company.enrichmentData.websiteCrawl.emailCount",
1251
- renderType: "count"
1252
- }
1253
- ]
1254
- },
1255
- qualified: {
1256
- company: [
1257
- { key: "name", label: "Company", path: "company.name" },
1258
- { key: "domain", label: "Domain", path: "company.domain" },
1259
- { key: "score", label: "Score", path: "company.qualificationScore", renderType: "badge", badgeColor: "green" },
1260
- { key: "signals", label: "Signals", path: "company.qualificationSignals", renderType: "json" },
1261
- {
1262
- key: "disqualified-reason",
1263
- label: "Disqualified reason",
1264
- path: "processingState.qualified.data.disqualifiedReason"
1265
- }
1266
- ]
1267
- },
1268
- decisionMakers: {
1269
- contact: [
1270
- { key: "name", label: "Name", path: "contact.name" },
1271
- { key: "title", label: "Title", path: "contact.title" },
1272
- { key: "email", label: "Email", path: "contact.email" },
1273
- { key: "linkedin", label: "LinkedIn", path: "contact.linkedinUrl" },
1274
- {
1275
- key: "priority-score",
1276
- label: "Priority",
1277
- path: "contact.enrichmentData.apollo.priorityScore",
1278
- renderType: "badge"
1279
- }
1280
- ]
1281
- },
1282
- uploaded: {
1283
- company: [
1284
- { key: "name", label: "Company", path: "company.name" },
1285
- { key: "domain", label: "Domain", path: "company.domain" },
1286
- {
1287
- key: "contacts",
1288
- label: "Contacts",
1289
- path: "company.enrichmentData.approvedLeadListExport.contacts",
1290
- renderType: "json"
1291
- },
1292
- { key: "score", label: "Score", path: "company.qualificationScore", renderType: "badge", badgeColor: "green" },
1293
- {
1294
- key: "approval",
1295
- label: "Approval",
1296
- path: "company.enrichmentData.approvedLeadListExport.approvalStatus",
1297
- renderType: "badge"
1298
- }
1299
- ]
1300
- }
1301
- };
1302
- var PROSPECTING_STEPS = {
1303
- localServices: {
1304
- sourceCompanies: {
1305
- id: "source-companies",
1306
- label: "Companies found",
1307
- primaryEntity: "company",
1308
- outputs: ["company"],
1309
- stageKey: "populated",
1310
- dependencyMode: "per-record-eligibility",
1311
- actionKey: "lead-gen.company.source",
1312
- defaultBatchSize: 100,
1313
- maxBatchSize: 250
1314
- },
1315
- analyzeWebsites: {
1316
- id: "analyze-websites",
1317
- label: "Websites analyzed",
1318
- primaryEntity: "company",
1319
- outputs: ["company"],
1320
- stageKey: "extracted",
1321
- dependsOn: ["source-companies"],
1322
- dependencyMode: "per-record-eligibility",
1323
- actionKey: "lead-gen.company.website-extract",
1324
- defaultBatchSize: 50,
1325
- maxBatchSize: 100
1326
- },
1327
- qualifyCompanies: {
1328
- id: "qualify-companies",
1329
- label: "Companies qualified",
1330
- primaryEntity: "company",
1331
- outputs: ["company"],
1332
- stageKey: "qualified",
1333
- dependsOn: ["analyze-websites"],
1334
- dependencyMode: "per-record-eligibility",
1335
- actionKey: "lead-gen.company.qualify",
1336
- defaultBatchSize: 100,
1337
- maxBatchSize: 250
1338
- },
1339
- findContacts: {
1340
- id: "find-contacts",
1341
- label: "Decision-makers found",
1342
- primaryEntity: "contact",
1343
- outputs: ["contact"],
1344
- stageKey: "discovered",
1345
- dependsOn: ["qualify-companies"],
1346
- dependencyMode: "per-record-eligibility",
1347
- actionKey: "lead-gen.contact.discover",
1348
- defaultBatchSize: 50,
1349
- maxBatchSize: 100
1350
- },
1351
- verifyEmails: {
1352
- id: "verify-emails",
1353
- label: "Emails verified",
1354
- primaryEntity: "contact",
1355
- outputs: ["contact"],
1356
- stageKey: "verified",
1357
- dependsOn: ["find-contacts"],
1358
- dependencyMode: "per-record-eligibility",
1359
- actionKey: "lead-gen.contact.verify-email",
1360
- defaultBatchSize: 100,
1361
- maxBatchSize: 500
1362
- },
1363
- personalize: {
1364
- id: "personalize",
1365
- label: "Personalize",
1366
- primaryEntity: "contact",
1367
- outputs: ["contact"],
1368
- stageKey: "personalized",
1369
- dependsOn: ["verify-emails"],
1370
- dependencyMode: "per-record-eligibility",
1371
- actionKey: "lead-gen.contact.personalize",
1372
- defaultBatchSize: 25,
1373
- maxBatchSize: 100
1374
- },
1375
- review: {
1376
- id: "review",
1377
- label: "Reviewed and exported",
1378
- primaryEntity: "contact",
1379
- outputs: ["export"],
1380
- stageKey: "uploaded",
1381
- dependsOn: ["personalize"],
1382
- dependencyMode: "per-record-eligibility",
1383
- actionKey: "lead-gen.review.outreach-ready",
1384
- defaultBatchSize: 25,
1385
- maxBatchSize: 100
1386
- }
1387
- },
1388
- dtcApolloClickup: {
1389
- importApolloSearch: {
1390
- id: "import-apollo-search",
1391
- label: "Companies found",
1392
- description: "Pull companies and seed contact data from a predefined Apollo search or list.",
1393
- primaryEntity: "company",
1394
- outputs: ["company", "contact"],
1395
- stageKey: "populated",
1396
- dependencyMode: "per-record-eligibility",
1397
- actionKey: "lead-gen.company.apollo-import",
1398
- defaultBatchSize: 250,
1399
- maxBatchSize: 1e3,
1400
- recordColumns: DTC_RECORD_COLUMNS.populated,
1401
- credentialRequirements: [
1402
- {
1403
- key: "apollo",
1404
- provider: "apollo",
1405
- credentialType: "api-key-secret",
1406
- label: "Apollo API key",
1407
- required: true,
1408
- selectionMode: "single",
1409
- inputPath: "credential"
1410
- }
1411
- ]
1412
- },
1413
- apifyCrawl: {
1414
- id: "apify-crawl",
1415
- label: "Websites crawled",
1416
- description: "Crawl company websites via Apify and store raw page markdown in enrichmentData.websiteCrawl.pages for downstream LLM analysis. Overwrites the synthetic seed Apollo Import wrote with real page content.",
1417
- primaryEntity: "company",
1418
- outputs: ["company"],
1419
- stageKey: "crawled",
1420
- dependsOn: ["import-apollo-search"],
1421
- dependencyMode: "per-record-eligibility",
1422
- actionKey: "lead-gen.company.apify-crawl",
1423
- defaultBatchSize: 50,
1424
- maxBatchSize: 100,
1425
- recordColumns: DTC_RECORD_COLUMNS.crawled,
1426
- credentialRequirements: [
1427
- {
1428
- key: "apify",
1429
- provider: "apify",
1430
- credentialType: "api-key-secret",
1431
- label: "Apify API token",
1432
- required: true,
1433
- selectionMode: "single",
1434
- inputPath: "credential",
1435
- verifyOnRun: true
1436
- }
1437
- ]
1438
- },
1439
- analyzeWebsites: {
1440
- id: "analyze-websites",
1441
- label: "Websites analyzed",
1442
- description: "Extract subscription, product, retention, and tech-stack signals from each brand website.",
1443
- primaryEntity: "company",
1444
- outputs: ["company"],
1445
- stageKey: "extracted",
1446
- dependsOn: ["apify-crawl"],
1447
- dependencyMode: "per-record-eligibility",
1448
- actionKey: "lead-gen.company.website-extract",
1449
- defaultBatchSize: 50,
1450
- maxBatchSize: 100,
1451
- recordColumns: DTC_RECORD_COLUMNS.extracted
1452
- },
1453
- scoreDtcFit: {
1454
- id: "score-dtc-fit",
1455
- label: "Companies qualified",
1456
- description: "Classify subscription potential, consumable-product fit, retention maturity, and disqualifiers.",
1457
- primaryEntity: "company",
1458
- outputs: ["company"],
1459
- stageKey: "qualified",
1460
- dependsOn: ["analyze-websites"],
1461
- dependencyMode: "per-record-eligibility",
1462
- actionKey: "lead-gen.company.dtc-subscription-qualify",
1463
- defaultBatchSize: 100,
1464
- maxBatchSize: 250,
1465
- recordColumns: DTC_RECORD_COLUMNS.qualified
1466
- },
1467
- enrichDecisionMakers: {
1468
- id: "enrich-decision-makers",
1469
- label: "Decision-makers found",
1470
- description: "Use Apollo to find qualified contacts at qualified companies - founders, retention leads, lifecycle leads, and marketing owners.",
1471
- primaryEntity: "company",
1472
- outputs: ["contact"],
1473
- stageKey: "decision-makers-enriched",
1474
- recordEntity: "contact",
1475
- dependsOn: ["score-dtc-fit"],
1476
- dependencyMode: "per-record-eligibility",
1477
- actionKey: "lead-gen.contact.apollo-decision-maker-enrich",
1478
- defaultBatchSize: 100,
1479
- maxBatchSize: 250,
1480
- recordColumns: DTC_RECORD_COLUMNS.decisionMakers,
1481
- credentialRequirements: [
1482
- {
1483
- key: "apollo",
1484
- provider: "apollo",
1485
- credentialType: "api-key-secret",
1486
- label: "Apollo API key",
1487
- required: true,
1488
- selectionMode: "single",
1489
- inputPath: "credential"
1490
- }
1491
- ]
1492
- },
1493
- reviewAndExport: {
1494
- id: "review-and-export",
1495
- label: "Reviewed and exported",
1496
- description: "Operator QC approves or rejects qualified companies, then approved records are exported as a lead list with unverified emails.",
1497
- primaryEntity: "company",
1498
- outputs: ["export"],
1499
- stageKey: "uploaded",
1500
- recordsStageKey: "uploaded",
1501
- recordSourceStageKey: "qualified",
1502
- dependsOn: ["enrich-decision-makers"],
1503
- dependencyMode: "per-record-eligibility",
1504
- actionKey: "lead-gen.export.list",
1505
- defaultBatchSize: 100,
1506
- maxBatchSize: 250,
1507
- recordColumns: DTC_RECORD_COLUMNS.uploaded,
1508
- credentialRequirements: [
1509
- {
1510
- key: "clickup",
1511
- provider: "clickup",
1512
- credentialType: "api-key-secret",
1513
- label: "ClickUp API token",
1514
- required: true,
1515
- selectionMode: "single",
1516
- inputPath: "clickupCredential",
1517
- verifyOnRun: true
1518
- }
1519
- ]
1520
- }
1521
- }
1522
- };
1523
1116
 
1524
1117
  // src/contract-ref.ts
1525
1118
  var ContractRefResolutionError = class extends Error {
@@ -5612,30 +5205,6 @@ function bindResourceDescriptor(definition) {
5612
5205
  type: resource.kind
5613
5206
  };
5614
5207
  }
5615
-
5616
- // ../core/src/business/acquisition/build-templates.ts
5617
- var BUILD_TEMPLATE_CATALOG = [
5618
- {
5619
- id: "local-services",
5620
- label: "Local Services",
5621
- description: "Source, analyze, qualify, and personalize local service businesses for outreach.",
5622
- steps: Object.values(PROSPECTING_STEPS.localServices)
5623
- },
5624
- {
5625
- id: "dtc-subscription-apollo-clickup",
5626
- label: "DTC Subscription (Apollo + ClickUp)",
5627
- description: "Import DTC brand leads from Apollo, crawl their websites, score fit, enrich contacts, and export via ClickUp.",
5628
- steps: Object.values(PROSPECTING_STEPS.dtcApolloClickup)
5629
- }
5630
- ];
5631
- var PROSPECTING_BUILD_TEMPLATE_OPTIONS = BUILD_TEMPLATE_CATALOG.map(({ id, label, description }) => ({
5632
- id,
5633
- label,
5634
- description
5635
- }));
5636
- function isProspectingBuildTemplateId(value) {
5637
- return PROSPECTING_BUILD_TEMPLATE_OPTIONS.some((template) => template.id === value);
5638
- }
5639
5208
  var ProcessingStageStatusSchema = z.enum(["success", "no_result", "skipped", "error"]);
5640
5209
  var LeadGenStageKeySchema = z.string().trim().min(1);
5641
5210
  var LeadGenActionKeySchema = z.string().trim().min(1);
@@ -5898,8 +5467,10 @@ var PipelineStageSchema = z.object({
5898
5467
  enabled: z.boolean().optional(),
5899
5468
  order: z.number().int().optional()
5900
5469
  });
5470
+ var DataModeSchema = z.enum(["mock", "live"]);
5901
5471
  var PipelineConfigSchema = z.object({
5902
- stages: z.array(PipelineStageSchema).optional()
5472
+ stages: z.array(PipelineStageSchema).optional(),
5473
+ dataMode: DataModeSchema.optional()
5903
5474
  });
5904
5475
  var BuildPlanSnapshotStepSchema = z.object({
5905
5476
  id: z.string().trim().min(1).max(100),
@@ -5956,9 +5527,7 @@ var BuildPlanSnapshotSchema = z.object({
5956
5527
  var AcqListMetadataSchema = z.object({
5957
5528
  buildPlanSnapshot: BuildPlanSnapshotSchema.optional()
5958
5529
  }).catchall(z.unknown());
5959
- var ProspectingBuildTemplateIdSchema = z.string().trim().min(1).max(100).refine(isProspectingBuildTemplateId, {
5960
- message: "buildTemplateId must match a known prospecting build template"
5961
- });
5530
+ var ProspectingBuildTemplateIdSchema = z.string().trim().min(1).max(100);
5962
5531
  var ListStageCountsSchema = z.object({
5963
5532
  // Attempted counts by canonical lead-gen stage. The detailed status
5964
5533
  // distribution lives on ListProgress; telemetry keeps the overview payload small.