@elevasis/ui 2.33.2 → 2.34.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 (73) hide show
  1. package/dist/api/index.d.ts +9 -2
  2. package/dist/api/index.js +1 -1
  3. package/dist/app/index.css +452 -0
  4. package/dist/app/index.d.ts +1250 -3
  5. package/dist/app/index.js +144 -8
  6. package/dist/charts/index.js +2 -3
  7. package/dist/{chunk-VGU4ZFYZ.js → chunk-3AJVNMY5.js} +45 -28
  8. package/dist/chunk-3QXJK5IY.js +25 -0
  9. package/dist/chunk-4O4MII5S.js +4716 -0
  10. package/dist/{chunk-KW7ZNQD7.js → chunk-5EYJ2GIN.js} +4 -8
  11. package/dist/{chunk-OIBHQH5Q.js → chunk-BPQVTIUP.js} +12 -3
  12. package/dist/{chunk-52K5RFDH.js → chunk-DTFKWZ7A.js} +1098 -2280
  13. package/dist/{chunk-EPTHX4VZ.js → chunk-HRWLKKWM.js} +11 -2
  14. package/dist/{chunk-ZMK5Z6KE.js → chunk-IGDYWFNE.js} +2 -2
  15. package/dist/{chunk-44I4LOH6.js → chunk-IVGI4GDL.js} +3 -3
  16. package/dist/{chunk-4DYOXEH6.js → chunk-LAWLB6CT.js} +1 -1
  17. package/dist/{chunk-TGVAIWIL.js → chunk-LRWTWOGP.js} +3 -3
  18. package/dist/{chunk-O56ESZCQ.js → chunk-MP3GPBPX.js} +3 -3
  19. package/dist/{chunk-T3J6U77J.js → chunk-NLBQTDOW.js} +12 -17
  20. package/dist/{chunk-IBWMR4TI.js → chunk-O6JXQ6UQ.js} +1 -2
  21. package/dist/{chunk-TBVLQRXT.js → chunk-OBBQ2JCM.js} +3 -3
  22. package/dist/{chunk-GWGQI6V4.js → chunk-PLP3NYPL.js} +80 -171
  23. package/dist/{chunk-Z2K2EAPL.js → chunk-RIAXZ6AH.js} +5 -6
  24. package/dist/chunk-SDXSB3HN.js +425 -0
  25. package/dist/{chunk-JA5ECJJB.js → chunk-VTXTZXAU.js} +156 -4
  26. package/dist/{chunk-32I2RCGC.js → chunk-W73ZABT6.js} +1 -1
  27. package/dist/{chunk-2ZZ72TAB.js → chunk-WU4FNWCW.js} +3 -3
  28. package/dist/{chunk-A4VDJJCV.js → chunk-YNWZIWJL.js} +4 -5
  29. package/dist/components/index.d.ts +0 -23
  30. package/dist/components/index.js +27 -448
  31. package/dist/components/navigation/index.js +4 -6
  32. package/dist/features/clients/index.js +7 -12
  33. package/dist/features/crm/index.js +9 -14
  34. package/dist/features/dashboard/index.d.ts +0 -23
  35. package/dist/features/dashboard/index.js +9 -14
  36. package/dist/features/delivery/index.js +8 -13
  37. package/dist/features/knowledge/index.js +5 -7
  38. package/dist/features/lead-gen/index.js +9 -14
  39. package/dist/features/monitoring/index.js +10 -15
  40. package/dist/features/monitoring/requests/index.js +7 -12
  41. package/dist/features/operations/index.d.ts +44 -35
  42. package/dist/features/operations/index.js +12 -17
  43. package/dist/features/settings/index.js +8 -13
  44. package/dist/hooks/index.d.ts +20 -27
  45. package/dist/hooks/index.js +7 -12
  46. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +20 -27
  47. package/dist/hooks/published.d.ts +20 -27
  48. package/dist/hooks/published.js +7 -12
  49. package/dist/index.d.ts +53 -38
  50. package/dist/index.js +8 -13
  51. package/dist/knowledge/index.d.ts +30 -38
  52. package/dist/knowledge/index.js +36 -200
  53. package/dist/{knowledge-search-index-VMAW7FLR.js → knowledge-search-index-ORIJCEZX.js} +3 -3
  54. package/dist/organization/index.js +1 -2
  55. package/dist/provider/index.d.ts +24 -31
  56. package/dist/provider/index.js +6 -11
  57. package/dist/provider/published.d.ts +24 -31
  58. package/dist/provider/published.js +5 -9
  59. package/dist/test-utils/index.d.ts +2 -0
  60. package/dist/test-utils/index.js +14 -2
  61. package/dist/test-utils/setup.js +38 -0
  62. package/dist/types/index.d.ts +20 -27
  63. package/dist/utils/index.d.ts +0 -23
  64. package/dist/zustand/index.d.ts +15 -2
  65. package/dist/zustand/index.js +35 -1
  66. package/package.json +4 -4
  67. package/dist/chunk-HUJCU55S.js +0 -159
  68. package/dist/chunk-IOXOPMYS.js +0 -145
  69. package/dist/chunk-J2UD7BOH.js +0 -347
  70. package/dist/chunk-QDFJSUG3.js +0 -13
  71. package/dist/chunk-SZHARWKU.js +0 -15
  72. package/dist/chunk-WKW6B5ID.js +0 -29
  73. package/dist/chunk-XCYKC6OZ.js +0 -1
@@ -1,5 +1,5 @@
1
- import { getKnowledgeIconToken, getKnowledgeGraphNodeCommand, getKnowledgeNodeReadCommand, getKnowledgeOntologyProjection, getPrimaryOntologyItemsForDomain, projectNavigationSurfaces, projectNavigationGroups, getOntologyDomainLabel, getKnowledgeDomainFolderCommand, getKnowledgeTreeFolderCommand, KNOWLEDGE_DOMAINS_WITH_PANELS } from '../chunk-Z2K2EAPL.js';
2
- export { KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, OM_TREE_GROUPS, getKnowledgeIconToken, getSharedOrganizationGraph } from '../chunk-Z2K2EAPL.js';
1
+ import { getKnowledgeIconToken, getKnowledgeGraphNodeCommand, getKnowledgeNodeReadCommand, getKnowledgeOntologyProjection, getPrimaryOntologyItemsForDomain, projectNavigationSurfaces, projectNavigationGroups, getOntologyDomainLabel, getKnowledgeDomainFolderCommand, getKnowledgeTreeFolderCommand, KNOWLEDGE_DOMAINS_WITH_PANELS } from '../chunk-RIAXZ6AH.js';
2
+ export { KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, OM_TREE_GROUPS, getKnowledgeIconToken, getSharedOrganizationGraph } from '../chunk-RIAXZ6AH.js';
3
3
  import '../chunk-V6SZ4ECN.js';
4
4
  import '../chunk-N55DVMAG.js';
5
5
  import '../chunk-CLDCYJQT.js';
@@ -10,9 +10,8 @@ import { PageContainer } from '../chunk-BZZCNLT6.js';
10
10
  import '../chunk-WLOQ4IBG.js';
11
11
  import '../chunk-TKAYX2SP.js';
12
12
  import '../chunk-NYBEU5TE.js';
13
- import { SemanticIcon } from '../chunk-IOXOPMYS.js';
14
- export { SemanticIcon, extendSemanticIconRegistry, getSemanticIconComponent, resolveSemanticIconComponent } from '../chunk-IOXOPMYS.js';
15
- import { getSystem, SystemEntrySchema, IdentityDomainSchema, WorkflowResourceEntrySchema, AgentResourceEntrySchema, IntegrationResourceEntrySchema, ScriptResourceEntrySchema, getContent, lookupContentType, SurfaceDefinitionSchema, RoleSchema, PolicySchema, EntitySchema, ActionSchema, listAllSystems, SalesStageSchema, OntologyIdSchema, ontologyGraphNodeId } from '../chunk-52K5RFDH.js';
13
+ import { SemanticIcon, getSystem, SystemEntrySchema, IdentityDomainSchema, WorkflowResourceEntrySchema, AgentResourceEntrySchema, IntegrationResourceEntrySchema, ScriptResourceEntrySchema, SurfaceDefinitionSchema, RoleSchema, PolicySchema, EntitySchema, ActionSchema, OntologyIdSchema, ontologyGraphNodeId, compileOrganizationOntology, parseOntologyId } from '../chunk-DTFKWZ7A.js';
14
+ export { SemanticIcon, extendSemanticIconRegistry, getSemanticIconComponent, resolveSemanticIconComponent } from '../chunk-DTFKWZ7A.js';
16
15
  import '../chunk-2IFYDILW.js';
