@elevasis/core 0.21.0 → 0.23.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 (132) hide show
  1. package/dist/index.d.ts +2518 -2169
  2. package/dist/index.js +2495 -1095
  3. package/dist/knowledge/index.d.ts +706 -1044
  4. package/dist/knowledge/index.js +9 -9
  5. package/dist/organization-model/index.d.ts +2518 -2169
  6. package/dist/organization-model/index.js +2495 -1095
  7. package/dist/test-utils/index.d.ts +826 -1014
  8. package/dist/test-utils/index.js +1894 -1032
  9. package/package.json +3 -3
  10. package/src/__tests__/template-core-compatibility.test.ts +11 -79
  11. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +852 -397
  12. package/src/auth/multi-tenancy/permissions.ts +20 -8
  13. package/src/business/README.md +2 -2
  14. package/src/business/acquisition/api-schemas.test.ts +175 -2
  15. package/src/business/acquisition/api-schemas.ts +132 -16
  16. package/src/business/acquisition/build-templates.test.ts +4 -4
  17. package/src/business/acquisition/build-templates.ts +72 -30
  18. package/src/business/acquisition/crm-state-actions.test.ts +13 -11
  19. package/src/business/acquisition/index.ts +12 -0
  20. package/src/business/acquisition/types.ts +7 -3
  21. package/src/business/clients/api-schemas.test.ts +115 -0
  22. package/src/business/clients/api-schemas.ts +158 -0
  23. package/src/business/clients/index.ts +1 -0
  24. package/src/business/deals/api-schemas.ts +8 -0
  25. package/src/business/index.ts +5 -2
  26. package/src/business/projects/types.ts +19 -0
  27. package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -8
  28. package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -12
  29. package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -3
  30. package/src/execution/engine/agent/core/types.ts +25 -15
  31. package/src/execution/engine/agent/index.ts +6 -4
  32. package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -18
  33. package/src/execution/engine/index.ts +3 -0
  34. package/src/execution/engine/workflow/types.ts +9 -2
  35. package/src/knowledge/README.md +8 -7
  36. package/src/knowledge/__tests__/queries.test.ts +74 -73
  37. package/src/knowledge/format.ts +10 -9
  38. package/src/knowledge/index.ts +1 -1
  39. package/src/knowledge/published.ts +1 -1
  40. package/src/knowledge/queries.ts +26 -25
  41. package/src/organization-model/README.md +73 -26
  42. package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -0
  43. package/src/organization-model/__tests__/defaults.test.ts +76 -96
  44. package/src/organization-model/__tests__/domains/actions.test.ts +56 -0
  45. package/src/organization-model/__tests__/domains/customers.test.ts +299 -295
  46. package/src/organization-model/__tests__/domains/entities.test.ts +56 -0
  47. package/src/organization-model/__tests__/domains/goals.test.ts +493 -479
  48. package/src/organization-model/__tests__/domains/identity.test.ts +280 -279
  49. package/src/organization-model/__tests__/domains/navigation.test.ts +268 -212
  50. package/src/organization-model/__tests__/domains/offerings.test.ts +414 -419
  51. package/src/organization-model/__tests__/domains/policies.test.ts +323 -0
  52. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +271 -271
  53. package/src/organization-model/__tests__/domains/resources.test.ts +310 -0
  54. package/src/organization-model/__tests__/domains/roles.test.ts +463 -347
  55. package/src/organization-model/__tests__/domains/statuses.test.ts +246 -243
  56. package/src/organization-model/__tests__/domains/systems.test.ts +209 -0
  57. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +361 -0
  58. package/src/organization-model/__tests__/foundation.test.ts +74 -102
  59. package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -0
  60. package/src/organization-model/__tests__/graph.test.ts +899 -71
  61. package/src/organization-model/__tests__/knowledge.test.ts +209 -49
  62. package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -0
  63. package/src/organization-model/__tests__/migration-helpers.test.ts +591 -0
  64. package/src/organization-model/__tests__/prospecting-ssot.test.ts +36 -27
  65. package/src/organization-model/__tests__/recursive-system-schema.test.ts +520 -0
  66. package/src/organization-model/__tests__/resolve.test.ts +174 -23
  67. package/src/organization-model/__tests__/schema.test.ts +291 -114
  68. package/src/organization-model/__tests__/surface-projection.test.ts +207 -97
  69. package/src/organization-model/catalogs/lead-gen.ts +144 -0
  70. package/src/organization-model/content-kinds/config.ts +36 -0
  71. package/src/organization-model/content-kinds/index.ts +74 -0
  72. package/src/organization-model/content-kinds/pipeline.ts +68 -0
  73. package/src/organization-model/content-kinds/registry.ts +44 -0
  74. package/src/organization-model/content-kinds/status.ts +71 -0
  75. package/src/organization-model/content-kinds/template.ts +83 -0
  76. package/src/organization-model/content-kinds/types.ts +117 -0
  77. package/src/organization-model/contracts.ts +13 -3
  78. package/src/organization-model/defaults.ts +499 -86
  79. package/src/organization-model/domains/actions.ts +239 -0
  80. package/src/organization-model/domains/customers.ts +78 -75
  81. package/src/organization-model/domains/entities.ts +144 -0
  82. package/src/organization-model/domains/goals.ts +83 -80
  83. package/src/organization-model/domains/knowledge.ts +76 -17
  84. package/src/organization-model/domains/navigation.ts +107 -384
  85. package/src/organization-model/domains/offerings.ts +71 -66
  86. package/src/organization-model/domains/policies.ts +102 -0
  87. package/src/organization-model/domains/projects.ts +14 -48
  88. package/src/organization-model/domains/prospecting.ts +62 -181
  89. package/src/organization-model/domains/resources.ts +145 -0
  90. package/src/organization-model/domains/roles.ts +96 -55
  91. package/src/organization-model/domains/sales.ts +10 -219
  92. package/src/organization-model/domains/shared.ts +57 -57
  93. package/src/organization-model/domains/statuses.ts +339 -130
  94. package/src/organization-model/domains/systems.ts +203 -0
  95. package/src/organization-model/foundation.ts +54 -67
  96. package/src/organization-model/graph/build.ts +682 -54
  97. package/src/organization-model/graph/link.ts +1 -1
  98. package/src/organization-model/graph/schema.ts +24 -9
  99. package/src/organization-model/graph/types.ts +20 -7
  100. package/src/organization-model/helpers.ts +231 -26
  101. package/src/organization-model/icons.ts +1 -0
  102. package/src/organization-model/index.ts +118 -5
  103. package/src/organization-model/migration-helpers.ts +249 -0
  104. package/src/organization-model/organization-graph.mdx +16 -15
  105. package/src/organization-model/organization-model.mdx +111 -44
  106. package/src/organization-model/published.ts +172 -19
  107. package/src/organization-model/resolve.ts +117 -54
  108. package/src/organization-model/schema.ts +654 -112
  109. package/src/organization-model/surface-projection.ts +116 -122
  110. package/src/organization-model/types.ts +146 -20
  111. package/src/platform/api/types.ts +38 -35
  112. package/src/platform/constants/versions.ts +1 -1
  113. package/src/platform/registry/__tests__/command-view.test.ts +6 -8
  114. package/src/platform/registry/__tests__/resource-link.test.ts +13 -8
  115. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +16 -31
  116. package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -0
  117. package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2005
  118. package/src/platform/registry/__tests__/validation.test.ts +1347 -1086
  119. package/src/platform/registry/index.ts +14 -0
  120. package/src/platform/registry/resource-registry.ts +52 -2
  121. package/src/platform/registry/serialization.ts +241 -202
  122. package/src/platform/registry/serialized-types.ts +1 -0
  123. package/src/platform/registry/types.ts +411 -361
  124. package/src/platform/registry/validation.ts +745 -513
  125. package/src/projects/api-schemas.ts +290 -267
  126. package/src/reference/_generated/contracts.md +853 -397
  127. package/src/reference/glossary.md +23 -18
  128. package/src/supabase/database.types.ts +181 -0
  129. package/src/test-utils/test-utils.test.ts +1 -6
  130. package/src/organization-model/__tests__/domains/operations.test.ts +0 -203
  131. package/src/organization-model/domains/features.ts +0 -31
  132. package/src/organization-model/domains/operations.ts +0 -85
