@elevasis/core 0.4.0 → 0.6.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 (67) hide show
  1. package/dist/business/entities-published.d.ts +215 -0
  2. package/dist/business/entities-published.js +69 -0
  3. package/dist/index.d.ts +436 -42
  4. package/dist/index.js +601 -50
  5. package/dist/organization-model/index.d.ts +436 -42
  6. package/dist/organization-model/index.js +601 -50
  7. package/package.json +7 -3
  8. package/src/__tests__/publish.test.ts +1 -1
  9. package/src/__tests__/template-foundations-compatibility.test.ts +2 -2
  10. package/src/business/README.md +52 -0
  11. package/src/business/__tests__/entities-published.test.ts +33 -0
  12. package/src/business/acquisition/types.ts +2 -0
  13. package/src/business/entities-published.ts +24 -0
  14. package/src/commands/queue/types/task.ts +3 -3
  15. package/src/execution/engine/index.ts +8 -0
  16. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +2 -3
  17. package/src/execution/engine/tools/registry.ts +26 -24
  18. package/src/execution/engine/tools/tool-maps.ts +13 -9
  19. package/src/execution/engine/workflow/types.ts +2 -3
  20. package/src/organization-model/README.md +16 -12
  21. package/src/organization-model/__tests__/defaults.test.ts +175 -0
  22. package/src/organization-model/__tests__/domains/customers.test.ts +295 -0
  23. package/src/organization-model/__tests__/domains/goals.test.ts +479 -0
  24. package/src/organization-model/__tests__/domains/identity.test.ts +278 -0
  25. package/src/organization-model/__tests__/domains/navigation.test.ts +212 -0
  26. package/src/organization-model/__tests__/domains/offerings.test.ts +419 -0
  27. package/src/organization-model/__tests__/domains/operations.test.ts +203 -0
  28. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +362 -0
  29. package/src/organization-model/__tests__/domains/roles.test.ts +347 -0
  30. package/src/organization-model/__tests__/domains/statuses.test.ts +243 -0
  31. package/src/organization-model/__tests__/foundation.test.ts +105 -0
  32. package/src/organization-model/__tests__/resolve.test.ts +447 -3
  33. package/src/organization-model/__tests__/schema.test.ts +407 -0
  34. package/src/organization-model/contracts.ts +12 -1
  35. package/src/organization-model/defaults.ts +53 -17
  36. package/src/organization-model/domains/customers.ts +75 -0
  37. package/src/organization-model/domains/goals.ts +80 -0
  38. package/src/organization-model/domains/identity.ts +87 -0
  39. package/src/organization-model/domains/navigation.ts +43 -4
  40. package/src/organization-model/domains/offerings.ts +66 -0
  41. package/src/organization-model/domains/operations.ts +85 -0
  42. package/src/organization-model/domains/{delivery.ts → projects.ts} +6 -6
  43. package/src/organization-model/domains/{lead-gen.ts → prospecting.ts} +5 -5
  44. package/src/organization-model/domains/roles.ts +55 -0
  45. package/src/organization-model/domains/sales.ts +94 -0
  46. package/src/organization-model/domains/shared.ts +30 -1
  47. package/src/organization-model/domains/statuses.ts +130 -0
  48. package/src/organization-model/foundation.ts +3 -3
  49. package/src/organization-model/index.ts +3 -3
  50. package/src/organization-model/organization-graph.mdx +1 -0
  51. package/src/organization-model/organization-model.mdx +84 -19
  52. package/src/organization-model/published.ts +62 -4
  53. package/src/organization-model/schema.ts +67 -7
  54. package/src/organization-model/types.ts +31 -7
  55. package/src/platform/constants/versions.ts +1 -1
  56. package/src/platform/registry/types.ts +1 -1
  57. package/src/projects/api-schemas.ts +1 -0
  58. package/src/reference/_generated/contracts.md +116 -8
  59. package/src/reference/glossary.md +25 -4
  60. package/src/requests/__tests__/api-schemas.test.ts +277 -0
  61. package/src/requests/api-schemas.ts +83 -0
  62. package/src/requests/index.ts +1 -0
  63. package/src/supabase/database.types.ts +88 -0
  64. package/src/organization-model/domains/crm.ts +0 -46
  65. /package/src/business/{delivery → projects}/index.ts +0 -0
  66. /package/src/business/{delivery → projects}/types.ts +0 -0
  67. /package/src/business/{crm → sales}/api-schemas.ts +0 -0
package/dist/index.js CHANGED
@@ -14,6 +14,25 @@ var DisplayMetadataSchema = z.object({
14
14
  color: ColorTokenSchema.optional(),
15
15
  icon: IconNameSchema.optional()
16
16
  });