17
16
  import '../chunk-Q7DJKLEN.js';
18
17
  import '../chunk-E565XMTQ.js';
@@ -3949,11 +3948,11 @@ function _createMdxContent(props) {
3949
3948
  children: ["\\n", _jsxs(_components.li, {
3950
3949
  children: ["For ", _jsx(_components.code, {
3951
3950
  children: "crm.pipeline"
3952
- }), ", the builder walks pipeline content via the pipeline migration helper."]
3951
+ }), ", the builder walks pipeline catalog records via the pipeline migration helper."]
3953
3952
  }), "\\n", _jsxs(_components.li, {
3954
3953
  children: ["For ", _jsx(_components.code, {
3955
3954
  children: "delivery.task"
3956
- }), ", the builder walks project task status content via the project-status helper."]
3955
+ }), ", the builder walks project task status catalog records via the project-status helper."]
3957
3956
  }), "\\n", _jsxs(_components.li, {
3958
3957
  children: ["For ", _jsx(_components.code, {
3959
3958
  children: "lead-gen.company"
@@ -3961,8 +3960,8 @@ function _createMdxContent(props) {
3961
3960
  children: "lead-gen.contact"
3962
3961
  }), ", the builder walks the lead-gen stage catalog."]
3963
3962
  }), "\\n", _jsxs(_components.li, {
3964
- children: ["General status catalogs now live in ", _jsx(_components.code, {
3965
- children: "System.content"
3963
+ children: ["General status catalogs live in ", _jsx(_components.code, {
3964
+ children: "System.ontology.catalogTypes"
3966
3965
  }), "; direct ", _jsx(_components.code, {
3967
3966
  children: "OM.statuses"
3968
3967
  }), " reads are legacy."]
@@ -4130,7 +4129,7 @@ function _createMdxContent(props) {
4130
4129
  }), "\\n", _jsxs(_components.li, {
4131
4130
  children: ["To change an entity state-transition event, update the entity's ", _jsx(_components.code, {
4132
4131
  children: "stateCatalogId"
4133
- }), " or the underlying status/stage content entry on the owning System."]
4132
+ }), " or the underlying ontology status/stage catalog on the owning System."]
4134
4133
  }), "\\n"]
4135
4134
  }), "\\n", _jsxs(_components.p, {
4136
4135
  children: ["The graph builder projects these into ", _jsx(_components.code, {
@@ -4264,8 +4263,8 @@ function _createMdxContent(props) {
4264
4263
  children: ["\\n", _jsxs(_components.li, {
4265
4264
  children: [_jsx(_components.strong, {
4266
4265
  children: "General status catalogs"
4267
- }), ": status data now lives in ", _jsx(_components.code, {
4268
- children: "System.content"
4266
+ }), ": status data lives in ", _jsx(_components.code, {
4267
+ children: "System.ontology.catalogTypes"
4269
4268
  }), "; direct ", _jsx(_components.code, {
4270
4269
  children: "OM.statuses"
4271
4270
  }), " reads are legacy."]
@@ -4274,13 +4273,13 @@ function _createMdxContent(props) {
4274
4273
  children: _jsx(_components.code, {
4275
4274
  children: "crm.pipeline"
4276
4275
  })
4277
- }), ": walks pipeline content via the pipeline migration helper."]
4276
+ }), ": walks pipeline catalog records via the pipeline migration helper."]
4278
4277
  }), "\\n", _jsxs(_components.li, {
4279
4278
  children: [_jsx(_components.strong, {
4280
4279
  children: _jsx(_components.code, {
4281
4280
  children: "delivery.task"
4282
4281
  })
4283
- }), ": walks project task status content via the project-status helper."]
4282
+ }), ": walks project task status catalog records via the project-status helper."]
4284
4283
  }), "\\n", _jsxs(_components.li, {
4285
4284
  children: [_jsxs(_components.strong, {
4286
4285
  children: [_jsx(_components.code, {
@@ -4633,10 +4632,8 @@ function _createMdxContent(props) {
4633
4632
  })
4634
4633
  }), _jsx(_components.td, {
4635
4634
  children: "Projected"
4636
- }), _jsxs(_components.td, {
4637
- children: ["Derived from prospecting stage helpers over ", _jsx(_components.code, {
4638
- children: "System.content"
4639
- }), " and compatibility catalogs"]
4635
+ }), _jsx(_components.td, {
4636
+ children: "Derived from ontology-backed stage catalog helpers"
4640
4637
  })]
4641
4638
  }), _jsxs(_components.tr, {
4642
4639
  children: [_jsx(_components.td, {
@@ -4722,24 +4719,6 @@ function _createMdxContent(props) {
4722
4719
  children: "OM.navigation.sidebar"
4723
4720
  })]
4724
4721
  })]
4725
- }), _jsxs(_components.tr, {
4726
- children: [_jsx(_components.td, {
4727
- children: _jsx(_components.code, {
4728
- children: "content-node"
4729
- })
4730
- }), _jsx(_components.td, {
4731
- children: "Authored on System, projected to graph"
4732
- }), _jsxs(_components.td, {
4733
- children: [_jsx(_components.code, {
4734
- children: "System.content"
4735
- }), " entries such as ", _jsx(_components.code, {
4736
- children: "schema:pipeline"
4737
- }), ", ", _jsx(_components.code, {
4738
- children: "schema:stage"
4739
- }), ", and ", _jsx(_components.code, {
4740
- children: "config:kv"
4741
- })]
4742
- })]
4743
4722
  })]
4744
4723
  })]
