@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.
- package/dist/index.d.ts +4343 -2690
- package/dist/index.js +1101 -156
- package/dist/knowledge/index.d.ts +574 -210
- package/dist/knowledge/index.js +104 -1
- package/dist/organization-model/index.d.ts +4343 -2690
- package/dist/organization-model/index.js +1101 -156
- package/dist/test-utils/index.d.ts +483 -109
- package/dist/test-utils/index.js +904 -144
- package/package.json +3 -3
- package/src/README.md +14 -14
- package/src/__tests__/publish.test.ts +24 -24
- package/src/__tests__/template-core-compatibility.test.ts +9 -12
- package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2137 -2093
- package/src/_gen/__tests__/scaffold-contracts.test.ts +30 -30
- package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -217
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +69 -69
- package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +37 -37
- package/src/auth/multi-tenancy/index.ts +26 -26
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +104 -104
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +143 -143
- package/src/auth/multi-tenancy/memberships/index.ts +26 -26
- package/src/auth/multi-tenancy/memberships/membership.ts +130 -130
- package/src/auth/multi-tenancy/organizations/__tests__/api-schemas.test.ts +194 -194
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +136 -136
- package/src/auth/multi-tenancy/permissions.test.ts +42 -42
- package/src/auth/multi-tenancy/permissions.ts +123 -123
- package/src/auth/multi-tenancy/role-management/api-schemas.ts +78 -78
- package/src/auth/multi-tenancy/role-management/index.ts +16 -16
- package/src/auth/multi-tenancy/theme-presets.ts +45 -45
- package/src/auth/multi-tenancy/types.ts +57 -57
- package/src/auth/multi-tenancy/users/api-schemas.ts +165 -165
- package/src/business/README.md +2 -2
- package/src/business/acquisition/activity-events.test.ts +250 -250
- package/src/business/acquisition/activity-events.ts +93 -93
- package/src/business/acquisition/api-schemas.test.ts +1883 -1843
- package/src/business/acquisition/api-schemas.ts +1492 -1497
- package/src/business/acquisition/build-templates.test.ts +240 -240
- package/src/business/acquisition/build-templates.ts +98 -98
- package/src/business/acquisition/crm-next-action.test.ts +262 -262
- package/src/business/acquisition/crm-next-action.ts +220 -220
- package/src/business/acquisition/crm-priority.test.ts +216 -216
- package/src/business/acquisition/crm-priority.ts +349 -349
- package/src/business/acquisition/crm-state-actions.test.ts +153 -153
- package/src/business/acquisition/deal-ownership.test.ts +351 -351
- package/src/business/acquisition/deal-ownership.ts +120 -120
- package/src/business/acquisition/derive-actions.test.ts +129 -104
- package/src/business/acquisition/derive-actions.ts +74 -84
- package/src/business/acquisition/index.ts +171 -170
- package/src/business/acquisition/ontology-validation.ts +309 -0
- package/src/business/acquisition/stateful.ts +30 -30
- package/src/business/acquisition/types.ts +396 -396
- package/src/business/clients/api-schemas.test.ts +115 -115
- package/src/business/clients/api-schemas.ts +158 -158
- package/src/business/clients/index.ts +1 -1
- package/src/business/crm/api-schemas.ts +40 -40
- package/src/business/crm/index.ts +1 -1
- package/src/business/deals/api-schemas.ts +87 -87
- package/src/business/deals/index.ts +1 -1
- package/src/business/index.ts +5 -5
- package/src/business/projects/types.ts +144 -144
- package/src/commands/queue/types/task.ts +15 -15
- package/src/execution/core/runner-types.ts +61 -61
- package/src/execution/core/sse-executions.ts +7 -7
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -10
- package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -16
- package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -4
- package/src/execution/engine/agent/core/types.ts +25 -25
- package/src/execution/engine/agent/index.ts +6 -6
- package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -24
- package/src/execution/engine/index.ts +443 -443
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +298 -298
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.test.ts +55 -55
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +107 -107
- package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.test.ts +48 -48
- package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.ts +99 -99
- package/src/execution/engine/tools/integration/server/adapters/apollo/index.ts +1 -1
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -363
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -162
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -316
- package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.test.ts +18 -18
- package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.ts +194 -194
- package/src/execution/engine/tools/integration/server/adapters/clickup/index.ts +7 -7
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -204
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -105
- package/src/execution/engine/tools/integration/server/adapters/google-calendar/google-calendar-adapter.ts +428 -428
- package/src/execution/engine/tools/integration/server/adapters/google-calendar/index.ts +2 -2
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1474
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -103
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -88
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -141
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -76
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -182
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -310
- package/src/execution/engine/tools/integration/service.test.ts +239 -239
- package/src/execution/engine/tools/integration/service.ts +172 -172
- package/src/execution/engine/tools/integration/tool.ts +255 -255
- package/src/execution/engine/tools/lead-service-types.ts +1005 -1005
- package/src/execution/engine/tools/messages.ts +43 -43
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +7 -7
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +6 -6
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -6
- package/src/execution/engine/tools/platform/acquisition/types.ts +280 -280
- package/src/execution/engine/tools/platform/email/types.ts +97 -97
- package/src/execution/engine/tools/registry.ts +704 -704
- package/src/execution/engine/tools/tool-maps.ts +831 -831
- package/src/execution/engine/tools/types.ts +234 -234
- package/src/execution/engine/workflow/types.ts +195 -197
- package/src/execution/external/__tests__/api-schemas.test.ts +127 -127
- package/src/execution/external/api-schemas.ts +40 -40
- package/src/execution/external/index.ts +1 -1
- package/src/index.ts +18 -18
- package/src/integrations/credentials/__tests__/api-schemas.test.ts +420 -420
- package/src/integrations/credentials/api-schemas.ts +146 -146
- package/src/integrations/credentials/schemas.ts +200 -200
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +7 -7
- package/src/integrations/oauth/provider-registry.ts +74 -74
- package/src/integrations/oauth/server/credentials.ts +43 -43
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +327 -327
- package/src/integrations/webhook-endpoints/api-schemas.ts +103 -103
- package/src/integrations/webhook-endpoints/types.ts +58 -58
- package/src/knowledge/README.md +32 -32
- package/src/knowledge/__tests__/queries.test.ts +626 -535
- package/src/knowledge/format.ts +99 -99
- package/src/knowledge/index.ts +5 -5
- package/src/knowledge/published.ts +5 -5
- package/src/knowledge/queries.ts +269 -218
- package/src/operations/activities/api-schemas.ts +80 -80
- package/src/operations/activities/types.ts +64 -64
- package/src/organization-model/README.md +149 -149
- package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -210
- package/src/organization-model/__tests__/defaults.test.ts +168 -168
- package/src/organization-model/__tests__/domains/actions.test.ts +78 -56
- package/src/organization-model/__tests__/domains/customers.test.ts +299 -299
- package/src/organization-model/__tests__/domains/entities.test.ts +56 -56
- package/src/organization-model/__tests__/domains/goals.test.ts +493 -493
- package/src/organization-model/__tests__/domains/identity.test.ts +280 -280
- package/src/organization-model/__tests__/domains/navigation.test.ts +268 -268
- package/src/organization-model/__tests__/domains/offerings.test.ts +414 -414
- package/src/organization-model/__tests__/domains/policies.test.ts +323 -323
- package/src/organization-model/__tests__/domains/resource-mappings.test.ts +293 -293
- package/src/organization-model/__tests__/domains/resources.test.ts +387 -277
- package/src/organization-model/__tests__/domains/roles.test.ts +463 -463
- package/src/organization-model/__tests__/domains/statuses.test.ts +246 -246
- package/src/organization-model/__tests__/domains/systems.test.ts +209 -209
- package/src/organization-model/__tests__/domains/topology.test.ts +188 -0
- package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -361
- package/src/organization-model/__tests__/foundation.test.ts +77 -77
- package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -144
- package/src/organization-model/__tests__/graph.test.ts +1312 -862
- package/src/organization-model/__tests__/icons.test.ts +10 -1
- package/src/organization-model/__tests__/knowledge.test.ts +251 -15
- package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -438
- package/src/organization-model/__tests__/migration-helpers.test.ts +591 -591
- package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -103
- package/src/organization-model/__tests__/recursive-system-schema.test.ts +535 -506
- package/src/organization-model/__tests__/resolve.test.ts +274 -164
- package/src/organization-model/__tests__/schema.test.ts +844 -301
- package/src/organization-model/__tests__/surface-projection.test.ts +284 -284
- package/src/organization-model/catalogs/lead-gen.ts +144 -144
- package/src/organization-model/content-kinds/config.ts +36 -36
- package/src/organization-model/content-kinds/index.ts +76 -72
- package/src/organization-model/content-kinds/pipeline.ts +68 -68
- package/src/organization-model/content-kinds/registry.ts +44 -44
- package/src/organization-model/content-kinds/status.ts +71 -71
- package/src/organization-model/content-kinds/template.ts +83 -83
- package/src/organization-model/content-kinds/types.ts +117 -117
- package/src/organization-model/contracts.ts +27 -27
- package/src/organization-model/defaults.ts +42 -50
- package/src/organization-model/domains/actions.ts +333 -239
- package/src/organization-model/domains/customers.ts +78 -78
- package/src/organization-model/domains/entities.ts +144 -144
- package/src/organization-model/domains/goals.ts +83 -83
- package/src/organization-model/domains/knowledge.ts +117 -101
- package/src/organization-model/domains/navigation.ts +139 -139
- package/src/organization-model/domains/offerings.ts +71 -71
- package/src/organization-model/domains/policies.ts +102 -102
- package/src/organization-model/domains/projects.ts +14 -14
- package/src/organization-model/domains/prospecting.ts +395 -395
- package/src/organization-model/domains/resources.ts +202 -124
- package/src/organization-model/domains/roles.ts +96 -96
- package/src/organization-model/domains/sales.test.ts +218 -218
- package/src/organization-model/domains/sales.ts +380 -380
- package/src/organization-model/domains/shared.ts +63 -63
- package/src/organization-model/domains/statuses.ts +339 -339
- package/src/organization-model/domains/systems.ts +217 -172
- package/src/organization-model/domains/topology.ts +261 -0
- package/src/organization-model/foundation.ts +75 -75
- package/src/organization-model/graph/build.ts +1043 -867
- package/src/organization-model/graph/index.ts +4 -4
- package/src/organization-model/graph/link.ts +10 -10
- package/src/organization-model/graph/schema.ts +75 -68
- package/src/organization-model/graph/types.ts +71 -64
- package/src/organization-model/helpers.ts +289 -241
- package/src/organization-model/icons.ts +78 -66
- package/src/organization-model/index.ts +128 -125
- package/src/organization-model/migration-helpers.ts +247 -244
- package/src/organization-model/ontology.ts +658 -0
- package/src/organization-model/organization-graph.mdx +110 -90
- package/src/organization-model/organization-model.mdx +225 -213
- package/src/organization-model/published.ts +299 -222
- package/src/organization-model/resolve.ts +146 -91
- package/src/organization-model/schema.ts +818 -659
- package/src/organization-model/surface-projection.ts +212 -212
- package/src/organization-model/types.ts +179 -155
- package/src/platform/api/types.ts +38 -38
- package/src/platform/constants/versions.ts +3 -3
- package/src/platform/index.ts +23 -23
- package/src/platform/registry/__tests__/command-view.test.ts +10 -10
- package/src/platform/registry/__tests__/resource-link.test.ts +35 -35
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +20 -20
- package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -245
- package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2053
- package/src/platform/registry/__tests__/validation.test.ts +1444 -1259
- package/src/platform/registry/command-view.ts +10 -10
- package/src/platform/registry/index.ts +103 -103
- package/src/platform/registry/resource-link.ts +32 -32
- package/src/platform/registry/resource-registry.ts +886 -886
- package/src/platform/registry/serialization.ts +295 -295
- package/src/platform/registry/serialized-types.ts +166 -166
- package/src/platform/registry/stats-types.ts +68 -68
- package/src/platform/registry/types.ts +425 -425
- package/src/platform/registry/validation.ts +876 -684
- package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
- package/src/platform/utils/validation.ts +425 -425
- package/src/projects/api-schemas.test.ts +39 -39
- package/src/projects/api-schemas.ts +291 -291
- package/src/reference/_generated/contracts.md +2136 -2093
- package/src/reference/glossary.md +76 -76
- package/src/scaffold-registry/__tests__/index.test.ts +206 -206
- package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
- package/src/scaffold-registry/index.ts +392 -392
- package/src/scaffold-registry/schema.ts +243 -243
- package/src/server.ts +289 -289
- package/src/supabase/database.types.ts +3 -0
- package/src/test-utils/README.md +37 -37
- package/src/test-utils/entities.ts +108 -108
- package/src/test-utils/fixtures/memberships.ts +82 -82
- package/src/test-utils/index.ts +12 -12
- package/src/test-utils/organization-model.ts +65 -65
- package/src/test-utils/published.ts +6 -6
- package/src/test-utils/rls/RLSTestContext.ts +588 -588
- package/src/test-utils/test-utils.test.ts +44 -44
|
@@ -1,203 +1,248 @@
|
|
|
1
|
-
import { z, type ZodType } from 'zod'
|
|
2
|
-
import { ActionRefSchema } from './actions'
|
|
3
|
-
import {
|
|
4
|
-
ColorTokenSchema,
|
|
5
|
-
DescriptionSchema,
|
|
6
|
-
IconNameSchema,
|
|
7
|
-
LabelSchema,
|
|
8
|
-
ModelIdSchema,
|
|
9
|
-
PathSchema,
|
|
10
|
-
ReferenceIdsSchema
|
|
11
|
-
} from './shared'
|
|
1
|
+
import { z, type ZodType } from 'zod'
|
|
2
|
+
import { ActionRefSchema } from './actions'
|
|
3
|
+
import {
|
|
4
|
+
ColorTokenSchema,
|
|
5
|
+
DescriptionSchema,
|
|
6
|
+
IconNameSchema,
|
|
7
|
+
LabelSchema,
|
|
8
|
+
ModelIdSchema,
|
|
9
|
+
PathSchema,
|
|
10
|
+
ReferenceIdsSchema
|
|
11
|
+
} from './shared'
|
|
12
12
|
import { ContentNodeSchema } from '../content-kinds/types'
|
|
13
|
+
import { OntologyScopeSchema, type OntologyScope } from '../ontology'
|
|
14
|
+
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Systems domain
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
//
|
|
19
|
+
// A System is a tenant-defined bounded context. It can carry UI presence,
|
|
20
|
+
// hierarchy, and governance metadata; non-UI systems simply omit `ui`.
|
|
21
|
+
|
|
22
|
+
export const SystemKindSchema = z
|
|
23
|
+
.enum(['product', 'operational', 'platform', 'diagnostic'])
|
|
24
|
+
.meta({ label: 'System kind', color: 'blue' })
|
|
25
|
+
export const SystemLifecycleSchema = z
|
|
26
|
+
.enum(['draft', 'beta', 'active', 'deprecated', 'archived'])
|
|
27
|
+
.meta({ label: 'Lifecycle', color: 'teal' })
|
|
28
|
+
/** @deprecated Use SystemLifecycleSchema. Accepted for one publish cycle. */
|
|
29
|
+
export const SystemStatusSchema = z.enum(['active', 'deprecated', 'archived']).meta({ label: 'Status', color: 'teal' })
|
|
30
|
+
export const SystemIdSchema = ModelIdSchema
|
|
31
|
+
/**
|
|
32
|
+
* Validates a dot-separated system path (e.g. "sales.lead-gen", "sales.crm").
|
|
33
|
+
* Each segment is lowercase, starts with a letter or digit, and may contain hyphens.
|
|
34
|
+
* This is the canonical form used in `resource.systemPath`.
|
|
35
|
+
*/
|
|
36
|
+
export const SystemPathSchema = z
|
|
37
|
+
.string()
|
|
38
|
+
.trim()
|
|
39
|
+
.min(1)
|
|
40
|
+
.regex(
|
|
41
|
+
/^[a-z0-9][a-z0-9-]*(?:\.[a-z0-9][a-z0-9-]*)*$/,
|
|
42
|
+
'must be a dotted lowercase path (e.g. "sales.lead-gen" or "sales.crm")'
|
|
43
|
+
)
|
|
44
|
+
export const UiPositionSchema = z.enum(['sidebar-primary', 'sidebar-bottom']).meta({ label: 'UI position' })
|
|
45
|
+
export const NodeIdPathSchema = SystemIdSchema
|
|
46
|
+
export const NodeIdStringSchema = z
|
|
47
|
+
.string()
|
|
48
|
+
.trim()
|
|
49
|
+
.min(1)
|
|
50
|
+
.max(200)
|
|
51
|
+
// D4: kind prefix allows hyphens (e.g. 'content-node'); id allows colons for
|
|
52
|
+
// qualified content-node references ('content-node:sales.crm:default-pipeline').
|
|
53
|
+
.regex(
|
|
54
|
+
/^[a-z][a-z-]*:([a-z0-9-]+)(\.[a-z0-9-]+)*(:[a-z0-9.-]+)*$/,
|
|
55
|
+
'Node references must use kind:dotted-path (e.g. system:sales.crm or content-node:sales.crm:pipeline-id)'
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
export const SystemUiSchema = z.object({
|
|
59
|
+
path: PathSchema,
|
|
60
|
+
surfaces: ReferenceIdsSchema,
|
|
61
|
+
icon: IconNameSchema.optional(),
|
|
62
|
+
order: z.number().int().optional()
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Recursive SystemEntry schema.
|
|
67
|
+
//
|
|
68
|
+
// TypeScript cannot infer the type of a schema that references itself through
|
|
69
|
+
// z.lazy(). The standard Zod fix is to:
|
|
70
|
+
// 1. Declare the output type as an explicit interface BEFORE the schema.
|
|
71
|
+
// 2. Annotate the schema variable with `ZodType<SystemEntry>` so TS uses
|
|
72
|
+
// the declared interface instead of trying to infer through the cycle.
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
import type { ContentNode } from '../content-kinds/types'
|
|
13
76
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
//
|
|
18
|
-
// A System is a tenant-defined bounded context. It can carry UI presence,
|
|
19
|
-
// hierarchy, and governance metadata; non-UI systems simply omit `ui`.
|
|
20
|
-
|
|
21
|
-
export const SystemKindSchema = z
|
|
22
|
-
.enum(['product', 'operational', 'platform', 'diagnostic'])
|
|
23
|
-
.meta({ label: 'System kind', color: 'blue' })
|
|
24
|
-
export const SystemLifecycleSchema = z
|
|
25
|
-
.enum(['draft', 'beta', 'active', 'deprecated', 'archived'])
|
|
26
|
-
.meta({ label: 'Lifecycle', color: 'teal' })
|
|
27
|
-
/** @deprecated Use SystemLifecycleSchema. Accepted for one publish cycle. */
|
|
28
|
-
export const SystemStatusSchema = z.enum(['active', 'deprecated', 'archived']).meta({ label: 'Status', color: 'teal' })
|
|
29
|
-
export const SystemIdSchema = ModelIdSchema
|
|
30
|
-
/**
|
|
31
|
-
* Validates a dot-separated system path (e.g. "sales.lead-gen", "sales.crm").
|
|
32
|
-
* Each segment is lowercase, starts with a letter or digit, and may contain hyphens.
|
|
33
|
-
* This is the canonical form used in `resource.systemPath`.
|
|
34
|
-
*/
|
|
35
|
-
export const SystemPathSchema = z
|
|
36
|
-
.string()
|
|
37
|
-
.trim()
|
|
38
|
-
.min(1)
|
|
39
|
-
.regex(
|
|
40
|
-
/^[a-z0-9][a-z0-9-]*(?:\.[a-z0-9][a-z0-9-]*)*$/,
|
|
41
|
-
'must be a dotted lowercase path (e.g. "sales.lead-gen" or "sales.crm")'
|
|
42
|
-
)
|
|
43
|
-
export const UiPositionSchema = z.enum(['sidebar-primary', 'sidebar-bottom']).meta({ label: 'UI position' })
|
|
44
|
-
export const NodeIdPathSchema = SystemIdSchema
|
|
45
|
-
export const NodeIdStringSchema = z
|
|
46
|
-
.string()
|
|
47
|
-
.trim()
|
|
48
|
-
.min(1)
|
|
49
|
-
.max(200)
|
|
50
|
-
// D4: kind prefix allows hyphens (e.g. 'content-node'); id allows colons for
|
|
51
|
-
// qualified content-node references ('content-node:sales.crm:default-pipeline').
|
|
52
|
-
.regex(
|
|
53
|
-
/^[a-z][a-z-]*:([a-z0-9-]+)(\.[a-z0-9-]+)*(:[a-z0-9.-]+)*$/,
|
|
54
|
-
'Node references must use kind:dotted-path (e.g. system:sales.crm or content-node:sales.crm:pipeline-id)'
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
export const SystemUiSchema = z.object({
|
|
58
|
-
path: PathSchema,
|
|
59
|
-
surfaces: ReferenceIdsSchema,
|
|
60
|
-
icon: IconNameSchema.optional(),
|
|
61
|
-
order: z.number().int().optional()
|
|
62
|
-
})
|
|
77
|
+
export type JsonPrimitive = string | number | boolean | null
|
|
78
|
+
export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }
|
|
63
79
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
export const JsonValueSchema: ZodType<JsonValue> = z.lazy(() =>
|
|
81
|
+
z.union([
|
|
82
|
+
z.string(),
|
|
83
|
+
z.number(),
|
|
84
|
+
z.boolean(),
|
|
85
|
+
z.null(),
|
|
86
|
+
z.array(JsonValueSchema),
|
|
87
|
+
z.record(z.string(), JsonValueSchema)
|
|
88
|
+
])
|
|
89
|
+
)
|
|
73
90
|
|
|
74
|
-
|
|
91
|
+
export const SystemConfigSchema = z
|
|
92
|
+
.record(z.string().trim().min(1).max(200), JsonValueSchema)
|
|
93
|
+
.default({})
|
|
94
|
+
.optional()
|
|
75
95
|
|
|
76
96
|
/** Explicit interface needed to annotate the recursive SystemEntrySchema. */
|
|
77
97
|
export interface SystemEntry {
|
|
78
|
-
id: string
|
|
79
|
-
label?: string
|
|
80
|
-
title?: string
|
|
81
|
-
description?: string
|
|
82
|
-
kind?: 'product' | 'operational' | 'platform' | 'diagnostic'
|
|
83
|
-
parentSystemId?: string
|
|
84
|
-
ui?: { path: string; surfaces: string[]; icon?: string; order?: number }
|
|
85
|
-
lifecycle?: 'draft' | 'beta' | 'active' | 'deprecated' | 'archived'
|
|
86
|
-
responsibleRoleId?: string
|
|
87
|
-
governedByKnowledge?: string[]
|
|
88
|
-
actions?: { actionId: string; intent: 'exposes' | 'consumes'; invocation?: unknown }[]
|
|
89
|
-
policies?: string[]
|
|
90
|
-
drivesGoals?: string[]
|
|
91
|
-
/** @deprecated Use lifecycle. Accepted for one publish cycle. */
|
|
92
|
-
status?: 'active' | 'deprecated' | 'archived'
|
|
93
|
-
path?: string
|
|
94
|
-
icon?: string
|
|
95
|
-
color?: string
|
|
96
|
-
uiPosition?: 'sidebar-primary' | 'sidebar-bottom'
|
|
97
|
-
enabled?: boolean
|
|
98
|
+
id: string
|
|
99
|
+
label?: string
|
|
100
|
+
title?: string
|
|
101
|
+
description?: string
|
|
102
|
+
kind?: 'product' | 'operational' | 'platform' | 'diagnostic'
|
|
103
|
+
parentSystemId?: string
|
|
104
|
+
ui?: { path: string; surfaces: string[]; icon?: string; order?: number }
|
|
105
|
+
lifecycle?: 'draft' | 'beta' | 'active' | 'deprecated' | 'archived'
|
|
106
|
+
responsibleRoleId?: string
|
|
107
|
+
governedByKnowledge?: string[]
|
|
108
|
+
actions?: { actionId: string; intent: 'exposes' | 'consumes'; invocation?: unknown }[]
|
|
109
|
+
policies?: string[]
|
|
110
|
+
drivesGoals?: string[]
|
|
111
|
+
/** @deprecated Use lifecycle. Accepted for one publish cycle. */
|
|
112
|
+
status?: 'active' | 'deprecated' | 'archived'
|
|
113
|
+
path?: string
|
|
114
|
+
icon?: string
|
|
115
|
+
color?: string
|
|
116
|
+
uiPosition?: 'sidebar-primary' | 'sidebar-bottom'
|
|
117
|
+
enabled?: boolean
|
|
98
118
|
devOnly?: boolean
|
|
99
119
|
requiresAdmin?: boolean
|
|
100
120
|
order: number
|
|
121
|
+
config?: Record<string, JsonValue>
|
|
122
|
+
ontology?: OntologyScope
|
|
123
|
+
systems?: Record<string, SystemEntry>
|
|
124
|
+
/**
|
|
125
|
+
* @deprecated Compatibility-only bridge for old tenant data and migration readers.
|
|
126
|
+
* Author new semantic catalogs in `ontology` and local settings in `config`.
|
|
127
|
+
*/
|
|
101
128
|
content?: Record<string, ContentNode>
|
|
102
129
|
subsystems?: Record<string, SystemEntry>
|
|
103
130
|
}
|
|
104
|
-
|
|
105
|
-
export const SystemEntrySchema: ZodType<SystemEntry> = z
|
|
106
|
-
.object({
|
|
107
|
-
/** Stable tenant-defined system id (e.g. "sys.lead-gen" or "sales.crm"). */
|
|
108
|
-
id: SystemIdSchema,
|
|
109
|
-
/** Human-readable system label shown in UI, governance, and operations surfaces. */
|
|
110
|
-
label: LabelSchema.optional(),
|
|
111
|
-
/** @deprecated Use label. Accepted for pre-consolidation System declarations. */
|
|
112
|
-
title: LabelSchema.optional(),
|
|
113
|
-
/** One-paragraph purpose statement for the bounded context. */
|
|
114
|
-
description: DescriptionSchema.optional(),
|
|
115
|
-
/** Closed system shape enum; catalog values remain tenant-defined. */
|
|
116
|
-
kind: SystemKindSchema.optional(),
|
|
117
|
-
/** Optional self-reference for System hierarchy. */
|
|
118
|
-
parentSystemId: SystemIdSchema.optional(),
|
|
119
|
-
/** Optional UI presence. Systems without UI omit this. */
|
|
120
|
-
ui: SystemUiSchema.optional(),
|
|
121
|
-
/** Canonical lifecycle state. Replaces Feature.enabled/devOnly and System.status. */
|
|
122
|
-
lifecycle: SystemLifecycleSchema.optional(),
|
|
123
|
-
/** Optional role responsible for this system. */
|
|
124
|
-
responsibleRoleId: ModelIdSchema.meta({ ref: 'role' }).optional(),
|
|
125
|
-
/** Optional knowledge nodes that govern this system. */
|
|
126
|
-
governedByKnowledge: z
|
|
127
|
-
.array(ModelIdSchema.meta({ ref: 'knowledge' }))
|
|
128
|
-
.default([])
|
|
129
|
-
.optional(),
|
|
130
|
-
/** Optional actions this system exposes or consumes. */
|
|
131
|
-
actions: z.array(ActionRefSchema).optional(),
|
|
132
|
-
/** Optional operational policies that apply to this system. */
|
|
133
|
-
policies: z
|
|
134
|
-
.array(ModelIdSchema.meta({ ref: 'policy' }))
|
|
135
|
-
.default([])
|
|
136
|
-
.optional(),
|
|
137
|
-
/** Optional goals this system contributes to. */
|
|
138
|
-
drivesGoals: z
|
|
139
|
-
.array(ModelIdSchema.meta({ ref: 'goal' }))
|
|
140
|
-
.default([])
|
|
141
|
-
.optional(),
|
|
142
|
-
/** @deprecated Use lifecycle. Accepted for one publish cycle. */
|
|
143
|
-
status: SystemStatusSchema.optional(),
|
|
144
|
-
/** @deprecated Use ui.path. Kept for one-cycle Feature compatibility. */
|
|
145
|
-
path: PathSchema.optional(),
|
|
146
|
-
/** @deprecated Use ui.icon. Kept for one-cycle Feature compatibility. */
|
|
147
|
-
icon: IconNameSchema.optional(),
|
|
148
|
-
/** @deprecated Feature color token, retained for one-cycle compatibility. */
|
|
149
|
-
color: ColorTokenSchema.optional(),
|
|
150
|
-
/** @deprecated UI placement hint, retained for one-cycle compatibility. */
|
|
151
|
-
uiPosition: UiPositionSchema.optional(),
|
|
152
|
-
/** @deprecated Use lifecycle. */
|
|
153
|
-
enabled: z.boolean().optional(),
|
|
154
|
-
/** @deprecated Use lifecycle: "beta". */
|
|
155
|
-
devOnly: z.boolean().optional(),
|
|
131
|
+
|
|
132
|
+
export const SystemEntrySchema: ZodType<SystemEntry> = z
|
|
133
|
+
.object({
|
|
134
|
+
/** Stable tenant-defined system id (e.g. "sys.lead-gen" or "sales.crm"). */
|
|
135
|
+
id: SystemIdSchema,
|
|
136
|
+
/** Human-readable system label shown in UI, governance, and operations surfaces. */
|
|
137
|
+
label: LabelSchema.optional(),
|
|
138
|
+
/** @deprecated Use label. Accepted for pre-consolidation System declarations. */
|
|
139
|
+
title: LabelSchema.optional(),
|
|
140
|
+
/** One-paragraph purpose statement for the bounded context. */
|
|
141
|
+
description: DescriptionSchema.optional(),
|
|
142
|
+
/** Closed system shape enum; catalog values remain tenant-defined. */
|
|
143
|
+
kind: SystemKindSchema.optional(),
|
|
144
|
+
/** Optional self-reference for System hierarchy. */
|
|
145
|
+
parentSystemId: SystemIdSchema.optional(),
|
|
146
|
+
/** Optional UI presence. Systems without UI omit this. */
|
|
147
|
+
ui: SystemUiSchema.optional(),
|
|
148
|
+
/** Canonical lifecycle state. Replaces Feature.enabled/devOnly and System.status. */
|
|
149
|
+
lifecycle: SystemLifecycleSchema.optional(),
|
|
150
|
+
/** Optional role responsible for this system. */
|
|
151
|
+
responsibleRoleId: ModelIdSchema.meta({ ref: 'role' }).optional(),
|
|
152
|
+
/** Optional knowledge nodes that govern this system. */
|
|
153
|
+
governedByKnowledge: z
|
|
154
|
+
.array(ModelIdSchema.meta({ ref: 'knowledge' }))
|
|
155
|
+
.default([])
|
|
156
|
+
.optional(),
|
|
157
|
+
/** Optional actions this system exposes or consumes. */
|
|
158
|
+
actions: z.array(ActionRefSchema).optional(),
|
|
159
|
+
/** Optional operational policies that apply to this system. */
|
|
160
|
+
policies: z
|
|
161
|
+
.array(ModelIdSchema.meta({ ref: 'policy' }))
|
|
162
|
+
.default([])
|
|
163
|
+
.optional(),
|
|
164
|
+
/** Optional goals this system contributes to. */
|
|
165
|
+
drivesGoals: z
|
|
166
|
+
.array(ModelIdSchema.meta({ ref: 'goal' }))
|
|
167
|
+
.default([])
|
|
168
|
+
.optional(),
|
|
169
|
+
/** @deprecated Use lifecycle. Accepted for one publish cycle. */
|
|
170
|
+
status: SystemStatusSchema.optional(),
|
|
171
|
+
/** @deprecated Use ui.path. Kept for one-cycle Feature compatibility. */
|
|
172
|
+
path: PathSchema.optional(),
|
|
173
|
+
/** @deprecated Use ui.icon. Kept for one-cycle Feature compatibility. */
|
|
174
|
+
icon: IconNameSchema.optional(),
|
|
175
|
+
/** @deprecated Feature color token, retained for one-cycle compatibility. */
|
|
176
|
+
color: ColorTokenSchema.optional(),
|
|
177
|
+
/** @deprecated UI placement hint, retained for one-cycle compatibility. */
|
|
178
|
+
uiPosition: UiPositionSchema.optional(),
|
|
179
|
+
/** @deprecated Use lifecycle. */
|
|
180
|
+
enabled: z.boolean().optional(),
|
|
181
|
+
/** @deprecated Use lifecycle: "beta". */
|
|
182
|
+
devOnly: z.boolean().optional(),
|
|
156
183
|
requiresAdmin: z.boolean().optional(),
|
|
157
184
|
/** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
|
|
158
185
|
order: z.number(),
|
|
159
186
|
/**
|
|
160
|
-
* System-
|
|
161
|
-
*
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
187
|
+
* System-local JSON settings and defaults. Strongly typed OM fields,
|
|
188
|
+
* secrets, credentials, and runtime state stay outside this bucket.
|
|
189
|
+
*/
|
|
190
|
+
config: SystemConfigSchema,
|
|
191
|
+
/**
|
|
192
|
+
* System-owned ontology declarations. `systems` is now the canonical child
|
|
193
|
+
* key; this scope holds the object, action, catalog, link, event, and
|
|
194
|
+
* shared contract records owned by this system.
|
|
165
195
|
*/
|
|
166
|
-
|
|
196
|
+
ontology: OntologyScopeSchema.optional(),
|
|
167
197
|
/**
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* position-derived paths. Both still exist on this schema for backward compat.
|
|
198
|
+
* @deprecated Compatibility-only bridge for old tenant content nodes and
|
|
199
|
+
* migration readers. New schema/catalog authoring belongs in ontology;
|
|
200
|
+
* new system-local settings belong in config. Bridge nodes are keyed by
|
|
201
|
+
* local NodeId and may still project to content-node:* graph IDs.
|
|
173
202
|
*/
|
|
203
|
+
content: z.record(z.string().trim().min(1).max(200), ContentNodeSchema).optional(),
|
|
204
|
+
/**
|
|
205
|
+
* Recursive child systems, authored via nesting (per L11).
|
|
206
|
+
* The key is the local system id; the full path is computed by joining
|
|
207
|
+
* ancestor keys with `.` (e.g. parent key `'sales'` + child key `'crm'` → `'sales.crm'`).
|
|
208
|
+
* Per Phase 4: `id` and `parentSystemId` fields will be removed in favour of
|
|
209
|
+
* position-derived paths. Both still exist on this schema for backward compat.
|
|
210
|
+
*/
|
|
211
|
+
systems: z.lazy(() => z.record(z.string().trim().min(1).max(100), SystemEntrySchema)).optional(),
|
|
212
|
+
/** @deprecated Use systems. Accepted as a compatibility alias during the ontology bridge. */
|
|
174
213
|
subsystems: z.lazy(() => z.record(z.string().trim().min(1).max(100), SystemEntrySchema)).optional()
|
|
175
214
|
})
|
|
176
|
-
.refine((system: SystemEntry) => system.label !== undefined || system.title !== undefined, {
|
|
177
|
-
path: ['label'],
|
|
178
|
-
message: 'System must provide label or title'
|
|
179
|
-
})
|
|
215
|
+
.refine((system: SystemEntry) => system.label !== undefined || system.title !== undefined, {
|
|
216
|
+
path: ['label'],
|
|
217
|
+
message: 'System must provide label or title'
|
|
218
|
+
})
|
|
180
219
|
.transform((system: SystemEntry) => {
|
|
181
|
-
|
|
220
|
+
const normalizedSystem =
|
|
221
|
+
system.systems !== undefined && system.subsystems === undefined ? { ...system, subsystems: system.systems } : system
|
|
182
222
|
|
|
183
|
-
|
|
184
|
-
return system.lifecycle === undefined ? { ...system, lifecycle: system.status } : system
|
|
185
|
-
})
|
|
223
|
+
if (normalizedSystem.status === undefined) return normalizedSystem
|
|
186
224
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
225
|
+
console.warn('[organization-model] System.status is deprecated; use System.lifecycle instead.')
|
|
226
|
+
return normalizedSystem.lifecycle === undefined
|
|
227
|
+
? { ...normalizedSystem, lifecycle: normalizedSystem.status }
|
|
228
|
+
: normalizedSystem
|
|
191
229
|
})
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
230
|
+
|
|
231
|
+
export const SystemsDomainSchema = z
|
|
232
|
+
.record(z.string(), SystemEntrySchema)
|
|
233
|
+
.refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
|
|
234
|
+
message: 'Each system entry id must match its map key'
|
|
235
|
+
})
|
|
236
|
+
.default({})
|
|
237
|
+
|
|
238
|
+
export const DEFAULT_ORGANIZATION_MODEL_SYSTEMS: z.infer<typeof SystemsDomainSchema> = {}
|
|
239
|
+
|
|
240
|
+
export type SystemId = z.infer<typeof SystemIdSchema>
|
|
197
241
|
export type SystemKind = z.infer<typeof SystemKindSchema>
|
|
198
242
|
export type SystemLifecycle = z.infer<typeof SystemLifecycleSchema>
|
|
199
243
|
/** @deprecated Use SystemLifecycle. Accepted for one publish cycle. */
|
|
200
244
|
export type SystemStatus = z.infer<typeof SystemStatusSchema>
|
|
245
|
+
export type SystemLocalConfig = z.infer<typeof SystemConfigSchema>
|
|
201
246
|
// SystemEntry is declared as an explicit interface above the schema (required for
|
|
202
|
-
// recursive z.lazy() type inference). Re-export omitted — the interface IS the type.
|
|
203
|
-
export type SystemsDomain = z.infer<typeof SystemsDomainSchema>
|
|
247
|
+
// recursive z.lazy() type inference). Re-export omitted — the interface IS the type.
|
|
248
|
+
export type SystemsDomain = z.infer<typeof SystemsDomainSchema>
|