@@ -1,80 +1,83 @@
1
- import { z } from 'zod'
2
-
3
- // ---------------------------------------------------------------------------
4
- // Measurable outcome schema — one trackable result that supports a goal.
5
- // The field name `keyResults` is used for compatibility with OKR tooling;
6
- // user-facing surfaces and documentation MUST say "measurable outcomes",
7
- // never "key results" or "OKR".
8
- // ---------------------------------------------------------------------------
9
-
10
- export const KeyResultSchema = z.object({
11
- /** Stable unique identifier for the measurable outcome (e.g. "kr-revenue-q1"). */
12
- id: z.string().trim().min(1).max(100),
13
- /** Plain-language description of this measurable outcome (e.g. "Increase trial-to-paid conversion"). */
14
- description: z.string().trim().min(1).max(500),
15
- /**
16
- * What is being measured — the metric name (e.g. "monthly revenue", "NPS score",
17
- * "trial-to-paid conversion rate"). Free-form string.
18
- */
19
- targetMetric: z.string().trim().min(1).max(200),
20
- /** Current measured value. Defaults to 0 when not yet tracked. */
21
- currentValue: z.number().default(0),
22
- /**
23
- * Target value to reach for this measurable outcome to be considered achieved.
24
- * Optional — omit if the outcome is directional (e.g. "reduce churn") without
25
- * a hard numeric target.
26
- */
27
- targetValue: z.number().optional()
28
- })
29
-
30
- // ---------------------------------------------------------------------------
31
- // Objective schema — one goal the organization is working toward.
32
- // User-facing label is "goal"; this schema type is named Objective for
33
- // structural continuity with OKR tooling. Do NOT expose "OKR", "objective",
34
- // or "key result" in any user-facing label or documentation.
35
- //
36
- // Period fields use ISO 8601 date strings (YYYY-MM-DD). Cross-schema
37
- // validation (periodEnd > periodStart) is enforced in
38
- // `OrganizationModelSchema.superRefine()`.
39
- // ---------------------------------------------------------------------------
40
-
41
- const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/
42
-
43
- export const ObjectiveSchema = z.object({
44
- /** Stable unique identifier for the goal (e.g. "goal-grow-arr-q1-2026"). */
45
- id: z.string().trim().min(1).max(100),
46
- /** Plain-language description of what the organization wants to achieve. */
47
- description: z.string().trim().min(1).max(1000),
48
- /**
49
- * Start of the period this goal is active for — ISO 8601 date string (YYYY-MM-DD).
50
- * Must be strictly before `periodEnd`.
51
- */
52
- periodStart: z.string().regex(ISO_DATE_REGEX, 'periodStart must be an ISO date string (YYYY-MM-DD)'),
53
- /**
54
- * End of the period this goal is active for — ISO 8601 date string (YYYY-MM-DD).
55
- * Must be strictly after `periodStart`.
56
- * Enforced via `OrganizationModelSchema.superRefine()`.
57
- */
58
- periodEnd: z.string().regex(ISO_DATE_REGEX, 'periodEnd must be an ISO date string (YYYY-MM-DD)'),
59
- /**
60
- * List of measurable outcomes that define success for this goal.
61
- * Defaults to empty array so goals can be declared before outcomes are defined.
62
- */
63
- keyResults: z.array(KeyResultSchema).default([])
64
- })
65
-
66
- // ---------------------------------------------------------------------------
67
- // Goals domain schema — a collection of goals the organization is pursuing.
68
- // ---------------------------------------------------------------------------
69
-
70
- export const GoalsDomainSchema = z.object({
71
- objectives: z.array(ObjectiveSchema).default([])
72
- })
73
-
74
- // ---------------------------------------------------------------------------
75
- // Seed empty by default; adapters populate with real goal definitions.
76
- // ---------------------------------------------------------------------------
77
-
78
- export const DEFAULT_ORGANIZATION_MODEL_GOALS: z.infer<typeof GoalsDomainSchema> = {
79
- objectives: []
80
- }
1
+ import { z } from 'zod'
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // Measurable outcome schema — one trackable result that supports a goal.
5
+ // The field name `keyResults` is used for compatibility with OKR tooling;
6
+ // user-facing surfaces and documentation MUST say "measurable outcomes",
7
+ // never "key results" or "OKR".
8
+ // ---------------------------------------------------------------------------
9
+
10
+ export const KeyResultSchema = z.object({
11
+ /** Stable unique identifier for the measurable outcome (e.g. "kr-revenue-q1"). */
12
+ id: z.string().trim().min(1).max(100),
13
+ /** Plain-language description of this measurable outcome (e.g. "Increase trial-to-paid conversion"). */
14
+ description: z.string().trim().min(1).max(500),
15
+ /**
16
+ * What is being measured — the metric name (e.g. "monthly revenue", "NPS score",
17
+ * "trial-to-paid conversion rate"). Free-form string.
18
+ */
19
+ targetMetric: z.string().trim().min(1).max(200),
20
+ /** Current measured value. Defaults to 0 when not yet tracked. */
21
+ currentValue: z.number().default(0),
22
+ /**
23
+ * Target value to reach for this measurable outcome to be considered achieved.
24
+ * Optional — omit if the outcome is directional (e.g. "reduce churn") without
25
+ * a hard numeric target.
26
+ */
27
+ targetValue: z.number().optional()
28
+ })
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Objective schema — one goal the organization is working toward.
32
+ // User-facing label is "goal"; this schema type is named Objective for
33
+ // structural continuity with OKR tooling. Do NOT expose "OKR", "objective",
34
+ // or "key result" in any user-facing label or documentation.
35
+ //
36
+ // Period fields use ISO 8601 date strings (YYYY-MM-DD). Cross-schema
37
+ // validation (periodEnd > periodStart) is enforced in
38
+ // `OrganizationModelSchema.superRefine()`.
39
+ // ---------------------------------------------------------------------------
40
+
41
+ const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/
42
+
43
+ export const ObjectiveSchema = z.object({
44
+ /** Stable unique identifier for the goal (e.g. "goal-grow-arr-q1-2026"). */
45
+ id: z.string().trim().min(1).max(100),
46
+ /** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
47
+ order: z.number(),
48
+ /** Plain-language description of what the organization wants to achieve. */
49
+ description: z.string().trim().min(1).max(1000),
50
+ /**
51
+ * Start of the period this goal is active for — ISO 8601 date string (YYYY-MM-DD).
52
+ * Must be strictly before `periodEnd`.
53
+ */
54
+ periodStart: z.string().regex(ISO_DATE_REGEX, 'periodStart must be an ISO date string (YYYY-MM-DD)'),
55
+ /**
56
+ * End of the period this goal is active for — ISO 8601 date string (YYYY-MM-DD).
57
+ * Must be strictly after `periodStart`.
58
+ * Enforced via `OrganizationModelSchema.superRefine()`.
59
+ */
60
+ periodEnd: z.string().regex(ISO_DATE_REGEX, 'periodEnd must be an ISO date string (YYYY-MM-DD)'),
61
+ /**
62
+ * List of measurable outcomes that define success for this goal.
63
+ * Defaults to empty array so goals can be declared before outcomes are defined.
64
+ */
65
+ keyResults: z.array(KeyResultSchema).default([])
66
+ })
67
+
68
+ // ---------------------------------------------------------------------------
69
+ // Goals domain schema — a collection of goals the organization is pursuing.
70
+ // ---------------------------------------------------------------------------
71
+
72
+ export const GoalsDomainSchema = z
73
+ .record(z.string(), ObjectiveSchema)
74
+ .refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
75
+ message: 'Each objective entry id must match its map key'
76
+ })
77
+ .default({})
78
+
79
+ // ---------------------------------------------------------------------------
80
+ // Seed — empty by default; adapters populate with real goal definitions.
81
+ // ---------------------------------------------------------------------------
82
+
83
+ export const DEFAULT_ORGANIZATION_MODEL_GOALS: z.infer<typeof GoalsDomainSchema> = {}
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod'
2
2
  import { IconNameSchema, ModelIdSchema } from './shared'