4745
4724
  }), "\\n", _jsx(_components.h2, {
@@ -4963,9 +4942,9 @@ function _createMdxContent(props) {
4963
4942
  }), "\\n", _jsx(_components.h3, {
4964
4943
  children: "Authored nodes"
4965
4944
  }), "\\n", _jsxs(_components.p, {
4966
- children: ["System, role, action, entity, policy, resource, knowledge, customer-segment, offering, and goal nodes are authored in the OM domain maps. Content nodes are authored inside ", _jsx(_components.code, {
4967
- children: "System.content"
4968
- }), " and projected with qualified graph IDs. Their ", _jsx(_components.code, {
4945
+ children: ["System, role, action, entity, policy, resource, knowledge, customer-segment, offering, and goal nodes are authored in the OM domain maps. Ontology catalog nodes are authored inside ", _jsx(_components.code, {
4946
+ children: "System.ontology.catalogTypes"
4947
+ }), " and projected with ontology graph IDs. Their ", _jsx(_components.code, {
4969
4948
  children: "id"
4970
4949
  }), ", ", _jsx(_components.code, {
4971
4950
  children: "label"
@@ -4994,9 +4973,7 @@ function _createMdxContent(props) {
4994
4973
  }), "\\n", _jsxs(_components.li, {
4995
4974
  children: [_jsx(_components.strong, {
4996
4975
  children: "Stage nodes"
4997
- }), ": derived from prospecting stage helpers over current ", _jsx(_components.code, {
4998
- children: "System.content"
4999
- }), " and compatibility catalogs."]
4976
+ }), ": derived from ontology-backed prospecting and lead-gen stage helpers."]
5000
4977
  }), "\\n", _jsxs(_components.li, {
5001
4978
  children: [_jsx(_components.strong, {
5002
4979
  children: "Surface and navigation-group nodes"
@@ -8499,22 +8476,7 @@ function ResourceDescribeView({
8499
8476
  }
8500
8477
  );
8501
8478
  }
8502
- function StageDescribeView({
8503
- node,
8504
- graph,
8505
- knowledgeNodes,
8506
- onNavigateToNode,
8507
- organizationModel
8508
- }) {
8509
- const stage = node.sourceId != null && organizationModel != null ? (() => {
8510
- const colonIdx = node.sourceId.indexOf(":");
8511
- if (colonIdx === -1) return void 0;
8512
- const systemPath = node.sourceId.slice(0, colonIdx);
8513
- const localId = node.sourceId.slice(colonIdx + 1);
8514
- const found = listAllSystems(organizationModel).find(({ path }) => path === systemPath);
8515
- const contentNode = found?.system.content?.[localId];
8516
- return contentNode?.kind === "schema" && contentNode.type === "stage" ? { id: localId, label: contentNode.label, ...contentNode.data ?? {} } : void 0;
8517
- })() : void 0;
8479
+ function StageDescribeView({ node, graph, knowledgeNodes, onNavigateToNode }) {
8518
8480
  const actionIds = graph.edges.filter((e) => e.kind === "uses" && e.sourceId === node.id).map((e) => e.targetId).filter((id, i, arr) => arr.indexOf(id) === i);
8519
8481
  const dependsOnStageIds = graph.edges.filter((e) => e.kind === "references" && e.sourceId === node.id).map((e) => e.targetId).filter((id, i, arr) => arr.indexOf(id) === i);
8520
8482
  return /* @__PURE__ */ jsx(
@@ -8544,15 +8506,6 @@ function StageDescribeView({
8544
8506
  { kind: "references", direction: "outgoing" }
8545
8507
  ]
8546
8508
  }
8547
- ),
8548
- /* @__PURE__ */ jsx(
8549
- SchemaDrivenFieldList,
8550
- {
8551
- schema: SalesStageSchema,
8552
- value: stage,
8553
- excludeFieldNames: ["id", "label", "description"],
8554
- onNavigateToNode
8555
- }
8556
8509
  )
8557
8510
  ] }),
8558
8511
  footer: /* @__PURE__ */ jsx(NodeMetadataFooter, { node })
@@ -8927,101 +8880,6 @@ function SurfaceDescribeView({
8927
8880
  }
8928
8881
  );
8929
8882
  }
8930
- function ContentNodeDescribeView({
8931
- node,
8932
- graph,
8933
- knowledgeNodes,
8934
- onNavigateToNode,
8935
- organizationModel
8936
- }) {
8937
- const content = node.sourceId != null && organizationModel != null ? getContent(organizationModel, node.sourceId) : void 0;
8938
- const kind = content?.kind ?? node.kind;
8939
- const type = content?.type ?? void 0;
8940
- const def = kind != null && type != null ? lookupContentType(kind, type) : void 0;
8941
- const isRegistered = def != null;
8942
- if (!isRegistered && typeof import.meta !== "undefined" && import.meta.env?.DEV) {
8943
- console.warn(
8944
- `[ContentNodeDescribeView] Unregistered content kind/type: ${kind ?? "(unknown)"}/${type ?? "(unknown)"} for node ${node.id}. Rendering generic fallback.`
8945
- );
8946
- }
8947
- const kindLabel = kind != null && type != null ? `${kind}:${type}` : kind ?? type ?? "content-node";
8948
- return /* @__PURE__ */ jsx(
8949
- NodeDescribeShell,
8950
- {
8951
- header: /* @__PURE__ */ jsx(
8952
- NodeHeader,
8953
- {
8954
- title: node.label,
8955
- kind: "Content",
8956
- tone: "subtle",
8957
- description: node.description ?? content?.description,
8958
- rightSection: /* @__PURE__ */ jsx(
8959
- KindChip,
8960
- {
8961
- kind: kindLabel,
8962
- tone: isRegistered ? "primary" : "muted",
8963
- style: { flexShrink: 0, marginTop: 4 }
8964
- }
8965
- )
8966
- }
8967
- ),
8968
- content: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
8969
- node.sourceId && /* @__PURE__ */ jsx(KeyField, { label: "ID", value: node.sourceId }),
8970
- content?.label && /* @__PURE__ */ jsx(KeyField, { label: "Label", value: content.label }),
8971
- content?.description && /* @__PURE__ */ jsx(KeyField, { label: "Description", value: content.description }),
8972
- content?.order != null && /* @__PURE__ */ jsx(KeyField, { label: "Order", value: String(content.order) }),
8973
- content?.parentContentId && /* @__PURE__ */ jsx(KeyField, { label: "Parent content", value: content.parentContentId }),
8974
- !isRegistered && /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
8975
- /* @__PURE__ */ jsx(KindChip, { kind: "unregistered kind", tone: "muted" }),
8976
- content?.data != null && /* @__PURE__ */ jsx(
8977
- Box,
8978
- {
8979
- component: "pre",
8980
- style: {
8981
- fontSize: "var(--mantine-font-size-xs)",
8982
- fontFamily: "var(--mantine-font-family-monospace)",
8983
- background: "var(--color-surface)",
8984
- border: "1px solid var(--color-border)",
8985
- borderRadius: "var(--mantine-radius-sm)",
8986
- padding: "var(--mantine-spacing-xs)",
8987
- overflowX: "auto",
8988
- whiteSpace: "pre-wrap",
8989
- wordBreak: "break-all",
8990
- margin: 0
8991
- },
8992
- children: JSON.stringify(content.data, null, 2)
8993
- }
8994
- )
8995
- ] })
8996
- ] }),
8997
- relationships: /* @__PURE__ */ jsx(
8998
- EdgeRelationshipGroup,
8999
- {
9000
- nodeId: node.id,
9001
- graph,
9002
- knowledgeNodes,
9003
- onNavigateToNode
9004
- }
9005
- ),
9006
- footer: /* @__PURE__ */ jsxs(Fragment, { children: [
9007
- isRegistered && /* @__PURE__ */ jsxs(Fragment, { children: [
9008
- /* @__PURE__ */ jsx(Divider, {}),
9009
- /* @__PURE__ */ jsx(Text, { size: "xs", fw: 600, tt: "uppercase", c: "dimmed", style: { letterSpacing: "0.05em" }, children: "Payload" }),
9010
- /* @__PURE__ */ jsx(
9011
- SchemaDrivenFieldList,
9012
- {
9013
- schema: def.payloadSchema,
9014
- value: content?.data,
9015
- excludeFieldNames: [],
9016
- onNavigateToNode
9017
- }
9018
- )
9019
- ] }),
9020
- /* @__PURE__ */ jsx(NodeMetadataFooter, { node })
9021
- ] })
9022
- }
9023
- );
9024
- }
9025
8883
  function BrandingPanel({ model }) {
9026
8884
  const branding = model.branding;
9027
8885
  if (!branding) {
@@ -9779,31 +9637,21 @@ var SEMANTIC_CLASS_COLORS = {
9779
9637
  function formatCategoryLabel(category) {
9780
9638
  return category.split(/[.\-_]/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
9781
9639
  }
9782
- function collectStatusEntriesFromSystem(systemId, system, acc) {
9783
- const content = system.content ?? {};
9784
- for (const [localId, node] of Object.entries(content)) {
9785
- if (node.kind !== "schema" || node.type !== "status") continue;
9786
- const data = node.data ?? {};
9787
- const semanticClass = typeof data.semanticClass === "string" ? data.semanticClass : "unknown";
9788
- const category = semanticClass.split(".")[0] ?? semanticClass;
9789
- acc.push({
9790
- id: `${systemId}:${localId}`,
9791
- label: node.label,
9792
- order: typeof node.order === "number" ? node.order : 0,
9793
- semanticClass,
9794
- category
9795
- });
9796
- }
9797
- for (const subsystem of Object.values(system.subsystems ?? {})) {
9798
- collectStatusEntriesFromSystem(subsystem.id, subsystem, acc);
9799
- }
9800
- }
9801
9640
  function collectAllStatusEntries(model) {
9802
- const acc = [];
9803
- for (const system of Object.values(model.systems)) {
9804
- collectStatusEntriesFromSystem(system.id, system, acc);
9805
- }
9806
- return acc;
9641
+ return Object.values(compileOrganizationOntology(model).ontology.catalogTypes).filter((catalog) => catalog.kind === "status-flow").flatMap((catalog) => {
9642
+ const appliesTo = catalog.appliesTo !== void 0 ? parseOntologyId(catalog.appliesTo).localId : "unknown";
9643
+ return Object.entries(catalog.entries ?? {}).map(([localId, value]) => {
9644
+ const entry = value && typeof value === "object" && !Array.isArray(value) ? value : {};
9645
+ const semanticClass = typeof entry.semanticClass === "string" ? entry.semanticClass : `${appliesTo}.${localId}`;
9646
+ return {
9647
+ id: `${catalog.id}:${localId}`,
9648
+ label: typeof entry.label === "string" ? entry.label : localId,
9649
+ order: typeof entry.order === "number" ? entry.order : 0,
9650
+ semanticClass,
9651
+ category: appliesTo
9652
+ };
9653
+ });
9654
+ });
9807
9655
  }
9808
9656
  function StatusesPanel({ model, filterToItemId }) {
9809
9657
  const allEntries = collectAllStatusEntries(model).filter((entry) => !filterToItemId || entry.id === filterToItemId).sort((a, b) => a.order - b.order);
@@ -9824,10 +9672,9 @@ function StatusesPanel({ model, filterToItemId }) {
9824
9672
  const semanticClasses = new Set(allEntries.map((entry) => entry.semanticClass));
9825
9673
  const entriesByCategory = /* @__PURE__ */ new Map();
9826
9674
  for (const entry of allEntries) {
9827
- const category = entry.category ?? "uncategorized";
9828
- const entries = entriesByCategory.get(category) ?? [];
9675
+ const entries = entriesByCategory.get(entry.category) ?? [];
9829
9676
  entries.push(entry);
9830
- entriesByCategory.set(category, entries);
9677
+ entriesByCategory.set(entry.category, entries);
9831
9678
  }
9832
9679
  const categoryGroups = [...entriesByCategory.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([category, entries]) => ({
9833
9680
  category,
@@ -10322,17 +10169,6 @@ function DescribeNodeView({
10322
10169
  onNavigateToNode
10323
10170
  }
10324
10171
  ) });
10325
- case "content-node":
10326
- return /* @__PURE__ */ jsx(DomainPanelFrame, { children: /* @__PURE__ */ jsx(
10327
- ContentNodeDescribeView,
10328
- {
10329
- node,
10330
- graph,
10331
- knowledgeNodes,
10332
- onNavigateToNode,
10333
- organizationModel
10334
- }
10335
- ) });
10336
10172
  default:
10337
10173
  return /* @__PURE__ */ jsx(DomainPanelFrame, { children: /* @__PURE__ */ jsx(
10338
10174
  GenericDescribeView,
@@ -1463,19 +1463,19 @@ Actions follow a five-stage lifecycle: draft, beta, active, deprecated, archived
1463
1463
  id: "knowledge.org-model-entities",
1464
1464
  title: "Organization Model Entities",
1465
1465
  summary: "Entities model business objects owned by systems -- with table metadata, state catalogs, and typed entity links.",
1466
- bodyText: "Overview\r\n\r\nEntities are the business objects of the Organization Model. Each entity is a named, typed object owned by a system -- it corresponds to a database table, optionally participates in a state catalog, and can declare typed relationships to other entities.\r\n\r\nEntities are authored in the OM.entities domain map and projected as entity graph nodes by buildOrganizationGraph(). Each entity emits a contains edge from its owning system node and optional links edges to related entities.\r\n\r\nSource schema: packages/core/src/organization-model/domains/entities.ts\r\n\r\nWhat Entities Are\r\n\r\nAn entity declaration answers questions like:\r\n\r\n- What business objects does the sales.crm system own?\r\n- Which database table backs the crm.deal entity?\r\n- What states can a leadgen.company pass through?\r\n- How are crm.deal and crm.contact related?\r\n\r\nEntities are not executable. They are semantic declarations that describe the shape of business data: who owns it, where it lives, what states it can be in, and how it connects to other objects.\r\n\r\nownedBySystemId\r\n\r\nEvery entity must declare ownedBySystemId -- the ID of the system responsible for it. The graph builder emits a contains edge from system:<ownedBySystemId> to the entity node. An entity can only be owned by one system.\r\n\r\nTable and Row Schema\r\n\r\nThe optional table field names the backing database table (e.g. crmdeals). The optional rowSchema field references a schema identifier that describes the row shape. These fields are informational references; they are not validated against the database at OM parse time.\r\n\r\nstateCatalogId\r\n\r\nThe optional stateCatalogId field links the entity to a state catalog. The graph builder uses this to project event nodes for each state transition:\r\n\r\n- For crm.pipeline, the builder walks pipeline content via the pipeline migration helper.\r\n- For delivery.task, the builder walks project task status content via the project-status helper.\r\n- For lead-gen.company and lead-gen.contact, the builder walks the lead-gen stage catalog.\r\n- General status catalogs now live in System.content; direct OM.statuses reads are legacy.\r\n\r\nEach matching status or stage generates an event node with an originatesfrom edge pointing back to the entity.\r\n\r\nTyped Entity Links\r\n\r\nThe links field declares typed relationships to other entities. Each link has:\r\n\r\n- toEntity -- the target entity ID.\r\n- kind -- one of belongs-to, has-many, has-one, or many-to-many.\r\n- via -- optional join key or junction table name.\r\n- label -- optional display label for the relationship.\r\n\r\nEach link emits a links edge from the entity node to the target entity node in the graph.\r\n\r\nExample Entity Shape\r\n\r\nA crm.deal entity owned by sales.crm, backed by the crmdeals table, in the crm.pipeline state catalog, with a has-many link to crm.contact via the dealcontacts junction:\r\n\r\n- id: crm.deal\r\n- ownedBySystemId: sales.crm\r\n- table: crmdeals\r\n- stateCatalogId: crm.pipeline\r\n- links: [{ toEntity: 'crm.contact', kind: 'has-many', via: 'dealcontacts' }]"
1466
+ bodyText: "Overview\r\n\r\nEntities are the business objects of the Organization Model. Each entity is a named, typed object owned by a system -- it corresponds to a database table, optionally participates in a state catalog, and can declare typed relationships to other entities.\r\n\r\nEntities are authored in the OM.entities domain map and projected as entity graph nodes by buildOrganizationGraph(). Each entity emits a contains edge from its owning system node and optional links edges to related entities.\r\n\r\nSource schema: packages/core/src/organization-model/domains/entities.ts\r\n\r\nWhat Entities Are\r\n\r\nAn entity declaration answers questions like:\r\n\r\n- What business objects does the sales.crm system own?\r\n- Which database table backs the crm.deal entity?\r\n- What states can a leadgen.company pass through?\r\n- How are crm.deal and crm.contact related?\r\n\r\nEntities are not executable. They are semantic declarations that describe the shape of business data: who owns it, where it lives, what states it can be in, and how it connects to other objects.\r\n\r\nownedBySystemId\r\n\r\nEvery entity must declare ownedBySystemId -- the ID of the system responsible for it. The graph builder emits a contains edge from system:<ownedBySystemId> to the entity node. An entity can only be owned by one system.\r\n\r\nTable and Row Schema\r\n\r\nThe optional table field names the backing database table (e.g. crmdeals). The optional rowSchema field references a schema identifier that describes the row shape. These fields are informational references; they are not validated against the database at OM parse time.\r\n\r\nstateCatalogId\r\n\r\nThe optional stateCatalogId field links the entity to a state catalog. The graph builder uses this to project event nodes for each state transition:\r\n\r\n- For crm.pipeline, the builder walks pipeline catalog records via the pipeline migration helper.\n- For delivery.task, the builder walks project task status catalog records via the project-status helper.\n- For lead-gen.company and lead-gen.contact, the builder walks the lead-gen stage catalog.\r\n- General status catalogs live in System.ontology.catalogTypes; direct OM.statuses reads are legacy.\n\r\nEach matching status or stage generates an event node with an originatesfrom edge pointing back to the entity.\r\n\r\nTyped Entity Links\r\n\r\nThe links field declares typed relationships to other entities. Each link has:\r\n\r\n- toEntity -- the target entity ID.\r\n- kind -- one of belongs-to, has-many, has-one, or many-to-many.\r\n- via -- optional join key or junction table name.\r\n- label -- optional display label for the relationship.\r\n\r\nEach link emits a links edge from the entity node to the target entity node in the graph.\r\n\r\nExample Entity Shape\r\n\r\nA crm.deal entity owned by sales.crm, backed by the crmdeals table, in the crm.pipeline state catalog, with a has-many link to crm.contact via the dealcontacts junction:\r\n\r\n- id: crm.deal\r\n- ownedBySystemId: sales.crm\r\n- table: crmdeals\r\n- stateCatalogId: crm.pipeline\r\n- links: [{ toEntity: 'crm.contact', kind: 'has-many', via: 'dealcontacts' }]"
1467
1467
  },
1468
1468
  {
1469
1469
  id: "knowledge.org-model-events",
1470
1470
  title: "Organization Model Events",
1471
1471
  summary: "Events are projected signals -- the OM has no authored event domain. They emit from resources and originate from entity state catalogs.",
1472
- bodyText: "Overview\r\n\r\nEvents are projected graph nodes. The Organization Model has no OM.events domain map that authors edit directly. Instead, events are derived by buildOrganizationGraph() from two sources: EventEmissionDescriptor entries on workflow and agent resources, and state catalog entries on entities.\r\n\r\nEvery event node carries a unique ID formed as \\<ownerId\\>:\\<eventKey\\>, a human-readable label, and an edge that connects it back to the node that produced it.\r\n\r\nProjection logic: packages/core/src/organization-model/graph/build.ts\r\n\r\nAuthored vs. Projected\r\n\r\nThe distinction matters because it determines where you change event data.\r\n\r\nEvents are never edited in a standalone events file. To change an event you must change its source:\r\n\r\n- To change a resource-emitted event, update the emits array on the workflow or agent entry in OM.resources.\r\n- To change an entity state-transition event, update the entity's stateCatalogId or the underlying status/stage content entry on the owning System.\r\n\r\nThe graph builder projects these into event graph nodes automatically on the next call to buildOrganizationGraph().\r\n\r\nEventEmissionDescriptor on Resources\r\n\r\nWorkflow and agent resource entries can declare an emits array. Each element is an EventEmissionDescriptor:\r\n\r\n| Field | Type | Description |\r\n| --------------- | --------------- | ------------------------------------------------------------- |\r\n| eventKey | ModelIdSchema | Short key scoped to the owner resource (e.g. enrolled) |\r\n| label | string | Human-readable label for the event |\r\n| payloadSchema | ModelIdSchema | Optional reference to a schema that describes the payload |\r\n| lifecycle | lifecycle enum | Optional: draft, beta, active, deprecated, archived |\r\n\r\nThe graph builder constructs the full EventDescriptor by combining ownerId (the resource ID), ownerKind: 'resource', and the emission descriptor fields. The resulting event ID is \\<resourceId\\>:\\<eventKey\\>.\r\n\r\nAn emits edge is then projected from the resource node to the event node.\r\n\r\nOnly workflow and agent resource kinds support emits. integration and script resources do not.\r\n\r\noriginatesfrom Edges from Entity State Catalogs\r\n\r\nWhen an entity declares a stateCatalogId, the graph builder projects one event node per state transition available to that entity. These events use ownerKind: 'entity' and the resulting event ID is \\<entityId\\>:\\<eventKey\\>.\r\n\r\nA reversed originatesfrom edge is projected from the event node pointing back to the entity node. This edge direction is the opposite of emits: it signals that the event represents a state change that originates from the entity, not that the entity actively fires the event.\r\n\r\nThe builder resolves state catalogs as follows:\r\n\r\n- General status catalogs: status data now lives in System.content; direct OM.statuses reads are legacy.\r\n- crm.pipeline: walks pipeline content via the pipeline migration helper.\r\n- delivery.task: walks project task status content via the project-status helper.\r\n- lead-gen.company and lead-gen.contact: walks the LEADGENSTAGECATALOG constant, filtering by entity type.\r\n\r\ntriggers Edges to Policies\r\n\r\nWhen a policy declares trigger.kind: 'event', the graph builder looks up the projected event node by event ID and emits a triggers edge from the event node to the policy node. This edge is only emitted if the event node was already projected by the time the policy loop runs.\r\n\r\nPolicy triggers are the primary way events connect to downstream behavior. No triggers edge is emitted for events that no policy references.\r\n\r\nEventDescriptor Full Shape\r\n\r\nEventDescriptor is the resolved type used internally by the graph builder. It extends EventEmissionDescriptor with identity fields:\r\n\r\n| Field | Type | Description |\r\n| --------------- | -------------------------- | ----------------------------------------------------- |\r\n| id | EventIdSchema | Composite: \\<ownerId\\>:\\<eventKey\\> |\r\n| ownerId | resource ID or model ID | ID of the resource or entity that is the event source |\r\n| ownerKind | 'resource' or 'entity' | Discriminates between the two projection paths |\r\n| eventKey | ModelIdSchema | Short key, unique within the owner |\r\n| label | string | Human-readable label |\r\n| payloadSchema | ModelIdSchema (opt) | Schema reference for payload shape |\r\n| lifecycle | lifecycle enum (opt) | Lifecycle state from the emission descriptor |\r\n\r\nEventDescriptor is not stored in the graph node itself -- it is used transiently during graph construction to build the node and emit edges. The graph node stores id, kind: 'event', label, and sourceId.\r\n\r\nGraph Summary\r\n\r\n| Edge kind | Direction | When emitted |\r\n| ----------------- | --------------------------- | -------------------------------------------- |\r\n| emits | resource node -> event node | Resource emits[] array is non-empty |\r\n| originatesfrom | event node -> entity node | Entity has a stateCatalogId |\r\n| triggers | event node -> policy node | Policy trigger.kind === 'event' matches ID |"
1472
+ bodyText: "Overview\r\n\r\nEvents are projected graph nodes. The Organization Model has no OM.events domain map that authors edit directly. Instead, events are derived by buildOrganizationGraph() from two sources: EventEmissionDescriptor entries on workflow and agent resources, and state catalog entries on entities.\r\n\r\nEvery event node carries a unique ID formed as \\<ownerId\\>:\\<eventKey\\>, a human-readable label, and an edge that connects it back to the node that produced it.\r\n\r\nProjection logic: packages/core/src/organization-model/graph/build.ts\r\n\r\nAuthored vs. Projected\r\n\r\nThe distinction matters because it determines where you change event data.\r\n\r\nEvents are never edited in a standalone events file. To change an event you must change its source:\r\n\r\n- To change a resource-emitted event, update the emits array on the workflow or agent entry in OM.resources.\r\n- To change an entity state-transition event, update the entity's stateCatalogId or the underlying ontology status/stage catalog on the owning System.\n\r\nThe graph builder projects these into event graph nodes automatically on the next call to buildOrganizationGraph().\r\n\r\nEventEmissionDescriptor on Resources\r\n\r\nWorkflow and agent resource entries can declare an emits array. Each element is an EventEmissionDescriptor:\r\n\r\n| Field | Type | Description |\r\n| --------------- | --------------- | ------------------------------------------------------------- |\r\n| eventKey | ModelIdSchema | Short key scoped to the owner resource (e.g. enrolled) |\r\n| label | string | Human-readable label for the event |\r\n| payloadSchema | ModelIdSchema | Optional reference to a schema that describes the payload |\r\n| lifecycle | lifecycle enum | Optional: draft, beta, active, deprecated, archived |\r\n\r\nThe graph builder constructs the full EventDescriptor by combining ownerId (the resource ID), ownerKind: 'resource', and the emission descriptor fields. The resulting event ID is \\<resourceId\\>:\\<eventKey\\>.\r\n\r\nAn emits edge is then projected from the resource node to the event node.\r\n\r\nOnly workflow and agent resource kinds support emits. integration and script resources do not.\r\n\r\noriginatesfrom Edges from Entity State Catalogs\r\n\r\nWhen an entity declares a stateCatalogId, the graph builder projects one event node per state transition available to that entity. These events use ownerKind: 'entity' and the resulting event ID is \\<entityId\\>:\\<eventKey\\>.\r\n\r\nA reversed originatesfrom edge is projected from the event node pointing back to the entity node. This edge direction is the opposite of emits: it signals that the event represents a state change that originates from the entity, not that the entity actively fires the event.\r\n\r\nThe builder resolves state catalogs as follows:\r\n\r\n- General status catalogs: status data lives in System.ontology.catalogTypes; direct OM.statuses reads are legacy.\n- crm.pipeline: walks pipeline catalog records via the pipeline migration helper.\n- delivery.task: walks project task status catalog records via the project-status helper.\n- lead-gen.company and lead-gen.contact: walks the LEADGENSTAGECATALOG constant, filtering by entity type.\r\n\r\ntriggers Edges to Policies\r\n\r\nWhen a policy declares trigger.kind: 'event', the graph builder looks up the projected event node by event ID and emits a triggers edge from the event node to the policy node. This edge is only emitted if the event node was already projected by the time the policy loop runs.\r\n\r\nPolicy triggers are the primary way events connect to downstream behavior. No triggers edge is emitted for events that no policy references.\r\n\r\nEventDescriptor Full Shape\r\n\r\nEventDescriptor is the resolved type used internally by the graph builder. It extends EventEmissionDescriptor with identity fields:\r\n\r\n| Field | Type | Description |\r\n| --------------- | -------------------------- | ----------------------------------------------------- |\r\n| id | EventIdSchema | Composite: \\<ownerId\\>:\\<eventKey\\> |\r\n| ownerId | resource ID or model ID | ID of the resource or entity that is the event source |\r\n| ownerKind | 'resource' or 'entity' | Discriminates between the two projection paths |\r\n| eventKey | ModelIdSchema | Short key, unique within the owner |\r\n| label | string | Human-readable label |\r\n| payloadSchema | ModelIdSchema (opt) | Schema reference for payload shape |\r\n| lifecycle | lifecycle enum (opt) | Lifecycle state from the emission descriptor |\r\n\r\nEventDescriptor is not stored in the graph node itself -- it is used transiently during graph construction to build the node and emit edges. The graph node stores id, kind: 'event', label, and sourceId.\r\n\r\nGraph Summary\r\n\r\n| Edge kind | Direction | When emitted |\r\n| ----------------- | --------------------------- | -------------------------------------------- |\r\n| emits | resource node -> event node | Resource emits[] array is non-empty |\r\n| originatesfrom | event node -> entity node | Entity has a stateCatalogId |\r\n| triggers | event node -> policy node | Policy trigger.kind === 'event' matches ID |"
1473
1473
  },
1474
1474
  {
1475
1475
  id: "knowledge.org-model-graph-contract",
1476
1476
  title: "Organization Model Graph Contract",
1477
1477
  summary: "The canonical graph node and edge contract -- authored and projected node kinds, edge kinds, and the resource-type overlay derived from the Organization Model.",
1478
- bodyText: "Overview\r\n\r\nThe Organization Model graph contract defines the typed node and edge taxonomy emitted by buildOrganizationGraph(). Every surface that reads or visualizes the OM -- including Command View -- works against this contract.\r\n\r\nThe graph has two categories of nodes: authored nodes derived directly from OM domain maps, and projected nodes derived by the graph builder from authored content. Events and stages are projected; all other node kinds are authored.\r\n\r\nSource schema: packages/core/src/organization-model/graph/schema.ts\r\nProjection logic: packages/core/src/organization-model/graph/build.ts\r\n\r\nNode Kinds\r\n\r\nThe graph vocabulary includes authored semantic nodes and projected operational/navigation nodes.\r\n\r\n| Kind | Authored / Projected | Source |\r\n| -------------- | -------------------- | ------------------------------------------------------- |\r\n| organization | Projected | Root node; always present; id is organization-model |\r\n| system | Authored | OM.systems domain map |\r\n| role | Authored | OM.roles domain map |\r\n| action | Authored | OM.actions domain map |\r\n| entity | Authored | OM.entities domain map |\r\n| event | Projected | Derived from resource emits and entity state catalogs |\r\n| policy | Authored | OM.policies domain map |\r\n| stage | Projected | Derived from prospecting stage helpers over System.content and compatibility catalogs |\r\n| resource | Authored | OM.resources domain map |\r\n| knowledge | Authored | OM.knowledge id-keyed map |\r\n| customer-segment | Authored | OM.customers domain map |\r\n| offering | Authored | OM.offerings domain map |\r\n| goal | Authored | OM.goals domain map |\r\n| surface | Projected | Routeable leaves from OM.navigation.sidebar |\r\n| navigation-group | Projected | Groups from OM.navigation.sidebar |\r\n| content-node | Authored on System, projected to graph | System.content entries such as schema:pipeline, schema:stage, and config:kv |\r\n\r\nEdge Kinds\r\n\r\nTwelve edge kinds are valid in the graph.\r\n\r\n| Kind | Direction | Meaning |\r\n| ----------------- | ------------------------------------- | ------------------------------------------------------------- |\r\n| contains | parent -> child | Containment: organization to system, system to resource, etc. |\r\n| references | source -> target | Cross-reference: role reports-to, agent invokes action |\r\n| mapsto | action -> resource | Action is implemented by a resource |\r\n| uses | system -> action, stage -> action | System or stage uses an action |\r\n| governs | knowledge -> target, role -> system | Knowledge node or role governs a target |\r\n| links | entity -> entity | Typed entity relationship (belongs-to, has-many, etc.) |\r\n| affects | action -> entity | Action modifies or reads an entity |\r\n| emits | resource -> event | Resource produces an observable event |\r\n| originatesfrom | event -> entity | Event originates from an entity state transition |\r\n| triggers | event -> policy, action -> policy | Event or action invocation triggers a policy evaluation |\r\n| appliesto | policy -> system/action/resource/role | Policy governs the target |\r\n| effects | policy -> action/role | Policy effect invokes an action or notifies a role |\r\n\r\nResource Type Overlay\r\n\r\nResource nodes carry an optional resourceType field that is a separate enum from kind. It is set by the graph builder from the OM resource kind field or from Command View data.\r\n\r\n| Value | Description |\r\n| ------------------ | --------------------------------- |\r\n| workflow | Deterministic automation pipeline |\r\n| agent | LLM-driven reasoning resource |\r\n| trigger | Event-driven entry point |\r\n| integration | External service connector |\r\n| external | Third-party system reference |\r\n| humancheckpoint | Human-in-the-loop review gate |\r\n| script | One-shot executable script |\r\n\r\nAuthored vs. Projected Fields\r\n\r\nAuthored nodes\r\n\r\nSystem, role, action, entity, policy, resource, knowledge, customer-segment, offering, and goal nodes are authored in the OM domain maps. Content nodes are authored inside System.content and projected with qualified graph IDs. Their id, label, description, and domain-specific fields are set from OM source data.\r\n\r\nProjected nodes\r\n\r\n- Organization node: always present; id is always organization-model.\r\n- Event nodes: derived from two sources. Resource events come from resource.emits declarations on workflow and agent resources. Entity events come from the entity's stateCatalogId -- the builder walks compatible pipeline, project-status, or lead-gen stage helpers to generate one event node per transition.\r\n- Stage nodes: derived from prospecting stage helpers over current System.content and compatibility catalogs.\r\n- Surface and navigation-group nodes: derived from navigation.sidebar.\r\n\r\nProjected nodes are never authored directly. To add an event, declare emits on a resource or assign stateCatalogId to an entity.\r\n\r\nGraph Node Shape\r\n\r\nEach node has: id (graph-unique string), kind (one of the 10 kinds), label (display name), optional sourceId (OM domain ID), optional description, optional icon, optional enabled flag, and optional resourceType (resource nodes only).\r\n\r\nEach edge has: id (graph-unique string), kind (one of the 12 kinds), sourceId, targetId, optional label, and optional relationshipType (triggers, uses, or approval)."
1478
+ bodyText: "Overview\r\n\r\nThe Organization Model graph contract defines the typed node and edge taxonomy emitted by buildOrganizationGraph(). Every surface that reads or visualizes the OM -- including Command View -- works against this contract.\r\n\r\nThe graph has two categories of nodes: authored nodes derived directly from OM domain maps, and projected nodes derived by the graph builder from authored content. Events and stages are projected; all other node kinds are authored.\r\n\r\nSource schema: packages/core/src/organization-model/graph/schema.ts\r\nProjection logic: packages/core/src/organization-model/graph/build.ts\r\n\r\nNode Kinds\r\n\r\nThe graph vocabulary includes authored semantic nodes and projected operational/navigation nodes.\r\n\r\n| Kind | Authored / Projected | Source |\r\n| -------------- | -------------------- | ------------------------------------------------------- |\r\n| organization | Projected | Root node; always present; id is organization-model |\r\n| system | Authored | OM.systems domain map |\r\n| role | Authored | OM.roles domain map |\r\n| action | Authored | OM.actions domain map |\r\n| entity | Authored | OM.entities domain map |\r\n| event | Projected | Derived from resource emits and entity state catalogs |\r\n| policy | Authored | OM.policies domain map |\r\n| stage | Projected | Derived from ontology-backed stage catalog helpers |\n| resource | Authored | OM.resources domain map |\r\n| knowledge | Authored | OM.knowledge id-keyed map |\r\n| customer-segment | Authored | OM.customers domain map |\r\n| offering | Authored | OM.offerings domain map |\r\n| goal | Authored | OM.goals domain map |\r\n| surface | Projected | Routeable leaves from OM.navigation.sidebar |\r\n| navigation-group | Projected | Groups from OM.navigation.sidebar |\r\n\r\nEdge Kinds\r\n\r\nTwelve edge kinds are valid in the graph.\r\n\r\n| Kind | Direction | Meaning |\r\n| ----------------- | ------------------------------------- | ------------------------------------------------------------- |\r\n| contains | parent -> child | Containment: organization to system, system to resource, etc. |\r\n| references | source -> target | Cross-reference: role reports-to, agent invokes action |\r\n| mapsto | action -> resource | Action is implemented by a resource |\r\n| uses | system -> action, stage -> action | System or stage uses an action |\r\n| governs | knowledge -> target, role -> system | Knowledge node or role governs a target |\r\n| links | entity -> entity | Typed entity relationship (belongs-to, has-many, etc.) |\r\n| affects | action -> entity | Action modifies or reads an entity |\r\n| emits | resource -> event | Resource produces an observable event |\r\n| originatesfrom | event -> entity | Event originates from an entity state transition |\r\n| triggers | event -> policy, action -> policy | Event or action invocation triggers a policy evaluation |\r\n| appliesto | policy -> system/action/resource/role | Policy governs the target |\r\n| effects | policy -> action/role | Policy effect invokes an action or notifies a role |\r\n\r\nResource Type Overlay\r\n\r\nResource nodes carry an optional resourceType field that is a separate enum from kind. It is set by the graph builder from the OM resource kind field or from Command View data.\r\n\r\n| Value | Description |\r\n| ------------------ | --------------------------------- |\r\n| workflow | Deterministic automation pipeline |\r\n| agent | LLM-driven reasoning resource |\r\n| trigger | Event-driven entry point |\r\n| integration | External service connector |\r\n| external | Third-party system reference |\r\n| humancheckpoint | Human-in-the-loop review gate |\r\n| script | One-shot executable script |\r\n\r\nAuthored vs. Projected Fields\r\n\r\nAuthored nodes\r\n\r\nSystem, role, action, entity, policy, resource, knowledge, customer-segment, offering, and goal nodes are authored in the OM domain maps. Ontology catalog nodes are authored inside System.ontology.catalogTypes and projected with ontology graph IDs. Their id, label, description, and domain-specific fields are set from OM source data.\n\r\nProjected nodes\r\n\r\n- Organization node: always present; id is always organization-model.\r\n- Event nodes: derived from two sources. Resource events come from resource.emits declarations on workflow and agent resources. Entity events come from the entity's stateCatalogId -- the builder walks compatible pipeline, project-status, or lead-gen stage helpers to generate one event node per transition.\r\n- Stage nodes: derived from ontology-backed prospecting and lead-gen stage helpers.\n- Surface and navigation-group nodes: derived from navigation.sidebar.\r\n\r\nProjected nodes are never authored directly. To add an event, declare emits on a resource or assign stateCatalogId to an entity.\r\n\r\nGraph Node Shape\r\n\r\nEach node has: id (graph-unique string), kind (one of the 10 kinds), label (display name), optional sourceId (OM domain ID), optional description, optional icon, optional enabled flag, and optional resourceType (resource nodes only).\r\n\r\nEach edge has: id (graph-unique string), kind (one of the 12 kinds), sourceId, targetId, optional label, and optional relationshipType (triggers, uses, or approval)."
1479
1479
  },
1480
1480
  {
1481
1481
  id: "knowledge.org-model-policies",
@@ -1,5 +1,4 @@
1
- export { OrganizationSwitcher, OrganizationSwitcherConnected, createOrganizationsSlice, createUseOrgInitialization, createUseOrganizations } from '../chunk-JA5ECJJB.js';
2
- export { OrganizationProvider } from '../chunk-HUJCU55S.js';
1
+ export { OrganizationProvider, OrganizationSwitcher, OrganizationSwitcherConnected, createOrganizationsSlice, createUseOrgInitialization, createUseOrganizations } from '../chunk-VTXTZXAU.js';
3
2
  import '../chunk-RNP5R5I3.js';
4
3
  export { OrganizationContext, useOrganization } from '../chunk-DD3CCMCZ.js';
5
4
  import '../chunk-2Q2JQSQO.js';
@@ -3424,24 +3424,6 @@ type OntologyScope = z$1.infer<typeof OntologyScopeSchema>;
3424
3424
  */
3425
3425
  type TimeRange = '1h' | '24h' | '7d' | '30d';
3426
3426
 
3427
- /**
3428
- * Placeholder discriminated union for ContentNode (Wave 1A).
3429
- * Wave 2A wires concrete (kind, type) pairs via the registry.
3430
- *
3431
- * Per D2: unregistered (kind, type) pairs are allowed and pass through validation.
3432
- * Per L14: every node carries BOTH `kind` and `type`.
3433
- */
3434
- declare const ContentNodeSchema: z$1.ZodObject<{
3435
- label: z$1.ZodString;
3436
- description: z$1.ZodOptional<z$1.ZodString>;
3437
- order: z$1.ZodOptional<z$1.ZodNumber>;
3438
- parentContentId: z$1.ZodOptional<z$1.ZodString>;
3439
- kind: z$1.ZodString;
3440
- type: z$1.ZodString;
3441
- data: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;
3442
- }, z$1.core.$strip>;
3443
- type ContentNode = z$1.infer<typeof ContentNodeSchema>;
3444
-
3445
3427
  type JsonPrimitive = string | number | boolean | null;
3446
3428
  type JsonValue = JsonPrimitive | JsonValue[] | {
3447
3429
  [key: string]: JsonValue;
@@ -3483,11 +3465,6 @@ interface SystemEntry {
3483
3465
  config?: Record<string, JsonValue>;
3484
3466
  ontology?: OntologyScope;
3485
3467
  systems?: Record<string, SystemEntry>;
3486
- /**
3487
- * @deprecated Compatibility-only bridge for old tenant data and migration readers.
3488
- * Author new semantic catalogs in `ontology` and local settings in `config`.
3489
- */
3490
- content?: Record<string, ContentNode>;
3491
3468
  subsystems?: Record<string, SystemEntry>;
3492
3469
  }
3493
3470
  declare const SystemEntrySchema: ZodType<SystemEntry>;
@@ -3942,14 +3919,18 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
3942
3919
  writes: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3943
3920
  usesCatalogs: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3944
3921
  emits: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3922
+ contract: z$1.ZodOptional<z$1.ZodObject<{
3923
+ input: z$1.ZodOptional<z$1.ZodString>;
3924
+ output: z$1.ZodOptional<z$1.ZodString>;
3925
+ }, z$1.core.$strip>>;
3945
3926
  }, z$1.core.$strip>>;
3946
3927
  codeRefs: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
3947
3928
  path: z$1.ZodString;
3948
3929
  role: z$1.ZodEnum<{
3949
- schema: "schema";
3950
3930
  config: "config";
3951
3931
  entrypoint: "entrypoint";
3952
3932
  handler: "handler";
3933
+ schema: "schema";
3953
3934
  test: "test";
3954
3935
  docs: "docs";
3955
3936
  }>;
@@ -3988,14 +3969,18 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
3988
3969
  writes: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3989
3970
  usesCatalogs: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3990
3971
  emits: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
3972
+ contract: z$1.ZodOptional<z$1.ZodObject<{
3973
+ input: z$1.ZodOptional<z$1.ZodString>;
3974
+ output: z$1.ZodOptional<z$1.ZodString>;
3975
+ }, z$1.core.$strip>>;
3991
3976
  }, z$1.core.$strip>>;
3992
3977
  codeRefs: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
3993
3978
  path: z$1.ZodString;
3994
3979
  role: z$1.ZodEnum<{
3995
- schema: "schema";
3996
3980
  config: "config";
3997
3981
  entrypoint: "entrypoint";
3998
3982
  handler: "handler";
3983
+ schema: "schema";
3999
3984
  test: "test";
4000
3985
  docs: "docs";
4001
3986
  }>;
@@ -4065,14 +4050,18 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
4065
4050
  writes: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
4066
4051
  usesCatalogs: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
4067
4052
  emits: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
4053
+ contract: z$1.ZodOptional<z$1.ZodObject<{
4054
+ input: z$1.ZodOptional<z$1.ZodString>;
4055
+ output: z$1.ZodOptional<z$1.ZodString>;
4056
+ }, z$1.core.$strip>>;
4068
4057
  }, z$1.core.$strip>>;
4069
4058
  codeRefs: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
4070
4059
  path: z$1.ZodString;
4071
4060
  role: z$1.ZodEnum<{
4072
- schema: "schema";
4073
4061
  config: "config";
4074
4062
  entrypoint: "entrypoint";
4075
4063
  handler: "handler";
4064
+ schema: "schema";
4076
4065
  test: "test";
4077
4066
  docs: "docs";
4078
4067
  }>;
@@ -4100,14 +4089,18 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
4100
4089
  writes: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
4101
4090
  usesCatalogs: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
4102
4091
  emits: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;
4092
+ contract: z$1.ZodOptional<z$1.ZodObject<{
4093
+ input: z$1.ZodOptional<z$1.ZodString>;
4094
+ output: z$1.ZodOptional<z$1.ZodString>;
4095
+ }, z$1.core.$strip>>;
4103
4096
  }, z$1.core.$strip>>;
4104
4097
  codeRefs: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
4105
4098
  path: z$1.ZodString;
4106
4099
  role: z$1.ZodEnum<{
4107
- schema: "schema";
4108
4100
  config: "config";
4109
4101
  entrypoint: "entrypoint";
4110
4102
  handler: "handler";
4103
+ schema: "schema";
4111
4104
  test: "test";
4112
4105
  docs: "docs";
4113
4106
  }>;
@@ -4332,6 +4325,7 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
4332
4325
  crm: "crm";
4333
4326
  "lead-gen": "lead-gen";
4334
4327
  projects: "projects";
4328
+ clients: "clients";
4335
4329
  operations: "operations";
4336
4330
  monitoring: "monitoring";
4337
4331
  knowledge: "knowledge";
@@ -4393,11 +4387,10 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
4393
4387
  ontology: "ontology";
4394
4388
  role: "role";
4395
4389
  goal: "goal";
4396
- stage: "stage";
4397
4390
  resource: "resource";
4391
+ stage: "stage";
4398
4392
  "customer-segment": "customer-segment";
4399
4393
  offering: "offering";
4400
- "content-node": "content-node";
4401
4394
  }>;
4402
4395
  id: z$1.ZodString;
4403
4396
  }, z$1.core.$strip>;
@@ -4405,7 +4398,7 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
4405
4398
  nodeId: z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodTemplateLiteral<`ontology:${string}`>]>;
4406
4399
  }, z$1.core.$strip>]>, z$1.ZodTransform<{
4407
4400
  target: {
4408
- kind: "knowledge" | "system" | "action" | "ontology" | "role" | "goal" | "stage" | "resource" | "customer-segment" | "offering" | "content-node";
4401
+ kind: "knowledge" | "system" | "action" | "ontology" | "role" | "goal" | "resource" | "stage" | "customer-segment" | "offering";
4409
4402
  id: string;
4410
4403
  };
4411
4404
  nodeId: string;
@@ -4413,7 +4406,7 @@ declare const OrganizationModelSchema: z$1.ZodObject<{
4413
4406
  nodeId: string;
4414
4407
  } | {
4415
4408
  target: {
4416
- kind: "knowledge" | "system" | "action" | "ontology" | "role" | "goal" | "stage" | "resource" | "customer-segment" | "offering" | "content-node";
4409
+ kind: "knowledge" | "system" | "action" | "ontology" | "role" | "goal" | "resource" | "stage" | "customer-segment" | "offering";
4417
4410
  id: string;
4418
4411
  };
4419
4412
  }>>>>;
@@ -1,23 +1,18 @@
1
- export { createTestSystemsProvider } from '../chunk-QDFJSUG3.js';
2
- export { ElevasisUIProvider } from '../chunk-OIBHQH5Q.js';
1
+ export { ElevasisUIProvider, createTestSystemsProvider } from '../chunk-BPQVTIUP.js';
3
2
  import '../chunk-RQA2EVN3.js';
4
3
  import '../chunk-3FV6HBXS.js';
5
4
  import '../chunk-WLOQ4IBG.js';
6
- export { SystemShell } from '../chunk-WKW6B5ID.js';
7
- import '../chunk-EPTHX4VZ.js';
5
+ export { CrmActionsProvider, ElevasisCoreProvider, ListActionsProvider, NotificationProvider, SystemShell, useCrmActions, useListActions, useNotificationAdapter } from '../chunk-PLP3NYPL.js';
6
+ import '../chunk-HRWLKKWM.js';
8
7
  import '../chunk-3KMDHCAR.js';
9
- export { CrmActionsProvider, ElevasisCoreProvider, ListActionsProvider, NotificationProvider, useCrmActions, useListActions, useNotificationAdapter } from '../chunk-GWGQI6V4.js';
10
- import '../chunk-SZHARWKU.js';
11
- export { ElevasisSystemsProvider, useElevasisSystems, useOptionalElevasisSystems } from '../chunk-IBWMR4TI.js';
8
+ export { ElevasisSystemsProvider, useElevasisSystems, useOptionalElevasisSystems } from '../chunk-O6JXQ6UQ.js';
12
9
  import '../chunk-TKAYX2SP.js';
13
10
  import '../chunk-NYBEU5TE.js';
14
- import '../chunk-IOXOPMYS.js';
15
- import '../chunk-52K5RFDH.js';
11
+ import '../chunk-DTFKWZ7A.js';
16
12
  import '../chunk-ND5TDV2J.js';
17
13
  import '../chunk-2IFYDILW.js';
18
14
  import '../chunk-Q7DJKLEN.js';
19
- import '../chunk-JA5ECJJB.js';
20
- import '../chunk-HUJCU55S.js';
15
+ import '../chunk-VTXTZXAU.js';
21
16
  export { AppearanceProvider, useAppearance } from '../chunk-E565XMTQ.js';
22
17
  import '../chunk-JBWJ6WHZ.js';
23
18
  import '../chunk-DT3QYZVU.js';