@elevasis/core 0.23.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/index.d.ts +4343 -2690
  2. package/dist/index.js +1101 -156
  3. package/dist/knowledge/index.d.ts +574 -210
  4. package/dist/knowledge/index.js +104 -1
  5. package/dist/organization-model/index.d.ts +4343 -2690
  6. package/dist/organization-model/index.js +1101 -156
  7. package/dist/test-utils/index.d.ts +483 -109
  8. package/dist/test-utils/index.js +904 -144
  9. package/package.json +3 -3
  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 -12
  13. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2137 -2093
  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 +1492 -1497
  37. package/src/business/acquisition/build-templates.test.ts +240 -240
  38. package/src/business/acquisition/build-templates.ts +98 -98
  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 -153
  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 -396
  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 +195 -197
  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 +32 -32
  123. package/src/knowledge/__tests__/queries.test.ts +626 -535
  124. package/src/knowledge/format.ts +99 -99
  125. package/src/knowledge/index.ts +5 -5
  126. package/src/knowledge/published.ts +5 -5
  127. package/src/knowledge/queries.ts +269 -218
  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 -149
  131. package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -210
  132. package/src/organization-model/__tests__/defaults.test.ts +168 -168
  133. package/src/organization-model/__tests__/domains/actions.test.ts +78 -56
  134. package/src/organization-model/__tests__/domains/customers.test.ts +299 -299
  135. package/src/organization-model/__tests__/domains/entities.test.ts +56 -56
  136. package/src/organization-model/__tests__/domains/goals.test.ts +493 -493
  137. package/src/organization-model/__tests__/domains/identity.test.ts +280 -280
  138. package/src/organization-model/__tests__/domains/navigation.test.ts +268 -268
  139. package/src/organization-model/__tests__/domains/offerings.test.ts +414 -414
  140. package/src/organization-model/__tests__/domains/policies.test.ts +323 -323
  141. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +293 -293
  142. package/src/organization-model/__tests__/domains/resources.test.ts +387 -277
  143. package/src/organization-model/__tests__/domains/roles.test.ts +463 -463
  144. package/src/organization-model/__tests__/domains/statuses.test.ts +246 -246
  145. package/src/organization-model/__tests__/domains/systems.test.ts +209 -209
  146. package/src/organization-model/__tests__/domains/topology.test.ts +188 -0
  147. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -361
  148. package/src/organization-model/__tests__/foundation.test.ts +77 -77
  149. package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -144
  150. package/src/organization-model/__tests__/graph.test.ts +1312 -862
  151. package/src/organization-model/__tests__/icons.test.ts +10 -1
  152. package/src/organization-model/__tests__/knowledge.test.ts +251 -15
  153. package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -438
  154. package/src/organization-model/__tests__/migration-helpers.test.ts +591 -591
  155. package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -103
  156. package/src/organization-model/__tests__/recursive-system-schema.test.ts +535 -506
  157. package/src/organization-model/__tests__/resolve.test.ts +274 -164
  158. package/src/organization-model/__tests__/schema.test.ts +844 -301
  159. package/src/organization-model/__tests__/surface-projection.test.ts +284 -284
  160. package/src/organization-model/catalogs/lead-gen.ts +144 -144
  161. package/src/organization-model/content-kinds/config.ts +36 -36
  162. package/src/organization-model/content-kinds/index.ts +76 -72
  163. package/src/organization-model/content-kinds/pipeline.ts +68 -68
  164. package/src/organization-model/content-kinds/registry.ts +44 -44
  165. package/src/organization-model/content-kinds/status.ts +71 -71
  166. package/src/organization-model/content-kinds/template.ts +83 -83
  167. package/src/organization-model/content-kinds/types.ts +117 -117
  168. package/src/organization-model/contracts.ts +27 -27
  169. package/src/organization-model/defaults.ts +42 -50
  170. package/src/organization-model/domains/actions.ts +333 -239
  171. package/src/organization-model/domains/customers.ts +78 -78
  172. package/src/organization-model/domains/entities.ts +144 -144
  173. package/src/organization-model/domains/goals.ts +83 -83
  174. package/src/organization-model/domains/knowledge.ts +117 -101
  175. package/src/organization-model/domains/navigation.ts +139 -139
  176. package/src/organization-model/domains/offerings.ts +71 -71
  177. package/src/organization-model/domains/policies.ts +102 -102
  178. package/src/organization-model/domains/projects.ts +14 -14
  179. package/src/organization-model/domains/prospecting.ts +395 -395
  180. package/src/organization-model/domains/resources.ts +202 -124
  181. package/src/organization-model/domains/roles.ts +96 -96
  182. package/src/organization-model/domains/sales.test.ts +218 -218
  183. package/src/organization-model/domains/sales.ts +380 -380
  184. package/src/organization-model/domains/shared.ts +63 -63
  185. package/src/organization-model/domains/statuses.ts +339 -339
  186. package/src/organization-model/domains/systems.ts +217 -172
  187. package/src/organization-model/domains/topology.ts +261 -0
  188. package/src/organization-model/foundation.ts +75 -75
  189. package/src/organization-model/graph/build.ts +1043 -867
  190. package/src/organization-model/graph/index.ts +4 -4
  191. package/src/organization-model/graph/link.ts +10 -10
  192. package/src/organization-model/graph/schema.ts +75 -68
  193. package/src/organization-model/graph/types.ts +71 -64
  194. package/src/organization-model/helpers.ts +289 -241
  195. package/src/organization-model/icons.ts +78 -66
  196. package/src/organization-model/index.ts +128 -125
  197. package/src/organization-model/migration-helpers.ts +247 -244
  198. package/src/organization-model/ontology.ts +658 -0
  199. package/src/organization-model/organization-graph.mdx +110 -90
  200. package/src/organization-model/organization-model.mdx +225 -213
  201. package/src/organization-model/published.ts +299 -222
  202. package/src/organization-model/resolve.ts +146 -91
  203. package/src/organization-model/schema.ts +818 -659
  204. package/src/organization-model/surface-projection.ts +212 -212
  205. package/src/organization-model/types.ts +179 -155
  206. package/src/platform/api/types.ts +38 -38
  207. package/src/platform/constants/versions.ts +3 -3
  208. package/src/platform/index.ts +23 -23
  209. package/src/platform/registry/__tests__/command-view.test.ts +10 -10
  210. package/src/platform/registry/__tests__/resource-link.test.ts +35 -35
  211. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +20 -20
  212. package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -245
  213. package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2053
  214. package/src/platform/registry/__tests__/validation.test.ts +1444 -1259
  215. package/src/platform/registry/command-view.ts +10 -10
  216. package/src/platform/registry/index.ts +103 -103
  217. package/src/platform/registry/resource-link.ts +32 -32
  218. package/src/platform/registry/resource-registry.ts +886 -886
  219. package/src/platform/registry/serialization.ts +295 -295
  220. package/src/platform/registry/serialized-types.ts +166 -166
  221. package/src/platform/registry/stats-types.ts +68 -68
  222. package/src/platform/registry/types.ts +425 -425
  223. package/src/platform/registry/validation.ts +876 -684
  224. package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
  225. package/src/platform/utils/validation.ts +425 -425
  226. package/src/projects/api-schemas.test.ts +39 -39
  227. package/src/projects/api-schemas.ts +291 -291
  228. package/src/reference/_generated/contracts.md +2136 -2093
  229. package/src/reference/glossary.md +76 -76
  230. package/src/scaffold-registry/__tests__/index.test.ts +206 -206
  231. package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
  232. package/src/scaffold-registry/index.ts +392 -392
  233. package/src/scaffold-registry/schema.ts +243 -243
  234. package/src/server.ts +289 -289
  235. package/src/supabase/database.types.ts +3 -0
  236. package/src/test-utils/README.md +37 -37
  237. package/src/test-utils/entities.ts +108 -108
  238. package/src/test-utils/fixtures/memberships.ts +82 -82
  239. package/src/test-utils/index.ts +12 -12
  240. package/src/test-utils/organization-model.ts +65 -65
  241. package/src/test-utils/published.ts +6 -6
  242. package/src/test-utils/rls/RLSTestContext.ts +588 -588
  243. package/src/test-utils/test-utils.test.ts +44 -44