3
- import { NodeIdStringSchema } from './features'
3
+ import { NodeIdStringSchema } from './systems'
4
+ import { RoleIdSchema } from './roles'
4
5
 
5
6
  // ---------------------------------------------------------------------------
6
7
  // KnowledgeLink — a typed graph link pointing to another OM node.
@@ -8,12 +9,60 @@ import { NodeIdStringSchema } from './features'
8
9
  // Phase 1 only emits 'governs' edges from knowledge nodes.
9
10
  // ---------------------------------------------------------------------------
10
11
 
11
- export const KnowledgeLinkSchema = z.object({
12
+ export const KnowledgeTargetKindSchema = z
13
+ .enum([
14
+ 'system',
15
+ 'resource',
16
+ 'knowledge',
17
+ 'stage',
18
+ 'action',
19
+ 'role',
20
+ 'goal',
21
+ 'customer-segment',
22
+ 'offering',
23
+ // D4: content nodes are a valid knowledge target after compound-domain data moved into system.content
24
+ 'content-node'
25
+ ])
26
+ .meta({ label: 'Target kind' })
27
+
28
+ export const KnowledgeTargetRefSchema = z.object({
29
+ kind: KnowledgeTargetKindSchema,
30
+ // D4: content-node targets use a qualified id format '<system-path>:<local-content-id>'
31
+ // which contains a colon separator and cannot satisfy ModelIdSchema. Use a permissive
32
+ // string schema here; business-logic validation of target existence is done in
33
+ // OrganizationModelSchema.superRefine (knowledgeTargetExists).
34
+ id: z.string().trim().min(1).max(300)
35
+ })
36
+
37
+ const LegacyKnowledgeLinkSchema = z.object({
12
38
  nodeId: NodeIdStringSchema
13
39
  })
14
40
 
15
- export const KnowledgeSkillBindingSchema = z.string().trim().min(1).max(120)
16
- export const KnowledgeDomainBindingSchema = z.string().trim().min(1).max(80)
41
+ const CanonicalKnowledgeLinkSchema = z.object({
42
+ target: KnowledgeTargetRefSchema
43
+ })
44
+
45
+ function nodeIdFromTarget(target: z.infer<typeof KnowledgeTargetRefSchema>): string {
46
+ return `${target.kind}:${target.id}`
47
+ }
48
+
49
+ function targetFromNodeId(nodeId: string): z.infer<typeof KnowledgeTargetRefSchema> {
50
+ const [kind, ...idParts] = nodeId.split(':')
51
+ return {
52
+ kind: KnowledgeTargetKindSchema.parse(kind),
53
+ id: idParts.join(':')
54
+ }
55
+ }
56
+
57
+ export const KnowledgeLinkSchema = z
58
+ .union([CanonicalKnowledgeLinkSchema, LegacyKnowledgeLinkSchema])
59
+ .transform((link) => {
60
+ const target = 'target' in link ? link.target : targetFromNodeId(link.nodeId)
61
+ return {
62
+ target,
63
+ nodeId: nodeIdFromTarget(target)
64
+ }
65
+ })
17
66
 
18
67
  // ---------------------------------------------------------------------------
19
68
  // OrgKnowledgeNode — single schema, `kind` discriminator drives presentation.
@@ -21,7 +70,9 @@ export const KnowledgeDomainBindingSchema = z.string().trim().min(1).max(80)
21
70
  // Phase 2 (deferred): structured block format (Supabase-backed authoring).
22
71
  // ---------------------------------------------------------------------------
23
72
 
24
- export const OrgKnowledgeKindSchema = z.enum(['playbook', 'strategy', 'reference'])
73
+ export const OrgKnowledgeKindSchema = z
74
+ .enum(['playbook', 'strategy', 'reference'])
75
+ .meta({ label: 'Knowledge kind', color: 'grape' })
25
76
 
26
77
  export const OrgKnowledgeNodeSchema = z.object({
27
78
  id: ModelIdSchema,
@@ -29,6 +80,8 @@ export const OrgKnowledgeNodeSchema = z.object({
29
80
  title: z.string().trim().min(1).max(200),
30
81
  summary: z.string().trim().min(1).max(1000),
31
82
  icon: IconNameSchema.optional(),
83
+ /** Canonical documentation URL when body content is a local summary. */
84
+ externalUrl: z.string().trim().url().max(500).optional(),
32
85
  /** Raw MDX string. Phase 2 will introduce a structured block format. */
33
86
  body: z.string().trim().min(1),
34
87
  /**
@@ -36,27 +89,33 @@ export const OrgKnowledgeNodeSchema = z.object({
36
89
  * Each link emits a `governs` edge: knowledge-node -> target node.
37
90
  */
38
91
  links: z.array(KnowledgeLinkSchema).default([]),
39
- /** Operator skill or command bindings relevant to this node. */
40
- skills: z.array(KnowledgeSkillBindingSchema).optional(),
41
- /** Domain key used to derive fast graph->skill registries. */
42
- domain: KnowledgeDomainBindingSchema.optional(),
43
- /** Identifiers of the roles or members who own this knowledge node. */
44
- ownerIds: z.array(ModelIdSchema).default([]),
92
+ /** Role identifiers that own this knowledge node. */
93
+ ownerIds: z.array(RoleIdSchema.meta({ ref: 'role' })).default([]),
45
94
  /** ISO date string (YYYY-MM-DD or full ISO 8601) of last meaningful update. */
46
95
  updatedAt: z.string().trim().min(1).max(50)
47
96
  })
48
97
 
49
98
  // ---------------------------------------------------------------------------
50
- // Domain schema — flat array of knowledge nodes
99
+ // Domain schema — flat Record<id, KnowledgeNode> (D3: flatten per Phase 4 cut)
100
+ //
101
+ // Wave 1 shape change: the old wrapper object { version, lastModified, nodes[] }
102
+ // is replaced by a plain id-keyed map. version/lastModified move to
103
+ // domainMetadata.knowledge (D7). The default is an empty map {}.
104
+ //
105
+ // Wave 2 (elevasis-core canonicalOrganizationModel) must produce a value of this
106
+ // shape: Record<KnowledgeId, OrgKnowledgeNode> — i.e., an object keyed by
107
+ // each node's id string, with OrgKnowledgeNode as the value. Example:
108
+ // knowledge: {
109
+ // 'playbook.crm.discovery': { id: 'playbook.crm.discovery', kind: 'playbook', ... },
110
+ // }
51
111
  // ---------------------------------------------------------------------------
52
112
 
53
- export const KnowledgeDomainSchema = z.object({
54
- nodes: z.array(OrgKnowledgeNodeSchema).default([])
55
- })
113
+ export const KnowledgeDomainSchema = z.record(ModelIdSchema, OrgKnowledgeNodeSchema).default({})
56
114
 
57
115
  export type OrgKnowledgeNode = z.infer<typeof OrgKnowledgeNodeSchema>
116
+ export type OrgKnowledgeNodeInput = z.input<typeof OrgKnowledgeNodeSchema>
58
117
  export type OrgKnowledgeKind = z.infer<typeof OrgKnowledgeKindSchema>
118
+ export type KnowledgeTargetKind = z.infer<typeof KnowledgeTargetKindSchema>
119
+ export type KnowledgeTargetRef = z.infer<typeof KnowledgeTargetRefSchema>
59
120
  export type KnowledgeLink = z.infer<typeof KnowledgeLinkSchema>
60
- export type KnowledgeSkillBinding = z.infer<typeof KnowledgeSkillBindingSchema>
61
- export type KnowledgeDomainBinding = z.infer<typeof KnowledgeDomainBindingSchema>
62
121
  export type KnowledgeDomain = z.infer<typeof KnowledgeDomainSchema>