@elevasis/core 0.22.0 → 0.24.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 (244) hide show
  1. package/dist/index.d.ts +3214 -2501
  2. package/dist/index.js +3112 -1222
  3. package/dist/knowledge/index.d.ts +1108 -1264
  4. package/dist/knowledge/index.js +112 -9
  5. package/dist/organization-model/index.d.ts +3214 -2501
  6. package/dist/organization-model/index.js +3112 -1222
  7. package/dist/test-utils/index.d.ts +985 -1103
  8. package/dist/test-utils/index.js +2464 -1165
  9. package/package.json +5 -5
  10. package/src/README.md +14 -14
  11. package/src/__tests__/publish.test.ts +24 -24
  12. package/src/__tests__/template-core-compatibility.test.ts +9 -80
  13. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2389 -2121
  14. package/src/_gen/__tests__/scaffold-contracts.test.ts +30 -30
  15. package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -217
  16. package/src/auth/multi-tenancy/credentials/server/encryption.ts +69 -69
  17. package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +37 -37
  18. package/src/auth/multi-tenancy/index.ts +26 -26
  19. package/src/auth/multi-tenancy/invitations/api-schemas.ts +104 -104
  20. package/src/auth/multi-tenancy/memberships/api-schemas.ts +143 -143
  21. package/src/auth/multi-tenancy/memberships/index.ts +26 -26
  22. package/src/auth/multi-tenancy/memberships/membership.ts +130 -130
  23. package/src/auth/multi-tenancy/organizations/__tests__/api-schemas.test.ts +194 -194
  24. package/src/auth/multi-tenancy/organizations/api-schemas.ts +136 -136
  25. package/src/auth/multi-tenancy/permissions.test.ts +42 -42
  26. package/src/auth/multi-tenancy/permissions.ts +123 -123
  27. package/src/auth/multi-tenancy/role-management/api-schemas.ts +78 -78
  28. package/src/auth/multi-tenancy/role-management/index.ts +16 -16
  29. package/src/auth/multi-tenancy/theme-presets.ts +45 -45
  30. package/src/auth/multi-tenancy/types.ts +57 -57
  31. package/src/auth/multi-tenancy/users/api-schemas.ts +165 -165
  32. package/src/business/README.md +2 -2
  33. package/src/business/acquisition/activity-events.test.ts +250 -250
  34. package/src/business/acquisition/activity-events.ts +93 -93
  35. package/src/business/acquisition/api-schemas.test.ts +1883 -1843
  36. package/src/business/acquisition/api-schemas.ts +1493 -1500
  37. package/src/business/acquisition/build-templates.test.ts +240 -240
  38. package/src/business/acquisition/build-templates.ts +83 -41
  39. package/src/business/acquisition/crm-next-action.test.ts +262 -262
  40. package/src/business/acquisition/crm-next-action.ts +220 -220
  41. package/src/business/acquisition/crm-priority.test.ts +216 -216
  42. package/src/business/acquisition/crm-priority.ts +349 -349
  43. package/src/business/acquisition/crm-state-actions.test.ts +153 -151
  44. package/src/business/acquisition/deal-ownership.test.ts +351 -351
  45. package/src/business/acquisition/deal-ownership.ts +120 -120
  46. package/src/business/acquisition/derive-actions.test.ts +129 -104
  47. package/src/business/acquisition/derive-actions.ts +74 -84
  48. package/src/business/acquisition/index.ts +171 -170
  49. package/src/business/acquisition/ontology-validation.ts +309 -0
  50. package/src/business/acquisition/stateful.ts +30 -30
  51. package/src/business/acquisition/types.ts +396 -392
  52. package/src/business/clients/api-schemas.test.ts +115 -115
  53. package/src/business/clients/api-schemas.ts +158 -158
  54. package/src/business/clients/index.ts +1 -1
  55. package/src/business/crm/api-schemas.ts +40 -40
  56. package/src/business/crm/index.ts +1 -1
  57. package/src/business/deals/api-schemas.ts +87 -87
  58. package/src/business/deals/index.ts +1 -1
  59. package/src/business/index.ts +5 -5
  60. package/src/business/projects/types.ts +144 -144
  61. package/src/commands/queue/types/task.ts +15 -15
  62. package/src/execution/core/runner-types.ts +61 -61
  63. package/src/execution/core/sse-executions.ts +7 -7
  64. package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -10
  65. package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -16
  66. package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -4
  67. package/src/execution/engine/agent/core/types.ts +25 -25
  68. package/src/execution/engine/agent/index.ts +6 -6
  69. package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -24
  70. package/src/execution/engine/index.ts +443 -443
  71. package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +298 -298
  72. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.test.ts +55 -55
  73. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +107 -107
  74. package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.test.ts +48 -48
  75. package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.ts +99 -99
  76. package/src/execution/engine/tools/integration/server/adapters/apollo/index.ts +1 -1
  77. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -363
  78. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -162
  79. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -316
  80. package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.test.ts +18 -18
  81. package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.ts +194 -194
  82. package/src/execution/engine/tools/integration/server/adapters/clickup/index.ts +7 -7
  83. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -204
  84. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -105
  85. package/src/execution/engine/tools/integration/server/adapters/google-calendar/google-calendar-adapter.ts +428 -428
  86. package/src/execution/engine/tools/integration/server/adapters/google-calendar/index.ts +2 -2
  87. package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
  88. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1474
  89. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -103
  90. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -88
  91. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -141
  92. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -76
  93. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -182
  94. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -310
  95. package/src/execution/engine/tools/integration/service.test.ts +239 -239
  96. package/src/execution/engine/tools/integration/service.ts +172 -172
  97. package/src/execution/engine/tools/integration/tool.ts +255 -255
  98. package/src/execution/engine/tools/lead-service-types.ts +1005 -1005
  99. package/src/execution/engine/tools/messages.ts +43 -43
  100. package/src/execution/engine/tools/platform/acquisition/company-tools.ts +7 -7
  101. package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +6 -6
  102. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -6
  103. package/src/execution/engine/tools/platform/acquisition/types.ts +280 -280
  104. package/src/execution/engine/tools/platform/email/types.ts +97 -97
  105. package/src/execution/engine/tools/registry.ts +704 -704
  106. package/src/execution/engine/tools/tool-maps.ts +831 -831
  107. package/src/execution/engine/tools/types.ts +234 -234
  108. package/src/execution/engine/workflow/types.ts +202 -202
  109. package/src/execution/external/__tests__/api-schemas.test.ts +127 -127
  110. package/src/execution/external/api-schemas.ts +40 -40
  111. package/src/execution/external/index.ts +1 -1
  112. package/src/index.ts +18 -18
  113. package/src/integrations/credentials/__tests__/api-schemas.test.ts +420 -420
  114. package/src/integrations/credentials/api-schemas.ts +146 -146
  115. package/src/integrations/credentials/schemas.ts +200 -200
  116. package/src/integrations/oauth/__tests__/provider-registry.test.ts +7 -7
  117. package/src/integrations/oauth/provider-registry.ts +74 -74
  118. package/src/integrations/oauth/server/credentials.ts +43 -43
  119. package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +327 -327
  120. package/src/integrations/webhook-endpoints/api-schemas.ts +103 -103
  121. package/src/integrations/webhook-endpoints/types.ts +58 -58
  122. package/src/knowledge/README.md +33 -32
  123. package/src/knowledge/__tests__/queries.test.ts +633 -541
  124. package/src/knowledge/format.ts +100 -99
  125. package/src/knowledge/index.ts +5 -5
  126. package/src/knowledge/published.ts +5 -5
  127. package/src/knowledge/queries.ts +274 -222
  128. package/src/operations/activities/api-schemas.ts +80 -80
  129. package/src/operations/activities/types.ts +64 -64
  130. package/src/organization-model/README.md +149 -109
  131. package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -0
  132. package/src/organization-model/__tests__/defaults.test.ts +168 -194
  133. package/src/organization-model/__tests__/domains/actions.test.ts +78 -0
  134. package/src/organization-model/__tests__/domains/customers.test.ts +48 -44
  135. package/src/organization-model/__tests__/domains/entities.test.ts +56 -0
  136. package/src/organization-model/__tests__/domains/goals.test.ts +110 -96
  137. package/src/organization-model/__tests__/domains/identity.test.ts +4 -3
  138. package/src/organization-model/__tests__/domains/navigation.test.ts +222 -166
  139. package/src/organization-model/__tests__/domains/offerings.test.ts +83 -88
  140. package/src/organization-model/__tests__/domains/policies.test.ts +323 -0
  141. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +30 -30
  142. package/src/organization-model/__tests__/domains/resources.test.ts +396 -175
  143. package/src/organization-model/__tests__/domains/roles.test.ts +463 -402
  144. package/src/organization-model/__tests__/domains/statuses.test.ts +13 -10
  145. package/src/organization-model/__tests__/domains/systems.test.ts +209 -193
  146. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -0
  147. package/src/organization-model/__tests__/foundation.test.ts +47 -75
  148. package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -0
  149. package/src/organization-model/__tests__/graph.test.ts +1336 -149
  150. package/src/organization-model/__tests__/icons.test.ts +10 -1
  151. package/src/organization-model/__tests__/knowledge.test.ts +418 -61
  152. package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -0
  153. package/src/organization-model/__tests__/migration-helpers.test.ts +591 -0
  154. package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -94
  155. package/src/organization-model/__tests__/recursive-system-schema.test.ts +549 -0
  156. package/src/organization-model/__tests__/resolve.test.ts +303 -42
  157. package/src/organization-model/__tests__/schema.test.ts +863 -153
  158. package/src/organization-model/__tests__/surface-projection.test.ts +284 -174
  159. package/src/organization-model/catalogs/lead-gen.ts +144 -0
  160. package/src/organization-model/content-kinds/config.ts +36 -0
  161. package/src/organization-model/content-kinds/index.ts +78 -0
  162. package/src/organization-model/content-kinds/pipeline.ts +68 -0
  163. package/src/organization-model/content-kinds/registry.ts +44 -0
  164. package/src/organization-model/content-kinds/status.ts +71 -0
  165. package/src/organization-model/content-kinds/template.ts +83 -0
  166. package/src/organization-model/content-kinds/types.ts +117 -0
  167. package/src/organization-model/contracts.ts +27 -17
  168. package/src/organization-model/defaults.ts +489 -107
  169. package/src/organization-model/domains/actions.ts +333 -0
  170. package/src/organization-model/domains/customers.ts +10 -7
  171. package/src/organization-model/domains/entities.ts +144 -0
  172. package/src/organization-model/domains/goals.ts +9 -6
  173. package/src/organization-model/domains/knowledge.ts +128 -54
  174. package/src/organization-model/domains/navigation.ts +139 -416
  175. package/src/organization-model/domains/offerings.ts +15 -10
  176. package/src/organization-model/domains/policies.ts +102 -0
  177. package/src/organization-model/domains/projects.ts +6 -40
  178. package/src/organization-model/domains/prospecting.ts +395 -514
  179. package/src/organization-model/domains/resources.ts +173 -81
  180. package/src/organization-model/domains/roles.ts +96 -93
  181. package/src/organization-model/domains/sales.test.ts +218 -218
  182. package/src/organization-model/domains/sales.ts +380 -589
  183. package/src/organization-model/domains/shared.ts +8 -8
  184. package/src/organization-model/domains/statuses.ts +298 -89
  185. package/src/organization-model/domains/systems.ts +240 -38
  186. package/src/organization-model/foundation.ts +35 -48
  187. package/src/organization-model/graph/build.ts +1035 -279
  188. package/src/organization-model/graph/index.ts +4 -4
  189. package/src/organization-model/graph/link.ts +10 -10
  190. package/src/organization-model/graph/schema.ts +77 -56
  191. package/src/organization-model/graph/types.ts +75 -56
  192. package/src/organization-model/helpers.ts +312 -59
  193. package/src/organization-model/icons.ts +78 -66
  194. package/src/organization-model/index.ts +129 -16
  195. package/src/organization-model/migration-helpers.ts +252 -0
  196. package/src/organization-model/ontology.ts +661 -0
  197. package/src/organization-model/organization-graph.mdx +110 -89
  198. package/src/organization-model/organization-model.mdx +226 -171
  199. package/src/organization-model/published.ts +295 -139
  200. package/src/organization-model/resolve.ts +139 -21
  201. package/src/organization-model/schema.ts +841 -301
  202. package/src/organization-model/surface-projection.ts +212 -218
  203. package/src/organization-model/types.ts +181 -90
  204. package/src/platform/api/types.ts +38 -38
  205. package/src/platform/constants/versions.ts +3 -3
  206. package/src/platform/index.ts +23 -23
  207. package/src/platform/registry/__tests__/command-view.test.ts +5 -7
  208. package/src/platform/registry/__tests__/resource-link.test.ts +35 -30
  209. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +17 -32
  210. package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -0
  211. package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2051
  212. package/src/platform/registry/__tests__/validation.test.ts +1347 -1343
  213. package/src/platform/registry/command-view.ts +10 -10
  214. package/src/platform/registry/index.ts +103 -103
  215. package/src/platform/registry/resource-link.ts +32 -32
  216. package/src/platform/registry/resource-registry.ts +890 -878
  217. package/src/platform/registry/serialization.ts +295 -295
  218. package/src/platform/registry/serialized-types.ts +166 -166
  219. package/src/platform/registry/stats-types.ts +68 -68
  220. package/src/platform/registry/types.ts +425 -425
  221. package/src/platform/registry/validation.ts +745 -743
  222. package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
  223. package/src/platform/utils/validation.ts +425 -425
  224. package/src/projects/api-schemas.test.ts +39 -39
  225. package/src/projects/api-schemas.ts +291 -291
  226. package/src/reference/_generated/contracts.md +2389 -2121
  227. package/src/reference/glossary.md +76 -76
  228. package/src/scaffold-registry/__tests__/index.test.ts +206 -206
  229. package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
  230. package/src/scaffold-registry/index.ts +392 -392
  231. package/src/scaffold-registry/schema.ts +243 -243
  232. package/src/server.ts +289 -289
  233. package/src/supabase/database.types.ts +3153 -3093
  234. package/src/test-utils/README.md +37 -37
  235. package/src/test-utils/entities.ts +108 -108
  236. package/src/test-utils/fixtures/memberships.ts +82 -82
  237. package/src/test-utils/index.ts +12 -12
  238. package/src/test-utils/organization-model.ts +65 -65
  239. package/src/test-utils/published.ts +6 -6
  240. package/src/test-utils/rls/RLSTestContext.ts +588 -588
  241. package/src/test-utils/test-utils.test.ts +44 -49
  242. package/src/organization-model/__tests__/domains/operations.test.ts +0 -203
  243. package/src/organization-model/domains/features.ts +0 -31
  244. package/src/organization-model/domains/operations.ts +0 -85