@@ -1,425 +1,425 @@
1
- /**
2
- * Resource Registry type definitions
3
- */
4
-
5
- import type { IntegrationType } from '../../execution/engine/tools/integration'
6
- import type { ResourceEntry, ResourceGovernanceStatus } from '../../organization-model/domains/resources'
7
- import type { SystemEntry } from '../../organization-model/domains/systems'
8
- import type { ResourceCategory, ResourceLink } from './resource-link'
9
-
10
- // ============================================================================
11
- // Core Resource Type Definitions
12
- // ============================================================================
13
-
14
- /**
15
- * Environment/deployment status for resources
16
- */
17
- export type ResourceStatus = 'dev' | 'prod'
18
-
19
- /**
20
- * All resource types in the platform
21
- * Used as the discriminator field in ResourceDefinition
22
- */
23
- export type ResourceType = 'agent' | 'workflow' | 'trigger' | 'integration' | 'external' | 'human'
24
-
25
- /**
26
- * Executable resource types (subset of ResourceType)
27
- * These resources can be directly executed by the execution engine
28
- */
29
- export type ExecutableResourceType = 'workflow' | 'agent'
30
-
31
- export type ResourceSystemSummary = Pick<SystemEntry, 'id' | 'title' | 'description' | 'kind' | 'lifecycle'>
32
-
33
- // ============================================================================
34
- // Base Resource Interface
35
- // ============================================================================
36
-
37
- /**
38
- * Base interface for ALL platform resources
39
- * Shared by both executable (agents, workflows) and non-executable (triggers, integrations, etc.) resources
40
- */
41
- export interface ResourceDefinition {
42
- /** Unique resource identifier */
43
- resourceId: string
44
-
45
- /** Display name */
46
- name: string
47
-
48
- /** Purpose and functionality description */
49
- description: string
50
-
51
- /** Version for change tracking and evolution */
52
- version: string
53
-
54
- /** Resource type discriminator */
55
- type: ResourceType
56
-
57
- /** Environment/deployment status */
58
- status: ResourceStatus
59
-
60
- /** Graph links to Organization Model nodes */
61
- links?: ResourceLink[]
62
-
63
- /** Infrastructure category for filtering */
64
- category?: ResourceCategory
65
-
66
- /** Whether the agent supports multi-turn sessions (agents only) */
67
- sessionCapable?: boolean
68
-
69
- /** Whether the resource is local (monorepo) or remote (externally deployed) */
70
- origin?: 'local' | 'remote'
71
-
72
- /** OM System membership — dot-separated system path (e.g. "sys.lead-gen"), when backed by a Resource descriptor */
73
- systemPath?: string
74
-
75
- /** Display metadata for the owning OM System */
76
- system?: ResourceSystemSummary
77
-
78
- /** Governance lifecycle status from the OM Resource descriptor */
79
- governanceStatus?: ResourceGovernanceStatus
80
-
81
- /** Whether this resource is archived and should be excluded from registration and deployment */
82
- archived?: boolean
83
- }
84
-
85
- export type RuntimeResourceDescriptor = Extract<ResourceEntry, { kind: 'workflow' | 'agent' | 'integration' }>
86
-
87
- export type DescriptorBackedResourceDefinition<
88
- TResource extends RuntimeResourceDescriptor = RuntimeResourceDescriptor
89
- > = Omit<ResourceDefinition, 'resourceId' | 'type'> & {
90
- /** OM descriptor that owns canonical identity and governance metadata. */
91
- resource: TResource
92
- resourceId?: never
93
- type?: never
94
- }
95
-
96
- export type BoundResourceDefinition<TResource extends RuntimeResourceDescriptor = RuntimeResourceDescriptor> = Omit<
97
- DescriptorBackedResourceDefinition<TResource>,
98
- 'resource'
99
- > &
100
- ResourceDefinition & {
101
- resource: TResource
102
- resourceId: TResource['id']
103
- type: TResource['kind']
104
- }
105
-
106
- export function bindResourceDescriptor<TResource extends RuntimeResourceDescriptor>(
107
- definition: DescriptorBackedResourceDefinition<TResource>
108
- ): BoundResourceDefinition<TResource> {
109
- const { resource, ...rest } = definition
110
-
111
- return {
112
- ...rest,
113
- resource,
114
- resourceId: resource.id,
115
- type: resource.kind
116
- } as BoundResourceDefinition<TResource>
117
- }
118
-
119
- /**
120
- * Resource list for organization
121
- * Returns ResourceDefinition metadata (not full definitions)
122
- */
123
- export interface ResourceList {
124
- workflows: ResourceDefinition[]
125
- agents: ResourceDefinition[]
126
- total: number
127
- organizationName: string
128
- environment?: 'dev' | 'prod'
129
- }
130
-
131
- // ============================================================================
132
- // Resource Manifest Types
133
- // ============================================================================
134
-
135
- // ============================================================================
136
- // Trigger Configuration Types
137
- // ============================================================================
138
-
139
- /** Webhook provider identifiers */
140
- export type WebhookProviderType = 'cal-com' | 'stripe' | 'signature-api' | 'instantly' | 'apify' | 'test'
141
-
142
- /** Webhook trigger configuration */
143
- export interface WebhookTriggerConfig {
144
- /** Provider identifier */
145
- provider: WebhookProviderType
146
- /** Event type for documentation (not used for matching - workflow handles routing) */
147
- event?: string
148
- /** Optional filtering (e.g., specific form ID for Fillout) */
149
- filter?: Record<string, string>
150
- /** References credential in credentials table for per-org webhook secrets */
151
- credentialName?: string
152
- }
153
-
154
- /** Schedule trigger configuration */
155
- export interface ScheduleTriggerConfig {
156
- /** Cron expression (e.g., '0 6 * * *') */
157
- cron: string
158
- /** Optional timezone (default: UTC) */
159
- timezone?: string
160
- }
161
-
162
- /** Event trigger configuration */
163
- export interface EventTriggerConfig {
164
- /** Internal event type */
165
- eventType: string
166
- /** Event source */
167
- source?: string
168
- }
169
-
170
- /** Union of all trigger configs */
171
- export type TriggerConfig = WebhookTriggerConfig | ScheduleTriggerConfig | EventTriggerConfig
172
-
173
- // ============================================================================
174
- // Trigger Definition
175
- // ============================================================================
176
-
177
- /**
178
- * Trigger metadata - entry points that initiate resource execution
179
- *
180
- * Triggers represent how executions start: webhooks from external services,
181
- * scheduled cron jobs, platform events, or manual user actions.
182
- *
183
- * BREAKING CHANGES (2025-11-30):
184
- * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
185
- * - Field renames: `id` -> `resourceId` (inherited), `type` -> `triggerType`
186
- * - Relationship rename: `invokes` -> `triggers` (unified vocabulary)
187
- * - New required fields: `version` (inherited), `type: 'trigger'` (inherited)
188
- * - triggers object now includes `externalResources` option
189
- *
190
- * @example
191
- * // TriggerDefinition - metadata only
192
- * {
193
- * resourceId: 'trigger-new-order',
194
- * type: 'trigger',
195
- * triggerType: 'webhook',
196
- * name: 'New Order',
197
- * description: 'Webhook from Shopify on new orders',
198
- * version: '1.0.0',
199
- * status: 'prod',
200
- * webhookPath: '/webhooks/shopify/orders'
201
- * }
202
- *
203
- * // Relationships declared in ResourceRelationships (not on TriggerDefinition):
204
- * // relationships: {
205
- * // 'trigger-new-order': { triggers: { workflows: ['order-fulfillment-workflow'] } }
206
- * // }
207
- */
208
- export interface TriggerDefinition extends ResourceDefinition {
209
- /** Resource type discriminator (narrowed from base union) */
210
- type: 'trigger'
211
-
212
- /** Trigger mechanism type (renamed from 'type' to avoid collision with base type discriminator) */
213
- triggerType: 'webhook' | 'schedule' | 'manual' | 'event'
214
-
215
- /** Type-specific configuration */
216
- config?: TriggerConfig
217
-
218
- // Legacy fields (deprecated, use config instead)
219
- /** For webhook triggers: path like '/webhooks/shopify/orders' */
220
- webhookPath?: string
221
- /** For schedule triggers: cron expression like '0 6 * * *' */
222
- schedule?: string
223
- /** For event triggers: event type like 'low-stock-alert' */
224
- eventType?: string
225
-
226
- // NOTE: What this trigger starts is declared in ResourceRelationships, not here
227
- // This prevents duplication - triggers are forward-declared in relationships
228
- }
229
-
230
- /**
231
- * Integration metadata - external service connections
232
- *
233
- * References credentials table for actual connection. No connection status
234
- * stored here (queried at runtime from credentials table).
235
- *
236
- * BREAKING CHANGES (2025-11-30):
237
- * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
238
- * - Field renames: `id` -> `resourceId` (inherited)
239
- * - New required field: `status` (inherited) - organizations must add status to all integrations
240
- * - New required field: `version` (inherited) - organizations must add version to all integrations
241
- * - New required field: `type: 'integration'` (inherited) - resource type discriminator
242
- *
243
- * @example
244
- * {
245
- * resourceId: 'integration-shopify-prod',
246
- * type: 'integration',
247
- * provider: 'shopify',
248
- * credentialName: 'shopify-prod',
249
- * name: 'Shopify Production',
250
- * description: 'E-commerce platform',
251
- * version: '1.0.0',
252
- * status: 'prod'
253
- * }
254
- */
255
- export interface IntegrationDefinition extends ResourceDefinition {
256
- /** Resource type discriminator (narrowed from base union) */
257
- type: 'integration'
258
-
259
- /** OM descriptor that owns canonical identity and governance metadata. */
260
- resource?: Extract<ResourceEntry, { kind: 'integration' }>
261
-
262
- /** Integration provider type */
263
- provider: IntegrationType
264
- /** References credentials table (e.g., 'shopify-prod', 'zendesk-api') */
265
- credentialName: string
266
- }
267
-
268
- /**
269
- * Explicit resource relationship declaration
270
- *
271
- * Single-direction only - Command View derives reverse relationships.
272
- * Agents/workflows declare what they trigger and use.
273
- *
274
- * @example
275
- * {
276
- * triggers: { workflows: ['order-fulfillment-workflow'] },
277
- * uses: { integrations: ['integration-shopify-prod', 'integration-postgres'] }
278
- * }
279
- */
280
- export interface RelationshipDeclaration {
281
- /** Resources this resource triggers */
282
- triggers?: {
283
- /** Agent resourceIds this resource triggers */
284
- agents?: string[]
285
- /** Workflow resourceIds this resource triggers */
286
- workflows?: string[]
287
- }
288
- /** Integrations this resource uses */
289
- uses?: {
290
- /** Integration IDs this resource uses */
291
- integrations?: string[]
292
- }
293
- }
294
-
295
- /**
296
- * Resource relationships map
297
- * Maps resourceId to its relationship declarations
298
- *
299
- * @example
300
- * {
301
- * 'order-processor-agent': {
302
- * triggers: { workflows: ['order-fulfillment-workflow'] },
303
- * uses: { integrations: ['integration-shopify-prod'] }
304
- * }
305
- * }
306
- */
307
- export type ResourceRelationships = Record<string, RelationshipDeclaration>
308
-
309
- // ============================================================================
310
- // External Resource Types
311
- // ============================================================================
312
-
313
- /**
314
- * External platform type
315
- * Supported third-party automation platforms
316
- */
317
- export type ExternalPlatform = 'n8n' | 'make' | 'zapier' | 'other'
318
-
319
- /**
320
- * External automation resource metadata
321
- *
322
- * Represents workflows/automations running on third-party platforms
323
- * (n8n, Make, Zapier, etc.) for visualization in Command View.
324
- *
325
- * NOTE: This is metadata ONLY for visualization. No execution logic,
326
- * no API integration with external platforms, no status syncing.
327
- *
328
- * BREAKING CHANGES (2025-11-30):
329
- * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
330
- * - Field renames: `id` -> `resourceId` (inherited)
331
- * - New required field: `version` (inherited) - organizations must add version to all external resources
332
- * - New required field: `type: 'external'` (inherited) - resource type discriminator
333
- * - REMOVED FIELD: `triggeredBy` - per relationship-consolidation design, all relationships are forward-only declarations
334
- *
335
- * @example
336
- * {
337
- * resourceId: 'external-n8n-order-sync',
338
- * type: 'external',
339
- * version: '1.0.0',
340
- * platform: 'n8n',
341
- * name: 'Shopify Order Sync',
342
- * description: 'Legacy n8n workflow for syncing Shopify orders',
343
- * status: 'prod',
344
- * platformUrl: 'https://n8n.client.com/workflow/123',
345
- * triggers: { workflows: ['order-fulfillment-workflow'] },
346
- * uses: { integrations: ['integration-shopify-prod'] }
347
- * }
348
- */
349
- export interface ExternalResourceDefinition extends ResourceDefinition {
350
- /** Resource type discriminator (narrowed from base union) */
351
- type: 'external'
352
-
353
- /** Platform type */
354
- platform: ExternalPlatform
355
-
356
- // Optional platform-specific metadata
357
- /** Link to external platform (e.g., n8n workflow editor URL) */
358
- platformUrl?: string
359
- /** Platform's internal ID/reference */
360
- externalId?: string
361
-
362
- /** What this external resource triggers (external -> internal) */
363
- triggers?: {
364
- /** Elevasis workflow resourceIds this external automation triggers */
365
- workflows?: string[]
366
- /** Elevasis agent resourceIds this external automation triggers */
367
- agents?: string[]
368
- }
369
-
370
- /** Integrations this external resource uses (shared credentials) */
371
- uses?: {
372
- /** Integration IDs this external automation uses */
373
- integrations?: string[]
374
- }
375
-
376
- // NOTE: triggeredBy field removed - per relationship-consolidation design,
377
- // all relationships are forward-only declarations. Graph edges are built
378
- // from forward declarations only.
379
- }
380
-
381
- /**
382
- * Human Checkpoint definition - human decision points in automation
383
- *
384
- * Represents where human judgment is deployed in the automation landscape.
385
- * Tasks with matching command_queue_group are routed to this checkpoint.
386
- *
387
- * BREAKING CHANGES (2025-11-30):
388
- * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
389
- * - Field renames: `id` -> `resourceId` (inherited)
390
- * - description is now REQUIRED (was optional) - organizations must add description to all human checkpoints
391
- * - New required field: `version` (inherited) - organizations must add version to all human checkpoints
392
- * - New required field: `type: 'human'` (inherited) - resource type discriminator
393
- *
394
- * @example
395
- * {
396
- * resourceId: 'sales-approval',
397
- * type: 'human',
398
- * name: 'Sales Approval Queue',
399
- * description: 'High-value order approvals for sales team',
400
- * version: '1.0.0',
401
- * status: 'prod',
402
- * requestedBy: { agents: ['order-processor-agent'] },
403
- * routesTo: { agents: ['order-fulfillment-agent'] }
404
- * }
405
- */
406
- export interface HumanCheckpointDefinition extends ResourceDefinition {
407
- /** Resource type discriminator (narrowed from base union) */
408
- type: 'human'
409
-
410
- /** Resources that create tasks for this checkpoint */
411
- requestedBy?: {
412
- /** Agent resourceIds that request approval here */
413
- agents?: string[]
414
- /** Workflow resourceIds that request approval here */
415
- workflows?: string[]
416
- }
417
-
418
- /** Resources that receive approved decisions */
419
- routesTo?: {
420
- /** Agent resourceIds that handle approved tasks */
421
- agents?: string[]
422
- /** Workflow resourceIds that handle approved tasks */
423
- workflows?: string[]
424
- }
425
- }
1
+ /**
2
+ * Resource Registry type definitions
3
+ */
4
+
5
+ import type { IntegrationType } from '../../execution/engine/tools/integration'
6
+ import type { ResourceEntry, ResourceGovernanceStatus } from '../../organization-model/domains/resources'
7
+ import type { SystemEntry } from '../../organization-model/domains/systems'
8
+ import type { ResourceCategory, ResourceLink } from './resource-link'
9
+
10
+ // ============================================================================
11
+ // Core Resource Type Definitions
12
+ // ============================================================================
13
+
14
+ /**
15
+ * Environment/deployment status for resources
16
+ */
17
+ export type ResourceStatus = 'dev' | 'prod'
18
+
19
+ /**
20
+ * All resource types in the platform
21
+ * Used as the discriminator field in ResourceDefinition
22
+ */
23
+ export type ResourceType = 'agent' | 'workflow' | 'trigger' | 'integration' | 'external' | 'human'
24
+
25
+ /**
26
+ * Executable resource types (subset of ResourceType)
27
+ * These resources can be directly executed by the execution engine
28
+ */
29
+ export type ExecutableResourceType = 'workflow' | 'agent'
30
+
31
+ export type ResourceSystemSummary = Pick<SystemEntry, 'id' | 'title' | 'description' | 'kind' | 'lifecycle'>
32
+
33
+ // ============================================================================
34
+ // Base Resource Interface
35
+ // ============================================================================
36
+
37
+ /**
38
+ * Base interface for ALL platform resources
39
+ * Shared by both executable (agents, workflows) and non-executable (triggers, integrations, etc.) resources
40
+ */
41
+ export interface ResourceDefinition {
42
+ /** Unique resource identifier */
43
+ resourceId: string
44
+
45
+ /** Display name */
46
+ name: string
47
+
48
+ /** Purpose and functionality description */
49
+ description: string
50
+
51
+ /** Version for change tracking and evolution */
52
+ version: string
53
+
54
+ /** Resource type discriminator */
55
+ type: ResourceType
56
+
57
+ /** Environment/deployment status */
58
+ status: ResourceStatus
59
+
60
+ /** Graph links to Organization Model nodes */
61
+ links?: ResourceLink[]
62
+
63
+ /** Infrastructure category for filtering */
64
+ category?: ResourceCategory
65
+
66
+ /** Whether the agent supports multi-turn sessions (agents only) */
67
+ sessionCapable?: boolean
68
+
69
+ /** Whether the resource is local (monorepo) or remote (externally deployed) */
70
+ origin?: 'local' | 'remote'
71
+
72
+ /** OM System membership — dot-separated system path (e.g. "sys.lead-gen"), when backed by a Resource descriptor */
73
+ systemPath?: string
74
+
75
+ /** Display metadata for the owning OM System */
76
+ system?: ResourceSystemSummary
77
+
78
+ /** Governance lifecycle status from the OM Resource descriptor */
79
+ governanceStatus?: ResourceGovernanceStatus
80
+
81
+ /** Whether this resource is archived and should be excluded from registration and deployment */
82
+ archived?: boolean
83
+ }
84
+
85
+ export type RuntimeResourceDescriptor = Extract<ResourceEntry, { kind: 'workflow' | 'agent' | 'integration' }>
86
+
87
+ export type DescriptorBackedResourceDefinition<
88
+ TResource extends RuntimeResourceDescriptor = RuntimeResourceDescriptor
89
+ > = Omit<ResourceDefinition, 'resourceId' | 'type'> & {
90
+ /** OM descriptor that owns canonical identity and governance metadata. */
91
+ resource: TResource
92
+ resourceId?: never
93
+ type?: never
94
+ }
95
+
96
+ export type BoundResourceDefinition<TResource extends RuntimeResourceDescriptor = RuntimeResourceDescriptor> = Omit<
97
+ DescriptorBackedResourceDefinition<TResource>,
98
+ 'resource'
99
+ > &
100
+ ResourceDefinition & {
101
+ resource: TResource
102
+ resourceId: TResource['id']
103
+ type: TResource['kind']
104
+ }
105
+
106
+ export function bindResourceDescriptor<TResource extends RuntimeResourceDescriptor>(
107
+ definition: DescriptorBackedResourceDefinition<TResource>
108
+ ): BoundResourceDefinition<TResource> {
109
+ const { resource, ...rest } = definition
110
+
111
+ return {
112
+ ...rest,
113
+ resource,
114
+ resourceId: resource.id,
115
+ type: resource.kind
116
+ } as BoundResourceDefinition<TResource>
117
+ }
118
+
119
+ /**
120
+ * Resource list for organization
121
+ * Returns ResourceDefinition metadata (not full definitions)
122
+ */
123
+ export interface ResourceList {
124
+ workflows: ResourceDefinition[]
125
+ agents: ResourceDefinition[]
126
+ total: number
127
+ organizationName: string
128
+ environment?: 'dev' | 'prod'
129
+ }
130
+
131
+ // ============================================================================
132
+ // Resource Manifest Types
133
+ // ============================================================================
134
+
135
+ // ============================================================================
136
+ // Trigger Configuration Types
137
+ // ============================================================================
138
+
139
+ /** Webhook provider identifiers */
140
+ export type WebhookProviderType = 'cal-com' | 'stripe' | 'signature-api' | 'instantly' | 'apify' | 'test'
141
+
142
+ /** Webhook trigger configuration */
143
+ export interface WebhookTriggerConfig {
144
+ /** Provider identifier */
145
+ provider: WebhookProviderType
146
+ /** Event type for documentation (not used for matching - workflow handles routing) */
147
+ event?: string
148
+ /** Optional filtering (e.g., specific form ID for Fillout) */
149
+ filter?: Record<string, string>
150
+ /** References credential in credentials table for per-org webhook secrets */
151
+ credentialName?: string
152
+ }
153
+
154
+ /** Schedule trigger configuration */
155
+ export interface ScheduleTriggerConfig {
156
+ /** Cron expression (e.g., '0 6 * * *') */
157
+ cron: string
158
+ /** Optional timezone (default: UTC) */
159
+ timezone?: string
160
+ }
161
+
162
+ /** Event trigger configuration */
163
+ export interface EventTriggerConfig {
164
+ /** Internal event type */
165
+ eventType: string
166
+ /** Event source */
167
+ source?: string
168
+ }
169
+
170
+ /** Union of all trigger configs */
171
+ export type TriggerConfig = WebhookTriggerConfig | ScheduleTriggerConfig | EventTriggerConfig
172
+
173
+ // ============================================================================
174
+ // Trigger Definition
175
+ // ============================================================================
176
+
177
+ /**
178
+ * Trigger metadata - entry points that initiate resource execution
179
+ *
180
+ * Triggers represent how executions start: webhooks from external services,
181
+ * scheduled cron jobs, platform events, or manual user actions.
182
+ *
183
+ * BREAKING CHANGES (2025-11-30):
184
+ * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
185
+ * - Field renames: `id` -> `resourceId` (inherited), `type` -> `triggerType`
186
+ * - Relationship rename: `invokes` -> `triggers` (unified vocabulary)
187
+ * - New required fields: `version` (inherited), `type: 'trigger'` (inherited)
188
+ * - triggers object now includes `externalResources` option
189
+ *
190
+ * @example
191
+ * // TriggerDefinition - metadata only
192
+ * {
193
+ * resourceId: 'trigger-new-order',
194
+ * type: 'trigger',
195
+ * triggerType: 'webhook',
196
+ * name: 'New Order',
197
+ * description: 'Webhook from Shopify on new orders',
198
+ * version: '1.0.0',
199
+ * status: 'prod',
200
+ * webhookPath: '/webhooks/shopify/orders'
201
+ * }
202
+ *
203
+ * // Relationships declared in ResourceRelationships (not on TriggerDefinition):
204
+ * // relationships: {
205
+ * // 'trigger-new-order': { triggers: { workflows: ['order-fulfillment-workflow'] } }
206
+ * // }
207
+ */
208
+ export interface TriggerDefinition extends ResourceDefinition {
209
+ /** Resource type discriminator (narrowed from base union) */
210
+ type: 'trigger'
211
+
212
+ /** Trigger mechanism type (renamed from 'type' to avoid collision with base type discriminator) */
213
+ triggerType: 'webhook' | 'schedule' | 'manual' | 'event'
214
+
215
+ /** Type-specific configuration */
216
+ config?: TriggerConfig
217
+
218
+ // Legacy fields (deprecated, use config instead)
219
+ /** For webhook triggers: path like '/webhooks/shopify/orders' */
220
+ webhookPath?: string
221
+ /** For schedule triggers: cron expression like '0 6 * * *' */
222
+ schedule?: string
223
+ /** For event triggers: event type like 'low-stock-alert' */
224
+ eventType?: string
225
+
226
+ // NOTE: What this trigger starts is declared in ResourceRelationships, not here
227
+ // This prevents duplication - triggers are forward-declared in relationships
228
+ }
229
+
230
+ /**
231
+ * Integration metadata - external service connections
232
+ *
233
+ * References credentials table for actual connection. No connection status
234
+ * stored here (queried at runtime from credentials table).
235
+ *
236
+ * BREAKING CHANGES (2025-11-30):
237
+ * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
238
+ * - Field renames: `id` -> `resourceId` (inherited)
239
+ * - New required field: `status` (inherited) - organizations must add status to all integrations
240
+ * - New required field: `version` (inherited) - organizations must add version to all integrations
241
+ * - New required field: `type: 'integration'` (inherited) - resource type discriminator
242
+ *
243
+ * @example
244
+ * {
245
+ * resourceId: 'integration-shopify-prod',
246
+ * type: 'integration',
247
+ * provider: 'shopify',
248
+ * credentialName: 'shopify-prod',
249
+ * name: 'Shopify Production',
250
+ * description: 'E-commerce platform',
251
+ * version: '1.0.0',
252
+ * status: 'prod'
253
+ * }
254
+ */
255
+ export interface IntegrationDefinition extends ResourceDefinition {
256
+ /** Resource type discriminator (narrowed from base union) */
257
+ type: 'integration'
258
+
259
+ /** OM descriptor that owns canonical identity and governance metadata. */
260
+ resource?: Extract<ResourceEntry, { kind: 'integration' }>
261
+
262
+ /** Integration provider type */
263
+ provider: IntegrationType
264
+ /** References credentials table (e.g., 'shopify-prod', 'zendesk-api') */
265
+ credentialName: string
266
+ }
267
+
268
+ /**
269
+ * Explicit resource relationship declaration
270
+ *
271
+ * Single-direction only - Command View derives reverse relationships.
272
+ * Agents/workflows declare what they trigger and use.
273
+ *
274
+ * @example
275
+ * {
276
+ * triggers: { workflows: ['order-fulfillment-workflow'] },
277
+ * uses: { integrations: ['integration-shopify-prod', 'integration-postgres'] }
278
+ * }
279
+ */
280
+ export interface RelationshipDeclaration {
281
+ /** Resources this resource triggers */
282
+ triggers?: {
283
+ /** Agent resourceIds this resource triggers */
284
+ agents?: string[]
285
+ /** Workflow resourceIds this resource triggers */
286
+ workflows?: string[]
287
+ }
288
+ /** Integrations this resource uses */
289
+ uses?: {
290
+ /** Integration IDs this resource uses */
291
+ integrations?: string[]
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Resource relationships map
297
+ * Maps resourceId to its relationship declarations
298
+ *
299
+ * @example
300
+ * {
301
+ * 'order-processor-agent': {
302
+ * triggers: { workflows: ['order-fulfillment-workflow'] },
303
+ * uses: { integrations: ['integration-shopify-prod'] }
304
+ * }
305
+ * }
306
+ */
307
+ export type ResourceRelationships = Record<string, RelationshipDeclaration>
308
+
309
+ // ============================================================================
310
+ // External Resource Types
311
+ // ============================================================================
312
+
313
+ /**
314
+ * External platform type
315
+ * Supported third-party automation platforms
316
+ */
317
+ export type ExternalPlatform = 'n8n' | 'make' | 'zapier' | 'other'
318
+
319
+ /**
320
+ * External automation resource metadata
321
+ *
322
+ * Represents workflows/automations running on third-party platforms
323
+ * (n8n, Make, Zapier, etc.) for visualization in Command View.
324
+ *
325
+ * NOTE: This is metadata ONLY for visualization. No execution logic,
326
+ * no API integration with external platforms, no status syncing.
327
+ *
328
+ * BREAKING CHANGES (2025-11-30):
329
+ * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
330
+ * - Field renames: `id` -> `resourceId` (inherited)
331
+ * - New required field: `version` (inherited) - organizations must add version to all external resources
332
+ * - New required field: `type: 'external'` (inherited) - resource type discriminator
333
+ * - REMOVED FIELD: `triggeredBy` - per relationship-consolidation design, all relationships are forward-only declarations
334
+ *
335
+ * @example
336
+ * {
337
+ * resourceId: 'external-n8n-order-sync',
338
+ * type: 'external',
339
+ * version: '1.0.0',
340
+ * platform: 'n8n',
341
+ * name: 'Shopify Order Sync',
342
+ * description: 'Legacy n8n workflow for syncing Shopify orders',
343
+ * status: 'prod',
344
+ * platformUrl: 'https://n8n.client.com/workflow/123',
345
+ * triggers: { workflows: ['order-fulfillment-workflow'] },
346
+ * uses: { integrations: ['integration-shopify-prod'] }
347
+ * }
348
+ */
349
+ export interface ExternalResourceDefinition extends ResourceDefinition {
350
+ /** Resource type discriminator (narrowed from base union) */
351
+ type: 'external'
352
+
353
+ /** Platform type */
354
+ platform: ExternalPlatform
355
+
356
+ // Optional platform-specific metadata
357
+ /** Link to external platform (e.g., n8n workflow editor URL) */
358
+ platformUrl?: string
359
+ /** Platform's internal ID/reference */
360
+ externalId?: string
361
+
362
+ /** What this external resource triggers (external -> internal) */
363
+ triggers?: {
364
+ /** Elevasis workflow resourceIds this external automation triggers */
365
+ workflows?: string[]
366
+ /** Elevasis agent resourceIds this external automation triggers */
367
+ agents?: string[]
368
+ }
369
+
370
+ /** Integrations this external resource uses (shared credentials) */
371
+ uses?: {
372
+ /** Integration IDs this external automation uses */
373
+ integrations?: string[]
374
+ }
375
+
376
+ // NOTE: triggeredBy field removed - per relationship-consolidation design,
377
+ // all relationships are forward-only declarations. Graph edges are built
378
+ // from forward declarations only.
379
+ }
380
+
381
+ /**
382
+ * Human Checkpoint definition - human decision points in automation
383
+ *
384
+ * Represents where human judgment is deployed in the automation landscape.
385
+ * Tasks with matching command_queue_group are routed to this checkpoint.
386
+ *
387
+ * BREAKING CHANGES (2025-11-30):
388
+ * - Now extends ResourceDefinition (inherits: resourceId, name, description, version, type, status, links, category)
389
+ * - Field renames: `id` -> `resourceId` (inherited)
390
+ * - description is now REQUIRED (was optional) - organizations must add description to all human checkpoints
391
+ * - New required field: `version` (inherited) - organizations must add version to all human checkpoints
392
+ * - New required field: `type: 'human'` (inherited) - resource type discriminator
393
+ *
394
+ * @example
395
+ * {
396
+ * resourceId: 'sales-approval',
397
+ * type: 'human',
398
+ * name: 'Sales Approval Queue',
399
+ * description: 'High-value order approvals for sales team',
400
+ * version: '1.0.0',
401
+ * status: 'prod',
402
+ * requestedBy: { agents: ['order-processor-agent'] },
403
+ * routesTo: { agents: ['order-fulfillment-agent'] }
404
+ * }
405
+ */
406
+ export interface HumanCheckpointDefinition extends ResourceDefinition {
407
+ /** Resource type discriminator (narrowed from base union) */
408
+ type: 'human'
409
+
410
+ /** Resources that create tasks for this checkpoint */
411
+ requestedBy?: {
412
+ /** Agent resourceIds that request approval here */
413
+ agents?: string[]
414
+ /** Workflow resourceIds that request approval here */
415
+ workflows?: string[]
416
+ }
417
+
418
+ /** Resources that receive approved decisions */
419
+ routesTo?: {
420
+ /** Agent resourceIds that handle approved tasks */
421
+ agents?: string[]
422
+ /** Workflow resourceIds that handle approved tasks */
423
+ workflows?: string[]
424
+ }
425
+ }