@elevasis/sdk 1.25.0 → 1.26.0

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 (60) hide show
  1. package/dist/cli.cjs +18 -116
  2. package/dist/index.d.ts +165 -48
  3. package/dist/index.js +4 -435
  4. package/dist/node/index.d.ts +36 -36
  5. package/dist/test-utils/index.d.ts +99 -38
  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/sync-notes/2026-05-20-om-define-helpers.md +32 -0
  26. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -0
  27. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -0
  28. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -0
  29. package/reference/cli-management.mdx +539 -0
  30. package/reference/cli.mdx +4 -532
  31. package/reference/concepts.mdx +134 -146
  32. package/reference/deployment/api.mdx +296 -297
  33. package/reference/deployment/command-center.mdx +208 -209
  34. package/reference/deployment/index.mdx +194 -195
  35. package/reference/deployment/provided-features.mdx +110 -107
  36. package/reference/deployment/ui-execution.mdx +249 -250
  37. package/reference/framework/index.mdx +111 -195
  38. package/reference/framework/resource-documentation.mdx +90 -0
  39. package/reference/framework/tutorial-system.mdx +135 -135
  40. package/reference/getting-started.mdx +141 -142
  41. package/reference/index.mdx +95 -106
  42. package/reference/packages/ui/src/auth/README.md +6 -6
  43. package/reference/platform-tools/adapters-integration.mdx +300 -301
  44. package/reference/platform-tools/adapters-platform.mdx +552 -553
  45. package/reference/platform-tools/index.mdx +216 -217
  46. package/reference/platform-tools/type-safety.mdx +82 -82
  47. package/reference/resources/index.mdx +348 -349
  48. package/reference/resources/patterns.mdx +446 -449
  49. package/reference/resources/types.mdx +115 -116
  50. package/reference/roadmap.mdx +164 -165
  51. package/reference/rules/organization-model.md +14 -0
  52. package/reference/runtime.mdx +172 -173
  53. package/reference/scaffold/operations/propagation-pipeline.md +1 -1
  54. package/reference/scaffold/recipes/extend-lead-gen.md +130 -77
  55. package/reference/scaffold/reference/contracts.md +376 -446
  56. package/reference/scaffold/reference/glossary.md +8 -6
  57. package/reference/scaffold/ui/feature-flags-and-gating.md +59 -46
  58. package/reference/scaffold/ui/feature-shell.mdx +11 -11
  59. package/reference/scaffold/ui/recipes.md +24 -24
  60. 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.