@@ -1,20 +1,133 @@
1
+ export * from './content-kinds/index'
1
2
  export * from './schema'
2
3
  export * from './types'
4
+ export * from './ontology'
3
5
  export * from './contracts'
4
- export {
5
- ORGANIZATION_MODEL_ICON_TOKENS,
6
- OrganizationModelBuiltinIconTokenSchema,
7
- OrganizationModelIconTokenSchema
8
- } from './icons'
9
- export * from './defaults'
10
- export * from './resolve'
11
- export * from './foundation'
12
- export * from './helpers'
13
- export * from './graph'
6
+ export {
7
+ ORGANIZATION_MODEL_ICON_TOKENS,
8
+ OrganizationModelBuiltinIconTokenSchema,
9
+ OrganizationModelIconTokenSchema
10
+ } from './icons'
11
+ export * from './defaults'
12
+ export * from './resolve'
13
+ export * from './foundation'
14
+ export * from './surface-projection'
15
+ export * from './helpers'
16
+ export * from './migration-helpers'
17
+ export * from './graph'
18
+ export * from './catalogs/lead-gen'
14
19
  export * from './domains/branding'
15
- export * from './domains/sales'
16
- export * from './domains/projects'
17
- export * from './domains/features'
18
- export * from './domains/prospecting'
19
- export * from './domains/systems'
20
- export * from './domains/resources'
20
+ // Phase 4: OrganizationModelSalesSchema, OrganizationModelProspectingSchema,
21
+ // OrganizationModelProjectsSchema removed. Business-logic exports (StatefulPipelineDefinition,
22
+ // CRM_PIPELINE_DEFINITION, ProspectingBuildTemplateSchema, etc.) still re-exported below.
23
+ export {
24
+ SalesStageSemanticClassSchema,
25
+ SalesStageSchema,
26
+ SalesPipelineSchema,
27
+ CRM_DISCOVERY_REPLIED_STATE,
28
+ CRM_DISCOVERY_LINK_SENT_STATE,
29
+ CRM_DISCOVERY_NUDGING_STATE,
30
+ CRM_DISCOVERY_BOOKING_CANCELLED_STATE,
31
+ CRM_REPLY_SENT_STATE,
32
+ CRM_FOLLOWUP_1_SENT_STATE,
33
+ CRM_FOLLOWUP_2_SENT_STATE,
34
+ CRM_FOLLOWUP_3_SENT_STATE,
35
+ CRM_PIPELINE_DEFINITION,
36
+ CRM_PRIORITY_BUCKETS,
37
+ DEFAULT_CRM_PRIORITY_RULE_CONFIG,
38
+ DEFAULT_CRM_NEXT_ACTION_RULE_CONFIG,
39
+ ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE,
40
+ ACQ_LIST_COMPANIES_LEAD_GEN_PIPELINE,
41
+ LEAD_GEN_PIPELINE_DEFINITIONS,
42
+ findPipeline,
43
+ getValidStatesForStage,
44
+ LEAD_GEN_STAGE_CATALOG
45
+ } from './domains/sales'
46
+ export type {
47
+ StatefulStateDefinition,
48
+ StatefulStageDefinition,
49
+ StatefulPipelineDefinition,
50
+ CrmPriorityBucketKey,
51
+ CrmPriorityBucketDefinition,
52
+ CrmPriorityRuleConfig,
53
+ CrmNextActionMapping,
54
+ CrmNextActionRuleConfig
55
+ } from './domains/sales'
56
+ export {
57
+ ProspectingLifecycleStageSchema,
58
+ RecordColumnConfigSchema,
59
+ RecordColumnsConfigSchema,
60
+ CredentialRequirementSchema,
61
+ ProspectingBuildTemplateStepSchema,
62
+ ProspectingBuildTemplateSchema,
63
+ PROSPECTING_STEPS,
64
+ ACTION_REGISTRY,
65
+ findActionById
66
+ } from './domains/prospecting'
67
+ export type {
68
+ ListBuilderStep,
69
+ RecordColumnConfig,
70
+ CredentialRequirement,
71
+ TemplateName,
72
+ StepName,
73
+ ActionRegistry
74
+ } from './domains/prospecting'
75
+ export { ProjectsDomainStateSchema } from './domains/projects'
76
+ export * from './domains/systems'
77
+ export * from './domains/resources'
78
+ export {
79
+ DEFAULT_ORGANIZATION_MODEL_NAVIGATION,
80
+ getSortedSidebarEntries,
81
+ NavigationGroupSchema,
82
+ OrganizationModelNavigationSchema,
83
+ SidebarNavigationSchema,
84
+ SidebarNodeSchema,
85
+ SidebarSectionSchema,
86
+ SidebarSurfaceTargetsSchema,
87
+ SurfaceDefinitionSchema,
88
+ SurfaceTypeSchema
89
+ } from './domains/navigation'
90
+ export {
91
+ EntitiesDomainSchema,
92
+ EntityIdSchema,
93
+ EntityLinkKindSchema,
94
+ EntityLinkSchema,
95
+ EntitySchema
96
+ } from './domains/entities'
97
+ export {
98
+ KnowledgeDomainSchema,
99
+ KnowledgeLinkSchema,
100
+ KnowledgeTargetKindSchema,
101
+ KnowledgeTargetRefSchema,
102
+ OrgKnowledgeKindSchema,
103
+ OrgKnowledgeNodeSchema
104
+ } from './domains/knowledge'
105
+ export * from './domains/roles'
106
+ export * from './domains/identity'
107
+ export * from './domains/policies'
108
+ export {
109
+ ActionsDomainSchema,
110
+ ActionIdSchema,
111
+ ActionInvocationKindSchema,
112
+ ActionInvocationSchema,
113
+ ActionRefSchema,
114
+ ActionSchema,
115
+ ActionScopeSchema,
116
+ ApiEndpointInvocationSchema,
117
+ CRM_ACTION_ENTRIES,
118
+ DEFAULT_ORGANIZATION_MODEL_ACTIONS,
119
+ findOrganizationActionById,
120
+ LEAD_GEN_ACTION_ENTRIES,
121
+ McpToolInvocationSchema,
122
+ ScriptExecutionInvocationSchema,
123
+ SlashCommandInvocationSchema
124
+ } from './domains/actions'
125
+ export type {
126
+ ActionsDomain,
127
+ Action as OrganizationAction,
128
+ ActionId,
129
+ ActionInvocation,
130
+ ActionInvocationKind,
131
+ ActionRef,
132
+ ActionScope
133
+ } from './domains/actions'
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Migration helpers — Phase 4 internals swap
3
+ *
4
+ * External signatures are UNCHANGED from the pre-Phase-4 era so callers remain
5
+ * mechanical. Internally, compatibility reads for old compound-domain data
6
+ * walk System.content via listAllSystems() and filter by (kind, type).
7
+ *
8
+ * Compatibility registry entries read:
9
+ * 'schema:pipeline' — one pipeline per owning system
10
+ * 'schema:stage' — stage within a pipeline; parentContentId = pipeline local id
11
+ * 'schema:template' — prospecting build template
12
+ * 'schema:template-step' — step within a template; parentContentId = template local id
13
+ * 'schema:status-flow' — status set for a project/milestone/task scope
14
+ * 'schema:status' — single status within a flow; parentContentId = status-flow local id
15
+ */
16
+
17
+ import type { OrganizationModel } from './types'
18
+ import type { z } from 'zod'
19
+ import type { SalesPipelineSchema, SalesStageSchema } from './domains/sales'
20
+ import type { ProspectingBuildTemplateSchema, ProspectingLifecycleStageSchema } from './domains/prospecting'
21
+ import type { ProjectsDomainStateSchema } from './domains/projects'
22
+ import { listAllSystems } from './helpers'
23
+
24
+ // Compatibility boundary: these helpers intentionally keep old tenant
25
+ // System.content schema nodes readable. New schema/catalog authoring belongs in
26
+ // System.ontology, and new system-local settings belong in System.config.
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Locally-scoped inferred types — external signatures use these shapes.
30
+ // ---------------------------------------------------------------------------
31
+ type Pipeline = z.infer<typeof SalesPipelineSchema>
32
+ type Stage = z.infer<typeof SalesStageSchema>
33
+ type BuildTemplate = z.infer<typeof ProspectingBuildTemplateSchema>
34
+ type ProspectingStage = z.infer<typeof ProspectingLifecycleStageSchema>
35
+ type ProjectStatus = z.infer<typeof ProjectsDomainStateSchema>
36
+
37
+ // ---------------------------------------------------------------------------
38
+ // Sales — Pipelines + Stages
39
+ // ---------------------------------------------------------------------------
40
+
41
+ /**
42
+ * Return all sales pipelines defined in the model, each tagged with the
43
+ * system path of the owning system.
44
+ *
45
+ * Compatibility bridge: walks every system via listAllSystems(), finds content nodes where
46
+ * (kind, type) === ('schema', 'pipeline'), and reconstructs the Pipeline shape
47
+ * by pulling sibling stage content nodes (parentContentId === pipeline local id).
48
+ */
49
+ export function getAllPipelines(model: OrganizationModel): Array<{ systemPath: string; pipeline: Pipeline }> {
50
+ const results: Array<{ systemPath: string; pipeline: Pipeline }> = []
51
+
52
+ for (const { path: systemPath, system } of listAllSystems(model)) {
53
+ const content = system.content ?? {}
54
+
55
+ for (const [localId, node] of Object.entries(content)) {
56
+ if (node.kind !== 'schema' || node.type !== 'pipeline') continue
57
+
58
+ const data = (node.data ?? {}) as Record<string, unknown>
59
+ const stages: Stage[] = Object.entries(content)
60
+ .filter(([, s]) => s.kind === 'schema' && s.type === 'stage' && s.parentContentId === localId)
61
+ .map(([stageLocalId, s]) => {
62
+ const sd = (s.data ?? {}) as Record<string, unknown>
63
+ return {
64
+ id: stageLocalId,
65
+ label: s.label ?? stageLocalId,
66
+ order: typeof sd.order === 'number' ? sd.order : 0,
67
+ semanticClass: (sd.semanticClass as Stage['semanticClass']) ?? 'open',
68
+ surfaceIds: Array.isArray(sd.surfaceIds) ? (sd.surfaceIds as string[]) : [],
69
+ resourceIds: Array.isArray(sd.resourceIds) ? (sd.resourceIds as string[]) : [],
70
+ color: typeof sd.color === 'string' ? sd.color : undefined
71
+ } satisfies Stage
72
+ })
73
+ .sort((a, b) => a.order - b.order)
74
+
75
+ const pipeline: Pipeline = {
76
+ id: localId,
77
+ label: node.label ?? localId,
78
+ entityId: typeof data.entityId === 'string' ? data.entityId : '',
79
+ stages,
80
+ ...(typeof node.description === 'string' ? { description: node.description } : {})
81
+ }
82
+
83
+ results.push({ systemPath, pipeline })
84
+ }
85
+ }
86
+
87
+ return results
88
+ }
89
+
90
+ /**
91
+ * Return the stages belonging to a given pipeline, identified by systemPath + pipelineLocalId.
92
+ *
93
+ * Compatibility bridge: resolves the system at systemPath, filters its content for stage nodes
94
+ * where parentContentId === pipelineLocalId.
95
+ *
96
+ * @param model - The resolved organization model.
97
+ * @param systemPath - Dot-separated path to the owning system (e.g. 'sales.crm').
98
+ * @param pipelineLocalId - The local content id of the target pipeline node.
99
+ */
100
+ export function getStagesInPipeline(model: OrganizationModel, systemPath: string, pipelineLocalId: string): Stage[] {
101
+ const allSystems = listAllSystems(model)
102
+ const entry = allSystems.find((s) => s.path === systemPath)
103
+ if (!entry) return []
104
+
105
+ const content = entry.system.content ?? {}
106
+ return Object.entries(content)
107
+ .filter(([, node]) => node.kind === 'schema' && node.type === 'stage' && node.parentContentId === pipelineLocalId)
108
+ .map(([stageLocalId, s]) => {
109
+ const sd = (s.data ?? {}) as Record<string, unknown>
110
+ return {
111
+ id: stageLocalId,
112
+ label: s.label ?? stageLocalId,
113
+ order: typeof sd.order === 'number' ? sd.order : 0,
114
+ semanticClass: (sd.semanticClass as Stage['semanticClass']) ?? 'open',
115
+ surfaceIds: Array.isArray(sd.surfaceIds) ? (sd.surfaceIds as string[]) : [],
116
+ resourceIds: Array.isArray(sd.resourceIds) ? (sd.resourceIds as string[]) : [],
117
+ color: typeof sd.color === 'string' ? sd.color : undefined
118
+ } satisfies Stage
119
+ })
120
+ .sort((a, b) => a.order - b.order)
121
+ }
122
+
123
+ // ---------------------------------------------------------------------------
124
+ // Prospecting — Build templates
125
+ // ---------------------------------------------------------------------------
126
+
127
+ /**
128
+ * Return all prospecting build templates defined in the model.
129
+ *
130
+ * Compatibility bridge: walks every system, finds content nodes where
131
+ * (kind, type) === ('schema', 'template'), reconstructs BuildTemplate shape
132
+ * by pulling sibling template-step nodes (parentContentId === template local id).
133
+ */
134
+ export function getAllBuildTemplates(model: OrganizationModel): BuildTemplate[] {
135
+ const results: BuildTemplate[] = []
136
+
137
+ for (const { system } of listAllSystems(model)) {
138
+ const content = system.content ?? {}
139
+
140
+ for (const [localId, node] of Object.entries(content)) {
141
+ if (node.kind !== 'schema' || node.type !== 'template') continue
142
+ const nd = (node.data ?? {}) as Record<string, unknown>
143
+
144
+ const steps = Object.entries(content)
145
+ .filter(([, s]) => s.kind === 'schema' && s.type === 'template-step' && s.parentContentId === localId)
146
+ .map(([stepLocalId, s]) => {
147
+ const sd = (s.data ?? {}) as Record<string, unknown>
148
+ return {
149
+ id: stepLocalId,
150
+ label: s.label ?? stepLocalId,
151
+ ...(s.description ? { description: s.description } : {}),
152
+ // Pass through all data fields — template-step payload is richer than Pipeline;
153
+ // Bridge readers preserve the historical shape for round-trip fidelity.
154
+ ...sd
155
+ }
156
+ })
157
+
158
+ results.push({
159
+ id: localId,
160
+ label: node.label ?? localId,
161
+ ...(node.description ? { description: node.description } : {}),
162
+ ...(typeof nd.color === 'string' ? { color: nd.color } : {}),
163
+ // BuildTemplate requires steps array — cast via spread; Wave 4 adds type-safe assertions.
164
+ steps: steps as BuildTemplate['steps']
165
+ })
166
+ }
167
+ }
168
+
169
+ return results
170
+ }
171
+
172
+ /**
173
+ * Return the prospecting lifecycle stages for a given entity kind.
174
+ *
175
+ * Compatibility bridge: walks every system, finds content nodes where
176
+ * (kind, type) === ('schema', 'stage') AND data.entityKind === kind.
177
+ * Prospecting stages are distinguished from pipeline stages by the presence of
178
+ * data.entityKind ('company' | 'contact') retained on bridge compatibility nodes.
179
+ *
180
+ * @param kind - 'company' or 'contact'.
181
+ */
182
+ export function getAllProspectingStages(model: OrganizationModel, kind: 'company' | 'contact'): ProspectingStage[] {
183
+ const results: ProspectingStage[] = []
184
+
185
+ for (const { system } of listAllSystems(model)) {
186
+ const content = system.content ?? {}
187
+
188
+ for (const [localId, node] of Object.entries(content)) {
189
+ if (node.kind !== 'schema' || node.type !== 'stage') continue
190
+ const sd = (node.data ?? {}) as Record<string, unknown>
191
+ if (sd.entityKind !== kind) continue
192
+
193
+ results.push({
194
+ id: localId,
195
+ label: node.label ?? localId,
196
+ order: typeof sd.order === 'number' ? sd.order : 0,
197
+ ...(typeof sd.color === 'string' ? { color: sd.color } : {}),
198
+ ...(node.description ? { description: node.description } : {})
199
+ } satisfies ProspectingStage)
200
+ }
201
+ }
202
+
203
+ return results.sort((a, b) => a.order - b.order)
204
+ }
205
+
206
+ // ---------------------------------------------------------------------------
207
+ // Projects — Statuses
208
+ // ---------------------------------------------------------------------------
209
+
210
+ /**
211
+ * Return the project statuses for a given entity type.
212
+ *
213
+ * Compatibility bridge: walks every system, finds status-flow content nodes where
214
+ * data.appliesTo === appliesTo, then collects their child status nodes
215
+ * (parentContentId === status-flow local id), sorted by order.
216
+ *
217
+ * @param appliesTo - 'project', 'milestone', or 'task'.
218
+ */
219
+ export function getAllProjectStatuses(
220
+ model: OrganizationModel,
221
+ appliesTo: 'project' | 'milestone' | 'task'
222
+ ): ProjectStatus[] {
223
+ const results: ProjectStatus[] = []
224
+
225
+ for (const { system } of listAllSystems(model)) {
226
+ const content = system.content ?? {}
227
+
228
+ // Find the status-flow node for this appliesTo scope.
229
+ for (const [flowLocalId, flowNode] of Object.entries(content)) {
230
+ if (flowNode.kind !== 'schema' || flowNode.type !== 'status-flow') continue
231
+ const fd = (flowNode.data ?? {}) as Record<string, unknown>
232
+ if (fd.appliesTo !== appliesTo) continue
233
+
234
+ // Collect child status nodes.
235
+ for (const [statusLocalId, statusNode] of Object.entries(content)) {
236
+ if (statusNode.kind !== 'schema' || statusNode.type !== 'status') continue
237
+ if (statusNode.parentContentId !== flowLocalId) continue
238
+
239
+ const sd = (statusNode.data ?? {}) as Record<string, unknown>
240
+ results.push({
241
+ id: statusLocalId,
242
+ label: statusNode.label ?? statusLocalId,
243
+ order: typeof sd.order === 'number' ? sd.order : 0,
244
+ ...(typeof sd.color === 'string' ? { color: sd.color } : {}),
245
+ ...(statusNode.description ? { description: statusNode.description } : {})
246
+ } satisfies ProjectStatus)
247
+ }
248
+ }
249
+ }
250
+
251
+ return results.sort((a, b) => a.order - b.order)
252
+ }