17
+ var TechStackEntrySchema = z.object({
18
+ /** Name of the external platform (e.g. "HubSpot", "Stripe", "Notion"). */
19
+ platform: z.string().trim().min(1).max(200),
20
+ /** Free-form description of what this integration is used for. */
21
+ purpose: z.string().trim().min(1).max(500),
22
+ /**
23
+ * Health of the credential backing this integration.
24
+ * - configured: credential present and valid
25
+ * - pending: not yet set up
26
+ * - expired: credential existed but has lapsed
27
+ * - missing: expected but not present
28
+ */
29
+ credentialStatus: z.enum(["configured", "pending", "expired", "missing"]),
30
+ /**
31
+ * Whether this integration is the primary system of record for its domain
32
+ * (e.g. HubSpot is SoR for contacts). Defaults to false.
33
+ */
34
+ isSystemOfRecord: z.boolean().default(false)
35
+ });
17
36
  var ResourceMappingSchema = DisplayMetadataSchema.extend({
18
37
  id: ModelIdSchema,
19
38
  resourceId: z.string().trim().min(1).max(255),
@@ -21,7 +40,9 @@ var ResourceMappingSchema = DisplayMetadataSchema.extend({
21
40
  featureIds: ReferenceIdsSchema,
22
41
  entityIds: ReferenceIdsSchema,
23
42
  surfaceIds: ReferenceIdsSchema,
24
- capabilityIds: ReferenceIdsSchema
43
+ capabilityIds: ReferenceIdsSchema,
44
+ /** Optional tech-stack metadata for external-SaaS integrations. */
45
+ techStack: TechStackEntrySchema.optional()
25
46
  });
26
47
 
27
48
  // src/organization-model/domains/branding.ts
@@ -41,27 +62,27 @@ var DEFAULT_ORGANIZATION_MODEL_BRANDING = {
41
62
  shortName: "Elevasis",
42
63
  logos: {}
43
64
  };
44
- var CrmStageSemanticClassSchema = z.enum(["open", "active", "nurturing", "closed_won", "closed_lost"]);
45
- var CrmStageSchema = DisplayMetadataSchema.extend({
65
+ var SalesStageSemanticClassSchema = z.enum(["open", "active", "nurturing", "closed_won", "closed_lost"]);
66
+ var SalesStageSchema = DisplayMetadataSchema.extend({
46
67
  id: ModelIdSchema,
47
68
  order: z.number().int().min(0),
48
- semanticClass: CrmStageSemanticClassSchema,
69
+ semanticClass: SalesStageSemanticClassSchema,
49
70
  surfaceIds: ReferenceIdsSchema,
50
71
  resourceIds: ReferenceIdsSchema
51
72
  });
52
- var CrmPipelineSchema = z.object({
73
+ var SalesPipelineSchema = z.object({
53
74
  id: ModelIdSchema,
54
75
  label: z.string().trim().min(1).max(120),
55
76
  description: DescriptionSchema.optional(),
56
77
  entityId: ModelIdSchema,
57
- stages: z.array(CrmStageSchema).min(1)
78
+ stages: z.array(SalesStageSchema).min(1)
58
79
  });
59
- var OrganizationModelCrmSchema = z.object({
80
+ var OrganizationModelSalesSchema = z.object({
60
81
  entityId: ModelIdSchema,
61
82
  defaultPipelineId: ModelIdSchema,
62
- pipelines: z.array(CrmPipelineSchema).min(1)
83
+ pipelines: z.array(SalesPipelineSchema).min(1)
63
84
  });
64
- var DEFAULT_ORGANIZATION_MODEL_CRM = {
85
+ var DEFAULT_ORGANIZATION_MODEL_SALES = {
65
86
  entityId: "crm.deal",
66
87
  defaultPipelineId: "default",
67
88
  pipelines: [
@@ -70,29 +91,77 @@ var DEFAULT_ORGANIZATION_MODEL_CRM = {
70
91
  label: "Default Pipeline",
71
92
  entityId: "crm.deal",
72
93
  stages: [
73
- { id: "interested", label: "Interested", color: "blue", order: 1, semanticClass: "open", surfaceIds: ["crm.pipeline"], resourceIds: [] },
74
- { id: "proposal", label: "Proposal", color: "yellow", order: 2, semanticClass: "active", surfaceIds: ["crm.pipeline"], resourceIds: [] },
75
- { id: "closing", label: "Closing", color: "lime", order: 3, semanticClass: "active", surfaceIds: ["crm.pipeline"], resourceIds: [] },
76
- { id: "closed_won", label: "Closed Won", color: "green", order: 4, semanticClass: "closed_won", surfaceIds: ["crm.pipeline"], resourceIds: [] },
77
- { id: "closed_lost", label: "Closed Lost", color: "red", order: 5, semanticClass: "closed_lost", surfaceIds: ["crm.pipeline"], resourceIds: [] },
78
- { id: "nurturing", label: "Nurturing", color: "grape", order: 6, semanticClass: "nurturing", surfaceIds: ["crm.pipeline"], resourceIds: [] }
94
+ {
95
+ id: "interested",
96
+ label: "Interested",
97
+ color: "blue",
98
+ order: 1,
99
+ semanticClass: "open",
100
+ surfaceIds: ["crm.pipeline"],
101
+ resourceIds: []
102
+ },
103
+ {
104
+ id: "proposal",
105
+ label: "Proposal",
106
+ color: "yellow",
107
+ order: 2,
108
+ semanticClass: "active",
109
+ surfaceIds: ["crm.pipeline"],
110
+ resourceIds: []
111
+ },
112
+ {
113
+ id: "closing",
114
+ label: "Closing",
115
+ color: "lime",
116
+ order: 3,
117
+ semanticClass: "active",
118
+ surfaceIds: ["crm.pipeline"],
119
+ resourceIds: []
120
+ },
121
+ {
122
+ id: "closed_won",
123
+ label: "Closed Won",
124
+ color: "green",
125
+ order: 4,
126
+ semanticClass: "closed_won",
127
+ surfaceIds: ["crm.pipeline"],
128
+ resourceIds: []
129
+ },
130
+ {
131
+ id: "closed_lost",
132
+ label: "Closed Lost",
133
+ color: "red",
134
+ order: 5,
135
+ semanticClass: "closed_lost",
136
+ surfaceIds: ["crm.pipeline"],
137
+ resourceIds: []
138
+ },
139
+ {
140
+ id: "nurturing",
141
+ label: "Nurturing",
142
+ color: "grape",
143
+ order: 6,
144
+ semanticClass: "nurturing",
145
+ surfaceIds: ["crm.pipeline"],
146
+ resourceIds: []
147
+ }
79
148
  ]
80
149
  }
81
150
  ]
82
151
  };
83
- var DeliveryStateSchema = DisplayMetadataSchema.extend({
152
+ var ProjectsDomainStateSchema = DisplayMetadataSchema.extend({
84
153
  id: ModelIdSchema,
85
154
  order: z.number().int().min(0)
86
155
  });
87
- var OrganizationModelDeliverySchema = z.object({
156
+ var OrganizationModelProjectsSchema = z.object({
88
157
  projectEntityId: ModelIdSchema,
89
158
  milestoneEntityId: ModelIdSchema,
90
159
  taskEntityId: ModelIdSchema,
91
- projectStatuses: z.array(DeliveryStateSchema).min(1),
92
- milestoneStatuses: z.array(DeliveryStateSchema).min(1),
93
- taskStatuses: z.array(DeliveryStateSchema).min(1)
160
+ projectStatuses: z.array(ProjectsDomainStateSchema).min(1),
161
+ milestoneStatuses: z.array(ProjectsDomainStateSchema).min(1),
162
+ taskStatuses: z.array(ProjectsDomainStateSchema).min(1)
94
163
  });
95
- var DEFAULT_ORGANIZATION_MODEL_DELIVERY = {
164
+ var DEFAULT_ORGANIZATION_MODEL_PROJECTS = {
96
165
  projectEntityId: "delivery.project",
97
166
  milestoneEntityId: "delivery.milestone",
98
167
  taskEntityId: "delivery.task",
@@ -135,19 +204,19 @@ var FeatureSchema = z.object({
135
204
  resourceIds: ReferenceIdsSchema,
136
205
  capabilityIds: ReferenceIdsSchema
137
206
  });
138
- var LeadGenLifecycleStageSchema = DisplayMetadataSchema.extend({
207
+ var ProspectingLifecycleStageSchema = DisplayMetadataSchema.extend({
139
208
  id: ModelIdSchema,
140
209
  order: z.number().int().min(0)
141
210
  });
142
- var OrganizationModelLeadGenSchema = z.object({
211
+ var OrganizationModelProspectingSchema = z.object({
143
212
  listEntityId: ModelIdSchema,
144
213
  companyEntityId: ModelIdSchema,
145
214
  contactEntityId: ModelIdSchema,
146
215
  description: DescriptionSchema.optional(),
147
- companyStages: z.array(LeadGenLifecycleStageSchema).min(1),
148
- contactStages: z.array(LeadGenLifecycleStageSchema).min(1)
216
+ companyStages: z.array(ProspectingLifecycleStageSchema).min(1),
217
+ contactStages: z.array(ProspectingLifecycleStageSchema).min(1)
149
218
  });
150
- var DEFAULT_ORGANIZATION_MODEL_LEAD_GEN = {
219
+ var DEFAULT_ORGANIZATION_MODEL_PROSPECTING = {
151
220
  listEntityId: "leadgen.list",
152
221
  companyEntityId: "leadgen.company",
153
222
  contactEntityId: "leadgen.contact",
@@ -167,7 +236,16 @@ var DEFAULT_ORGANIZATION_MODEL_LEAD_GEN = {
167
236
  // src/organization-model/contracts.ts
168
237
  var PROJECTS_FEATURE_ID = "projects";
169
238
  var PROJECTS_INDEX_SURFACE_ID = "projects.index";
170
- var DELIVERY_PROJECTS_VIEW_CAPABILITY_ID = "delivery.projects.view";
239
+ var PROJECTS_VIEW_CAPABILITY_ID = "delivery.projects.view";
240
+ var SALES_FEATURE_ID = "crm";
241
+ var PROSPECTING_FEATURE_ID = "lead-gen";
242
+ var OPERATIONS_FEATURE_ID = "operations";
243
+ var MONITORING_FEATURE_ID = "monitoring";
244
+ var SETTINGS_FEATURE_ID = "settings";
245
+ var SEO_FEATURE_ID = "seo";
246
+ var SALES_PIPELINE_SURFACE_ID = "crm.pipeline";
247
+ var PROSPECTING_LISTS_SURFACE_ID = "lead-gen.lists";
248
+ var OPERATIONS_ORGANIZATION_GRAPH_SURFACE_ID = "operations.organization-graph";
171
249
 
172
250
  // src/organization-model/domains/navigation.ts
173
251
  var SurfaceTypeSchema = z.enum(["page", "dashboard", "graph", "detail", "list", "settings"]);
@@ -189,7 +267,7 @@ var SurfaceDefinitionSchema = z.object({
189
267
  var NavigationGroupSchema = z.object({
190
268
  id: ModelIdSchema,
191
269
  label: LabelSchema,
192
- placement: z.enum(["primary", "secondary", "bottom"]),
270
+ placement: z.string().trim().min(1).max(50),
193
271
  surfaceIds: z.array(ModelIdSchema).default([])
194
272
  });
195
273
  var OrganizationModelNavigationSchema = z.object({
@@ -234,7 +312,7 @@ var DEFAULT_ORGANIZATION_MODEL_NAVIGATION = {
234
312
  featureIds: [PROJECTS_FEATURE_ID],
235
313
  entityIds: ["delivery.project"],
236
314
  resourceIds: [],
237
- capabilityIds: [DELIVERY_PROJECTS_VIEW_CAPABILITY_ID]
315
+ capabilityIds: [PROJECTS_VIEW_CAPABILITY_ID]
238
316
  },
239
317
  {
240
318
  id: "operations.organization-graph",
@@ -380,6 +458,30 @@ var DEFAULT_ORGANIZATION_MODEL_NAVIGATION = {
380
458
  resourceIds: [],
381
459
  capabilityIds: []
382
460
  },
461
+ {
462
+ id: "submitted-requests.list",
463
+ label: "Submitted Requests",
464
+ path: "/monitoring/requests",
465
+ surfaceType: "list",
466
+ enabled: true,
467
+ featureId: "submitted-requests",
468
+ featureIds: ["submitted-requests"],
469
+ entityIds: ["reported_request"],
470
+ resourceIds: [],
471
+ capabilityIds: []
472
+ },
473
+ {
474
+ id: "submitted-requests.detail",
475
+ label: "Request Detail",
476
+ path: "/monitoring/requests/:requestId",
477
+ surfaceType: "detail",
478
+ enabled: true,
479
+ featureId: "submitted-requests",
480
+ featureIds: ["submitted-requests"],
481
+ entityIds: ["reported_request"],
482
+ resourceIds: [],
483
+ capabilityIds: []
484
+ },
383
485
  {
384
486
  id: "settings.account",
385
487
  label: "Account",
@@ -495,7 +597,9 @@ var DEFAULT_ORGANIZATION_MODEL_NAVIGATION = {
495
597
  "monitoring.execution-logs",
496
598
  "monitoring.execution-health",
497
599
  "monitoring.cost-analytics",
498
- "monitoring.notifications"
600
+ "monitoring.notifications",
601
+ "submitted-requests.list",
602
+ "submitted-requests.detail"
499
603
  ]
500
604
  },
501
605
  {
@@ -514,6 +618,392 @@ var DEFAULT_ORGANIZATION_MODEL_NAVIGATION = {
514
618
  }
515
619
  ]
516
620
  };
621
+ var BusinessHoursDaySchema = z.object({
622
+ open: z.string().trim().regex(/^\d{2}:\d{2}$/, "Expected HH:MM format"),
623
+ close: z.string().trim().regex(/^\d{2}:\d{2}$/, "Expected HH:MM format")
624
+ });
625
+ var BusinessHoursSchema = z.object({
626
+ monday: BusinessHoursDaySchema.optional(),
627
+ tuesday: BusinessHoursDaySchema.optional(),
628
+ wednesday: BusinessHoursDaySchema.optional(),
629
+ thursday: BusinessHoursDaySchema.optional(),
630
+ friday: BusinessHoursDaySchema.optional(),
631
+ saturday: BusinessHoursDaySchema.optional(),
632
+ sunday: BusinessHoursDaySchema.optional()
633
+ }).default({});
634
+ var IdentityDomainSchema = z.object({
635
+ /** Why the organization exists — one or two plain-language sentences. */
636
+ mission: z.string().trim().max(1e3).default(""),
637
+ /** Long-term direction the organization is moving toward. */
638
+ vision: z.string().trim().max(1e3).default(""),
639
+ /** Legal registered name of the entity. */
640
+ legalName: z.string().trim().max(200).default(""),
641
+ /**
642
+ * Type of legal entity (e.g. "LLC", "Corporation", "Sole Proprietor",
643
+ * "Non-profit"). Free-form string so it covers any jurisdiction.
644
+ */
645
+ entityType: z.string().trim().max(100).default(""),
646
+ /**
647
+ * Primary jurisdiction of registration or operation
648
+ * (e.g. "United States – Delaware", "Canada – Ontario").
649
+ */
650
+ jurisdiction: z.string().trim().max(200).default(""),
651
+ /**
652
+ * Industry category — broad classification (e.g. "Marketing Agency",
653
+ * "Software / SaaS", "Professional Services").
654
+ */
655
+ industryCategory: z.string().trim().max(200).default(""),
656
+ /**
657
+ * Geographic focus — where the organization primarily operates or serves
658
+ * (e.g. "North America", "Global", "Southeast Asia").
659
+ */
660
+ geographicFocus: z.string().trim().max(200).default(""),
661
+ /**
662
+ * IANA timezone identifier for the organization's primary operating timezone
663
+ * (e.g. "America/Los_Angeles", "Europe/London", "UTC").
664
+ */
665
+ timeZone: z.string().trim().max(100).default("UTC"),
666
+ /** Typical operating hours per day of week. Empty object means not configured. */
667
+ businessHours: BusinessHoursSchema
668
+ });
669
+ var DEFAULT_ORGANIZATION_MODEL_IDENTITY = {
670
+ mission: "",
671
+ vision: "",
672
+ legalName: "",
673
+ entityType: "",
674
+ jurisdiction: "",
675
+ industryCategory: "",
676
+ geographicFocus: "",
677
+ timeZone: "UTC",
678
+ businessHours: {}
679
+ };
680
+ var FirmographicsSchema = z.object({
681
+ /** Industry vertical (e.g. "Marketing Agency", "Legal", "Real Estate"). */
682
+ industry: z.string().trim().max(200).optional(),
683
+ /**
684
+ * Company headcount band (e.g. "1–10", "11–50", "51–200", "200+").
685
+ * Free-form string to accommodate any band notation.
686
+ */
687
+ companySize: z.string().trim().max(100).optional(),
688
+ /**
689
+ * Primary geographic region the segment operates in or is targeted from
690
+ * (e.g. "North America", "Europe", "Global").
691
+ */
692
+ region: z.string().trim().max(200).optional()
693
+ });
694
+ var CustomerSegmentSchema = z.object({
695
+ /** Stable unique identifier for the segment (e.g. "segment-smb-agencies"). */
696
+ id: z.string().trim().min(1).max(100),
697
+ /** Human-readable name shown to agents and in UI (e.g. "SMB Marketing Agencies"). */
698
+ name: z.string().trim().max(200).default(""),
699
+ /** One or two sentences describing who this segment is. */
700
+ description: z.string().trim().max(2e3).default(""),
701
+ /**
702
+ * The primary job(s) this segment is trying to get done — the goal they hire
703
+ * a product/service to accomplish. Plain-language narrative or bullet list.
704
+ */
705
+ jobsToBeDone: z.string().trim().max(2e3).default(""),
706
+ /**
707
+ * Pains — frustrations, obstacles, and risks the segment experiences
708
+ * when trying to accomplish their jobs-to-be-done.
709
+ */
710
+ pains: z.array(z.string().trim().max(500)).default([]),
711
+ /**
712
+ * Gains — outcomes and benefits the segment desires; positive motivators
713
+ * beyond merely resolving pains.
714
+ */
715
+ gains: z.array(z.string().trim().max(500)).default([]),
716
+ /** Firmographic profile for targeting and filtering. */
717
+ firmographics: FirmographicsSchema.default({}),
718
+ /**
719
+ * Value proposition — one or two sentences stating why this organization's
720
+ * offering is uniquely suited for this segment's needs.
721
+ */
722
+ valueProp: z.string().trim().max(2e3).default("")
723
+ });
724
+ var CustomersDomainSchema = z.object({
725
+ segments: z.array(CustomerSegmentSchema).default([])
726
+ });
727
+ var DEFAULT_ORGANIZATION_MODEL_CUSTOMERS = {
728
+ segments: []
729
+ };
730
+ var PricingModelSchema = z.enum(["one-time", "subscription", "usage-based", "custom"]);
731
+ var ProductSchema = z.object({
732
+ /** Stable unique identifier for the product (e.g. "product-starter-plan"). */
733
+ id: z.string().trim().min(1).max(100),
734
+ /** Human-readable name shown to agents and in UI (e.g. "Starter Plan"). */
735
+ name: z.string().trim().max(200).default(""),
736
+ /** One or two sentences describing what this product/service delivers. */
737
+ description: z.string().trim().max(2e3).default(""),
738
+ /**
739
+ * How this product is priced:
740
+ * - "one-time" — single purchase (setup fee, project fee)
741
+ * - "subscription" — recurring (monthly/annual SaaS, retainer)
742
+ * - "usage-based" — metered by consumption (API calls, seats)
743
+ * - "custom" — negotiated or bespoke pricing
744
+ */
745
+ pricingModel: PricingModelSchema.default("custom"),
746
+ /** Base price amount (≥ 0). Currency unit defined by `currency`. */
747
+ price: z.number().min(0).default(0),
748
+ /**
749
+ * ISO 4217 currency code (e.g. "USD", "EUR", "GBP").
750
+ * Free-form string to accommodate any currency; defaults to "USD".
751
+ */
752
+ currency: z.string().trim().max(10).default("USD"),
753
+ /**
754
+ * IDs of customer segments this product targets.
755
+ * Each id must reference a declared `customers.segments[].id`.
756
+ * Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
757
+ */
758
+ targetSegmentIds: z.array(z.string().trim().min(1)).default([]),
759
+ /**
760
+ * Optional: ID of the platform feature responsible for delivering this product.
761
+ * When present, must reference a declared `features[].id`.
762
+ * Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
763
+ */
764
+ deliveryFeatureId: z.string().trim().min(1).optional()
765
+ });
766
+ var OfferingsDomainSchema = z.object({
767
+ products: z.array(ProductSchema).default([])
768
+ });
769
+ var DEFAULT_ORGANIZATION_MODEL_OFFERINGS = {
770
+ products: []
771
+ };
772
+ var RoleSchema = z.object({
773
+ /** Stable unique identifier for the role (e.g. "role-ceo", "role-head-of-sales"). */
774
+ id: z.string().trim().min(1).max(100),
775
+ /** Human-readable title shown to agents and in UI (e.g. "CEO", "Head of Sales"). */
776
+ title: z.string().trim().min(1).max(200),
777
+ /**
778
+ * List of responsibilities this role owns — plain-language descriptions of
779
+ * what the person in this role is accountable for delivering.
780
+ * Defaults to empty array so minimal role definitions stay concise.
781
+ */
782
+ responsibilities: z.array(z.string().trim().max(500)).default([]),
783
+ /**
784
+ * Optional: ID of another role this role reports to.
785
+ * When present, must reference another `roles[].id` in the same organization.
786
+ * Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
787
+ * Absence indicates a top-level role (no reporting line).
788
+ */
789
+ reportsToId: z.string().trim().min(1).max(100).optional(),
790
+ /**
791
+ * Optional: name or email of the person currently holding this role.
792
+ * Free-form string — supports "Alice Johnson", "alice@example.com", or
793
+ * any human-readable identifier. Not validated against any user registry.
794
+ */
795
+ heldBy: z.string().trim().max(200).optional()
796
+ });
797
+ var RolesDomainSchema = z.object({
798
+ roles: z.array(RoleSchema).default([])
799
+ });
800
+ var DEFAULT_ORGANIZATION_MODEL_ROLES = {
801
+ roles: []
802
+ };
803
+ var KeyResultSchema = z.object({
804
+ /** Stable unique identifier for the measurable outcome (e.g. "kr-revenue-q1"). */
805
+ id: z.string().trim().min(1).max(100),
806
+ /** Plain-language description of this measurable outcome (e.g. "Increase trial-to-paid conversion"). */
807
+ description: z.string().trim().min(1).max(500),
808
+ /**
809
+ * What is being measured — the metric name (e.g. "monthly revenue", "NPS score",
810
+ * "trial-to-paid conversion rate"). Free-form string.
811
+ */
812
+ targetMetric: z.string().trim().min(1).max(200),
813
+ /** Current measured value. Defaults to 0 when not yet tracked. */
814
+ currentValue: z.number().default(0),
815
+ /**
816
+ * Target value to reach for this measurable outcome to be considered achieved.
817
+ * Optional — omit if the outcome is directional (e.g. "reduce churn") without
818
+ * a hard numeric target.
819
+ */
820
+ targetValue: z.number().optional()
821
+ });
822
+ var ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
823
+ var ObjectiveSchema = z.object({
824
+ /** Stable unique identifier for the goal (e.g. "goal-grow-arr-q1-2026"). */
825
+ id: z.string().trim().min(1).max(100),
826
+ /** Plain-language description of what the organization wants to achieve. */
827
+ description: z.string().trim().min(1).max(1e3),
828
+ /**
829
+ * Start of the period this goal is active for — ISO 8601 date string (YYYY-MM-DD).
830
+ * Must be strictly before `periodEnd`.
831
+ */
832
+ periodStart: z.string().regex(ISO_DATE_REGEX, "periodStart must be an ISO date string (YYYY-MM-DD)"),
833
+ /**
834
+ * End of the period this goal is active for — ISO 8601 date string (YYYY-MM-DD).
835
+ * Must be strictly after `periodStart`.
836
+ * Enforced via `OrganizationModelSchema.superRefine()`.
837
+ */
838
+ periodEnd: z.string().regex(ISO_DATE_REGEX, "periodEnd must be an ISO date string (YYYY-MM-DD)"),
839
+ /**
840
+ * List of measurable outcomes that define success for this goal.
841
+ * Defaults to empty array so goals can be declared before outcomes are defined.
842
+ */
843
+ keyResults: z.array(KeyResultSchema).default([])
844
+ });
845
+ var GoalsDomainSchema = z.object({
846
+ objectives: z.array(ObjectiveSchema).default([])
847
+ });
848
+ var DEFAULT_ORGANIZATION_MODEL_GOALS = {
849
+ objectives: []
850
+ };
851
+ var OperationSemanticClassSchema = z.enum(["queue", "executions", "sessions", "notifications", "schedules"]);
852
+ var OperationEntrySchema = z.object({
853
+ id: z.string().trim().min(1).max(100),
854
+ label: z.string().trim().min(1).max(120),
855
+ semanticClass: OperationSemanticClassSchema,
856
+ /** Optional reference to the feature that owns this runtime entity. */
857
+ featureId: z.string().trim().min(1).max(100).optional(),
858
+ /**
859
+ * Optional pointer to the status semanticClass values that apply to this
860
+ * entity — ties operations back to the statuses domain for vibe rendering.
861
+ */
862
+ supportedStatusSemanticClass: z.array(z.string().trim().min(1).max(80)).optional()
863
+ });
864
+ var OperationsDomainSchema = z.object({
865
+ entries: z.array(OperationEntrySchema).default([])
866
+ });
867
+ var DEFAULT_ORGANIZATION_MODEL_OPERATIONS = {
868
+ entries: [
869
+ // --- queue (HITL command queue) ---
870
+ {
871
+ id: "operations.queue",
872
+ label: "HITL Queue",
873
+ semanticClass: "queue",
874
+ featureId: "operations",
875
+ supportedStatusSemanticClass: ["queue"]
876
+ },
877
+ // --- executions (workflow / agent executions) ---
878
+ {
879
+ id: "operations.executions",
880
+ label: "Executions",
881
+ semanticClass: "executions",
882
+ featureId: "operations",
883
+ supportedStatusSemanticClass: ["execution"]
884
+ },
885
+ // --- sessions (agent conversation sessions) ---
886
+ {
887
+ id: "operations.sessions",
888
+ label: "Sessions",
889
+ semanticClass: "sessions",
890
+ featureId: "operations"
891
+ },
892
+ // --- notifications (platform in-app notifications) ---
893
+ {
894
+ id: "operations.notifications",
895
+ label: "Notifications",
896
+ semanticClass: "notifications",
897
+ featureId: "monitoring"
898
+ },
899
+ // --- schedules (task scheduler) ---
900
+ {
901
+ id: "operations.schedules",
902
+ label: "Schedules",
903
+ semanticClass: "schedules",
904
+ featureId: "operations",
905
+ supportedStatusSemanticClass: ["schedule", "schedule.run"]
906
+ }
907
+ ]
908
+ };
909
+ var StatusSemanticClassSchema = z.enum([
910
+ "delivery.task",
911
+ "delivery.project",
912
+ "delivery.milestone",
913
+ "queue",
914
+ "execution",
915
+ "schedule",
916
+ "schedule.run",
917
+ "request"
918
+ ]);
919
+ var StatusEntrySchema = z.object({
920
+ id: z.string().trim().min(1).max(100),
921
+ label: z.string().trim().min(1).max(120),
922
+ semanticClass: StatusSemanticClassSchema,
923
+ category: z.string().trim().min(1).max(80).optional()
924
+ });
925
+ var StatusesDomainSchema = z.object({
926
+ entries: z.array(StatusEntrySchema).default([])
927
+ });
928
+ var DEFAULT_ORGANIZATION_MODEL_STATUSES = {
929
+ entries: [
930
+ // --- delivery.task (TaskStatus — 9 values) ---
931
+ { id: "delivery.task.planned", label: "Planned", semanticClass: "delivery.task", category: "delivery" },
932
+ { id: "delivery.task.in_progress", label: "In Progress", semanticClass: "delivery.task", category: "delivery" },
933
+ { id: "delivery.task.blocked", label: "Blocked", semanticClass: "delivery.task", category: "delivery" },
934
+ { id: "delivery.task.submitted", label: "Submitted", semanticClass: "delivery.task", category: "delivery" },
935
+ { id: "delivery.task.approved", label: "Approved", semanticClass: "delivery.task", category: "delivery" },
936
+ {
937
+ id: "delivery.task.revision_requested",
938
+ label: "Revision Requested",
939
+ semanticClass: "delivery.task",
940
+ category: "delivery"
941
+ },
942
+ { id: "delivery.task.rejected", label: "Rejected", semanticClass: "delivery.task", category: "delivery" },
943
+ { id: "delivery.task.cancelled", label: "Cancelled", semanticClass: "delivery.task", category: "delivery" },
944
+ { id: "delivery.task.completed", label: "Completed", semanticClass: "delivery.task", category: "delivery" },
945
+ // --- delivery.project (ProjectStatus — 6 values) ---
946
+ { id: "delivery.project.active", label: "Active", semanticClass: "delivery.project", category: "delivery" },
947
+ { id: "delivery.project.on_track", label: "On Track", semanticClass: "delivery.project", category: "delivery" },
948
+ { id: "delivery.project.at_risk", label: "At Risk", semanticClass: "delivery.project", category: "delivery" },
949
+ { id: "delivery.project.blocked", label: "Blocked", semanticClass: "delivery.project", category: "delivery" },
950
+ { id: "delivery.project.paused", label: "Paused", semanticClass: "delivery.project", category: "delivery" },
951
+ { id: "delivery.project.completed", label: "Completed", semanticClass: "delivery.project", category: "delivery" },
952
+ // --- delivery.milestone (MilestoneStatus — 5 values) ---
953
+ {
954
+ id: "delivery.milestone.upcoming",
955
+ label: "Upcoming",
956
+ semanticClass: "delivery.milestone",
957
+ category: "delivery"
958
+ },
959
+ {
960
+ id: "delivery.milestone.in_progress",
961
+ label: "In Progress",
962
+ semanticClass: "delivery.milestone",
963
+ category: "delivery"
964
+ },
965
+ {
966
+ id: "delivery.milestone.blocked",
967
+ label: "Blocked",
968
+ semanticClass: "delivery.milestone",
969
+ category: "delivery"
970
+ },
971
+ { id: "delivery.milestone.overdue", label: "Overdue", semanticClass: "delivery.milestone", category: "delivery" },
972
+ {
973
+ id: "delivery.milestone.completed",
974
+ label: "Completed",
975
+ semanticClass: "delivery.milestone",
976
+ category: "delivery"
977
+ },
978
+ // --- queue (QueueTaskStatus — 5 values, maps hitl/command-queue tasks) ---
979
+ { id: "queue.pending", label: "Pending", semanticClass: "queue", category: "queue" },
980
+ { id: "queue.processing", label: "Processing", semanticClass: "queue", category: "queue" },
981
+ { id: "queue.completed", label: "Completed", semanticClass: "queue", category: "queue" },
982
+ { id: "queue.failed", label: "Failed", semanticClass: "queue", category: "queue" },
983
+ { id: "queue.expired", label: "Expired", semanticClass: "queue", category: "queue" },
984
+ // --- execution (ExecutionStatus — 5 values) ---
985
+ { id: "execution.pending", label: "Pending", semanticClass: "execution", category: "execution" },
986
+ { id: "execution.running", label: "Running", semanticClass: "execution", category: "execution" },
987
+ { id: "execution.completed", label: "Completed", semanticClass: "execution", category: "execution" },
988
+ { id: "execution.failed", label: "Failed", semanticClass: "execution", category: "execution" },
989
+ { id: "execution.warning", label: "Warning", semanticClass: "execution", category: "execution" },
990
+ // --- schedule (schedule status — 4 values) ---
991
+ { id: "schedule.active", label: "Active", semanticClass: "schedule", category: "schedule" },
992
+ { id: "schedule.paused", label: "Paused", semanticClass: "schedule", category: "schedule" },
993
+ { id: "schedule.completed", label: "Completed", semanticClass: "schedule", category: "schedule" },
994
+ { id: "schedule.cancelled", label: "Cancelled", semanticClass: "schedule", category: "schedule" },
995
+ // --- schedule.run (schedule run status — 4 values) ---
996
+ { id: "schedule.run.running", label: "Running", semanticClass: "schedule.run", category: "schedule" },
997
+ { id: "schedule.run.completed", label: "Completed", semanticClass: "schedule.run", category: "schedule" },
998
+ { id: "schedule.run.failed", label: "Failed", semanticClass: "schedule.run", category: "schedule" },
999
+ { id: "schedule.run.cancelled", label: "Cancelled", semanticClass: "schedule.run", category: "schedule" },
1000
+ // --- request (RequestStatus — 4 values, maps reported_requests) ---
1001
+ { id: "request.open", label: "Open", semanticClass: "request", category: "request" },
1002
+ { id: "request.investigating", label: "Investigating", semanticClass: "request", category: "request" },
1003
+ { id: "request.resolved", label: "Resolved", semanticClass: "request", category: "request" },
1004
+ { id: "request.wont_fix", label: "Won't Fix", semanticClass: "request", category: "request" }
1005
+ ]
1006
+ };
517
1007
 
518
1008
  // src/organization-model/schema.ts
519
1009
  var OrganizationModelSchemaBase = z.object({
@@ -521,9 +1011,16 @@ var OrganizationModelSchemaBase = z.object({
521
1011
  features: z.array(FeatureSchema).default([]),
522
1012
  branding: OrganizationModelBrandingSchema,
523
1013
  navigation: OrganizationModelNavigationSchema,
524
- crm: OrganizationModelCrmSchema,
525
- leadGen: OrganizationModelLeadGenSchema,
526
- delivery: OrganizationModelDeliverySchema,
1014
+ sales: OrganizationModelSalesSchema,
1015
+ prospecting: OrganizationModelProspectingSchema,
1016
+ projects: OrganizationModelProjectsSchema,
1017
+ identity: IdentityDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_IDENTITY),
1018
+ customers: CustomersDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_CUSTOMERS),
1019
+ offerings: OfferingsDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_OFFERINGS),
1020
+ roles: RolesDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_ROLES),
1021
+ goals: GoalsDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_GOALS),
1022
+ statuses: StatusesDomainSchema.default({ entries: [] }),
1023
+ operations: OperationsDomainSchema.default({ entries: [] }),
527
1024
  resourceMappings: z.array(ResourceMappingSchema).default([])
528
1025
  });
529
1026
  function addIssue(ctx, path, message) {
@@ -657,11 +1154,49 @@ var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ct
657
1154
  addIssue(
658
1155
  ctx,
659
1156
  ["navigation", "surfaces", surfaceIndex, "resourceIds", resourceIndex],
660
- `Surface "${surface.id}" references resource "${resourceId}" but that resource mapping does not include surface "${surface.id}"`
1157
+ `Surface "${surface.id}" references resource "${resourceId}" but that surface does not include resource "${surface.id}"`
661
1158
  );
662
1159
  }
663
1160
  });
664
1161
  });
1162
+ const segmentsById = new Map(model.customers.segments.map((seg) => [seg.id, seg]));
1163
+ model.offerings.products.forEach((product, productIndex) => {
1164
+ product.targetSegmentIds.forEach((segmentId, segmentIndex) => {
1165
+ if (!segmentsById.has(segmentId)) {
1166
+ addIssue(
1167
+ ctx,
1168
+ ["offerings", "products", productIndex, "targetSegmentIds", segmentIndex],
1169
+ `Product "${product.id}" references unknown customer segment "${segmentId}"`
1170
+ );
1171
+ }
1172
+ });
1173
+ if (product.deliveryFeatureId !== void 0 && !featuresById.has(product.deliveryFeatureId)) {
1174
+ addIssue(
1175
+ ctx,
1176
+ ["offerings", "products", productIndex, "deliveryFeatureId"],
1177
+ `Product "${product.id}" references unknown delivery feature "${product.deliveryFeatureId}"`
1178
+ );
1179
+ }
1180
+ });
1181
+ model.goals.objectives.forEach((objective, index) => {
1182
+ if (objective.periodEnd <= objective.periodStart) {
1183
+ addIssue(
1184
+ ctx,
1185
+ ["goals", "objectives", index, "periodEnd"],
1186
+ `Goal "${objective.id}" has periodEnd "${objective.periodEnd}" which must be strictly after periodStart "${objective.periodStart}"`
1187
+ );
1188
+ }
1189
+ });
1190
+ const rolesById = new Map(model.roles.roles.map((role) => [role.id, role]));
1191
+ model.roles.roles.forEach((role, roleIndex) => {
1192
+ if (role.reportsToId !== void 0 && !rolesById.has(role.reportsToId)) {
1193
+ addIssue(
1194
+ ctx,
1195
+ ["roles", "roles", roleIndex, "reportsToId"],
1196
+ `Role "${role.id}" references unknown reportsToId "${role.reportsToId}"`
1197
+ );
1198
+ }
1199
+ });
665
1200
  model.resourceMappings.forEach((resourceMapping, resourceIndex) => {
666
1201
  resourceMapping.featureIds.forEach((featureId, featureIndex) => {
667
1202
  const feature = featuresById.get(featureId);
@@ -707,24 +1242,24 @@ var DEFAULT_ORGANIZATION_MODEL = {
707
1242
  version: 1,
708
1243
  features: [
709
1244
  {
710
- id: "crm",
1245
+ id: SALES_FEATURE_ID,
711
1246
  label: "CRM",
712
1247
  description: "Relationship pipeline and deal management",
713
1248
  enabled: true,
714
1249
  color: "blue",
715
1250
  entityIds: ["crm.deal"],
716
- surfaceIds: ["crm.pipeline"],
1251
+ surfaceIds: [SALES_PIPELINE_SURFACE_ID],
717
1252
  resourceIds: [],
718
1253
  capabilityIds: ["crm.pipeline.manage"]
719
1254
  },
720
1255
  {
721
- id: "lead-gen",
1256
+ id: PROSPECTING_FEATURE_ID,
722
1257
  label: "Lead Gen",
723
1258
  description: "Prospecting, qualification, and outreach preparation",
724
1259
  enabled: true,
725
1260
  color: "cyan",
726
1261
  entityIds: ["leadgen.list", "leadgen.company", "leadgen.contact"],
727
- surfaceIds: ["lead-gen.lists"],
1262
+ surfaceIds: [PROSPECTING_LISTS_SURFACE_ID],
728
1263
  resourceIds: [],
729
1264
  capabilityIds: ["leadgen.lists.manage"]
730
1265
  },
@@ -737,17 +1272,17 @@ var DEFAULT_ORGANIZATION_MODEL = {
737
1272
  entityIds: ["delivery.project", "delivery.milestone", "delivery.task"],
738
1273
  surfaceIds: [PROJECTS_INDEX_SURFACE_ID],
739
1274
  resourceIds: [],
740
- capabilityIds: [DELIVERY_PROJECTS_VIEW_CAPABILITY_ID]
1275
+ capabilityIds: [PROJECTS_VIEW_CAPABILITY_ID]
741
1276
  },
742
1277
  {
743
- id: "operations",
1278
+ id: OPERATIONS_FEATURE_ID,
744
1279
  label: "Operations",
745
1280
  description: "Operational resources, topology, and orchestration visibility",
746
1281
  enabled: true,
747
1282
  color: "violet",
748
1283
  entityIds: [],
749
1284
  surfaceIds: [
750
- "operations.organization-graph",
1285
+ OPERATIONS_ORGANIZATION_GRAPH_SURFACE_ID,
751
1286
  "operations.command-view",
752
1287
  "operations.overview",
753
1288
  "operations.resources",
@@ -759,7 +1294,7 @@ var DEFAULT_ORGANIZATION_MODEL = {
759
1294
  capabilityIds: ["operations.organization-graph", "operations.command-view"]
760
1295
  },
761
1296
  {
762
- id: "monitoring",
1297
+ id: MONITORING_FEATURE_ID,
763
1298
  label: "Monitoring",
764
1299
  enabled: true,
765
1300
  entityIds: [],
@@ -774,7 +1309,7 @@ var DEFAULT_ORGANIZATION_MODEL = {
774
1309
  capabilityIds: []
775
1310
  },
776
1311
  {
777
- id: "settings",
1312
+ id: SETTINGS_FEATURE_ID,
778
1313
  label: "Settings",
779
1314
  enabled: true,
780
1315
  entityIds: [],
@@ -791,7 +1326,16 @@ var DEFAULT_ORGANIZATION_MODEL = {
791
1326
  capabilityIds: []
792
1327
  },
793
1328
  {
794
- id: "seo",
1329
+ id: "submitted-requests",
1330
+ label: "Submitted Requests",
1331
+ enabled: true,
1332
+ entityIds: ["reported_request"],
1333
+ surfaceIds: ["submitted-requests.list", "submitted-requests.detail"],
1334
+ resourceIds: [],
1335
+ capabilityIds: []
1336
+ },
1337
+ {
1338
+ id: SEO_FEATURE_ID,
795
1339
  label: "SEO",
796
1340
  enabled: false,
797
1341
  entityIds: [],
@@ -802,9 +1346,16 @@ var DEFAULT_ORGANIZATION_MODEL = {
802
1346
  ],
803
1347
  branding: DEFAULT_ORGANIZATION_MODEL_BRANDING,
804
1348
  navigation: DEFAULT_ORGANIZATION_MODEL_NAVIGATION,
805
- crm: DEFAULT_ORGANIZATION_MODEL_CRM,
806
- leadGen: DEFAULT_ORGANIZATION_MODEL_LEAD_GEN,
807
- delivery: DEFAULT_ORGANIZATION_MODEL_DELIVERY,
1349
+ sales: DEFAULT_ORGANIZATION_MODEL_SALES,
1350
+ prospecting: DEFAULT_ORGANIZATION_MODEL_PROSPECTING,
1351
+ projects: DEFAULT_ORGANIZATION_MODEL_PROJECTS,
1352
+ identity: DEFAULT_ORGANIZATION_MODEL_IDENTITY,
1353
+ customers: DEFAULT_ORGANIZATION_MODEL_CUSTOMERS,
1354
+ offerings: DEFAULT_ORGANIZATION_MODEL_OFFERINGS,
1355
+ roles: DEFAULT_ORGANIZATION_MODEL_ROLES,
1356
+ goals: DEFAULT_ORGANIZATION_MODEL_GOALS,
1357
+ statuses: DEFAULT_ORGANIZATION_MODEL_STATUSES,
1358
+ operations: DEFAULT_ORGANIZATION_MODEL_OPERATIONS,
808
1359
  resourceMappings: []
809
1360
  };
810
1361
 
@@ -856,8 +1407,8 @@ function resolveOrganizationModel(override) {
856
1407
  }
857
1408
 
858
1409
  // src/organization-model/foundation.ts
859
- function createFoundationOrganizationModel(branding) {
860
- const canonical = resolveOrganizationModel({ branding });
1410
+ function createFoundationOrganizationModel(override) {
1411
+ const canonical = resolveOrganizationModel(override);
861
1412
  function requireCoreSurface(surfaceId) {
862
1413
  const surface = canonical.navigation.surfaces.find((candidate) => candidate.id === surfaceId);
863
1414
  if (!surface) {
@@ -912,4 +1463,4 @@ function createFoundationOrganizationModel(branding) {
912
1463
  };
913
1464
  }
914
1465
 
915
- export { DEFAULT_ORGANIZATION_MODEL, DELIVERY_PROJECTS_VIEW_CAPABILITY_ID, FeatureSchema, OrganizationModelSchema, PROJECTS_FEATURE_ID, PROJECTS_INDEX_SURFACE_ID, createFoundationOrganizationModel, defineOrganizationModel, resolveOrganizationModel };
1466
+ export { CustomerSegmentSchema, CustomersDomainSchema, DEFAULT_ORGANIZATION_MODEL, DEFAULT_ORGANIZATION_MODEL_CUSTOMERS, DEFAULT_ORGANIZATION_MODEL_GOALS, DEFAULT_ORGANIZATION_MODEL_OFFERINGS, DEFAULT_ORGANIZATION_MODEL_OPERATIONS, DEFAULT_ORGANIZATION_MODEL_ROLES, DEFAULT_ORGANIZATION_MODEL_STATUSES, FeatureSchema, FirmographicsSchema, GoalsDomainSchema, KeyResultSchema, MONITORING_FEATURE_ID, OPERATIONS_FEATURE_ID, OPERATIONS_ORGANIZATION_GRAPH_SURFACE_ID, ObjectiveSchema, OfferingsDomainSchema, OperationEntrySchema, OperationSemanticClassSchema, OperationsDomainSchema, OrganizationModelSchema, PROJECTS_FEATURE_ID, PROJECTS_INDEX_SURFACE_ID, PROJECTS_VIEW_CAPABILITY_ID, PROSPECTING_FEATURE_ID, PROSPECTING_LISTS_SURFACE_ID, PricingModelSchema, ProductSchema, RoleSchema, RolesDomainSchema, SALES_FEATURE_ID, SALES_PIPELINE_SURFACE_ID, SEO_FEATURE_ID, SETTINGS_FEATURE_ID, StatusEntrySchema, StatusSemanticClassSchema, StatusesDomainSchema, TechStackEntrySchema, createFoundationOrganizationModel, defineOrganizationModel, resolveOrganizationModel };